计算机C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组
C语言程序设计(第三版)何钦铭-颜晖主编-知识点清单

C语言知识点清单(杭电姚晔整理)第1章基本数据类型和表达式1.1 关键字和标识符标识符(p8)1.2 基本数据类型常用数据类型(p21,p122),字符型数据(p50,p123),原码反码补码(p120),实型数据的存储(p121)1.3 常量和变量常量和变量的定义(p21),整型字符型实型常量与变量(p123)1.4 输入和输出函数printf(p23),scanf(p27),字符型数据的输入和输出(scanf/printf/getchar/putchar/p51/p128),整型数的输入输出(scanf/printf格式控制p125),实型数的输入输出(scanf/printf格式控制p127) 1.5 常用库函数常用数学函数(p28)1.6 运算符和表达式算术运算(p22),赋值运算(p23),关系运算(p25),逻辑运算(p52),位运算(p140),长度运算符(p142),算术表达式(p131),赋值表达式(p133),关系表达式(p134),逻辑表达式(p136),条件表达式(p139),逗号表达式(p139),运算符的优先级与结合性(p142),复合语句(P33),自动类型转换(p130),强制类型转换(p130)第2章控制结构与语句2.1 结构化程序设计数据表达(p5),流程控制(p6),主要语法单位(p9),C语言的特点(p12)2.2 顺序结构顺序控制结构(p6)2.3 选择结构if-else语句(p26,p45),多分支else-if语句(p47,p60),switch语句(p57)2.3 循环结构for语句(p32),while语句(p69),do-while语句(p73),循环嵌套(p79),循环语句的选用(p82) 2.4 转向语句break语句(p59,p75),continue语句(p76)第3章函数3.1 函数的定义函数首部(p97),函数体(p98),函数原型声明(p100),问题分析思想(p105),模块化设计(p106/p239)3.2 函数的调用调用过程(p98),调用形式(p99),参数传递(p99),返回结果(p100,p104)3.3 嵌套与递归函数的嵌套调用(p238),递归函数基本概念(p241),递归程序设计(p244)3.4 函数与变量局部变量和全局变量(p108),变量生命周期(p112),变量存储的内存分布(p113),静态变量(p113),外部变量(p258),静态全局变量(p258),变量的存储类型及作用域(附录p340)第4章数组4.1 一维数组一维数组的定义和引用(p149),一维数组的初始化(p151),一维数组的编程(p152)4.2 二维数组二维数组的定义和引用(p160),二维数组的初始化(p161),二维数组的编程(p162)4.3 字符串字符数组(p167),字符串(p168),字符串处理函数(gets/puts/strcpy/strcat/strcmp/strlen/p203) 4.4 数组与函数数组名作为函数参数(p196),冒泡排序(p199),命令行参数(p273)第5章指针5.1 指针基本知识地址与指针(p181),指针变量的定义(p182),指针的基本运算(p184),指针变量的初始化(p186) 5.2 指针与数组指针、数组和地址的关系(p192)5.3 指针与字符串字符串与字符指针(p201),用指针数组操作多个字符串(p270)5.4 指针数组与多级指针指针数组的概念(p265),指向指针的指针(p266),二维数组的指针形式(p268),5.5 指针与函数指针作为函数参数(p188),指针实现动态内存分配(malloc/free/p209),指针作为函数返回值(p278),指向函数的指针(p278)第6章结构体6.1 结构体的概念结构的定义(p219),结构变量的定义和初始化(p221),结构变量的使用(p223)6.2 结构体数组结构数组操作(p226)6.3 结构体指针结构指针的概念(p229),结构指针做函数参数(p230)6.4 单向链表链表的概念(p285),单向链表的常用操作(p286)第7章文件7.1 文件概述文件的概念(p299),文本文件与二进制文件(p300),文件结构与文件类型指针(p301),文件处理步骤(p304)7.2 打开与关闭文件打开文件(p306),关闭文件(p308)7.3 文件读写函数字符方式读写函数fgetc/fputc(p309),字符串方式读写函数fgets/fputs(p311),格式化方式读写函数fscanf/fprintf(p314),数据块方式读写函数fread/fwrite(p315),文件定位函数rewind/fseek/ftell(p317),检测文件指针状态函数feof/ferror/clearerr(p317)第8章其他知识点8.1 编译预处理文件包含(p249),常用标准头文件(p251),宏基本定义(p247),带参数的宏定义(p248),条件编译(p252)8.2 共用体联合变量(附录p339)8.3 枚举枚举变量(附录p339)。
C语言程序设计(何钦铭_颜晖_主编)课件

