全国计算机等级考试二级C语言教程64总复习_第1页
全国计算机等级考试二级C语言教程64总复习_第2页
全国计算机等级考试二级C语言教程64总复习_第3页
全国计算机等级考试二级C语言教程64总复习_第4页
全国计算机等级考试二级C语言教程64总复习_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021/4/21C语言总复习(64学时)以考试难度为限2021/4/22一、一、C语言的数据表示语言的数据表示 1. 1 常量常量和和变量变量 1. 2 表达式表达式 1. 3 数据类型数据类型 简单类型、结构类型、指针类型 1.4 输入、输出输入、输出2021/4/231.1 常量和变量常量和变量 1.常量常量 常量是在程序执行中,值不发生改变的数据。其值预先决定,之后不变。有不同的数据类型。 (1)常数(有的称直接常量、页面常量) 例如的: 整数:+5 、-3、017(八进制)、0 x1f(16进制) 实数(浮点数):3.14 、-1.2E-3 、1E10 单个字符: A,占一个字节 ,

2、转义字符 非法 77 (八进制ASCII码63,?),78非法 x3f (十六进制ASCII码63,?) x3g非法 字符串: “A” 后面有0,占两个字节E3,2E3.0不合法不是整型量占一个字节2021/4/24 (2)符号常量 给常量起标识符名字。 C语言的符号常量(用宏定义): #define PI 3.14159265 好处:提高程序易读性;方便修改常量的值;注意:1.一般用大写字母。2, #define M 3 不是C语句,后面没有“;”。3.可以做M+1,不能做M+. (3)地址常量 当数组在定义时,其变量名为其首地址,是地址常量。 int a10;可以做a+1,不能做a+. 2

3、021/4/251.1 常量和变量常量和变量 2 变量变量 用各种操作来改变值数据。 从“名名”和“值值”两个角度认识变量 (1)变量名 每个变量,要在使用前定义变量的名字,遵循标识符命名规则。 只能用字母、数字和下划线组成。 不能以数字开头。 不能用保留字(int,printf,main.)。2021/4/26 变量定义就是申请数据的存储空间,登记数据的各种存储特性。 例如: int m ;2个字节 -215215-1(-3276832767) long n; 4个字节 -231231-1 char ch; 1 个字节 0255 float x; 4个字节 3.4 (10-38 1038)

4、double y; 8个字节 1.7(10-308 10308) 可以用sizeof获得字长 sizeof(char)=1 sizeof(int)=2 sizeof(double)=82021/4/27 (2)变量的值)变量的值 变量值就是由变量名所指定空间上的存储数据内容。即变量的当前值。 数据内容用语言的操作语句来改变。 赋值语句;键盘输入语句; char chx; int m; /* 变量的定义 */ chx=A; m=12*3; /* 赋值语句 */ scanf(“%d”,&m); /* 键盘输入语句 */ 在程序运行时,将数据存入制定内存空间。 变量初始化:变量初始化:定义变量时同时

5、确定变量初值。 例如: char chy=a; int weight=2; 2021/4/281.2 C语言的语言的表达式表达式 1 1、算术表达式、算术表达式 2 2、关系表达式、关系表达式 3 3、逻辑表达式、逻辑表达式 4 4、赋值表达式、赋值表达式 5 5、逗号表达式、逗号表达式 6 6、条件表达式、条件表达式 7 7、其他表达式、其他表达式C语言的语言的表达式表达式:使用规定的运算符运算符,将常量、变量、函数(调用)连结的一个有意义的式子。 2021/4/291、算术表达式、算术表达式 用算术运算符来表示对数据的算术运算求值过程。 算术运算符: + - * / % 2/3结果是0,2

6、%3结果是2 注意不同类型运算问题:doublelongunsignedint floatchar short高低2021/4/2102 2、关系表达式、关系表达式 关系运算符: = 0 , sin(x)=0.5, (a+b)=(c*d) 注意语法合理与数学逻辑错误问题: 分析:10=a=15 a=9 是假 10=a=1510=a 假 00=15 真所以要写成10=a&a=152021/4/2113、逻辑表达式 用逻辑表达式来表示对数据的逻辑关系判断,运算结果是逻辑值“真”1或者“假”0。 C逻辑运算符包括: ! & | 参加逻辑运算的数据必须是逻辑量,可以是逻辑类型的变量、常量,关系表达式或

