1、全国计算机等级考试二级C语言教案(常用版)(可以直接使用,可编辑 完整版资料,欢迎下载)全国计算机等级考试二级C语言教案National Computer Rank ExaminationC Program Teaching Planning兴龙计算机教育中心内部教材作者: 邹莫泊Copyright版权所有全国计算机等级考试二级C语言教案第一章 C语言基础知识第1课知识点一C语言程序构成例1 已知矩形两边为3.6和1.2,计算矩形的面积。#include main() double a,b,area; a=3.6; b=1.2; area=a*b; printf(“%f”,area);1)#i
2、nclude 表示包含系统提供的头文件,目的是在程序中可以输入和输出。2)main()表示主函数的开始,任何一个C程序有且只能有一个main()函数。3)用 括起来的部分称函数体。4)double a,b,area; 表示定义三个双精度型变量。 变量a和b表示矩形两条边,area表示矩形面积。5)a=1.2; 和 b=3.6; 表示给变量a赋值1.2、给变量b赋值3.6。6)area=a*b; 表示将a乘以b的结果即矩形的面积保存在变量area中。7)printf(“%f”,area); 表示输出变量area的值即矩形面积。 此例中%f表示双精度输出格式符。知识点二标识符按照C语言所定义的规则
3、来命名的符号。规则: 由字母、数字、下划线组成,但第一个字符必须是字母或下划线。例如: area、a234、_1234为合法标识符 456P、a-b、a+b为非法标识符注意: 标识符区分大小写。例如: PAGE和page是两个不同的标识符。知识点三常量指在程序运行中,其值不能被改变。分为整型常量、实型常量、字符常量、字符串常量。例如: 12、-3为整型常量 3.14159为实型常量 A、d为字符常量 “Beijing”为字符串常量符号常量用符号名来表示一个常量。格式: #define 符号名 常量值例2 已知圆的半径为5.0,计算圆的面积(圆周率取3.14)。#include #define
4、PI 3.14main() double r, s;r=5.0;s=PI*r*r; printf(“s=%fn”,s);知识点四变量指在程序运行过程中其值可以改变的量。变量的命名必须符合标识符的命名规则,且不能和C语言中关键字同名。(例如: main是关键字)例如: a、b、ab为合法变量 define、printf为非法变量注意: ab是一个整体,含义不同于a乘以b。练习题1 已知两个双精度数为3.5和2.5,计算它们的平方和。2 已知圆的半径为3.0,圆周率取3.14,计算圆的周长。(要求使用符号常量)第2课知识点一整型常量C语言中主要有十进制、八进制、十六进制等。十进制 例如 12、-3
5、、32767等。八进制 用数字0开头,由0-7这8个数字组成。 例如 010、016为合法八进制数 127、018为非法八进制数十六进制 用数字0和字母x或X开头,用0-9表示前10个数字,字母A-F(可小写)表示后6个数字。 例如 0xAF、0x10、0x34为合法十六进制数 100、ABC、0xAFH为非法十六进制数注意: C语言中只有十进制数可以为负数。知识点二整型变量分为基本型、短整型、长整型、无符号型。基本型 int 短整型 short int长整型 long int 无符号型 unsigned注意: 无符号型不能表示小于0的负数。定义整型变量例1 定义两个整型变量i和j。 int
6、i, j;例2 定义两个长整型变量a和b,初值分别为3和5。 long a=3, b=5;知识点三实型常量表示方式有两种: 小数形式和指数形式。小数形式 例如: 0.123、.123、123. 都是合法形式。指数形式 例如: 2.3026可用以下任何一种指数表示 0.23026E1、2.3026e0、23.026E-1但下面的指数形式为非法 E3、.5e3.6、2.3e -2(e和-2间有空格)知识点四实型变量分为单精度和双精度两种。定义单精度型变量例如: float a,b,c;定义双精度型变量例如: double x,y,z;注意: 不能用整型变量存放一个实数,也不能用实型变量存放一个整数
7、。例如: double x; x=3; 此语句非法,应改为x=3.0;练习题 1 写出0x39后面的数和0300前面的数。2 将0370和0x3CF分别转换为十进制数。3 已知两个数分别为最小素数和最小合数,计算它们的平 方和与和的平方之差。第3课知识点一算术运算符+、-、*、/、%(求余数)例如: 3+2 1.2*3.2 5%3 1/2 运算规则1)如果运算数类型一致,则结果为运算数的类型。2)如果运算数类型不一致,则系统自动转换,使运算符两边类型一致后再进行运算。例1 1.0/2.0结果为0.5例2 1/2结果为0例3 15/3.0结果为5.0运算符优先级从高到低依次是( )、*、/、%、
8、+、-括号级别最高,*、/、%三个同级别,+、-同级别。例1 5+2*(-2)+15%15/3结果为1例2 3+sqrt(225)-5*(-3)结果为33 例3 15-sqrt(sqrt(81)+abs(5-sqrt(36)结果为13 sqrt表示开平方,abs表示绝对值。注意: 1)sqrt和abs为数学函数,若在程序中使用,需要包含相应的头文件。2)abs函数求整数的绝对值,fabs函数求实数的绝对值。知识点二强制类型转换格式: (类型名)(表达式)例1 (int)3.234结果为3例2 (float)(10%3)结果为1.000000知识点三赋值表达式格式: 变量名=表达式例如: a=1
9、0 a=a+1 a=b=7+1为合法表达式a+b=8 a=7+1=b为非法表达式整个表达式的值等于最左边变量的值。例如: a=b=c=8*8 整个表达式最后的值为64复合赋值表达式复合运算符: +=、-=、*=、/=、%=例如: n=n+1表达式可写成n+=1 n=n%3表达式可写成n%=3 n*=m+3表达式可写成n=n*(m+3)例1 假设变量a初值为9,计算下列表达式。 a+=a-=a+a解答:1) 计算a+a,结果为18,a值未变。2) 计算a-=18,即a=a-18,结果为-9,a值变为-9。3) 计算a+=-9,即a=a+(-9),结果为-18,a值变为-18。整个表达式最后结果为
10、-18,a最后值为-18。注意: a=a+1为赋值表达式,而a=a+1; 为赋值语句。知识点四自加和自减运算符例如: a+和+a等价于a=a+1 b-和-b等价于b=b-1a+和+a的区别:假设a的初值为5表达式a+值为5,最后a值为6。表达式+a值为6,最后a值为6。知识点五逗号表达式格式: 表达式1,表达式2,.,表达式n从左至右依次计算每个表达式,最后一个表达式的值即为整个逗号表达式的值。例如: 表达式i=3,+i,i+5最后结果为9,i最后值为4。练习题1 用C语言表达式表示出一元二次方程的两根。2 假设变量a和b初值分别为5和6,计算下列表达式。 a-=b+=b%(a+b)/a-3%
11、53 已知直角三角形的两直角边为3.5和4.5,计算斜边。 第二章 顺序结构第1课知识点一数据输出 printf格式: printf(格式符,输出项1,输出项2,.)格式符 功能 %c 输出一个字符 %d 输出十进制整数 %f 输出小数形式浮点数%e 输出指数形式浮点数 %s 输出一个字符串数据宽度说明:1)在%和格式字符之间插入一个整数来指定输出宽度。例如: %4d、%5c2)对于float和double类型的实数,可以用n1.n2形式n1指定输出数据的宽度(包括小数点),n2指定小数点后小数的位数。例如: %12.3f、%12.0f例1 输出整型变量a和b的值,数据宽度均为4。 print
12、f(“%4d%4d”,a,b);例2 输出单精度变量k的值,保留2位小数。 printf(“%.2f”,k);知识点二数据输入 scanf格式: scanf(格式符,输入项1,输入项2,)格式符 功能%c 输入一个字符%d 输入十进制整数%f 输入单精度数%lf 输入双精度数%s 输入一个字符串例1 从键盘上输入两个整数,保存在变量a和b中。 scanf(“%d%d”,&a,&b);例2 从键盘上输入一个双精度数,保存在变量data中。 scanf(“%lf”,&data);此处两例中&是C语言运算符,表示取变量地址。知识点三复合语句格式: 语句1 语句2 . 语句n例1 用复合语句将变量a,
13、b,c依次赋值为最小素数。 a=2; b=3; c=5; 例2 用复合语句实现变量a和b的值的交换。 k=a; a=b; b=k; 知识点四空语句格式: ;仅由一个分号组成,不产生任何行为。练习题1 从键盘上输入两个整数,输出它们的平方差。2 从键盘上输入两个双精度数,输出它们差的绝对值。3 编程输出一元二次方程3x2-4x+1的两根。 (要求结果保留2位小数)第三章 选择结构第1课知识点一关系运算符、=、=6 aA 5 结果均为真,值为1例2 6!=6 D=d 9F 结果均为假,值为0 知识点二逻辑运算符&(与) |(或) !(非)优先级: 非运算与运算或运算非运算规则操作数 结果真 假假
14、真与运算规则操作数1 操作数2 结果真 真 真真 假 假假 真 假假 假 假或运算规则操作数1 操作数2 结果真 真 真真 假 真假 真 真假 假 假例1 若变量a值为10,变量b值为16,计算表达式。 ab | asqrt(b) & b=16 最后结果为真,表达式的值为1知识点三if 语句格式1: if(表达式) 语句若表达式为真,则执行语句;否则if语句结束。格式2:if(表达式) 语句1else 语句2若表达式为真,则执行语句1;否则执行语句2。例1 从键盘上输入两个整数,输出较大的数。#include main() int x,y; printf(“请输入两个整数:n”); scanf
15、(“%d%d”,&x,&y); if (xy) printf(“%d”,x);else printf(“%d”,y);练习题1 用C语言表达式表示x不在区间15,30且x为奇数。2 从键盘上输入一个整数,若能被3或5整除则输出此整数的平方。3 从键盘上输入一个整数,若是完全平方数输出”yes”; 否则输出”no”。第2课知识点一if语句嵌套格式: if(表达式1) 语句1else if(表达式2) 语句2else if(表达式3) 语句3else 语句n若表达式1为真,则执行语句1;否则若表达式2为真,则执行语句2若所有表达式均为假,则执行语句n。例1 根据输入的学生成绩,大于或等于90分为A
16、,60分以下等级为E,其余每10分一个等级。#include main() int g;printf(“请输入一个整数:n”); scanf(“%d”,&g); if (g=90) printf(“An”); else if(g=80) printf(“Bn”); else if(g=70) printf(“Cn”); else if(g=60) printf(“Dn”); else printf(“En”);知识点二条件运算符格式: 表达式1? 表达式2: 表达式3若表达式1为真,结果为表达式2;否则为表达式3。例如: x的初值为5,执行以下语句 y=+x6?100:200; 最后y的值为2
17、00知识点三switch语句格式: switch(表达式) case 常量表达式1: 语句1 case 常量表达式2: 语句2 case 常量表达式n-1: 语句n-1 default: 语句n若表达式的值与表达式1相等,则执行语句1;若与表达式2相等,则执行语句2若均不相等则执行语句n。例1 用switch语句重写学生等级程序。#include main() int g;printf(“请输入一个整数:n”); scanf(“%d”,&g); switch(g/10) case 10: printf(“An”); break; case 9: printf(“An”); break; cas
18、e 8: printf(“Bn”); break; case 7: printf(“Cn”); break; case 6: printf(“Dn”); break; default: printf(“En”);程序中break表示跳过后面的分支。知识点四跳转语句 格式: goto 标号程序从当前位置转到标号处继续执行。例1 下列程序中使用标号实现反复输入数据。#include main() int k;p: scanf(“%d”,&k); printf(“%d”,k*k);goto p;练习题1 从键盘上输入一个年份,若是闰年则输出”yes”;否则 输出”no”。闰年的判断方法:1)若年份能
19、被400整除,则是闰年。2)若年份能被4整除,但不能被100整除也是闰年。2 从键盘上输入一个双精度数,输出下列表达式的值。 x2+1 (x0)s= 2x+3 (x=0) x2-1 (x0)3 从键盘上输入三个整数,输出最大数和最小数。第四章 循环结构第1课知识点一while循环格式: while(表达式) 循环体若表达式为真,则执行循环体。再判断表达式,若仍为真则重复执行循环体直到表达式为假时循环结束。例1 编程计算S=1+2+100。#includemain() int k=1,s=0; while (k=100) s=s+k; k=k+1; printf(“%d”,s);知识点二do-w
20、hile循环格式: do 循环体 while(表达式);先执行循环体,然后判断表达式。若为真则重复执行循环体直到表达式为假时循环结束。例1 用do-while循环计算10!#includemain() int k=1;long s=1;do s=s*k; k+; while (k=10);printf(“%ld”,s);注意: while循环和do-while循环的区别while循环是先判断表达式,因此循环体有可能一次也不执行。do-while循环是先执行一次循环体,再判断表达式,所以不论表达式为真为假,循环体至少要执行一次。知识点三for循环格式:for(表达式1;表达式2;表达式3) 循环
21、体先执行表达式1,然后判断表达式2,若为真则执行循环体。然后执行表达式3,再判断表达式2,若仍为真则重复执行循环体直到表达式2为假时结束。例1 用for循环计算S=1+2+100。#includemain() int k,sum=0; for(k=1;k=100;k+) sum=sum+k; printf(“%d”,sum);例2 若一个三位数个位、十位、百位的立方和等于它本身则称这个数为水仙花数。例如153是一个水仙花数。编程输出所有的水仙花数。#includemain()int a,b,c,i; for(i=100;i=999;i+) a=i/100; b=i%100/10; c=i%10
22、; if(a*a*a+b*b*b+c*c*c=i) printf(%dn,i);练习题1 编程计算S=1-2+3-4.-100。2 编程计算S=1+1/(1*3)+1/(3*5)+1/(97*99)。3 编程计算1至100之间能同时被3和5整除的数之和。第2课知识点一for循环嵌套最常用的是二重for循环。例1 编程计算S=1!+2!+3!+.+10!#includemain() int i,j; long t,s=0; for(i=1;i=10;i+) t=1; for(j=1;j=i;j+) t=t*j; s=s+t; printf(%ld,s);知识点二break语句用在循环体内表示强行
23、退出循环。例1 计算S=1+2+3+n,直到累加和大于5000为止。#include main() int i,s=0;for(i=1; ;i+) s=s+i; if(s5000) break;printf(“%d”,s);注意: 当有多重循环时,break只能退出最内层循环。知识点三continue语句用在循环体中用来跳过本次循环余下的语句,立即开始下一轮循环,整个循环并未结束。例1 写出下列程序运行结果。 int i, k=0, s=0; for(i=1;i5) printf(“i=%d,s=%d,k=%dn”,i,s,k); continue; k=k+s; printf(“i=%d,s
24、=%d,k=%dn”,i,s,k); 运行结果:i=1,s=1,k=1i=2,s=3,k=4i=3,s=6,k=4i=4,s=10,k=4i=5,s=15,k=4练习题1 编程计算满足S=1+3+5+n大于1000的最小n。2 编程求S=1!+2!+n!(n从键盘输入)3 编程求S=1+(1+2)+(1+2+3)+(1+2+n)(n从键盘输入)第五章 字符型数据第1课知识点一字符常量用单引号将一个字符括起来称字符常量。例如: A、c、5都是合法的字符常量。 ”A”、abc都是非法的字符常量。知识点二转义字符常量转义字符是以开头,后面跟一个特定字符。常见的转义字符:n 回车换行 反斜杠 单引号
25、”双引号ddd 三位八进制 xhh 二位十六进制0 空值例1 n表示回车换行 表示一个单引号例2 101表示字符A x41表示字符A知识点三字符常量的运算C语言中,字符常量均作为整数来运算。例如: A+32=97 B-A=1 0+4=52知识点四字符变量用关键字char定义,可以同时赋初值。例1 定义两个字符变量ch1和ch2。 char ch1,ch2;例2 定义两个字符变量a和b,初值分别为1和2。 char a=1, b=2;第2课知识点一字符的输入和输出使用scanf和printf时,格式符均为%c。例1 从键盘输入一个字符保存在ch中。 scanf(“%c”,&ch);例2 char
26、 c1=A, c2; c2=c1+1; printf(“%c”,c2); 输出结果是B知识点二getchar函数和putchar函数分别用来输入字符和输出字符。例1 从键盘上输入一个字符保存在ch中。 char ch;ch=getchar();例2 char c1=A, c2; c2=c1+1; putchar(c2); 输出结果是B。例3 输出一个回车换行符。 putchar(n);知识点三字符程序实例例1 从键盘上输入一个大写字符和一个整数N(1-9),按照下列规则输出加密字符和解密字符。加密规则: 字符向后移N位。例如N=3时,A变成D,Z变成C。 解密规则: 字符向前移N位。 例如N=
27、3时,A变成X,Z变成W。#includemain() char ch,ch1,ch2; int n; printf(请输入一个大写字符:n);scanf(%c,&ch); printf(请输入n值(1-9):n); scanf(%d,&n); if(ch+nZ) ch1=ch+n-26; else ch1=ch+n; if(ch-nA) ch2=ch-n+26; else ch2=ch-n; printf(加密字符是%cn,ch1); printf(解密字符是%cn,ch2); 例2 从键盘上输入一串字符,最后以!为结束标志。分别 统计大写字母,小写字母、数字出现的次数。#includema
28、in()char ch;int n1=0,n2=0,n3=0;printf(“请输入一串字符以!结束:n”); ch=getchar(); while(ch!=!) if(ch=A & ch=a & ch=0 & ch=9) n3+; ch=getchar(); printf(大写字母出现次数是%dn,n1); printf(小写字母出现次数是%dn,n2); printf(“数字出现次数是%dn,n3);练习题1 从键盘上输入一个字符,输出对应的大写或小写。2 从键盘上输入一串字符,最后以!为结束标志。输出 字母c出现的次数。(不区分大小写)第六章 数组第1课知识点一定义一维数组格式: 类型
29、名 数组名一维上界例1 定义一个包含4个整数的数组a int a4;例2 定义一个包含3个双精度数的数组b double b3;注意: C语言中数组的下界从0开始计数。例如: a4的4个元素分别为a0、a1、a2、a3知识点二一维数组的初始化用一对大括号将数组的初值括起来。例1 int a3=1, 2, 3; 此例中a0值为1、a1值为2、a2值为3例2 int a5=0; 此例中数组a的全部元素值均为0例3 int a3=1, 2, 3, 4; 此例中由于初值个数多于数组元素个数,所以非法。例4 int a =0, 0, 0, 0; 此例中省略数组元素个数,初值为4个0等价于int a4=0
30、;注意: 数组名是一个常量值,不能对它赋值。例如: int a3; a=5; 此语句非法,应改为a0=5; 知识点三一维数组应用例1 从键盘上输入10个整数,输出最大数和最小数。#includemain() int a10,i,max,min; printf(请输入10个整数:n);for(i=0;i=9;i+) scanf(%d,&ai); max=a0; min=a0;for(i=1;imax) max=ai; if(aimin) min=ai; printf(最大数是%dn,max); printf(最小数是%dn,min);例2 斐波数列的定义如下: 1、1、2、3、5、8、13、 编
31、程输出斐波数列的第40项值。#includemain() long a40;int i; a0=1; a1=1;for(i=2;i=39;i+) ai=ai-1+ai-2; printf(%ld,a39);练习题1 从键盘上输入10个整数,输出其中完全平方数之和。2 从键盘上输入10个整数,输出和平均数最接近的数。第2课知识点一定义二维数组格式: 类型名 数组名一维上界二维上界例1 定义一个2行2列的整型数组aint a22;此例中数组a共有4个元素,分别是a00、a01、a10、a11。例2 定义一个4行4列的整型矩阵a int a44;二维数组看成一维数组例如: a34看成由a0、a1、a
32、2组成的一维数组,每个元素又是由4个元素组成的一维数组。注意: a0、a1、a2不是元素,而是数组每行首地址。知识点二二维数组的初始化用嵌套的大括号将数组初值括起来。例1 int a43= 1,2,3, 4,5,6, 7,8,9, 10,11,12 ;例2 int a43= 1,2, 4,5, 7, 10 ;此例中系统自动给空缺的地方补0例3 int a43= 1,2, 4,5 ;系统自动给后面的行补初值0例4 int a43=1, 2, 4, 5;此例中数组a的第一行中元素和第二行的第一个元素依次为1,2,4,5其余全部为0知识点三定义二维数组大小例1 int a 3= 1,2,3, 4,5
33、, 6, 8 ; 有4个行花括号,因此说明是4行3列。例2 int a 3=1, 2, 3, 4, 5; 这种方式计算规则:1)第二维数值能被初值个数整除 第一维数=商数2)第二维数值不能被初值个数整除 第一维数=商数+1因此上例中表示一个2行3列数组。知识点四二维数组应用例1 从键盘上输入5个学生3门课程的成绩,分别计算每个学生的平均分和每门课程的平均分。#include#define M 5#define N 3main() int aMN,i,j,sum; printf(请输入15个分数(0-100):n); for(i=0;i=M-1;i+) for(j=0;j=N-1;j+) sca
34、nf(%d,&aij); printf(每个学生的平均分n); for(i=0;i=M-1;i+) sum=0; for(j=0;j=N-1;j+) sum=sum+aij; printf(%4d,sum/N); printf(n); printf(每门课程的平均分n); for(i=0;i=N-1;i+) sum=0;for(j=0;j=M-1;j+) sum=sum+aji; printf(%4d,sum/M); 例2 从键盘上输入一个4行4列整数矩阵,输出左上至右下对角线元素之和。#include#define M 4#define N 4main() int aMN,i,j,sum=0
35、; printf(“请输入16个整数:n”); for(i=0;i=M-1;i+) for(j=0;j=N-1;j+) scanf(%d,&aij); for(i=0;i=M-1;i+) sum=sum+aii;printf(%d,sum);练习题1 从键盘上输入一个4行4列的整数矩阵。输出此矩阵右上至左下对角线元素之和。2 从键盘上输入一个4行4列的整数矩阵。输出此矩阵下半三角形的所有元素之和。3 从键盘上输入一个4行4列的整数矩阵。输出此矩阵最外围元素之和。第七章 指针第1课知识点一定义一级指针格式: 类型名 *变量名例1 定义两个指向整型变量的指针p1和p2。 int *p1, *p2;例2 定义两个整型变