区分数字字符和数字
'1'
1
则:'A'+1=66,对应字符 'B'
a
25
转 义 字 符
反斜杠后跟一个字符或数字
字符常量,代表一个字符
'\n' '\101' '\x41' 'A'
所有字符都可以用转义字符表示
a
26
6.2.2 变量
在程序运行过程中,其值可以被改变的量。
变量必须先定义,后使用 定义变量时要指定变量名和数据类型 变量应该先赋值,后引用
a
30
6.3.1 整型数据的输入输出
printf (格式控制, 输出参数1, ... , 输出参数n); scanf (格式控制, 输入参数1, ... , 输入参数n);
格式控制说明 %…
十进制 八进制 十六进制
int
%d
%o
%x
long
%ld
%lo
%lx
unsigned
%u
%o
%x
unsigned long %lu
数据长度 16或32位
16位 32位
a
10
基本数据类型-整型
扩展的整数类型:short long unsigned [int]
有符号整型 无符号整型
数据长度
int
unsigned [int]
16或32位
short [int] unsigned short [int] 16位
long [int] unsigned long [int]
以小数或指数形式输入一个双精度浮点数
输出 printf()
C语言程序设计 (何钦铭 颜晖 著) 浙江科学技术出版社 全部课后习题答案

3. /*输入一个学生的数学成绩,低于 60,输出“Fail” ,否则,输出“Pass” 。*/ #include<stdio.h> void main() { double mark; //输入数序成绩 printf(" Input a mark:\n"); scanf("%lf", &mark);
5. /*输入 4 个整数 n, 输出最小值。*/ #include<stdio.h> void main() { int a,b,c,d, min; //输入 4 整数 printf(" Input number of integers n:\n"); scanf("%d%d%d%d", &a,&b,&c,&d);
s ( s a )( s b)( s c), where s
abc 2
源程序: #include<stdio.h> #include<math.h> void main() { double a, b, c, s, area, perimeter; //输入三条边 a,b,c printf(" Input three edges a b c:"); scanf("%lf%lf%lf", &a,&b,&c); //判断 a b c 是否构成三角形 if(a+b>c || a+c>b || b+c>a) { perimeter =a+b+c; s =perimeter/2; area =sqrt( s*(s-a)*(s-b)*(s-c) ); printf(“ area=%.2f, parameter=%.2f \n”, area, parameter); } else printf("These sides do not correspond to a valid triangle. \n"); }
C语言C++第7章_数组