7、逻辑表达式。 C语言中,没有专门的逻辑量,语言中,没有专门的逻辑量,1是真值,是真值,0是是假值。也认为假值。也认为非零非零的值为真值。的值为真值。 如:int a=3, b=4, c=-5; (1) ! (ab) & ! c | 1) (2) if(a)printf(“n yes”);a,c均按非0(即真)处理2021/4/212逻辑运算规律 在&(与)表达式中,若&的左端为假, 则不再计算另一端,该表达式值肯定为 0(假)。 在|(或)表达式中,若|的左端为真,则不再计算另一端,表达式的值必定为 1(真)。 nint a=5,b=1nk=a0nk?b?假,后面不算了k=0,b=12021/

8、4/213 判断闰年的条件是:能被4整除但不能被100整除,或能被400整除。(x4= =0&x100!=0) 水仙花数是指一个三位正整数,其各位数字的立方和等于该数本身 (k*100+m*10+n= =k*k*k+m*m*m+n*n*n) 三角形的基本条件 (a+b)c)&(c+b)a)&(c+a)b) 2021/4/214 4、赋值表达式=,+=,-=,*=,/=,+(单目),- (单目)级别仅高于逗号表达式,右结合int a=3,c=2,ba=b=c;n*=m+2 相当于 n=n*(m+2)k=i+; 先k=i,再i=i+1k=+i; 先i=i+1,再k=ic赋值给b,b=2b赋值给a,

9、a=22021/4/215 5、条件表达式 e1?e2:e3若e1为真,表达式的值为e2,否则为e3. (- -a=b+)? -a : b +5-1=4 T a=4-a a=3 表达式的值为3a=5,b=44-1=5 F b=6b + b=7表达式的值为6a=4,b=5条件表达式的值的类型为e2,e3二者中类型较高者。如果y=5; y3?-1.0:2 其值为2.02021/4/216 6、逗号表达式 表达式的值等于最后一个表达式的值,运算等级最低! a=5,b=2,c=3 a=7+b+c, a+ a=(7+b+c, a+) a=12a=57、强制类型转换表达式(单目) int m; sqrt(

10、float) m);并没有改变m的类型和数值2021/4/217理解记忆运算符表 (高高)(低低)!+,-,等算数运算符算数运算符 关系运算符关系运算符 逻辑运算符逻辑运算符 & |条件运算符条件运算符 赋值运算符赋值运算符 逗号运算符 右结合单目运算符赋值运算符2021/4/2181.3 数据类型数据类型 数据类型:数据类型:在高级语言的数据表示机制中,数据类型(data tyPe )是个核心概念。简单类型构造类型指针类型整型实型字符型数组结构体共用体数值型枚举型空类型2021/4/2191. 3 数据类型数据类型(输入、输出格式输入、输出格式 “ “%d”%d”) 类型名 字节数 数值范围

11、 int 2 -32768 32767 shortshort 2 -32768 32767 long long 4 -2147483648 2147483647还有无符号整型(输入、输出格式输入、输出格式 “ “%u”%u”)Unsigned int 2 0 65535Unsigned short 2 0 65535 Unsigned long 4 0 42949672951.简单类型简单类型2021/4/220 (2) 实型实型 实型(float )数据的值集是实数集的一个有限子集. -3.4e38, -3.4e-39, 3.4E-38, 3.4E381.简单类型简单类型 类型名类型名 字节

12、数字节数 输入、输出格式输入、输出格式 有效数字位有效数字位 float 4 %f%f 7 doubule 8 %lf%lf 16 long doubule 16 %lf%lf 19不要以为是长整型E38非法2021/4/221n(3) (输入、输出格式输入、输出格式 “%c”)n ASCII码,一个字符占1字节;nchar ca; ca=#;n注意转义字符 的使用。 (4)字符串(输入、输出格式输入、输出格式 “ “%s”%s”) 所谓“字符串字符串”是指若干有效字符的序列。语言字符串可以包括字母、数字、专用字符、转义字符等。 字符串常量:使用双引号使用双引号 China BASIC a+b

