1、 C语言考试复习提纲 桂林电子科技大学 周信东窗体底端 一、对应书中各章考试知识点如下:(注意:带*号章节为重点内容。) 第一章 程序设计基础知识 1.程序设计的基本步骤 2.算法流程图的表示方法 *3.程序的三种基本结构(顺序结构、分支(选择)结构、循环结构) 第二章 C语言概述 1.C语言程序的基本结构。(由一个主函数main()或一个主函数及其他函数组成; 每个函数用{}括起来;每个语句后加“;”。) *2.C语言的标识符及其命名规则 3.C语言的函数分类(主函数、用户自定义函数、库函数)。 4.C程序的开发过程(编辑、连接、运行)。 *第三章 数据类型与
2、运算规则 1.C语言的数据类型。 2.数值数据(整型、实型)的表示。 3.字符数据(字符、字符串)的表示。 4.变量的定义、初始化和赋值。 5.运算符(算术运算、关系运算、逻辑运算)和表达式的书写规则及运算级别。 6.条件运算符和条件表达式的应用。 7.自增/自减运算,逗号运算的应用 8.赋值运算和组合赋值运算的应用 9.混合运算及数据类型转换 第四章 顺序结构程序设计 1.流程控制语句。 2.putchar函数和getchar函数的应用。 *3.printf函数和scanf函数的输入/输出格式及其应用。 *第五章 选择(分支)结构程序设计 1.if~else语句
3、含嵌套)及其应用。 2.控制条件的表示。 3.Switch语句及其应用。 *第六章 循环结构程序设计 1.循环语句的形式和应用(while结构 、do-while结构、 for结构、*二重循环嵌套)。 2.break和continue语句及其应用。 *第七章 数组 1.一维数组的定义、初始化、引用及应用。 2.典型排序算法:冒泡排序法、选择排序法。 3.一维字符数组的定义、初始化、引用及应用 4.字符数组与字符串的应用。 5.常用字符串处理函数。 6.二维数组的定义、初始化、引用及应用。 第八章 函数 *1.函数的定义。 2.函数的返回值。 *3.函数的调用与
4、声明(单向值传递)。 4.全局变量和局部变量的作用域 第九章 指针 1.指针的定义及引用方法。 2.指针作为函数参数 3.通过指针引用一维数组。 4.指针与字符串。 第十章 结构、联合与枚举类型 1.结构的定义、初始化及引用方法。 2.结构数组的应用 3.联合的概念、定义和引用方法。 二、参考例题: 书后各章的习题 三、试题形式: 选择题、填空题、阅读程序(读程序写结果)、编制完整程序 四、典型题目 (一)填空题 1.C语言的运算符可分为以下几类: 算术 运算符、 关系运算符、 逻辑 运算符、赋值运算符、位运算符、逗号运算符等。 2.在C
5、语言中,实型变量可以分为 单精度(float) 型、 双精度(double) 型。 3.____顺序结构__ _、__分支结构__、___循环结构__是结构化程序设计的三种基本结构。 4.若a=3,b=5, 则表达式a>b?a: b++的值是___3________。 5.若有定义:int a=8, b=5, c; 执行语句c = a/b+0.4 ;后,c的值为___1___。 6.在进行关系运算时,凡是结果为真,用1表示,结果为假用0表示。在进行判别时,把__非零_作为真,把_零_作为假。 7.若有定义int a[10]={1,2,3,4,0,4,6};则初始化后
6、a[4]的初值是__0_,a[8]的初值是___0___。 8.若有定义:int a=8, b=5, c; 执行语句c = a/b+0.4 ;后,c的值为___1___。 9.当a=3,b=4,c=5时,写出下列各式的值。 a&&b的值为 1 ,!a&&b的值为 0 ,a||c的值为 1 ,!a||c的值为 1 。 10.若有定义int a[10]={1,2,3,4,0,4,6};则初始化后,a[4]的初值是__0__,a[8]的初值是___0___。 11.下面程序的功能是 : 输出 100 以内能被 3 整除且个位数为 6 的所有整数 , 请填空。 #inc
7、lude
8、56.1); printf(“(4) %14f\n”,pi); printf(“(5) %e\n”,568.1); printf(“(6) %14e\n”,pi); printf(“(7) %g\n”,pi); printf(“(8) %12g\n”,pi); } 结果: (1) 10 (2) □□□□10 (□表示空格) (3) 56.100000 (4) □□□□□□3.141600 (5) 5.68100e+02 (6) □□□3.14160e+00 (7) 3.1416 (8) □□□□□□3.1416
9、
13.下面程序的运行结果是 s=254 。
#include
10、
while((ch=getchar())!=‘#’)
switch(ch)
{
case ‘a’:
case ‘h’:
default: v1++;
case ‘o’: v2++;
}
printf(“%d,%d\n”,v1,v2);
}
15.以下程序功能为求1!+2!+3!+… +10!,请填空将程序补充完整。
#include
11、 n++)
{
t = t*n ;
s = s+t ;
}
printf("1!+2!+3!+。。。+10!=%f", s);
}
16. 以下程序求:sum=1/2+1/4+1/6+1/8+…….前10项之和并输出和。填空完成该程序。
#include
12、1= f1+2 ;} printf(“sum=%f\n”, sum ) ; } (二)选择题 1.一个c语言程序的执行是从( A )。 A、本程序的main函数开始,到main函数结束 B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C、本程序的main函数开始,到本程序文件的最后一个函数结束 D、本程序文件的第一个函数开始,到本程序main函数结束 2.C语言规定:在一个源程序中,main函数的位置 C 。 A) 必须在最开始
13、 B) 必须在系统调用的库函数的后面 C) 可以任意 D) 必须在最后 3.以下叙述不正确的是 D 。 A) 一个C源程序可由一个或多个函数组成 B) 一个C源程序必须包含一个main函数 C) C程序的基本组成单位是函数 D) 在C程序中,注释说明只能位于一条语句的后面 4.以下选项中合法的用户标识符是( )。 A) long B) _2Test C) 3Dmax D) A.dat 5.可用作C++语言用户标识符的一组标识符是( )。 A)void define +WORD B)a3_b3 _123
14、 YN C)for -abc Case D)2a DO sizeof 6.以下所列的C语言常量中,正确的整型常量是:( ) A)123.0 B)-456 C)789,000 D)'\72' 7.以下选项中不合法的实型常量是( B ) A、 2.607E-1 B、0.8103*12 C、-77.77 D、456e-2 8.以下选项中不合法的用户标识符是 ( C ) A、_123 B、printf C、A$ D、Dim 9.若变量已正确定义并赋值,符合
15、C语言语法的表达式是( B ) A、a=a+7; B、a=7+b+c,a++ C、int(12.3%4) D、a=a+7=c+b 10.若x、i、j和k都是int型变量,则执行下面表达式后x的值为 C 。 x=(i=4,j=16,k=32) A)4 B)16 C)32 D)52 11.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是 B 。 A)7 B)8 C)6 D)2 12.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 C 。 A) 必须为字母 B) 必须为下划线
16、 C) 必须为字母或下划线 D) 可以是字母、数字和下划线中任一种字符 13.存储以下数据,占用存储字节最多的是( )。 A)0 B)'0' C)"0" D)0.0 14.若有定义:int a=7;float x=2.5,y=4.7;;则表达式x+a%3*(int)(x+y)%2/4的值是( A )。 A、2.500000 B、2.750000 C、3.500000 D、0.000000 15.以下表达式为真时不能表示A为奇数的表达式是:( C ) A) A%2==1 B) !(A%2==0
17、) C) !(A%2) D) A%2 16.以下能正确地定义变量a,b和c并为它们赋初值5的语句是:( A ) A) int a=5,b=5,c=5; B) int a,b,c=5; C) a=5,b=5,c=5; D) int a=b=c=5; 17.C语言中要求运算对象必须是整型的运算符是:( D ) A) / B) ++ C) != D) % 18.下面四个选项中,均是合法整型常量的选项是 A 。 A) 160 -0xffff 011 B) -0xcdf 01a 0xe C) -0
18、1 986,012 0668 D) -0x48a 2e5 0x 19.下面四个选项中,均是合法浮点数的选项是 B 。 A) +1e+1 5e-9.4 03e2 B) -.60 12e-4 -8e5 C) 123e 1.2e-.4 +2e-1 D) -e3 .234 5.e-0 20.下面四个选项中,均是合法转义字符的选项是 A 。 A) ‘\’’ ‘\\’ ‘\n’ B) ‘\’ ‘\017’ ‘\”’ C) ‘\018’ ‘\f’ ‘xab’ D) ‘\\0’ ‘\101’ ‘x1f’ 21.若有代数式,则不正确的C语言表达式是
19、C 。 A) a/b/c*e*3 B) 3*a*e/b/c C) 3*a*e/b*c D) a*e/c/b*3 22.根据定义和数据的输入方式,输入语句的正确形式为 B 。 已有定义:float f1,f2; 数据的输入方式:4.52 3.5 A) scanf(“%f,%f”,&f1,&f2); B) scanf(“%f%f”,&f1,&f2); C) scanf(“%3.2f %2.1f”,&f1,&f2); D) scanf(“%3.2f%2.1f”,&f1,&f2); 23.c2为字符型,执行语句“c2= 'a'+'6'-'3';
20、后,c2的值为:( ) A) d B) 100 C) 不确定的值 D) c 24.以下能正确地定义变量a,b和c并为它们赋初值5的语句是:( ) A) int a=5,b=5,c=5; B) int a,b,c=5; C) a=5,b=5,c=5; D) int a=b=c=5; 25.以下表达式为真时不能表示A为奇数的表达式是:( ) A) A%2==1 B) !(A%2==0) C) !(A%2) D) A%2 26.putchar函数可以向终端输出一个( D
21、 )。 A) 整型变量的值 B) 实型变量的值 C) 字符串 D) 字符或字符型变量的值 27.有输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c);为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应当是( D )。 A) 132<回车> B) 1,3,2<回车> C) a=1 b=3 c=2<回车> D) a=1,b=3,c=2<回车> 28.以下程序的输出结果是( D ) main() { int a=2,b=3; printf(“a=%%d,b=%%d\n”,a,b); }
22、A、a=%2,b=%f B、a=2,b=5 C、a=%%d,b=%%d D、a=%d,b=%d 29.为表示关系 x≥y≥z, 应使用的C语言表达式是( A ) A、(x>=y)&&(y>=z) B、(x>=y)AND(y>=z) C、(x>=y>=z) D、(x>=y)&(y>=z) 30.若有以下定义:int k=7,x=12;,则能使值为3的表达式是( D ) A、x%=k-(k%5) B、x%=(k%=5) C、 x%=(k-k%5) D、(x%=k)-(k%=5) 31.假定w、x
23、y、z、m均为int型变量,有如下程序段:
w=1; x=2; y=3; z=4;
m=(w
24、c<='z') 33.以下选项中,与k=n++完全等价的表达式是( )。 A) k=n,n=n+1 B) n=n+1,k=n C) k=++n D) k+=n+1 34.以下程序的输出结果是( A )。 void main(void) { int a = 4, b = 5, c = 0, d; d = !a && !b || !c; printf("%d\n", d); } A) 1 B) 0 C) 非0的数 D) –1 35.下面有关for循环的正
25、确描述是 D 。 A) for循环只能用于循环次数已经确定的情况 B) for循环是先执行循环体语句,后判断表达式 C) 在for循环中,不能用break语句跳出循环体 D) for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 36.对for(表达式1;;表达式3)可理解为 B 。 A)for(表达式1;0;表达式3) B)for(表达式1;1;表达式3) C)for(表达式1; 表达式1;表达式3) D)for(表达式1; 表达式3;表达式3) 37.以下不是无限循环的语句为 A 。 A) for(y=0,x=1;x>
26、y;x=i++) i=x B) for(;;x++=i); C) while(1) { x++; } D) for(i=10;;i--) sum+=i; 38.下列程序段不是死循环的是 C 。 A) int i=100; while(1) { i=i%100+1; if(i>100) break; } B) for(;;); C) int k=0; do{ ++k; } While(k>=0); D) int s=36; while(s); --s; 39.下面程序的运行结果是:( C ) int x=3; do { pri
27、ntf("%3d", x-=2); }while(!(--x)); A. 1 B. 3 0 C. 1 -2 D. 死循环 40.对下述程序段描述正确的是:( B ) int k=0; while (k=1) k++; A. 有语法错误,不能执行 B. 循环是无限循环 C. 循环体语句一次也不执行 D. 程序体语句执行一次 41.以下程序中,while循环的循环次数是( D )。 main() { int i=0; while(i<10) { if(i<1)
28、 continue; if(i==5) break; i++; } } A、1 B、10 C、6 D、死循环,不能确定次数 42.以下能对一维数组a进行正确初始化的语句是( C )。 A、int a[10]=(0,0,0,0,0); B、int a [10]={}; C、int a[]={10,12,56}; D、int a[]={‘10*1’}; 43.若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大
29、小是( B )。 A、2 B、3 C、4 D、无确定值 44.若有说明:int a[3][4];则对a数组元素的正确引用是 C 。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) 45.以下能对二维数组a进行正确初始化的语句是 B 。 A) int a[2][]={{1,0,1},{5,2,3}}; B) int a[][3]={{1,2,3},{4,5,6}}; C) int a[2][4]={{1,2,3},{4,5},{6}}; D) int a[][3]={{1,0,1},{}
30、{1,1}}; 46.c语言中while和do-while循环的主要区别是( A ) A、do-while的循环体至少无条件执行一次 B、while的循环控制条件比do-while的循环控制条件严格 C、do-while允许从外部转到循环体内 D、do-while的循环体不能是复合语句 47.以下程序的输出结果是( B ) void sub(int x, int y, int z) { z=y-x; printf("%d,%d,%d ",x,y,z); } main() { int a=10,b=5,c=1
31、 sub(c+10,b,a); printf("%d,%d,%d\n",a,b,c); } A、10,5,1 B、11,5,-6 10,5,1 C、11,5,1 D、11,5,-6 -6,5,11 48.以下程序执行后sum的值是( B )。 void main(void) { int i , sum=0; for (i=1;i<6;i++) sum+=i; printf("%d\n",sum); } A) 0 B) 15 C) 5 D) 不确定 49.存储以下数据,占用存储字节最多
32、的是( )。 A)0 B)'0' C)"0" D)0.0 50.C语言中要求运算对象必须是整型的运算符是:( ) A) / B) ++ C) != D) % 51.以下正确的说法是( )。 A)用户调用标准库函数前,必须重新定义 B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C)系统不允许用户重新定义标准库函数 D)用户调用标准库函数前,不必使用预编译命令将该函数所在文件包括到用户源文件中 52.putchar函数可以向终端输出一个(
33、 )。
A) 整型变量的值 B) 实型变量的值
C) 字符串 D) 字符或字符型变量的值
53.以下程序的输出结果是( )。
main( )
{
int a=1,b=2,c=3;
printf("%d",c>b>a);
}
A)2 B)1 C)0 D)3
54.执行以下程序后的输出结果是( )。
#include
34、0)) a ++; printf("i=%d, j=%d, a=%d\n", i, j, a); } A) i=0, j=0, a=6 B) i=1, j=1, a=7 C) i=1, j=0, a=7 D) i=0, j=1, a=7 55.以下叙述中正确的是( )。 A) 由于do---while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B) do---while循环由do开始,用while结束,在while(表达式)后面不能写分号 C) 在do----while循环体中,一定要有能使whil
35、e后面表达式的值变为零的操作 D) do---while循环中,根据情况可以省略while 56.对两个数组a和b进行如下初始化 char a[]="ABCDEF"; char b[]={'A', 'B', 'C', 'D', 'E', 'F'}; 则以下叙述正确的是( D )。 A) a与b数组完全相同 B) a与b长度相同 C) a与b中都存放字符串 D)a数组比b数组长度大 57.有两个字符数组a,b,则以下正确的输入格式是:( ) A) gets(a,b); B) scanf("%s%s",a,b);
36、
C) scanf("%s%s",&a,&b); D) gets("a"),gets("b");
58.执行语句for (i=1; i++<4; );后变量i的值是:( )
A) 3 B) 4 C) 5 D) 不定
59.以下程序的输出结果是( )。
#include
37、i, a = 0; for (i=0; i<5; i++) a += f(); printf("%d\n", a); } A) 1 B) 0 C) 非0的数 D) –1 60.以下叙述中不正确的是_______ A) 在不同的函数中可以使用相同名字的变量 B) 函数中的形式参数是局部变量 C) 在一个函数内定义的变量只能在本函数范围内有效 D) 在一个函数内的复合语句中定义的变量在本函数范围内有效 61.有以下的程序 void fun(int a,int b,int c) { a=456;b=567;c=678;
38、} main( ) { int x=10,y=20,z=30; fun(x,y,z); printf("%d,%d,%d",x,y,z); } 其输出结果为 。 A) 30,20,10 B) 10,20,30 C) 456,567,678 D) 678,567,456 62.以下程序运行后,输出结果是 。 func(int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return(m); } main( )
39、{
int k=4,m=1,p;
p=func(k,m);printf("%d,",p);
p=func(k,m);printf("%d\n",p);
}
A) 8,15
B) 8,16
C) 8,17
D) 8,8
63.下列程序的输出结果是________。
#include
40、
int k;
for(k=0;k<3;k++)
f1( ),f2( );
}
A) 1,1,1,1,1,1
B) 1,1,1,1,2,3
C) 1,1,2,2,3,3
D) 1,1,2,1,3,1
64.以下程序执行时的输出结果为_______。
#include
41、k+p1)); } A) age B) ga C) language 65.下列程序段的输出结果是_______。 A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2 void fun(int *x, int *y) { printf("%d %d", *x, *y); *x=3; *y=4; } main() { int x=1,y=2; fun(&y,&x); printf("%d %d",x, y); } 66.下列程序的
42、输出结果是_______。 main() { char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf("%d",*--p); } A) 非法 B) a[4]的地址 C) 5 D) 3 67.下列程序的运行结果是________。 void fun(int *a, int *b) { int *k; k=a; a=b; b=k; } main() { int a=3, b=6, *x=&a, *y=&b; fun(x,y); printf("%d %d", a, b);
43、 } A) 6 3 B) 3 6 C) 编译出错 D) 0 0 68.下面程序的输出结果是________。 main() { int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p; p=a; printf("%d\n",*p+9); } A) 0 B) 1 C) 10 D) 9 69.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是________。 A) i=*p; B) *p=*&j; C) i=&j; D) i=**p; 70.有以下结构体
44、定义: struct example { int x; int y; }v1; 则正确的引用或定义是 。 A) example.x=10 B) example v2; v2.x=10; C) struct v2; v2.x=10; D) struct example v2={10}; 71.对于如下结构体定义,若对变量person的出生年份进行赋值,正确的赋值是 。 struct date { int year,month,day; }; struct worklist { char name[20]
45、 char sex; struct date birth; }person; A) year=1976 B) birth.year=1976 C) person.birth.year=1976 D) person.year=1976 72.根据下述定义,可以输出字符'A'的语句是 。 struct person { char name[11]; struct { char name[11]; int age; }other[10]; }; struct person m
46、an[10]={ {"Jone",{"Paul",20}},{"Paul",{"Mary",18}}, {"Mary",{"Adam",23}},{"Adam",{"Jone",22}} }; A) printf("%c",man[2].other[0].name[0]); B) printf("%c",other[0].name[0]); C) printf("%c",man[2].(* other[0])); D) printf("%c",man[3].name); 73.若有以下程序段: struct st { int n; struct st *ne
47、xt; }; struct st a[3]={5,&a[1],7,&a[2],9, '\0'} ,*p=a; 则值为6的表达式为 。 A) p++->n B) p->n++ C) (*p).n++ D) ++p->n (三)编程题 1.编写程序,从键盘输入n的值,求出表达式1+22+32+...+n2的值。(10分) 【参考程序】 main() { int n, i, sum=0; scanf("%d",&n); for (i=1; i<=n; i++) sum += i*i; printf("
48、1+2^2+3^2+...+%d^2=%d\n", n, sum); } 0<x<1 1≤x<2 2≤x<3 3≤x<4 2.函数求解,输入x的值,输出y的值。(10分) 【参考程序】 main() { float x,y; scanf("%f",&x); if ((x<=0)||(x>=4)) printf("输入数据超出处理范围!\n"); else { if (x<1) y=x; else if (x<2) y=x-1; else if (x<3) y=x*x-2*x-1; else y=x*x*x+4*x-17;
49、 printf("y=%f\n",y); } } 3.从键盘中输入若干个学生的期末成绩,当输入为负数时结束输入。统计并输出这若干个学生的总分和平均分。(15分) 【参考程序】 main() { int n=0; float score,sum=0,average; printf("请输入学生的期末成绩,输入为负数时结束:\n"); do { scanf("%f", &score); if (score<0) break; else if (score>100) { printf("输入错!分数应为0~100。请重输。
50、\n"); continue; } sum += score; n++; } while (score>0); average = sum/n; printf("总分=%f,平均分=%f\n", sum, average); } 4.求100-200间的所有素数。(12分) 【参考程序】 #include "stdio.h" #include "math.h" main() { int m,i,n=0; for (m=101; m<=200; m=m+2) { if (n%10==0) printf("\n"); fo