C程序设计(第三版)——谭浩强
质量技术监督学院——刘锦江
22
for(j=0;j<9;j++) for(i=0;i<9-j;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1]; a[i+1]=t; } printf(″the sorted numbers :\n″); 程序运行结果如下: for(i=0;i<10;i++) input 10 numbers: printf(″%d ″,a[i]); 4 8 12 65 -76 100 -45 123↙ 1 0 printf(″\n″); }/*程序结束*/ the sorted numbers: -76 -45 0 1 4 8 12 65 100 123
C程序设计(第三版)——谭浩强 质量技术监督学院——刘锦江
7
2.在定义数组时,需要指定数组中元素的个数,方括 弧中的常量表达式用来表示元素的个数,即数组长 度。 3.常量表达式中可以包括常量和符号常量,但不能包 含变量。也就是说,C语言不允许对数组的大小作动 态定义,即数组的大小不依赖于程序运行过程中变量 的值。 4.只能逐个引用数组元素,不能一次引用整个数组。 5.先定义,后使用。
将数组元素的初值依次放在一对花括弧内。经过上面 的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2, a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8, a[9]=9。
C程序设计(第三版)——谭浩强
质量技术监督学院——刘锦江
13
2. 可以只给一部分元素赋值。 例如: int a[10]={0,1,2,3,4}; 定义a数组有10个元素,但花括弧内只提供5个初值, 这表示只给前面5个元素赋初值,后5个元素值为0。 3. 如果想使一个数组中全部元素值为0,可以写成:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章 数组 【练习 7-1】将例 7-3 程序中的 break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么? 解答: 当去掉 break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为 x 的元素,因 此程序输出会有变化。当输入数据仍为 2 9 8 1 9 时,输出将是 index is 1 index is 4。 【练习7-2】将数组中的数逆序存放。输入一个正整数n(1入数组a中,输出最大值及其对应的最小下标,下标从0开始。试编写相应程序。 解答: #include int main(void) { int i,n,temp; int a[10];
printf("Input n:"); scanf("%d",&n); printf("Input %d integer:",n); for(i=0;iscanf("%d",&a[i]); printf("After reversed:"); for(i=0;itemp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=temp; } for(i=0;iprintf("%d ",a[i]);
return 0; } 【练习7-3】求最大值及其下标。输入一个正整数n(1组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素。试编写相应程序。 解答: #include int main(void) { int i,index,n; int a[10]; printf("Enter n:"); scanf("%d",&n);
printf("Enter %d integrs:",n); for(i=0;iscanf("%d",&a[i]); for(i=n-1;i>=0;i++) printf("%d ",a[i]);
return 0; } 【练习 7-4】找出不是两个数组共有的元素。输入一个正整数 n (1<n≤10),再输入 n 个整数,存入第1个数组中;然后输入一个正整数m(1入第2个数组,找出所有不是这两个数组共有的元素。试编写相应程序。 解答: #include int main(void) { int i,j,k,m,n,flag,equal; int a[25],b[25],c[25];
printf("Enter m:"); scanf("%d",&m); printf("Enter %d integers:",m); for(i=0;i scanf("%d",&a[i]); printf("Enter n:"); scanf("%d",&n); printf("Enter %d integers:",n); for(j=0;j scanf("%d",&b[j]); k=0; for(i=0;i flag=0; for(j=0;j if(a[i]==a[j]) flag=1;//判断一个数组中是否有相重的元素,有的话不执行 if(!flag){ equal=0; for(j=0;j if(a[i]==b[j]){ equal=1; break; } if(!equal) c[k++]=a[i]; } } for(i=0;i flag=0; for(j=0;j if(b[i]==b[j]) flag=1; if(!flag){ equal=0; for(j=0;j if(b[i]==a[j]){ equal=1; break; } if(!equal) c[k++]=b[i]; } } printf("%d",c[0]); for(i=1;i printf(" %d", c[i]); printf("\n");
return 0; } 【练习 7-5】给二维数组赋值时,如果把列下标作为外循环的循环变量,行下标作为内循环的循环变量,输入的数据在二维数组中如何存放?用下列 for 语句替换例 7-7 中的对应语句,将输入的 6 个数存入二维数组中,假设输入数据不变,输出什么?与例 7-7 中的输出结果一样吗?为什么? for( j=0;j<2;j++) for( i=0;i<3;i++) scanf(“%d”,&a[i][j]); 解答: 当把列下标作为外循环的循环变量,行下标作为内循环的循环变量时,输入的数据将 以列优先的方式存放。当用上述 for 循环方式时,输出结果为:max=a[2][0]=10,与原例 7-7 不一样,因为当用上述方式输入是,二维数组中存放值如下: 3 - 9 2 6 10 - 1 【练习 7-6】 在例 7-9 的程序中,如果将遍历上三角矩阵改为遍历下三角矩阵,需要怎样修改程序?运行结果有变化吗?如果改为遍历整个矩阵,需要怎样修改程序?输出是什么?为什么? 解答: 只需按要求修改矩阵的输出部分,方法如下,其运行结果不变。 for(i = 0; i < n; i++) for(j = 0; j < i; j++){ temp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = temp; } 若修改为遍历整个程序,方法如下,则运行结果仍将输出原矩阵,无法达到转置要求, 原因是矩阵中每个元素相应被交换了 2 次。 for(i = 0; i < n; i++) for(j = 0; j < n; j++) { temp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = temp;////先是下三角进行交换,后是上三角进行交换 } 【练习7-7】矩阵运算:读入1个正整数n(1≤n≤6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。试编写相应程序。 解答: #include int main(void) { int i,j,n,sum; int a[6][6];
printf("Input n:"); scanf("%d",&n); printf("Input array:\n "); for(i=0;i for(j=0;j scanf("%d",&a[i][j]); sum=0; for(i=0;i for(j=0;j if(i!=n-1&&j!=n-1&&i+j!=n-1) sum+=a[i][j]; printf("sum=%d\n",sum);
return 0; } 【练习 7-8】方阵循环右移。读入2个正整数m和n(1<=n<6),在读入n阶方阵a,将该方阵中的每个元素循环向右移m个位置,即将第0、1、…、n-1列变换为第n-m、n-m+1、…、 n-1、0、1、…、n-m-1列,移动后的方阵可以存到另一个二维数组中。试编写相应程序。 解答: #include int main(void) { int m,n,i,j,count; int a[6][6],b[6][6];
printf("Enter m:"); scanf("%d",&m); printf("Enter n:"); scanf("%d",&n); printf("Input array:\n"); for(i=0;i for(j=0;j scanf("%d",&a[i][j]); for(i=0;i count=0; for(j=0;j if(j b[i][j+m]=a[i][j]; else b[i][count++]=a[i][j]; } for(i=0;i for(j=0;j printf("%d ",b[i][j]); printf("\n"); }
return 0; } 【练习 7-9】计算天数:输入日期(年、月、日),输出它是该年的第几天。要求调用例 7-10 中定义的函数 day_of_year(year, month, day)。试编写相应程序。 解答: #include int day_of_year(int year, int month, int day); int main(void) { int year,month,day,day_year;
printf("Input year,month,day: "); scanf("%d%d%d",&year,&month,&day);