13、=c Li-Li 39.4 %dn 解放军“ 字符型的一维数组(相当于字符串变量) char st8, str10; strcpy(st,12345); strcpy(str,st); 不能st=“12345”; str=st;2021/4/222 2. 结构类型 “结构”一般可以称为数据元素数据元素,在不同的结构类型中,数据元素会有特定的名称。 结构类型的数据由更加基本的成分组成。 这些成分称为“数据项”,结构的子成员子成员。1. 3 数据类型数据类型2021/4/223 (1) 数组 A0 A1 A2 A3 A4 A5 A6 A7 10 20 30 40 50 60 70 80 一个数组(

14、array )是由相同类型的若干数组元素构成的有限序列。 C 语言的数定义 : int B8 , A8 ; char C10; 2. 结构类型2021/4/224例 日期类型的定义(2) 结构体 C语言中实现: struct Date int month ; /*月*/ int day; /*日*/ int year; /*年*/ ; struct Date myd=12,16, 1978; 系统分配给它的内存是各成员所需内存量的总和。本例是6. 2021/4/225 (1)指针:)指针:变量名的在内存中的存储地址。 (2)指针变量)指针变量 int i=12, *p; P=&i; 把存放变量

15、i 的地址的变量p 称作指针变量。 指针变量的存放内容是数据的地址。3. 指针类型 (3)指针引用变量)指针引用变量 指针变量可以指向各种不同的数据类型,因此指针变量也要有不同的指针类型。如: int m, *p; float x,*q; int a,*r m=12; p=&m; x=3.14; q=&x; r=a;注意:是否用&2021/4/2261.4 输入、输出输入、输出 输出: printf(“.”, .) %d, %6d, %ld %c, %s %f , %10.2f , %lf, %20.8lf n=3; printf(“n %d,%d,%d”, n,+n,n+); 计算从右到左,

16、输出从左到右。 %s是输出以指定首地址到第一个0或空格之间的字符串。char a=“abcd efg”,*p=a;printf(“%s”,*+p); bcd5,5,32021/4/2271.4 输入、输出输入、输出 输入: scanf(“.”, .) %d, %ld 对应int long %c, %s 对应char char str %f , %lf 对应flaot double 常见错误 int a,b;char d,e20; scanf(%d,%fn”,&a,&b); scanf(%d,%f”,a,b); scanf(%7.2f,&a); scanf(%s,&e); scanf(%c,d)

17、;2021/4/228 (1)表达式语句表达式语句 (2)流程控制语句流程控制语句 (3)复合语句复合语句C语语言言语语句句 指令语句指令语句 非指令语句非指令语句 数据定义语句数据定义语句 float x; int m; 编译预处理编译预处理宏定义 #define PI 3.14159文件包含处理 #include 二、C语言的程序结构与相关语句2021/4/229表达式语句 1. 表达式语句的组成: 由一个表达式后接一个分号组成的由一个表达式后接一个分号组成的。 i=i+1 (是表达式,没有构成语句) i=i+1; (是语句) x+y; (是合法语句,但没有实际意义) 表达式语句的分类:

18、赋值语句: i=1; c=getchar(); 函数调用语句: printf(n Hello,world !); 空语句。其形式为: 逗号表达式语句: +a,-b;2021/4/230 完成一定的控制功能。9种控制语句: 判断语句判断语句 条件判断语句 if()else 多分支选择语句 switch()case 循环语句循环语句 循环次数控制语句 for() 先判断后执行循环控制语句while() 先执行后判断循环控制语句dowhile() 转移控制语句转移控制语句 直接转移语句 goto 终止语句 break(用在循环结构、swicth) 跳转语句 continue (仅用在循环结构) 返回

