NO10 C语言程序设计(第七章)
《C语言程序设计》第七章
25 1020
... ...
81 1036
...
1000 2000
7.3 指针与数组(续)
❖第三次输出
p=&x[5];
x[0]
printf(“*p=%d\n“, *p);
x[1]
x[2]
x[3]
x[4] &x[5]
x[5]
...
x[9]
...
p
0
1000
1
1004
4
1008
9
1012
16
1016
... ...
81 1036
...
1000 2000
7.3 指针与数组(续)
❖ 第二次输出 p=&x[0]; printf(“*p=%d\n“, *p);
x x[0] x[1] x[2] x[3] x[4] x[5] ... x[9] ... p
0
1000
1
1004
4
1008
9
1012
16 1016
x = y;
y = temp;
printf("in swap:x=%d,y=%d\n", x, y);
}
void main()
{
int a = 3, b = 4;
swap(a, b);
printf("return to main:a=%d,b=%d\n", a, b);
}
7.2 指针作为函数参数(续)
7.1.2 定义指针变量(续)
▪ 另外,我们也可以在定义指针变量的同时对 其进行初始化。例如
• int c; • int *p=&c; /*将变量c的地址作为
c程序设计第七章知识点
c程序设计第七章知识点C程序设计是计算机科学和技术领域中非常重要的一门课程,而第七章作为其中的一部分,涵盖了许多关键的知识点。
本文将对C程序设计第七章的知识点进行介绍和讨论。
一、结构体在C语言中,结构体是一种自定义的数据类型,它能够将不同类型的数据组合在一起,形成一个新的数据类型。
结构体由多个成员组成,每个成员可以是不同的数据类型,比如整型、字符型、浮点型等。
结构体的定义方式如下:```cstruct 结构体名{数据类型成员名1;数据类型成员名2;// ...};```结构体的成员可以通过`.`操作符来访问和修改,比如`结构体名.成员名`。
结构体的应用广泛,常用于创建复杂的数据结构,如链表、树等。
二、共用体共用体是一种特殊的数据类型,它允许不同的成员共享同一块内存空间。
共用体的定义方式与结构体类似,如下所示:```cunion 共用体名{数据类型成员名1;数据类型成员名2;// ...};```共用体的成员在内存中占用相同的空间,成员之间的修改会相互影响。
共用体可以用于节省内存空间,但需要注意成员的使用顺序和类型。
三、枚举枚举是一种特殊的数据类型,它可以定义一组具有名称的常量。
枚举常量可以在程序中代替数字,提高可读性和可维护性。
枚举的定义方式如下:```cenum 枚举名{枚举常量1,枚举常量2,// ...};```在程序中使用枚举常量时,可以直接使用其名称,无需使用具体的数值。
枚举常量默认从0开始递增,但也可以手动指定初始值。
四、指针与结构体指针是C语言的重要组成部分,结合结构体可以实现更灵活的数据操作。
通过指针,我们可以直接访问和修改结构体的成员,而无需复制整个结构体。
指针与结构体的使用方式如下:```cstruct 结构体名 *指针名;```通过将指针与结构体关联,可以使用指针来访问和修改结构体的成员,比如`指针名->成员名`。
指针与结构体的结合使用是C语言中常见的操作方式,可以提升程序的效率和灵活性。
(第四版)C语言程序设计7-10章
C/C++
程序设计
教师姓名:赵 敏
2013-7-20
华东理工大学出版社
目录
第一章 C语言概述 第二章 数据类型及基本运算
第六章 数组 第七章 函数 第八章 指针 第九章
第三章 顺序结构程序设计 第四章 选择结构程序设计 第五章 循环结构程序设计
printstar()
{ printf("* * * * * * * * * * * * * * * * * \n");}
print-message()
{ printf("How do you do!\n");} main() { printstar();/* 调用printstar函数 */ print-message();/* 调用print message */ printstar(); /* 调用printstar函数 */ }
接来实现程序的化繁为简、化整为零的模块化程序设计。
在程序设计中,常将一些常用的功能模块编写成函数,放在函数库
中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。 先举一个简单的函数调用的例子。
2013-7-20
华东理工大学出版社
不带参数的函数调用
2013-7-20
华东理工大学出版社
【例】给出如下两个函数:
printf(“Input x and y:\n”);
for(j=0;j<10;j++) f(x,10,r); scanf(“%d”,&x[j]);
调用发生
2013-7-20
实参数组x将自身数组的存储首地址传给了 形参数组array,实参数组r将自身数组的存 储首地址传给了形参数组result,使形参数 组与对应的实参数组共占同一段内存单元
C程序设计课件第7章
{ rational r;
r.den=a.den*b.den;
r.num=a.num*b.den+a.den*b.num;
r.optimi();
return r; }
16
rational operator-(rational a, rational b) //定义作为友元函数的重载
函数
{ rational r;
载运算符“-”用于求两段5时.2间的向差上。 类型转换
#include<iostream.h> class Time { public:
Time(); Time(int h,int m=0); friend Time operator+( Time &t1,Time &t2); friend Time operator-(Time &t1,Time &t2); void Show(); private:
4
【例7-1】对“+”运算符进行重载来实现两个Complex类对象的加法运算。
#include <iostream>
#include <string> using namespace std;
5.2 向上类型转换
class Complex
{public:
Complex(double r=0,double i=0){ real=r; imag=i; }
第7章运算符重载
本章学习要点
❖ 为什么要进行运算符重载 ❖ 运算符重载的方法 ❖ 重载运算符的规则 ❖ 运算符重载函数作为类成员函数和友元函数 ❖ 重载双目运算符 ❖ 重载单目运算符 ❖ 重载流插入运算符和流提取运算符 ❖ 不同类型数据间的转换
C语言程序设计(第7章)
第七章结构体与共用体计算机基础教研室本章主要内容本章介绍:如何自己构造数据类型(构造型数据)●结构体●内存分配函数●共用体●枚举类型●类型定义●教学目的与要求⏹掌握结构体和共同体类型的说明⏹结构体和共用体变量的定义及初始化方法⏹掌握结构体与共用体变量成员的引用⏹领会存储动态分配和释放⏹领会链表的基本概念和基本操作⏹领会枚举类型变量的定义⏹了解T y p e d e f的作用●重点与难点⏹结构体的基本概念⏹结构体类型及变量的定义⏹结构数组⏹用指针处理链表⏹共用体及枚举类型的基本概念⏹T y p e d e f的基本概念C(C++)数据类型一、结构体1.概述●数组是构造类数据,其数组元素必须是同一数据类型的。
●结构体也是构造类数据,但其成员可以是任何类型的。
构造类型使用户可以象处理单个变量一样来处理复杂的数据结构。
使用结构体的一般步骤●根据问题的要求定义一个结构体类型●用自己定义的结构体类型定义结构体变量●在程序中使用结构体变量处理问题比较普通变量的情况:●用系统给定的数据类型定义变量●在程序中使用变量处理问题如何定义结构体类型?一个示例小结:什么是“结构体类型”?●用户自己定义的构造型数据类型●由若干数据项(成员)组成●同一结构体中的成员可以具有不同的数据类型●注意成员定义与普通变量定义的区别:成员定义时¡ª¡ª不为其分配内存变量定义时¡ª¡ª为其分配内存结构体类型的特点:●组成结构体的成员本身必须是一种已有定义的数据:⏹基本类型成员(整型/字符型/实型)⏹指针类型成员⏹数组类成员⏹其他构造类成员(包括已定义的另一种结构体)⏹注意:成员≠变量,故成员名可与变量名同名⏹结构体类型可以有千千万万种,表示由若干不同数据项组成的复合类型。
●定义结构体类型时,系统不会为该结构体分配内存(只是定义类型,而非变量声明)2、结构体类型变量的定义定义了以上结构体类型后,s t r u c t s t u d e n t相当于标准数据类型关键字c h a r,i n t,f l o a t¡-我们可以用它来定义“结构体变量”。
C语言程序设计第7章
[驱动器名][路径名] 一个被指定的文本文件名[.扩展名]
↙
注意事项:
在使用type命令时,每次显示的文本文件只能是一个,不能通过使用文 件的通配符(* 或? )来达到一次显示多个文本文件的目的。另外,被指 定的文本文件如果有扩展名的,则在命令行格式中一定要补写上,省略 不写是不行的。 在type命令中如果省略了驱动器名和路径名这两个选项,则表示被要求 显示的那个文本文件处在当前驱动器的当前目录下 ( 如前面所说 的 D:\TC2)。
•
在对文件进行操作之前,必须事先定义一个指向 FILE类型的指针变量,该变量称为“文件类型指针变 量” 。 • 指向文件类型的指针变量的定义格式: FILE *指针变量名; 例如: FILE *fp; FILE *fp1,*fp2,*fp3;
/* 如果程序中要同时处理3个文件,则要定义3个文件类型指针变量 */
7.1.1 文件的概念
文件的定义:
文件是指一组相关数据的有序集合,它是 存储在外部介质上数据的集合体。 程序文件指的是程序代码的集合体,而数 据文件则是已处理(或待处理)数据的集合体。 对文件而言,最基本的操作就是读操作和 写操作。
7.1.1 文件的概念
缓冲型文件系统的文件读/写示意图
7.1.2 文件的分类
此时如果想从 MS-DOS方式下重 新返回到TC的IDE 状态,则在命令提 示符的光标处敲入 命令exit即可。
exit↙
MS — DOS 中的 type 命令简介 type命令是MS-DOS中的一条内部命令,用于屏幕显示某一个指定的文
本文件的内容,在MS-DOS方式下使用type命令的格式为:
type
C语言中的文件亦称流式文件,其内容 是由一个个的字符(或字节)按一定的顺 序组成的,这里的字符或字节序列称之为 字节流。 根据数据的存储形式,C语言中的文件 可分为文本文件和二进制文件两种。
c语言程序设计第7章(谭浩强)PPT版本
如 int a[5]; static int a[5]={6,2,3}; int a[]={1,2,3,4,5,6}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; 如 编译系统根据初值个数确定数组维数 int a[3]={6,2,3,5,1}; ()
例
38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字 n=8
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
程序举例
#include <stdio.h> #define SIZE 10 例 读10个整数存入数组,找出其中最大值和最小值 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i<SIZE;i++) 步骤: { printf("%d:",i+1); 1. 输入:for循环输入10个整数 scanf("%d",&x[i]); 2. 处理: } (a) 先令max=min=x[0] max=min=x[0]; (b) 依次用x[i]和max,min比较(循环) for(i=1;i<SIZE;i++) 若max<x[i],令max=x[i]{ if(max<x[i]) max=x[i]; 若min>x[i],令min=x[i] if(min>x[i]) min=x[i]; 3. 输出:max和min } printf("Maximum value is %d\n",max); printf("Minimum value is %d\n",min); }
C语言程序设计_课件_第七章(适于清华谭浩强版)
注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。
问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:
C语言程序设计教程 第七章 课后习题参考答案
for(i=0;i<N;i++)
{
printf("%4d",a[i]);
}
bubble_sort(a,N);
printf("\n");
}
void bubble_sort(int a[],int n)
{
int i,j,tmp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
for(i=0;i<n;i++)
{
printf("%-4d",a[i]);
}
}
P1985对称矩阵
#include<stdio.h>
void print(int a[][3],int rows,int cols);
int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int i,j,m=0,n=0;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<M;i++)
m++;
C语言程序设计教程第7章
C语言程序设计教程第7章《C语言程序设计教程》第7章是关于数组和指针的内容。
本章从数组的定义、初始化、访问等基础知识开始讲解,然后介绍了二维数组、多维数组和字符数组,并通过具体的示例代码进行讲解。
此外,本章还讲解了指针的概念和用法,包括指针的定义、指针的运算、指针与数组的关系等内容。
首先,本章介绍了数组的定义和初始化的方法。
数组是由相同类型的数据元素组成的有序集合,使用方括号来定义数组的长度。
数组可以通过下标来访问和修改元素的值。
此外,本章还介绍了数组初始化的方法,包括静态初始化和动态初始化。
然后,本章详细讲解了二维数组和多维数组的概念和使用方法。
二维数组可以看作是由多个一维数组组成的,可以通过两个下标来访问和修改元素的值。
多维数组与二维数组类似,只是多维数组可以有更高维度的数组。
本章通过示例代码演示了如何定义和使用二维数组和多维数组。
接下来,本章介绍了字符数组的概念和使用方法。
字符数组是由字符组成的一维数组,可以用于存储和处理字符串。
本章通过示例代码演示了如何定义、初始化和使用字符数组,包括字符串的输入、输出和处理。
最后,本章详细讲解了指针的概念和用法。
指针是一种特殊的变量,可以存储变量的地址。
本章介绍了指针的定义和初始化的方法,以及指针的运算,包括指针的加法、减法和比较操作。
本章还讲解了指针与数组的关系,包括指针与一维数组的关系、二维数组的关系和字符数组的关系。
本章通过示例代码演示了指针的使用方法,包括指针与数组的遍历、指针与字符串的处理等。
总之,第7章《数组和指针》是《C语言程序设计教程》中比较重要和基础的章节。
通过学习本章的内容,读者可以了解数组和指针的概念和用法,掌握数组和指针的定义、初始化、访问等基本操作,以及掌握二维数组、多维数组和字符数组的使用方法。
通过本章的学习,读者可以更好地理解和运用C语言的数组和指针特性,提高自己的编程技能。
c语言程序设计谭浩强第07章
7.3.3 #ifndef 与 #endif命令
格式一
#ifndef 标识符
程序段 #endif
功能
如果“标识符”没有用“#define 标识符”定义过,则编译“程序 段” ,否则不编译。
例 输入一行字母字符,根据需要设置条件编译,使之能将字
母全改为大写输出或全改为小写输出。
#define LETTER 1 main( ) { int i=0; char c , str[20] =“CLanguage” ; while( (c=str[i]) !=‘\0’)
}
源程序file1.c
int max(x,y)
int x,y;
{ int z;
if (x>y) z = x;
else
z = y;
return (z) ;
}
§ 7.3条件编译
根据给定的条件,来决定源程序的编译范围 。即只对源程序中必要的部分进行编译,而对 其余部分不进行编译,不产生目标代码。
7.3.1 #if #else #endif命令
}
运行结果:MAX=9
§7.2 文件包含
格式
#include <filename> 或 #include "filename"
功能
将一个指定的文件嵌入包含到当前的源文件中。系统对嵌入后的
源文件进行整体编译处理。
在指定的标准目录下查找
如 #include <stdio.h> #include "math.h "
首先在当前目录下查找
使用文件包含语句,需注意的问题
1.一条文件包含命令只能包含一个指定的文件。 2.文件包含可以嵌套。如:
C语言程序设计教程 第7章
利用指针数组来实现二维数组的传递还可以这样来实 现:在主函数中只定义一个一维指针数组,然后利用 malloc()函数为该指针数组中的每一个元素指向一个能存放 4个整型元素的存储空间,每一个存储空间正好可以存放整 型二维数组中一行的4个元素。这样,一维指针数组b中所 有元素所指向的存储空间就可以作为二维数组的存储空间。 其C程序如下:
其C程序如下:
#include "stdio.h" swap(p1,p2) int *p1, *p2; { int t; t=*p1; *p1=*p2; *p2=t; return; } main() { int a, b; scanf("%d,%d",&a,&b); printf("a=%d,b=%d\n",a,b); swap(&a,&b); printf("a=%d,b=%d\n",a,b); }
(5)可以用下标形式引用指针变量所指向的字符 串中的字符。 (6)可以通过输入字符串的方式为字符数组输入 字符元素;但不能通过输入函数让字符指针变量指向 一个字符串,因为由键盘输入的字符串,系统是不分 配存储空间的。 (7)可以用指针变量指向的字符串来表示程序中 的任何字符串,如printf函数中的格式字符串。
7.3.2 数组指针作为函数参数 一般来说,在数组指针作函数参数时,有以下四种情况: (1)实参与形参都用数组名。例如, main() f(x,n) { int a[10]; int x[],n; … { … f(a,10); … … … } }
(2)实参用数组名,形参用指针变量。例如, main() f(x,n) { int a[10]; int *x,n; … { … f (a,10); … … … } }
C语言程序设计课件-第七章
最常用旳移动操作就是加一和减一操作++、--。它们分别代表指针向地 址值增大旳方向移动一种存储单元和指针向地址值降低旳方向移动 一种存储单元。
两个指向同一串连续单元旳指针能够进行相减旳运算,成果是两个指针 之间元素旳个数,能够经过赋值使两个指针指向同一种单元。
7.3.4 函数体内指针
函数体内旳指针有可能经过与指针形参旳赋值等操作,指向函数 体外旳存储单元,所以有可能变化调用函数环境中旳值
7.4 数组和指针
C语言数组和指针旳关系极其亲密。经过指针访问数组元素旳机制 是C语言特有旳。
7.4.1一维数组和指针
数组名和地址关系
数组名在C语言中被处理成一种地址常量,也就是数组所占连续存 储单元旳起始地址,一旦定义,数组名永远是数组旳首地址, 在其生存期不会变化。
题与数组下标越界问题旳控制一样主要。 讨论使用指针引用数组元素与下标法引用数组元素旳比较
7.4 数组和指针
7.4.1.3 经过带下标旳指针变量引用一维数组元素 C语言中,一对方括号不但用作表达数组元素旳记号,
而且是一种运算符,表达要进行变址运算,在一 种基地址上加上相对位移形成一种新地址。 设:p指向s数组旳首地址时,表达数组元素s[i]旳体 现式也能够是p[i]。实际上,p不一定要指向s旳 首地址,假如p=&s[2]; 即p指向s[2],则p+3指向 s[5],p[3]引用旳数组元素是s[5]。 且有五种表达s数组元素s[i]旳措施: (1)s[i] (2) *(s+i) (3) *(p+i) (4) p[i] (5)p指向s[i]使用*p表达s[i]
C语言(第七章)—清华大学出版社
实参表求值顺序,因系统而定。
例 求一个整数的立方
14
int cube (int x) /* 函数定义 */ { return (x * x * x); }
9
{ if{v{nootrii说(,difj;o=明函r1语(数;j i=句名<1=(;类nj ;<型i=+1+n)-参i; j数++1) ,类//**型需输2要出参输每数出行2的左,…行边)数的/空**首/ 格部*/*/ 执行p语rin句tf(" ");
reftourr(nj =; 1/;*可j <以= i省; j+略+)retur/*n输语出句每*/行的数字 */
7.1 概述
4
源程序文件1
C程序 函数是指完成一 个特定工作的独 立…程序…模块。源程序文件n
函数1 … 函数n
函数1 … 函数m
使用 ① 程序结构清晰,可读性好。
函数 ② 减少重复编码的工作量。
的 好处
③ 可多人共同编制一个大程序,缩短程序
设计周期,提高程序设计和调试的效率。
5
说明
⑴ 一个C源程序可以由一个或多个源程序文件组成。 C编译系统在对C源程序进行编译时是以文件(.cpp)为 单位进行的。
}
printf(" %d ", i); /* 每个数字的前后各有一个空格 */
putchar ('\n');
表} 示不返回结果 } 不能省略,否则,函数类型被默认定义为int
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例: 初始: 初始
设待排序序列为: 设待排序序列为:8, 4, 20, 100, 28, 1。 。 4, 8, 20, 100, 28, 1 1 最小 4次小 次小 8 20 28 排序完成
9
第1次 : 1, 8, 20, 100, 28, 4 次 第2次: 次 第3次: 次 第4次: 次 1, 4, 20, 100, 28, 8 1, 4, 8, 100, 28, 20 1, 4, 8, 20, 100, 28
max= a[0][0] for i=0 to 2 for j=0 to 3 a[i][j]>max 真 max= a[i][j] row=i colum=j 输出: 输出:max和row,colum 和
假
20
据此写出以下程序: 据此写出以下程序: main ( ) { int i,j, row=0, colum=0, max; static int a[3][4] ={{1,2,3,4},{9,8,7,6}, {–10,10, –5, 2}} max=a[0][0]; for (i=0;i<=2; i++) for (j=0; j<=3; j++) if (a[i][j]>max) {max=a[i][j]; row=i; colum=j; ; } printf( "max=%d,row=%d, colum=%d\n ", max, row, colum); } 输出结果为: 输出结果为: 21 max=10, row=2, colum=1
main ( ) { static int a[2] [3]={{1, 2,3},{4, 5,6}}; static int b[3] [2], i, j; printf("array a: \n");
18
for (i=0; i<=1; i++) { 运行结果如下: 运行结果如下: for (j=0; j<=2; j++) { array a: printf("%5d", a[i][j]); b[j][i]=a[i][j]; 1 2 3 } 4 5 6 printf("\n"); } printf("array b:\n"); array b: for (i=0; i<=2; i++) { 1 4 for (j=0; j<=1; j++) 2 5 printf("%5d", b[i]j]); printf("\n"); 3 6 } }
4
7.1.2 一维数组的引用 1、C语言规定只能逐个引用数组元素,而 、 语言规定只能逐个引用数组元素 语言规定只能逐个引用数组元素, 不能一次引用整个数组。 不能一次引用整个数组。 2. 须象使用变量那样 先定义 后使用 须象使用变量那样,先定义 先定义,后使用 3. 引用方式 数组名 下标 引用方式: 数组名[下标 下标] 代表了一个元素,等价一个同类型的变量。 代表了一个元素 等价一个同类型的变量。 等价一个同类型的变量 例: a [0]∗5+a[1] ∗ 6 为正确的算术表达式 ∗ 3. 一般地,一维数组各元素分配在连续地内存单 一般地 一维数组各元素分配在连续地内存单 元之中。 元之中。
§7.2 二维数组
7.2.1 二维数组的定义 数组名[常量表达式 常量表达式 常量表达式] 常量表达式] 类型说明符 数组名 常量表达式 [常量表达式 例: int a[4] [10]; float x[8] [20];
1. 不可将定义写为 a[4,10]。 不可将定义写为int 。 2. 可将二维数组的元素看成为若干个特殊的一 维数组。 维数组。 如: int b[3] [4]; 则: 有三个特殊的一维数组b[0],b[1], b[2],每 有三个特殊的一维数组 每 一个又有四个元素: 一个又有四个元素 如第0行 如第 行b[0][0], b[0][1], b[0][2], b[0][3] 下 12 同
第七章
数组
前面所用到的数据均为基本类型(整 前面所用到的数据均为基本类型 整 、 实 、 字符), 字符 , 为了丰富数据类型 , 须提供强有力的 数据表达方式。 C语言提供了一种构造类型数 数据表达方式 。 语言提供了一种构造类型数 由基本类型按某一规则组合在一起。 据–––由基本类型按某一规则组合在一起。 由基本类型按某一规则组合在一起 其中数组:同一种 基本 基本)类型按一定顺序 其中数组:同一种(基本 类型按一定顺序 组合在一起的数据类型。 组合在一起的数据类型。
6
3、应用举例 、
数列前20 每行显示5 个数。 例:求Fibonacci 数列前 项,每行显示 个数。 mian ( ) { int i; 定义数组, static int f [20]={1, 1}; 定义数组,并赋初值 for (i=2; i<20; i++) 计算Fibonacci数列 计算 数列 f [i]=f [i–2]+f [i–1]; for (i=0; i<20; I++) { if (i%5 = =0) printf("\n"); 换行输出数列 printf("%12d",f [i] } } 7
5
7.1.3 一维数组的存储结构、初始化及应用举例 一维数组的存储结构、
1、一维数组的存储结构 、 数组元素的地址=数组的起始地址 元素下标 数组类型) 数组元素的地址 数组的起始地址+元素下标 数组的起始地址 元素下标*sizeof(数组类型) 数组类型 2、一维数组的初始化 、 1)定义时赋初值 ) 2)给部分元素赋初值 ) 3)给全部元素赋初值时可不指定数组的长度 )
1
第十讲
2
§7.1 一维数组
7.1.1 一维数组的定义 形式: 类型说明符 数组名[常量表达式]; 例: int a [20]; float x [100]; 1. 数组名的确定方法同变量名。 2. C语言用方括号[ ]表示数组元数个数。 3. 常量表达式为常量和符号常量。不允许 有变量,其表达式的值代表了元素的个数。 例: int a[20]; 表示有20个元素 且元素从0开始编排:a[0],a[1]…,a [19] 数组定义中的常量表达式不能包含变量。
13
可以对部分元素赋初值,但需表达清楚。 可以对部分元素赋初值 但需表达清楚。如: 但需表达清楚 static int a[3][4]={{1,2},{3},{8}}。 。 则相当于 1 2 0 0 3000 8000 可通过赋初值决定数组大小。如为二维 则只 可通过赋初值决定数组大小。如为二维,则只 可省略第一维的大小. 可省略第一维的大小 static int a[ ][4]={1,2,3,…,12};
15
7.2.3二维数组的存储 二维数组的存储
1、按行存储 、 2、按列存储 、 (注意下标的变化 )
16
7.2.4二维数组的初始化 二维数组的初始化
1、给全部元素赋初值 、 2、分行赋值 、 3、部分元素初始化 、 4、给全部元素赋初值时,可以不指定第一维的大小 、给全部元素赋初值时,
17
7.2.5 程序举例 例1 将一个二维数组行和列元素互换,存到另一 将一个二维数组行和列元素互换, 个二维数组中。例如: 个二维数组中。例如: 123 456 程序如下: 程序如下: a= 12 b= 3 4 56
第5次: 1, 4, 8, 20, 28, 100 次
流程图:
定义数组 并赋初值
i=0 i<n-1 j=i;min=a[i] j<n a[j]<min min=a[j] j++ 交换a[i]与min i++ 输出结果
10
程序: 程序 main ( ) { int a [10]; 设n=10 int i, j, t,min; printf (" please input 10 n~:\n "); for (i=1; i<=n; i++) scanf(" %d ", &a[i]); for (i=0; i<10-1; i++) { min=a[i];k=i; for (j=i; j<n; j++) if (a[j]<min) {min=a[j];k=j;} t=a[k];a[k]=a[i]; a[i]=t; } printf (" the sorted numbers: \n "); for (i=1; i<=10; i++) printf(" %d ", a[i]; 11 } 另一种排序法:冒泡排序法 另一种排序法:
3
5. 可在定义时对静态数组 可在定义时对静态数组static和外部存储 全局 和外部存储(全局 和外部存储 extern)数组赋初值 方法如下 数组赋初值, 数组赋初值 方法如下: 对全部元素赋初值 static int a[10]={10, 11, 12, 13, 14, 15, 16, 17, 18, 19,} 对部分元素赋初值 static int a[10]={0,1,2,3,4}; 个元素初值确定,后 个元素由系统设置为 个元素由系统设置为0。 前5个元素初值确定 后5个元素由系统设置为 。 个元素初值确定 如对数组元素赋同一初值,必须一一写出 如对数组元素赋同一初值 必须一一写出: 必须一一写出 static int a[10]={0,0,0,0,0,0,0,0,0,0}; 不可写成: 不可写成 static int a[{10*0}]; 若赋全部元素的初值,可省略常量表达式 若赋全部元素的初值 可省略常量表达式 …a [ ]={0,1,2,3}; 表示a[4],即只有 个元素 即只有4个元素 表示 即只有 个元素a[0]···a[3]。 。