19、语句 return流程控制语句流程控制语句2021/4/231复合语句复合语句 一组语句括在一对花括号一对花括号之中,称复合语句复合语句。 c=getchar(); putchar(c); 注意,一个复合语句的后花括号之后一个复合语句的后花括号之后不应再写分号不应再写分号。 在语法上是一个整体,相当于一个语句。 凡是能够使用简单语句的地方,都可以使用复合语句凡是能够使用简单语句的地方,都可以使用复合语句。一个复合语句中又可以包含另一个或多个复合语句。 2021/4/232二、C语言的程序结构与相关语句 程序的三种基本结构: 顺序结构顺序结构 选择结构选择结构 if()else switch()

20、case 循环结构循环结构 for().; while(); do ; while()2021/4/233选择结构 单分支结构 if(a=b)printf(“yes”); 双分支结构 if(a=b) printf(“yes”); else printf(“no”); 多分支结构 switch_case 2021/4/234多分支选择语句 switch(表达式)(表达式) case 常量表达式常量表达式1: 语句序列语句序列1; break;case 常量表达式常量表达式2: 语句序列语句序列2; break;case 常量表达式常量表达式n: 语句序列语句序列n; break;default:

21、语句序列:语句序列n+1; 根据“表达式”的值从上至下去寻找与表达式的值相匹配的“case常量表达式”,执行一个分支后,再执行下一个分支,直到break结束,然后执行switch结构后面的程序。 找不到匹配的入口标号时,执行“语句序列n+1”,然后结束。顺序向下执行程序。2021/4/235main() int a=1,b=1;switch (a)case 1: switch (b) case 0:printf(“$”);break; case 1:printf(“#”);break; case 2:printf(“*”); case 2:printf(“”); case 3:printf(“

22、”); break; case 4:printf(“&”);a=1case 1:swtch(1)b=1printf #,break跳出switch(b)结构进入switch(a)结构case 2:printf case 2:printf break 跳出switch(a)结构# 2021/4/236for,while,do-while三种结构 循环变量初始化,继续循环条件,改变循环变量是不可缺少的三个环节。 for常用于循环次数已知的问题中。括号中的两个“;”不可省。 while与do-while常用于循环次数未知的问题中。2021/4/237注意 在for和while语句之后一般没有分号 有

23、分号表示循环体就是分号之前的内容(空循环体) while (i 100);i+; for (i = 0; i 100; i+);printf(%d, i); if,swtich,while,for后面的语句只能是一句,因此,多句时别忘了。2021/4/238在while( e )和for( ;e ;)中的e是循环继续的条件,不能写其它条件!如果缺省,就是死循环!在if(e),while( e )和for( ;e ;)中e的值是逻辑值(0或非0)e一般是关系表达式,逻辑表达式或变量。if(x=1)if(x=1)main() int i=1; doi-;while(i+); printf(“%d”

24、,i-); A) -1 B) 0 C) 1 D)陷入死循环i=1i-,i=0while(i)终止循环i+,i=1输出i=1i-,i=02021/4/239break,coutinue break只能用于switch和循环语句中,作用提前终止本层次switch和循环。 coutinue是跳过循环体内尚未执行的语句,接着执行下次循环。2021/4/240常用的循环算法 求素数、水仙花数、最小公倍数、最大公约数、分解多位数的数字,累加,累乘,分解质因数等。 各种有规律的图案。while( m) k = m%10 ; /*求最低位的数字*/ m=m/10; /*除去最低位的数字*/ 分解多位数的数字2

25、021/4/241判断素数main() int i,x,flag=0; scanf(“%d”,&x); for(i=2;i0; -x ) y *= x; return(y);main() long y; for ( y=1; x0; -x ) y *= x; printf(“%ld”,y); main( ) int m, n; long cmn, facto( ); scanf (%d%d, &m, &n); cmn = facto(m) / (facto(n) * facto(m-n); printf (%ldn, cmn); 求求C(m,n) = m!/(n!*(m-n)!) 2021/4

26、/243 数组的定义类型标识符 数组名常量表达式 错误的定义是: 或 int n; int n=10; scanf(%d,&n); int an; int an; 定义int a5时, a0,a1.=?随机数!只有int a5=3后,后面几项自动赋0三三 数组数组2021/4/244数组的初始化 合法:int a=1,2,3,4,5; int i 3=1,2,3,4,5,6; int a5=1,2,3; char a4=“boy” char a3=b,o,y不合法: int a5=,2, ,4,5; int i2 =1,2,3,4,5,6; int a5= ;char a4=boy2021/4

27、/245分别用三种方法(数组元素下标法、数组名地址法、指针变量法)访问数组元素。 #include void main() int a5=1,3,5,7,9, i, *p; for(i=0;i5;i+)printf(%d , ai ); /*下标法*/ printf(n); for(i=0;i5;i+)printf(%d , *(a+i) ); /*地址法*/ printf(n); for(p=a;pa+5;p+)printf(%d , *p ); /*指针变量*/ 2021/4/246数组的操作往往用循环结构.数值数组#define M 10int aM;for(i=0;iM;i+)字符数组

28、#define M 10char aM;for(i=0;ai!=0;i+)数值数组倒序#define M 10main()int i,j,aM;for(i=0;iM;i+) scanf(“%d”,ai);for(i=0,j=M;ij;i+,i-) 交换ai,aj字符数组倒序main()int i,j;char a50;gets(a);for(i=0,j=strlen(a);ij;i+,i-) 交换ai,aj2021/4/247用函数实现倒序数值数组void inv(int x,int n);#define M 10main()int i,j,aM;for(i=0;iM;i+) scanf(“%

29、d”,ai);inv(a,M);for(i=0;iM;i+) printf(“%d”,ai);字符数组void inv(char x)main()int i,j;char a50;gets(a);inv(a);puts(a);多一个参多一个参数,表示数,表示元素个数元素个数可以整可以整体输入,体输入,输出输出必须单必须单个输入,个输入,输出输出2021/4/248数值数组void inv(int x,int m) int i,j,k; j=m; for(i=0;ij;i+,i-) k=xi; xi=xj; xj=k;字符数组void inv(int x ) int i,j,k; j=strle

30、n(x); for(i=0;ij;i+,i-) k=xi; xi=xj; xj=k;2021/4/249main( ) int i,j,s=0,a33; for ( i=0; i3; i+ ) for ( j=0; j3; j+ ) scanf(%d,&aij); for ( i=0; i3; i+ ) for ( j=0; j3; j+ ) if ( i=j | i+j=2 ) s+=aij; printf(s=%dn,s);主对角线i=j副对角线i+j=22021/4/250累加(积)# define M 10main() int i,aM,s=0; for (i=0;iM;i+) sca

31、nf(“%d”,&ai); for (i=0;iM;i+) s+=ai; printf(“s=%d”,s);# define M 10main() int i,aM,s=1; for (i=0;iM;i+) scanf(“%d”,&ai); for (i=0;iM;i+) s*=ai; printf(“s=%d”,s);2021/4/251求最大(小)值#define M 30main() int i,k,k_i,aM; for(i=0;iM;i+) scanf(“%d”,&ai); k=a0; k_i=0; for(i=1;iM;i+) if(kai) k=ai; k_i=i; printf

32、(“max=%d,maxi=%d”,k, k_i);最小值 if(kai)最大值2021/4/252字符数组char str50;int i;for (i=0;stri!=0,i+)构造新的字符数组(删除,插入,复制,连接,倒序)。 1.用和不用字符串函数实现上述功能。 2.用指针实现。 3.必须注意最后一项一定是: stri =0;或 *p=0;2021/4/253二维字符数组二维数组在内存中的排列顺序是“按行优先存放”二维数组amn可以视为由n个一维数组am组成的。二维字符数组中m由其中最长的字符串决定。char stu56= “Tom,“Anne,“Mary,“Peter; 其中stu0

33、= “Tom“ stu1=“Anne2021/4/254字符串函数 要用#include 字符串拷贝函数strcpy 字符串连接函数strcat 字符串比较函数strcmp 测字符串长度函数strlen 函数函数strlen的值为的值为0之前的全部字符个数之前的全部字符个数.它它与数组长度不是一个概念与数组长度不是一个概念.char s6=H,o,w,0,o,kstrlen (s) =32021/4/255字符串函数的应用字符串赋值字符串比较s1=s2strcpy(s1,s2)s1=s2strcmp(s1,s2)=0s1s2strcmp(s1,s2)0s1s2strcmp(s1,s2)0202

34、1/4/256一 函数定义的形式: 存储类型存储类型 数据类型数据类型 函数名函数名(形式参数表形式参数表) 变量数据定义语句序列;变量数据定义语句序列; 可执行语句序列;可执行语句序列; int fun(int x,int y) int z; z=x+y; return z;函函数数首首部部 函函数数体体四四 函数函数2021/4/257非非void型型int fun(int x,int y);main() int a,b; scanf(“%d,%d”,&a,&b); printf(“%d”,fun(a,b);int fun(int x,int y) int z; z=x+y; return

35、 z;作为框架记住作为框架记住void型型void fun(int x,int y);main() int a,b; scanf(“%d,%d”,&a,&b); fun(a,b); printf(“%d,%d”,a,b);void fun(int x,int y) int z; z=x;x=y;y=z; printf(“%d,%d”,x,y);2021/4/258填main()char fun(int x,int y) int z; z=x+y; return z;main()int a,b; 函数实参函数实参char c; 函数返回值函数返回值scanf(“%d,%d”, a,b); 实参赋

36、值实参赋值c=fun(a,b); 调用函数调用函数printf(“%c”, c); 输出结果输出结果注意变量数据类型的对应注意变量数据类型的对应int %d long %ldfloat %f double %lfchar %c或或%s2021/4/259递归调用的概念递归调用的概念 在语言中,一个函数直接或间接地调在语言中,一个函数直接或间接地调用自身,便构成了函数的递归调用。用自身,便构成了函数的递归调用。 前者为直接递归调用前者为直接递归调用,后者称间接递归调用。后者称间接递归调用。计算n!的函数rfact() long fac(int n) long p; if (n=0 |n=1) p

37、=1; else p= n*fac(n-1); /*自己调自己*/ return p; void main() printf(“%ld”, fac(5); 记住递归调用的框架记住递归调用的框架2021/4/260数组名作函数实参void fun(int a ,int n);main() int arr10,i; for(i=0;i10;i+) scanf(“%d”,&arri); fun(arr,10); for(i=0;i10;i+) printf(“%d”,arri);2021/4/261main( ) int i,a=2; for(i=1;i=5;i+) f( i ); printf(

38、“%dn”,a); f( j ) int j; static int a=100; auto k=1; +k; printf( “%d+%d+%d=%dn”,a,k,j,a+k+j); a+=10; 函数调用函数调用函数定义函数定义函数内定义函数内定义,值不保留。值不保留。运行结果:运行结果:100+2+1=103110+2+2=114120+2+3=125130+2+4=136140+2+5=1472两个函数变两个函数变量同名量同名,互互不影响。不影响。静态变量静态变量2021/4/262 五五 指针指针(1)指针指针: 某变量的某变量的地址地址值称为该变量的指针称为该变量的指针。(2)指针

39、变量:指针变量: 指针变量是存放普通变量地址的变量。 指针变量指向这个普通变量。1112ab地址1010101210101012pq地址100220042006指针变量指针变量 整型变量整型变量2021/4/263指针变量的定义 数据类型数据类型 *指针变量名指针变量名1; double *pd,d1,d2; /*pd为指向double型变量的指针*/ char *pc,c1,c2; /*pc为指向char型变量的指针*/ float *pf,f1,f2; /*pf为指向float型变量的指针*/ 定义指针变量必须在变量名前加指针说明符“*”。指针变量名本身不含“*”号。 定义指针变量后,系统为这个指针变量也分配一个存储单元,这个存贮单元一般都占有固定的字节(如16位计算机是2个字节)。该存贮单元用于存放普通变量的地址。2021/4/264指针变量的初始化 char *str=“abcdef”;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论