第一篇:C语言章节复习题
一、选择题:
1、一个C程序的执行是从(A)。A本程序的main函数开始,到main函数结束
B本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C本程序的main函数开始,到本程序文件的最后一个函数结束 D本程序文件的第一个函数开始,到本程序main函数结束
2、在 C 语言中,每个语句必须以(D)结束。
A.回车符 B.冒号 C.逗号 D.分号
3、C 语言规定:在一个源程序中,main函数的位置(C)。A.必须在最开始 B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后
4、一个C 语言程序是由(B)。
A.一个主程序和若干子程序组成 B.函数组成 C.若干过程组成 D.若干子程序组成
5、下列说法中错误的是(D)。
A.主函数可以分为两个部分:主函数说明部分和主函数体 B.主函数可以调用任何非主函数的其他函数 C.任何非主函数可以调用其他任何非主函数
D.程序可以从任何非主函数开始执行
6、用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将(C)。A.生成可执行目标文件 B.生成目标文件 C.输出运行结果 D.自动保存源文件
二、填空题:
1、C 语言只有 32 个关键字和 9 种控制语句。
2、每个源程序有且只有一个 main 函数,系统总是从该函数开始执行C语言程序。
3、C 语言程序的注释可以出现在程序中的任何地方,它总是以 * 符号作为开始标记,以 */ 符号作为结束标记。
4、C 语言中,输入操作是由库函数 scanf 完成的,输出操作是由库函 数 printf 完成的。
5、系统默认的C 语言源程序文件的扩展名是.c,经过编译后生成的目标文件的扩展名是.obj,经过连接后生成的可执行文件的扩展名是.exe。
6、C 语言的标识符只能由字母、数字和 下划线 三种字符组成。
第三章数据类型、运算符和表达式
一、选择题:
1、以下选项中,不正确的 C 语言浮点型常量是(C)。A.160.B.0.12 C.2e4.2 D.0.0
2、以下选项中,(D)是不正确的 C 语言字符型常量。A.'a' B.'x41' C.'101' D.“a”
3、在 C 语言中,字符型数据在计算机内存中,以字符的(C)形式存储。A.原码 B.反码 C.ASCII 码 D.BCD码
4、若x、i、j和k都是int型变量,则计算下面表达式后,x的值是(C)。x=(i=4,j=16,k=32)
A.4 B.16 C.32 D.52
5、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B)。A.算术运算、赋值运算、关系运算 B.算术运算、关系运算、赋值运算 C.关系运算、赋值运算、算术运算 D.关系运算、算术运算、赋值运算
6、若有代数式,则不正确的C语言表达式是(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
7、表达式!x||a==b 等效于(D)。A.!((x||a)==b)B.!(x||y)==b C.!(x||(a==b))D.(!x)||(a==b)
8、设整型变量 m,n,a,b,c,d 均为1,执行(m=a>b)&&(n=c>d)后, m,n 的值是(A)。
A.0,0 B.0,1 C.1,0 D.1,1
9、设有语句 int a=3;,则执行了语句 a+=a-=a*=a;后,变量 a 的值是(B)。A.3 B.0 C.9 D.-12
10、在以下一组运算符中,优先级最低的运算符是(D)。A.* B.!= C.+ D.=
11、设整型变量 i 值为2,表达式(++i)+(++i)+(++i)的结果是(B)。A.6 B.12 C.15 D.表达式出错
12、若已定义 x 和 y为double 类型,则表达式 x=1,y=x+3/2 的值是(C)。A.1 B.2 C.2.0 D.2.5
13、sizeof(double)的结果值是(A)。A.8 B.4 C.2 D.出错
14、设a=1,b=2,c=3,d=4,则表达式:a
15、设a 为整型变量,不能正确表达数学关系:1010 && a<15 D.!(a<=10)&&!(a>=15)
16、设 f是实型变量,下列表达式中不是逗号表达式的是(D)。
A.f= 3.2, 1.0 B.f>0, f<10 C.f=2.0, f>0 D.f=(3.2, 1.0)
17、表达式18/4*sqrt(4.0)/8值的数据类型是(C)。A.int B.float C.double D.不确定
18、已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句 C2=’A’+’6’-‘3’;后c2中的值是(A)。A.D B.68 C.不确定的值 D.C
19、以下用户标识符中,合法的是(B)。A.int B.nit C.123 D.a+b 20、C 语言中,要求运算对象只能为整数的运算符是(A)。A.% B./ C.> D.*
21、若有说明语句:char c='72';则变量c在内存占用的字节数是(A)。A.1 B.2 C.3 D.4
22、字符串“ABC”在内存占用的字节数是(B)。A.3 B.4 C.6 D.8
23、要为字符型变量 a赋初值,下列语句中哪一个是正确的(B)。A.char a=“3”;B.char a=’3’;C.char a=%;D.char a=*;
24、下列不正确的转义字符是(C)。A.B.' C.074 D.
二、填空题:
1、C 语言中的逻辑值“真”是用 1 表示的,逻辑值“假”是用 0 表示的。
2、若x和n都是int型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值为 0。
3、设 c='w',a=1,b=2,d=-5, 则表达式 'x'+1>c, 'y'!=c+2,-a-5*b<=d+1, b==a=2的值分别为 1、0、1、1。
4、设 float x=2.5,y=4.7;int a=7;,表达式 x+a%3*(int)(x+y)%2/4的值为 2.5。
5、判断变量 a、b 的值均不为 0 的逻辑表达式为a!=0&&b!=0。
6、求解赋值表达式 a=(b=10)%(c=6),表达式值、a、b、c 的值依次为 4,4,10,6。
7、求解逗号表达式 x=a=3,6*a 后,表达式值、x、a 的值依次为18,3,3。
8、数学式a/(b*c)的 C 语言表达式 a/b/c。
三、编程题:
1、设长方形的高为 1.5,宽为 2.3,编程求该长方形的周长和面积。
2、编写一个程序,将大写字母 A转换为小写字母 a。1. main(){float x=1.5,y=2.3;printf(“area is %6.2fn”,x*y);} 2.main(){char c=’A’;printf(“%d”,c+32);}
1.单项选择题
(1)int a[4]={5,3,8,9};其中 a[3]的值为()。D A.5 B.3 C.8 D.9(2)以下 4 个字符串函数中,()所在的头文件与其他 3 个不同。A A.gets B.strcpy C.strlen D.strcmp(3)以下 4 个数组定义中,()是错误的。D A.int a[7];B.#define N 5 long b[N];C.char c[5];D.int n,d[n];(4)对字符数组进行初始化,()形式是错误。B A.char c1[ ]={'1', '2', '3'};B.char c2[ ]=123;C.char c3[ ]={ '1', '2', '3', ' '};D.char c4[ ]=“123”;(5)在数组中,数组名表示()。A A.数组第 1 个元素的首地址 B.数组第 2 个元素的首地址 C.数组所有元素的首地址 D.数组最后 1 个元素的首地址
(6)若有以下数组说明,则数值最小的和最大的元素下标分别是()。B int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12};A.1,12 B.0,11 C.1,11 D.0,12(7)若有以下说明,则数值为 4 的表达式是()。D int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12};char c=’a’, d, g;A.a[g-c] B.a[4] C.a['d'-'c'] D.a['d'-c](8)设有定义:char s[12] = “string”;则printf(“%dn”,strlen(s));的输出是()。A A.6 B.7 C.11 D.12(9)设有定义:char s[12] = “string”;则printf(“%dn ”, sizeof(s));的输出是()。D A.6 B.7 C.11 D.12(10)合法的数组定义是()。A A.char a[ ]= “string ”;B.int a[5] ={0,1,2,3,4,5};C.char a= “string ”;D.char a[ ]={0,1,2,3,4,5}(11)合法的数组定义是()。D A.int a[3][ ]={0,1,2,3,4,5};B.int a[ ][3] ={0,1,2,3,4};C.int a[2][3]={0,1,2,3,4,5,6};D.int a[2][3]={0,1,2,3,4,5,};(12)下列语句中,正确的是()。D A.char a[3][ ]={'abc', '1'};B.char a[ ][3] ={'abc', '1'};C.char a[3][ ]={'a', “1”};D.char a[ ][3] ={ “a”, “1”};(13)下列定义的字符数组中,输出 printf(“%sn”, str[2]);的输出是()。C static str[3][20] ={ “basic”, “foxpro”, “windows”};A.basic B.foxpro C.windows D.输出语句出错(14)下列各语句定义了数组,其中哪一个是不正确的()。C A.char a[3][10]={“China”,“American”,“Asia”};B.int x[2][2]={1,2,3,4};C.float x[2][ ]={1,2,4,6,8,10};D.int m[][3]={1,2,3,4,5,6};(15)数组定义为 int a[3][2]={1,2,3,4,5,6},值为6的数组元素是()。B A.a[3][2] B.a[2][1] C.a[1][2] D.a[2][3](16)下面的程序中哪一行有错误()。D #include
(17)下面哪一项是不正确的字符串赋值或赋初值的方式()。C A.char *str;str=“string”;B.char str[7]={'s','t','r','i','n','g'};C.char str1[10];str1=“string”;D.char str1[]=“string”,str2[]=“12345678”;(18)若有以下说明和语句,则输出结果是哪一项()。C(strlen(s)为求字符串s的长度的函数)char s[12]=“a book!”;printf(“%d”,strlen(s));A.12 B.8 C.7 D.11(19)若有以下说明和语句,则输出结果是()。B(strlen(s)为求字符串s的长度的函数)char sp[]=“tv0willn”;printf(“%d”,strlen(sp));A.14 B.3 C.9 D.字符串中有非法字符(20)若有以下说明和语句,则输出结果是()。C char str[]=“"c:abc.dat”“;printf(”%s“,str);A.字符串中有非法字符 B.”c:abc.dat“ C.”c:abc.dat“ D.”c:abc.dat“
2.填空题
(1)C 语言中,数组的各元素必须具有相同的,元素的下标下限为,下标必须是正整数、0、或者。但在程序执行过程中,不检查元素下标是否。数据类型,0,符号常量,越界
(2)C 语言中,数组在内存中占一片 的存储区,由 代表它的首地址。数组名是一个 常量,不能对它进行赋值运算。连续,数组名,地址(3)执行 static int b[5], a[ ][3] ={1,2,3,4,5,6};后,b[4] =,a[1][2] =。0,6(4)设有定义语句 static int a[3][4] ={{1},{2},{3}};则 a[1][0]值为,a[1][1] 值为,a[2][1]的值为。2,0,0(5)如定义语句为 char a[ ]= ”windows“,b[ ]= ”95“;,语句 printf(”%s“,strcat(a,b));的输出结果为。Windows95(6)根据以下说明,写出正确的说明语句:men是一个有10个整型元素的数组。
step是一个有4个实型元素的数组,元素值分别为1.9,-2.33, 0, 20.6。
grid是一个二维数组,共有4行,10列整型元素。int mesh[10];float step[4] = {1.9,-2.33, 0, 20.6};int grid[4][10];(7)array是一个一维整形数组,有10个元素,前6个元素的初值是9,4,7,49,32,-5,正确的说明语句为:
。该数组下标的取值范围是从___到___(从小到大)。用scanf函数输入数组的第二个元素表示为:。用赋值语句把39存入第一个元素表示为:。把第六个和第四个元素之和存入第一个元素表示为:。
int array[10] = {9,4,7,49,32,-5};0 9 scanf(”%d“,&array[1]);array[0] = 39;array[0]= array[5]+array[3];(8)写出以下初始化数组的长度:①int chn[3];数组chn的长度为___。②float isa[]={1.0,2.0,3.0,4.0,5.0};数组isa的长度为___。③int doom[8];数组doom的长度为___。④float pci[4][2];数组pci的长度为___。
⑤int ast[3][3];数组ast的长度为___。⑥int att[3][4];数组att的长度为___。⑦float dell[][3]={{1,4,7},{2,5},{3,6,9}};数组dell的长度为___。6 20 16 32 18 24 36(9)若有以下整型的a数组,数组元素和它们得值如下所示: 数组元素: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 元素的值: 9 4 12 8 2 10 7 5 1 3 ①请写出对该数组的说明,并赋以上初值。
②该数组的最小下标值为___,最大下标值为___。
③写出下面各式的值:a[a[9]]的值为___ ;a[a[4]+a[8]]的值为___。int a[10]={9,4,12,8,2,10,7,5,1,3};0 9 8 8(10)字符串”abn 12/“"的长度为___。10
3.判断题
(×)(1)C允许对数组的大小作动态定义,即可用变量定义数组的大小。(×)(2)字符数组不要求它的最后一个字符为‘ ’,甚至可以不包含‘ ’。(×)(3)数组定义 int a[10];也可以写成 int a(10)。(√)(4)在对全部数组元素赋初值时,可以不指定数组长度。(×)(5)定义s为5×6(5行6列)的数组可写成 float a[5,6];(√)(6)数组定义 int a[10];表示数组名为a,此数组有10个元素。(×)(7)数组定义 int a[10];表示数组名为a,此数组有10个元素,第10个元素为a[10]。
(√)(8)static char c[]={“a book”};与static char c[]=“a book”;等价。
(×)(9)static char c[]={'a' ,' ','b','o','o','k',' '};与 static char c[]={'a' ,' ' ,'b','o','o','k'};等价。(×)(10)设已有说明:static char c1[10],c2[10];下面程序片段是合法的。c1={“book”};c2=c1;
4.程序填空题
(1)输入 20 个数,输出它们的平均值,输出与平均值之差的绝对值为最小的数组元素。请填空。#include
for(i=0;i<20;i++)pjz+=a[i];
s=fabs(a[0]-pjz);for(i=1;i<20;i++)if(fabs(a[i]-pjz)
(2)以下程序以每行 10个数据的形式输出 a 数组,请填空。void main(){ int a[50],i;printf(”输入50个整数:“);for(i=0;i<50;i++)scanf(”%d“,);for(i=1;i<=50;i++){ if()printf(”%3dn“ ,);printf(”%3d“,a[i-1]);} } &a[i] i%10==0 a[i-1]
(3)下面程序的功能是输出数组 s 中最大元素的下标,请填空。void main(){ int k, p;int s[ ]={1,-9,7,2,-10,3};for(p=0,k=p;p<6;p++)if(s[p]>s[k]);printf(”%dn“ ,k);} k=p
(4)这个程序输入了20个数存放在一个数组中,并且输出其中最大者与最小者、20个数的和及它们的平均值。请填空。void main(){ char array;int max,min,average,sum;int i;for(i=0;i<;i++){ printf(”请输入第%d个数:“,i+1);scanf(”%d“,);} max=array[0];min=array[0];for(i=0;i<=;i++){ if(max
5.阅读程序,分析程序的功能。(1)#include
(2)#include (3)#include (4)阅读程序,写出运行结果 #include (5)阅读程序,写出运行结果。#include (6)阅读下列程序,写出程序运行的输出结果。#include (7)该程序的运行结果是: min= ,m= ,n= void main(){ float array[4][3]={ {3.4,-5.6,56.7}, {56.8,999.,-.0123}, {0.45,-5.77,123.5}, {43.4,0,111.2} };int i,j;int min;int m,n;min = array[0][0];m=0;n=0;for(i=0;i<3;i++) 。for(j=0;j<4;j++)if(min > array[i][j]){ min = array[i][j];m=i;n=j;} printf(”min=%d,m=%d,n=%dn“,min,m,n);}-5.77 2 1 (8)写出下面这个程序的输出结果: void main(){ char str[]=”ABCDEFGHIJKL“;printf(”%sn“,str);屏幕上显示 printf(”%sn“,&str[4]);屏幕上显示 str[2]=str[5];printf(”%sn“,str);屏幕上显示 str[9]=' ';printf(”%sn“,str);屏幕上显示 } ABCDEFGHIJKL EFGHIJKL ABFDEFGHIJKL ABFDEFGHI (9)读懂下面的程序并填空。void main(){ char str[80];int i=0;gets(str);while(str[i]!=0){ if(str[i]>='a'&&str<='z')str[i]-=32;i++;} puts(str);} 程序运行时如果输入 upcase, 屏幕显示 程序运行时如果输入 Aa1Bb2Cc3, 屏幕显示 UPCASE AA1BB2CC 1.单项选择题 (1)C 语言总是从 函数开始执行。A A.main B.处于最前的 C.处于最后的 D.随机选一个(2)函数在定义时,省略函数类型说明符,则该函数值的类型为。A A.int B.float C.long D.double(2)以下 函数,真正地没有返回值。B A.int a(){int a=2;return(a);} B.void b(){printf(”c“);} C.int a(){int a=2;return a;} D.以上都是(3)在 C 语言中,有关函数的说法,以下正确的是。A A.函数可嵌套定义,也可嵌套调用 B.函数可嵌套定义,但不可嵌套调用 C.函数不可嵌套定义,但可嵌套调用 D.函数不可嵌套定义,也不可嵌套调用 (4)以下函数调用语句中,含有实参的个数为。C fun((2,3),(4,5+6,7));A.1 B.2 C.5 D.6(5)函数调用可以在。D A.函数表达式中 B.函数语句中 C.函数参数中 D.以上都是 (6)被调函数返回给主调函数的值称为。C A.形参 B.实参 C.返回值 D.参数(7),可以不进行函数类型说明。D A.被调函数的返回值是整型或字符型时 B.被调函数的定义在主调函数定义之前时 C.在所有函数定义前,已在函数外预先说明了被调函数类型 D.以上都是(8)被调函数通过 语句,将值返回给主调函数。D A.if B.for C.while D.return(9)被调函数调用结束后,返回到。D A.主调函数中该被调函数调用语句处 B.主函数中该被调函数调用语句处 C.主调函数中该被调函数调用语句的前一语句 D.主调函数中该被调函数调用语句的后一语句 (10)以下对 C语言函数的有关描述中,正确的是。A A.在 C 中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B.C函数既可以嵌套定义又可递归调用 C.函数必须有返回值,否则不能使用函数 D.C程序中有调用关系的所有函数必须放在同一个源程序文件中(11)C 语言中函数的隐含存储类型是。C A.auto B.static C.extern D.无存储类型 (12)能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是。A A.return 这两个数 B.形参用两个元素的数组 C.形参用两个这种数据类型的指针 D.用两个全局变量(13)C语言可执行程序从什么地方开始执行()。C A.程序中第一条可执行语句 B.程序中第一个函数 C.程序中的main函数 D.包含文件中的第一个函数(14)有一个函数原型如下所示,则该函数的返回类型为()。C abc(float x,float y);A.void B.double C.int D.float 2.填空题 (1)变量的作用域主要取决于变量,变量的生存期既取决于变量,又取决于变量。所处的位置,所处的位置,存储类型(2)说明变量时,若省略存储类型符,系统默认其为 存储类别,该存储类别的类型符为:。动态,auto(3)静态型局部变量的作用域是 ,生存期是。它所在的局部,整个程序 (4)函数中的形参和调用时的实参都是数组名时,传递方式为,都是变量时,传递方式为。址传递,值传递 (5)函数的形式参数的作用域为,全局的外部变量和函数体内定义的局部变量重名时,_________变量优先。该函数中,局部 (6)若自定义函数要求返回一个值,则应在该函数体中有一条 语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符。return,void(7)若函数的形式参数是指针类型,则实参可以是 或。指针,数组名 (8)函数的参数为 char *类型时,形参与实参结合的传递方式为。址传递 (9)函数的实参为常量时,形参与实参结合的传递方式为。值传递(10)下面这个函数的功能是求两个整数的积,并通过形参传回结果,请填空。int int int* *result void mul(___x,___y,___result){ ___=x*y;} 3.判断题 (×)(1)函数说明指的是在程序中设定一个函数模块。(√)(2)形参只有在被调用时才分配存储空间。(×)(3)在C的函数中,最好使用全局变量。 (×)(4)在调用函数时,实参传值给形参,调用结束时,形参值传给实参。(√)(5)所有函数定义都是并行的,相互独立的。(×)(6)函数的隐含存储类型是extern。(×)(7)形参可以是常量、变量或表达式。(×)(8)函数调用可以作为一个函数的形参。 (√)(9)C语言规定,实参应与其对应的形参类型一致。(×)(10)定义函数时,形参的类型说明可以放在函数体内。 4.程序填空题 (1)对数组按值从大到小的顺序排序后输出,请填空。#include { t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;} } } sort(a,7)float* p,int n *(p+k)<*(p+j)if(k!=i) (2)下列函数在 n 个元素的一维数组中,找出最大值、最小值并传送到调用函数,请填空。#include B卷 5.写出下列程序运行结果(1)main(){ int i=1,p;p=fun(i,i+1);printf(”%dn“,p);} int fun(int a,int b){ int f;if(a>b)f=1;else if(a==b)f=0;else f=-1;return f;}-1 (2)键盘输入 abcdef (4)#include (5)unsigned fun6(unsigned num){ unsigned k=1;do { k*=num%10;num/=10;} while(num);return k;} void main(){ unsigned n=26;printf(”%dn“, fun6(n));} 12(6)#include (9)以下程序的输出结果是a=___,b=___,c=___。#include A部分(本、专科必做) 一、选择题 1、若有定义:int x,*pb;则以下正确的表达式是(A)A、pb=&x B、pb=x C、*pb=&x D、*pb=*x 2、以下程序的输出结果是(B) A、因变量无定义输出不定值 B、0 C、-1 D、1 #include 3、以下程序的输出结果是(B) A、5,2,3 B、-5,-12,-7 C、-5,-12,-17 D、5,-2,-7 #include 4、以下程序的输出结果是(C)A、4 B、6 C、8 D、10 #include 5、已知指针p的指向(图一)的a[1],则执行语句*p++;后,*p的值是(B)。A、20 B、30 C、21 D、31 a[0] a[1] a[2] a[3] a[4] 10 20 30 40 50(图一) 6、已知指针p的指向(图一)的a[1],则表达式*++p的值是(B)。A、20 B、30 C、21 D、31 7、已知指针p的指向(图一)的a[1],则表达式++*p的值是(C)。A、20 B、30 C、21 D、31 8、以下程序的输出结果是(D)。A、23 B、24 C、25 D、26 #include 9、以下程序的输出结果是(B)。A、运行出错 B、100 C、a的地址 D、b的地址 #include 10、以下程序运行后,输出结果是(D)。 A)8 B)7 C)6 D)5 #include 二、填空题 1、若有定义:char ch;(1)使指针p指向变量ch的定义语句是 char *p=&ch。 (2)若已定义char *p;,使指针p指向变量ch的赋值语句是 p=&ch。 (3)在(1)的基础上,通过指针p给变量ch读入字符的scanf调用语句是 scanf(“%c”,p)。 (4)在(1)的基础上,通过指针p给变量ch赋字符’a’的语句是*p=’a’。 (5)在(1)的基础上,通过指针p用格式输出函数输出ch中字符的语句是printf(“%c”,*p)。 2、以下程序输出的是 C。void main(){ int i=3, j=2;char *a=”DCBA“;printf(”%c%cn“,a[i],a[j]);} 3、以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。 void exchange(int *x, int *y){ int t;t=*y;*y= *x;*x= t;} B部分(本科必做)程序填空: 1、下面程序的输出结果是 A B C D B C D C D D。char b[]=”ABCD“;void main(){ char *chp;for(chp=b;*chp: chp+=2)printf(”%s“,chp);printf(”n“);} 下面是一个字符串连接函数,请补充完整。void mystrcat(char *s1,char *s2){ char *p,*q;for(p=s1;*p;p++);for(q=s2;*q;q++)*p++=*q;*p=’ ’;} 第十一章 结构体与共用体 A部分(本、专科必做) 一、选择题 1、设有如下定义: struct sk {int a;float b;}data,*p;若有p=&data;,则对data中的a域的正确引用是(B)。A)(*p).data.a B)(*p).a C)p->data.a D)p.data.a 2、根据以下定义,能输出字母M的语句是(D)。 A、printf(“%cn”,class[3].name);B、printf(“%cn”,class[3].name[1]);C、printf(“%cn”,class[2].name[1]);D、printf(“%cn”,class[2].name[0]);struct person{char name[9];int age;};struct person class[10]={“John”,17,”Paul”,19,”Mary”,18,”Adam”,16,}; 3、以下程序的输出结果是(D)。A、0 B、1 C、3 D、6 #include 4、若有以下说明及语句,则值为6的表达式是(D)。A、p++->n B、p->n++ C、(*p).n++ D、++p->n struct st{int n;struct st *next;};struct st a[3],*p;a[0].n=5;a[0].next=&a[1];a[1].n=7;a[1].next=&a[2];a[2].n=9;a[2].next=’ ’;p=&a[0]; 5、已知字符0的ASCII码的十进制的值是48,且数组的第0个元素在低位,以下程序的输出结果是(B)。A、39 B、9 C、38 D、8 void main(){ union{int i[2];long k;char c[4];}r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;printf(“%xn”,s->c[0]);} 6、以下程序输出的结果是(C)。A、32 B、16 C、8 D、24 typedef union{long x[2];int y[4];char z[8];}MYTYPE;MYTYPE them;void main(){ printf(“%dn”,sizeof(them));} 7、设有以下语句 typedef struct S { int g;char h;} T;则下面叙述中正确的是(B)。 A)可用S定义结构体变量 B)可以用T定义结构体变量 C)S是struct类型的变量 D)T是struct S类型的变量 8、有以下说明和定义语句 struct student { int age;char num[8];};struct student stu[3]={{20,”200401“},{21,”200402“},{109,”200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是(D)。A)(p++)->num B)p->num C)(*p).num D)stu[3].age 二、填空题 1、为了建立结构体(含有两个成员,data是数据成员,next是指向自身结构体的指针成员),请填空: Struct link { char data;struct link *next;} 2、把类型int另取一个类型名称INT,则以下应填: typedef int INT; 3、以下程序的运行结果是2002Shangxian。# include B部分(本科必做)程序填空: 以下程序的功能是:处理由学号和成绩组成的学生记录,N名学生的数据已在主函数中放入结构体数组s中,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不只一个,函数返回分数最高学生的人数。请填空。 #include int fun(STREC *a,STREC *b){ int i,j=0,max=a[0].s;for(i=0;i void main(){ STREC s[N]={{“GA005”,85},{“GA003”,76},{“GA002”,69},{“GA004”,85}, {“GA001”,91},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GA0015”,85}, {“GA0013”,91},{“GA0012”,64},{“GA0014”,91},{“GA0011”,66},{“GA0017”,64}, {“GA0018”,64},{“GA0016”,72},};STREC h[N];int i,n;n=fun(s,h);printf(“The %d highest score:n”, n);for(i=0;i 1.编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。#include double fact(int k){ double t=1;int i;for(i=1;i<=k;i++)t*=i;return t;} void main(){ int i,n;double s=0;scanf(“%d”,&n);for(i=1;i<=n;i++)s+=1/fact(i);printf(“%fn”,s);} 2.输入一个x,输出下面分段函数f(x)的值。要求将分段函数的计算定义成函数。 #include int f(double x)// 函数定义 { int y=0;if(x>0)y=1;else if(x==0)y=0;else y=-1;return y;} void main(){ double x;int y;scanf(“%lf”,&x);y=f(x);// 函数调用 printf(“f(%g)=%dn”,x,y);} 3.输入一个正整数,输出该数的各个数字之和。要求编写函数,计算整数的各个数字之和。#include int sum(int a){ int s=0;while(a!=0){ s+=a%10;a=a/10;} return s;} void main(){ int x;scanf(“%d”,&x);printf(“%dn”,sum(x));} 4.输入两个正整数a和n,求a+aa+aaa+……+aa…a(最后一项为n个a)之和。例如输入2和3,输出246(即2+22+222)。要求定义并调用函数f(a,n),它的功能是返回aa…a(n个a)。例如f(2,3)返回222。#include int f(int a,int n){ int s=0;for(;n>0;n--)s=s*10+a;// s+=pow(10,n-1)*a;return s;} void main(){ int a,n,sum=0,i;printf(“input a n:n”); scanf(“%d%d”,&a,&n);for(i=1;i<=n;i++)sum+=f(a,i);printf(“%dn”,sum);} 5.输入三个数,输出它们的最小值。要求定义一个函数,返回两个数的最小值。#include double min(double x,double y){ if(x return x;else return y;} void main(){ double x,y,z,t;scanf(“%lf%lf%lf”,&x,&y,&z);t=min(x,y);t=min(t,z);printf(“min:%fn”,t);} 6.在主函数中输入字符c和m,调用函数prn,连续将字符c输出m次。定义函数prn,完成连续将某个字符c输出m次后换行。#include void prn(char,int);// 函数声明 void main(){ char c;int m;printf(“Input c m:n”);scanf(“%c%d”,&c,&m);prn(c,m);} void prn(char c,int m){ int i;for(i=1;i<=m;i++)putchar(c);printf(“n”);} 7.输入一个整数n,计算3.2n的值。要求定义函数计算xn 值。#include double fact(double x,int n);void main(){ double x,y;int n;printf(“Input x n:n”);scanf(“%lf%d”,&x,&n);y=fact(x,n);printf(“%fn”,y);} double fact(double x,int n){ int i;double t=1;for(i=1;i<=n;i++)t=t*x;return t;} 8.输入平面上p1(x1,x2)、p2(x2,y2)两点坐标,计算两点间的距离输出。要求定义一个函数计算平面上两点间的距离。#include #include double f(double,double,double,double);void main(){ double x1,x2,y1,y2,d;printf(“Input(x1,y1),(x2,y2):n”); scanf(“(%lf,%lf),(%lf,%lf)”,&x1,&y1,&x2,&y2);d=f(x1,y1,x2,y2);printf(“%fn”,d);} double f(double x1,double y1,double x2,double y2){ double d;d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));return d;} 9.输出一张摄氏温度——华氏温度转换表。摄氏温度取[-100℃ ~150℃ ],温度间隔5℃,要求定义函数ctof(c),将摄氏温度转换为华氏温度,转换公式:F=32+C*9/5 #include void main(){ float c,f, ctof(float);int i;for(i=0,c=-100;c<=150;c+=5){ f=ctof(c);printf(“%6.0f %-6.0f”,c,f);i++;if(i%5==0)printf(“n”);} } float ctof(float c){ float f;f=32+c*9/5;return f;} 10.求11~999之间所有“回文数”之和。要求编制函数 JSValue(m)用于判断m是否为回文数。回文数是指各位数字左右对称,例如11、121、676、909等等。#include int JSValue(int m){ int a=0,b;b=m;while(b!=0){ a=a*10+b%10;b=b/10;} if(a==m)return 1;else return 0;} void main(){ int s=0,i;for(i=11;i<=999;i++)if(JSValue(i)==1)s+=i;printf(“%dn”,s);} 11.输入100个学生的数学课程成绩,计算平均分,并统计成绩在平均分数正负10%区间的学生的人数。#include void main(){ int a[100],i,k=0;float sum=0,aver;for(i=0;i<100;i++){ scanf(“%d”,&a[i]);sum+=a[i];} aver=sum/100;for(i=0;i<100;i++)if(0.9*aver<=a[i]&&a[i]<=1.1*aver)// 当前成绩在平均分数正负10%区间 k++;printf(“%f,%dn”,aver,k);} 12.输入两个正整数m和n(m#include int isprime(int x){ int i;for(i=2;i if(x%i==0)return 0;return 1;} void main(){ int m,n,s=0,k;scanf(“%d%d”,&m,&n);for(k=m;k<=n;k++)if(isprime(k)==1)s+=k;printf(“%dn”,s);} 13.输入一个字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数(例如:输入morning回车,再输入n,输出2)。#include main(){ char s[80],c;int i,k=0;printf(“输入字符串:n”);gets(s);printf(“输入字符:n”);c=getchar();for(i=0;s[i]!=' ';i++)if(s[i]==c)k++;printf(“%s中包含%d个%cn”,s,k,c);} 14.输入10组数,每组数3个数,输出每组数的最大值。要求定义并调用函数max(x,y,z)求x、y、z的最大值。#include double max(double x,double y,double z){ double m;m=x;if(mif(mreturn m;} void main(){ double x,y,z,i;for(i=1;i<=10;i++){ scanf(“%lf%lf%lf”,&x,&y,&z);printf(“%fn”,max(x,y,z));} } 15.输入一个字符串,统计其中数字字符出现的次数。#include void main(){ char s[80];int i,n=0;gets(s);for(i=0;s[i]!=' ';i++)if(s[i]>='0'&&s[i]<='9')n++;printf(“%s中包含%d个字符n”,s,n);} 16.将一个大小为10的数组b的值按逆序重新存放(数组的值由键盘任意输入,不使用辅助数组)。#include void main(){ double a[10],t;int i,j;for(i=0;i<10;i++)scanf(“%lf”,&a[i]);for(i=0,j=9;i { t=a[i];a[i]=a[j];a[j]=t;} for(i=0;i<10;i++)printf(“%8.2f”,a[i]);} 17.计算5×5数组周边元素的和。#include void main(){ double a[5][5],sum=0;int i,j;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf(“%lf”,&a[i][j]);for(i=0;i<5;i+=4)for(j=0;j<5;j++)sum+=a[i][j];// 第1、最后两行元素和 for(i=1;i<4;i++)for(j=0;j<5;j+=4)sum+=a[i][j];// 最左、右两列(不包括角上)元素和 printf(“%8.2fn”,sum);} 18.输入一5行、5列的数组,将数组的每1行均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),然后以行列对齐格式输出数组内容。#include void main(){ float a[5][5],t;int i,j;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf(“%f”,&a[i][j]);for(i=0;i<5;i++){ t=a[i][i];// { for(j=0;j<5;j++)for(j=0;j<5;j++)// if(i!=j)a[i][j]=a[i][j]/a[i][j];a[i][j]=a[i][j]/t;// a[i][i]=1;} } for(i=0;i<5;i++){ for(j=0;j<5;j++)printf(“%8.2f”,a[i][j]);printf(“n”);} } 19.输入一个字符串(字符个数少于80),判断是否为回文?若是输出YES,否则输出NO。 解一: #include void main(){ char s[80];int i,j;gets(s);for(j=0;s[j]!=' ';j++);// 求字符串长度 for(i=0,j--;i if(s[i]!=s[j]){ printf(“NOn”);break;} if(i>=j)printf(“YESn”);} 解二: #include void main(){ char s[80];int i,j,flag=1;gets(s);for(j=0;s[j]!=' ';j++);for(i=0,j--;i if(s[i]!=s[j])flag=0;if(flag==1)printf(“YESn”);else printf(“NOn”);} 20.编写函数fun,返回一个数组(10个数)中除最大值和最小值以外的平均值。#include double fun(double a[ ],int n){ double sum=0,max,min;int i;max=min=a[0];for(i=0;i { if(max else if(min>a[i])min=a[i];sum+=a[i];} return(sum-max-min)/(n-2);} void main(){ double b[10],v;int i;for(i=0;i<10;i++)scanf(“%lf”,&b[i]);v=fun(b,10);printf(“average:%.2fn”,v);} 21.在主函数中输入一个正整数x,编写函数f1,它的功能是:求出能整除x且不是偶数的各正整数,并放在数组a中,这些除数的个数返回给主函数。在主函数中输出各除数。#include int f1(int a[ ],int x){ int j,n=0;for(j=1;j<=x/2;j+=2)if(x%j==0){ a[n]=j;n++;} return n;} void main(){ int a[20],i,n,x;scanf(“%d”,&x);n=f1(a,x);for(i=0;i printf(“%5d”,a[i]);printf(“n”);} 22.在主函数中输入6行、6列的数组和变量m的值,编写函数f2,该函数的功能是:将数组左下半三角元素中的值乘以m。在主函数中以行列对齐格式输出该数组。#include void f2(int a[ ][6],int m){ int i,j;for(i=0;i<6;i++)for(j=0;j<=i;j++)a[i][j]*=m;} void main(){ int a[6][6],i,j,m;for(i=0;i<6;i++)for(j=0;j<6;j++)scanf(“%d”,&a[i][j]);printf(“Input m:”);scanf(“%d”,&m);f2(a,m);// 调用函数 for(i=0;i<6;i++){ for(j=0;j<6;j++)printf(“%5d”,a[i][j]);printf(“n”);} } 23.编写一个函数f3,它的功能是:实现两个字符串的连接。#include void main(){ char s1[100],s2[40];void f3(char s1[ ],char s2[ ]);gets(s1);gets(s2);f3(s1,s2);puts(s1);} void f3(char s1[ ],char s2[ ]){ int i,j;for(i=0;s1[i]!=' ';i++);// 找s1 中字符串结束位置 for(j=0;s2[j]!=' ';j++,i++)s1[i]=s2[j];// 将s2 中字符串连接到s1后 s1[i]=' ';// 连接后加结束标志 return;} 24.在数组x的10个数中求平均值v,找出与v相差最小的数组元素。#include #include void main(){ double x[10],v,d;int i;for(i=0,v=0;i<10;i++){ scanf(“%lf”,&x[i]);v+=x[i];} v=v/10;d=x[0];for(i=1;i<10;i++)if(fabs(d-v)>fabs(x[i]-v))d=x[i];printf(“平均值:%-8.2f,与平均值最近元素:%-8.2fn”,v,d);} 25.输入n(n≤20)个数放在一维数组中,找出其中最小的数,将它与数组最前面的数交换后输出这些数。#include void main(){ int i,k,temp,n,a[20];printf(“Input n:n”);scanf(“%d”,&n);for(i=0;i scanf(“%d”,&a[i]);for(k=0,i=1;i if(a[i] temp=a[0];a[0]=a[k];a[k]=temp;for(i=0;i printf(“Input %d numbers:n”,n);for(i=0;i printf(“Input x:”);scanf(“%d”,&x);for(i=n-1;i>=0;i--)if(a[i]>x)a[i+1]=a[i];else break;a[i+1]=x;for(i=0;i} 27.输入一个5行、6列的数组,找出该数组中绝对值最大的元素、输出该元素及其两个下标值。#include #include void main(){ int a[5][6],i,j,max,maxi,maxj;for(i=0;i<5;i++)for(j=0;j<6;j++)scanf(“%d”,&a[i][j]);max=abs(a[0][0]);maxi=maxj=0;for(i=0;i<5;i++)for(j=0;j<6;j++)if(abs(a[i][j])>max){ max=abs(a[i][j]);maxi=i;maxj=j;} printf(“max: %dn”,a[maxi][maxj]);printf(“row: %d col: %dn”,maxi,maxj);} 28.从键盘输入任意一个整数,统计该整数中出现的不同数字的个数。#include void main(){ int x,a[10]={0},i,n=0;printf(“Input x:n”);scanf(“%d”,&x);while(x!=0){ a[x%10]=1;x=x/10;} for(i=0;i<10;i++)n+=a[i];printf(“%dn”,n);} 29.三角形面积公式为: 其中 s=(a+b+c)/2 a、b、c分别是三角形的三条边。请分别定义计算s和area的宏,写程序,在程序中用带实参的宏名来求面积。#include #include #define s(a,b,c)(a+b+c)/2 #define area(a,b,c,s)sqrt(s*(s-a)*(s-b)*(s-c))main(){ double x,y,z,d,t;scanf(“%lf%lf%lf”,&x,&y,&z);if(x+y>z&&x+z>y&&y+z>x){ d=s(x,y,z);t=area(x,y,z,d);printf(“area=%fn”,t);} else printf(“error!n”);} 30.编程,输入一个正整数,将其转换成二进制数。#include main(){ int x,a[32],i,j;printf(“Enter x:”);scanf(“%d”,&x);for(i=0;x!=0;i++){ a[i]=x%2;x/=2;} for(j=i-1;j>=0;j--)printf(“%d”,a[j]);printf(“n”);} 31.输入一行字符,统计并输出其中英文字母、数字字符、空格和其他字符的个数。#include void main(){ char str[80];int zm,sz,kg,qt,i;zm=sz=kg=qt=0;gets(str);for(i=0;str[i]!=' ';i++)if(str[i]>='A'&&str[i]<='Z'|| str[i]>='a'&&str[i]<='z')zm++;else if(str[i]>='0'&&str[i]<='9')sz++;else if(str[i]==' ')kg++;else qt++;printf(“ 字母=%d,数字=%d,空格=%d,其它=%dn”,zm,sz,kg,qt);} 32.编制函数del_char,函数原型为 void del_char(char *a,char ch),函数的功能是删除a指向的字符串中的值为ch的字符。例如从字符串“AscADef” 中删除 'A' 后,字符串为“scDef”。#include void del_char(char *a,char ch){ char *p;p=a;while(*a!=’ ’){ if(*a!=ch){ *p=*a;p++;} a++;} *p=’ ’;} void main(){ char s[80],ch;printf(“请输入字符串:”);gets(s);printf(“输入要删除字符:”);ch=getchar();del_char(s,ch);puts(s);} 33.编制函数,其功能是在float类型1维数组中查找最大值、最小值并将它们返回到主函数输出。#include void max_min(int *a,int n,int *max,int *min){ int *p;*max=*min=*a;for(p=a;p if(*p>*max)*max=*p;if(*p<*min)*min=*p;} } void main(){ int a[10],i,max,min;for(i=0;i<10;i++)scanf(“%d”,a+i); max_min(a,10,&max,&min);printf(“max=%d,min=%dn”,max,min);} 34.输入10个数,按绝对值从小到大排序后输出。要求定义一个函数sort,完成绝对值从小到大排序。#include #include void sort(int *a,int n){ int i,j,k,t;for(i=0;i { k=i;for(j=i+1;j if(fabs(*(a+j))t=*(a+i);*(a+i)=*(a+k);*(a+k)=t;} } void main(){ int a[10],i;for(i=0;i<10;i++)scanf(“%d”,a+i);sort(a,10);for(i=0;i<10;i++)printf(“%d ”,*(a+i));} 35.输入n和x,n和x分别表示对数组前n个元素赋初值为x。要求定义一个函数value,完成对一维整型数组的n个元素进行赋值,具体赋值x。#include void value(double *a,int n,double x){ int i;for(i=0;i *(a+i)=x;} void main(){ double a[10],x;int i,n;printf(“Input n x:n“);scanf(”%d%lf“,&n,&x);value(a,n,x);for(i=0;i printf(”%8.2f“,*(a+i));} 36.定义一个函数,计算两个数的和与乘积。#include void f(double x,double y,double *p,double *q){ *p=x+y;*q=x*y;} void main(){ double a,b,add,mult;printf(”Input a b:n“);scanf(”%lf%lf“,&a,&b);f(a,b,&add,&mult);printf(”add=%-8.2f mult=%-8.2fn“,add,mult);} 37.定义一个函数,将一维数组中最大值及最小值交换位置。#include void f(int *a,int n){ int i,*p,*q,t;for(i=0,p=q=a;i { if(*p<*(a+i))p=a+i;if(*q>*(a+i))q=a+i;} t=*p;*p=*q;*q=t;} void main(){ int a[10],i;for(i=0;i<10;i++)scanf(”%d“,a+i);f(a,10);for(i=0;i<10;i++)printf(”%d “,*(a+i));} 38.编写求字符串长度函数strlen,将字符串中小写字母转换成大写字母函数。#include int strlen(char *s){ int i;for(i=0;*(s+i)!=' ';i++);return i;} void cov(char *s){ for(;*s!=' ';s++)if(*s>='a'&&*s<='z')*s-=32;} void main(){ char a[100];gets(a);printf(”strlen:%dn“,strlen(a));cov(a);puts(a);} 39.编写函数void fun(int *a, int *n),它的功能是:求出1到100之内能被3或者7整除,但不能同时被3和7整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。#include void fun(int *a, int *n){ int i,j;for(i=1,j=0;i<=100;i++)if((i%3==0||i%7==0)&&i%21!=0){ a[j]=i;j++;} *n=j;} void main(){ int a[100],i,n;fun(a,&n);for(i=0;i printf(”%d “,*(a+i));} 40.编程,检查一个5×5二维数组a是否对称(即:对所有i和j都有a[i][j]=a[j][i])。若是输出YES,否则输出NO #include void main(){ double a[5][5];int i,j;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf(”%lf“,*(a+i)+j);for(i=0;i<5;i++)for(j=0;j if(*(*(a+i)+j)!=*(*(a+j)+i)){ printf(”NOn“);return;} printf(”YESn“);} 41.定义函数int strdel(char *s),删除空格字符并返回空格个数。#include #include int strdel(char *s){ int n=0;for(;*s!=' ';)if(*s==' '){ strcpy(s,s+1);n++;} else s++;return n;} void main(){ char str[80];int n;gets(str);n=strdel(str);printf(”空格数:%d,删除空格后:%sn“,n,str);} 42.编写函数void fun(char *s,int b[ ]),统计在s所指向字符串中26个英文字母(不区分大小写)各自出现的次数,并依次放在b所指的数组中,在主函数中输出各字母出现的次数。#include void fun(char *s,int b[ ]){ char *p;for(p=s;*p!=' ';p++)if(*p>='a'&&*p<='z')b[*p-'a']++;else if(*p>='A'&&*p<='Z')b[*p-'A']++;} void main(){ char str[80];int a[26]={0},i;gets(str);fun(str,a);for(i=0;i<26;i++)printf(”%2c“,'A'+i);printf(”n“);for(i=0;i<26;i++)printf(”%2d“,a[i]);printf(”n“);} 43.函数int fact(char *s,char *t)的功能是:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。#include int fact(char *s,char *t){ int n=0;for(;*s!=' ';s++)if(*s<97){ *t=*s;t++;n++;} *t=' ';return n;} void main(){ char s[80],t[80];gets(s);printf(”<97:%dn",fact(s,t));puts(t);} 44.编写程序,输入当天日期,要求输出明天日期(利用结构类型)。#include void main(){ int m[]={0,31,28,31,30,31,60,31,31,30,31,30,31};int leap;struct date { int year,month,day;}d;printf(“year-month-day:”); scanf(“%d-%d-%d”,&d.year,&d.month,&d.day);if(d.year%4==0&&d.year%100!=0||d.year%400==0)m[2]=29;// 闰年2月份有29天 d.day++;if(d.day>m[d.month]){ d.day=1;d.month++;if(d.month>12){ d.year++;d.month=1;} } printf(“明天:%d-%d-%dn”,d.year,d.month,d.day);} 45.将1000以内的奇数写入文件design1.dat中。#include main(){ int a;FILE *fp;fp=fopen(“design1.dat”,”w”);for(a=1;a<=1000;a++)if(a%2==1)fprintf(fp,“%4d”,a);fclose(fp);} 46.求上题所建文件design1.dat中的数据和,在屏幕上输出结果。#include main(){ int a,sum=0;FILE *fp;fp=fopen(“design1.dat”,”r”);while(!feof(fp)){ fscanf(fp,“%d”,&a);sum+=a;} fclose(fp);printf(“sum=%dn”,sum);} 1、.char型变量的长度为_b__个字节选择一项: a.3 b.1 c.4 d.2 2、C语言程序开头的#define表示:____c_________选择一项: a.定义变量 b.主函数 c.定义常量 d.预处理 3、short型变量的长度为_c__个字节选择一项: a.1 b.3 c.2 d.4 4、一个C语言程序总是从____b_____开始执行。选择一项: a.主程序 b.主函数 c.子程序 d.函数 5、一个C语言程序是由______d___组成。选择一项: a.子程序 b.主程序 c.过程 d.函数 6、以下哪种不属于C语言的变量类型? c a.双精度型 b.单精度型 c.多精度型 d.整型变量 7、如果有语句scanf(“%1d%d”,&a,&b);则在输入了123 45后,b的值为:_____d__选择一项: a.12345 b.123 c.45 d.23 8、如果要定义一个变量用于精确输入中国人口总数,则应该把变量类型定义为:_a____选择一项: a.long b.char c.short d.float 9、如果要定义一个变量用于输入商品单价,则应该把变量类型定义为:____d___选择一项: a.short b.int c.char d.float 10、如果要求ax+b=0的根(a不等于0),则下面可以求x的值的方法是:_d___选择一项: a.ax+b=0 b.以上都不对 c.a+b=0 d.x=-b/a 11、如果要计算x的平方并赋值给y,一般使用的方法是:_____c___选择一项: a.y=x*x b.y=x^2 c.y=pow(x,2)d.y=x2 12、定义圆周率为常数的方法是____b_选择一项: a.const float PI=3.14;b.#define PI 3.14 c.以上都不对 d.float PI=3.14; 13、已知变量c为字符型,且c='A',则执行c+=33后,c的值变为:_b_______选择一项: a.'A' b.'b' c.'B' d.'a' 14、无符号short型能表示的数的范围是:____b_____选择一项: a.0~65536 b.0~65535 c.-32768~32767 d.0~255 15、语句printf(“%2f”,0.418)会输出:_____a_____选择一项: a.0.418000 b.0.418 c.0.41 d.0.42 16、输出语句printf(“%-5d”,123)会输出__a__选择一项: a.123__(_表示空格,下同)b.--123 c.以上都不对 d.__123 char型变量只能存放字符,不能用于存放数字 × C程序中可以用“=”为常量赋值选择一项:× C程序中,变量的值是可以变化的选择一项:√ 一个C语言程序可以不包含主函数选择一项:× 一个C语言程序可以包含一个以上的主函数选择一项:× 变量可以多次赋值选择一项:√ 只要是以字母或下划线开头,全部由字母、数字和下划线组成的,长度不超过8个的标识符,都可以用来做变量名 选择一项:× 可以在定义变量的时候就对它赋值选择一项 √ 定义了一个int变量x后,如果要用它存放实数,可以再把它定义为float型,即:int x;float x;× 定义多个变量时可以同时对它们进行赋值,如:int x=y=0;× 1、已知int x=10,y=20,z=30;,以下语句执行后x,y,z的值是_______。if(x>y)z=x;x=y;y=z;printf(“%d,%d,%d”,x,y,z);选择一项: a.20,30,30 b.10,20,30 c.20,30,20 d.20,30,10 正确答案是:20,30,30 ' 2、若以下变量均是整型,且有语句num=sum=7;,则执行表达式++sum,++num后sum的值是_________。选择一项: a.9 b.10 c.7 d.8 正确答案是:8 3、下面不正确的C语句是 。选择一项: a.a=--a b.a=3++;c.a=a--;d.a=++a; 正确答案是:a=3++ 4、下面不正确的C语句是 。选择一项: a.if(x>0)x=x;b.if x>0 x=x+2;c.if(x<=0)x=x+2;d.if(x<0)x=x; 正确答案是:if x>0 x=x+2; 5、下面不正确的C语句是 。选择一项: a.x&&=2;b.x/=x;c.x%=2;d.x+=2; 正确答案是:x&&=2; 6、下面输出结果为2的C语句是 。选择一项: a.printf(“%d”,(x=0,x=++x));b.printf(“%d”,(x=0,x=x++));c.printf(“%d”,(x=1,x=x++));d.printf(“%d”,(x=1,x+=x)); 正确答案是:printf(“%d”,(x=1,x+=x)) 7、以下不符合C语言语法的赋值表达式是_________。选择一项: a.a=9+e b.a=9 c.a[0]=2 d.a+2=x 正确答案是:a+2=x 8、以下运算符优先级最低的是__________选择一项: a.& b.!= c.&& d.|| 正确答案是:|| 9、在C语言中,要求运算数必须是整型的运算符是_______。选择一项: a.% b.++ c.!= d./ 正确答案是:%题目 10、若x、i、j都是int型变量,则执行下面表达式x=(i=4,j=4,i+j)后x的值为_________。选择一项: a.52 b.4 c.8 d.32 反馈正确答案是:8 11、若以下变量均是整型,且有语句num=sum=7;,则执行表达式++sum,++num后sum的值是_________。选择一项: a.8 b.7 c.10 d.9 正确答案是:8 12、若有定义: int a=7; float x=2.0,y=4.0;则表达式x+a%3*(int)(x+y)的值是_________。选择一项: a.3.5 b.8 c.2.5 d.4.5 正确答案是:8 C语言规定if和else必须成对使用。× C语言规定,else总是与它上面的最近的if配对: × if语句可以嵌套使用。√ switch„case结构中case后的表达式必须为常量表达式。:√ switch„case结构中条件表达式和常量表达式值可以为float类型。× switch后面圆括号内的表达式的值和case后面的常量表达式的值都必须是整型或字符型,不允许是浮点型。对 所有关系运算符的运算优先级相同。× 语句int a=2;if(a=3)b=1;执行后b的值是1。√ 1、下面程序段的运行结果是_______。int a=1,b=2,t;while(a 反馈正确答案是:2,1 2、以下程序执行后的输出结果是_____。#include “stdio.h” main(){ int i,s=0; for(i=1;i<10;i+=2)s+=i; printf(“%dn”,s);} 选择一项: a.25 b.26 c.21 d.20 答案是:25 3、循环语句for(int a=0;a<3;a++);_______。选择一项: a.是无限循环 b.循环次数不定 c.循环4次 d.循环体循环执行3次 正确答案是:循环体循环执行3次 4、设有程序段: int i=5;while(i==0)i--; 则下面描述中正确的是_______。选择一项: a.循环是无限循环 b.循环体语句一次也不执行 c.循环体语句执行一次 d.while循环执行5次 正确答案是:循环体语句一次也不执行 5、设有程序段: int k=10; while(k==0)k=k-1;则下面描述中正确的是_______。选择一项: a.循环是无限循环 b.while循环执行10次 c.循环体语句执行一次 d.循环体语句一次也不执行 正确答案是:循环体语句一次也不执行 6、设有程序段:int k=5;while(k>0)k--;则下面描述中正确的是_______。选择一项: a.循环体语句执行5次 b.循环体语句一次也不执行 c.循环是无限循环 d.while循环执行5次 正确答案是:循环体语句执行5次 'C语言中while和do-while循环的主要区别是do-while允许从外部转到循环体内选择一项: 错 'for循环体语句中,可以包含多条语句,但要用花括号括起来选择一项:√ '执行for(I=0;I<4;I++);后I的值为3选择一项: 错 break语句和continue语句不可以同时出现在同一个循环体内:× break;语句执行时结束本次循环,开始下一次循环。: × break;语句执行时退出到包含该break;语句的循环。:√ continue语句的作用是结束整个循环的执行: × C语言中while和do-while循环的主要区别是do-while循环只能用break语句退出循环: × C语言中while和do-while循环的主要区别是do-while循环只能用continue语句退出循环: × C语言中while和do-while循环的主要区别是do-while的循环体不能是复合语句: × C语言中while和do-while循环的主要区别是do-while的循环体至少无条件执行一次:√ C语言中while和do-while循环的主要区别是while的循环控制条件在前: × c语言中不能使用do-while语句构成循环嵌套: × c语言中不能使用for语句构成循环嵌套: × c语言中不能使用while语句构成循环嵌套: × c语言中只能使用for语句构成循环嵌套: × C语言中,do-while语句构成的循环只能用break语句退出。× do—whiLe语句构成的循环,当while后的表达式值为零时结束循环:√ do—whiLe语句构成的循环,当while后的表达式值为非零时结束循环: × do„while语句的循环体至少执行1次,while和for循环的循环体可能一次也执行不到。√ for、while、do-while循环中的循环体均可以由空语句构成:√ for循环只能用于循环次数已经确定的情况: × for循环是先执行循环体语句,后判定表达式: × for循环表达式的括号内的3个表达式均不可以省略: × while循环是先判断表达式后执行循环体语句:√ 从多层循环嵌套中退出时,只能使用goto语句: × 只能在循环体内和switch语句体内使用break语句:√ 在for循环中,不能用break语句跳出循环体:× 在循环中使用break 语句的功能是使程序执行结束: × 在循环中使用break 语句的功能是终止本次循环,继续下次循环: × 在循环中使用break 语句的功能是跳出包含此break语句的所有循环: × 在循环体内使用break语句或continue语句的作用相同: × 在循环外的语句不受循环的控制,在循环内的语句也不受循环的控制。: × 强制终止死循环可以使用CTRL+BREAK组合键:√ V 所有类型的循环都可以进行嵌套使用选择一项:√ 执行语句for(i=0;i<3;i++)printf(“*”);时,表达式i++执行3次: × 执行语句for(i=0;i<3;i++)printf(“*”);时,表达式i++执行4次:√ 用1作while循环的判断条件,则循环一次也不执行: × 由int i=-1;while(i<10)i+=2;i++;可知此while循环的循环体执行次数为6次。:√ 程序有死循环的时候,上机编译不能通过: × 程序段x=-1;do{x=x*x;} while(!x);循环体执行一次:√ 程序段x=-1;do{x=x*x;} while(!x);循环体执行二次: × 程序段x=-1;do{x=x*x;} while(!x);是死循环: × 程序段x=-1;do{x=x*x;} while(!x);有语法错误:× 1、下面程序段的运行结果是_______。char a[7]=“abcdef”;char b[4]=“ABC”;strcpy(a,b); printf(“%c”,a[5]);选择一项: a.e b.f c.一个空格 d. 正确答案是:f 2、判断字符串c,d是否相等,应当使用_________.选择一项: a.if(strcmp(c,d)==0)b.if(c==d) c.if(strcpy(c,d))d.if(c=d) 正确答案是:if(strcmp(c,d)==0) 3、判断字符串str1,str2是否相等,应当使用()选择一项: a.if(str1==str2) b.if(str1=str2) c.if(strcpy(str1,str2))d.if(strcmp(str1,str2)==0) 正确答案是:if(strcmp(str1,str2)==0) 4、有下面程序段, 则_______。char a[3],b[]=“China”;a=b;printf(“%s”,a);选择一项: a.运行后将输出Chi b.运行后将输出Ch c.编译出错 d.运行后将输出China 正确答案是:编译出错 5、有如下数组声明” int values[30];”,下标值引用错误的是选择一项: a.values[30] b.values[10] c.values[0] d.values[20] 正确答案是:values[30] 6、给字符数组a、b的首元素赋值,应当使用语句_______。选择一项: a.a[1]=1,b[1]==2;b.a[0]=1;b[0]=2;c.a[1]==1,b[1]=2 d.a[0]==1,b[0]==2 正确答案是:a[0]=1;b[0]=2; C语言中,在对全部数组元素赋初值时,必须指定数组的长度。× C语言中,字符串以' '为结束标志。选择一项:√ C语言中,字符串以'1'为结束标志。选择一项: × C语言中,数组元素在内存中是顺序存放的,它们的地址是连续的。选择一项:√ C语言中,数组元素的下标是从0开始的,下标不能越界。选择一项:√ C语言中,数组元素的下标是从1开始的,下标不能越界。选择一项: × C语言中,数组名是一个常量,是数组首元素的内存地址,可以重新赋值。选择一项: × C语言中,用格式符“%s”输入字符数组时,数组名前不能加&。选择一项:√ 一个数组中的所有元素可以具有不相同的数据类型。选择一项: × 使用字符串处理函数strcmp需要包含头文件string.h。选择一项:√ 假设int型变量占两个字节的存储单元,若有定义: int x[10]={0,2,4}; 则数组x在内存中所占字节数为10 × 已知字符数组str1的初值为“China”,则语句str2=str1;执行后字符数组str2也存放字符串“China”。×数组大小可变,但是同一数组中所有数组元素的类型必须相同:× 数组大小可变,同一数组中可以有不同类型的数组元素 × 数组大小固定,但是同一数组中可以有不同类型的数组元素 × 数组大小固定,同一数组中所有元素的类型必须相同 √ 数组定义int a[]=”string”;不合法:√ 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小不确定 × 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是3 :√ 1、编程统计高等数学(分数为:65,34,75,55,85,45,95,90,80,70)及格的学生的平均成绩 提示: for(int i=0;i<10;i++){ if(xs[i]>60){ sum+=xs[i];n++;} } „„ 2、请编写一个函数计算购买商品的折扣金额,其中折扣率为90%,调用该函数计算并输出3种商品(单价分别为:6.50、12.50、10.00,数量分别为30、20、40)的折扣金额。 其中,函数可定义为: …… double getMoney(double price, int num){ …… } void main(){ printf(“商品一折扣金额=%.2fn”, getMoney(6.50,30));printf(“商品二折扣金额=%.2fn”, getMoney(12.50,20));printf(“商品三折扣金额=%.2fn”, getMoney(10.00,40));} 3、编写一个查表程序,即若干个数据存放在一个表(数组)中,程序运行时任意输入一个数,找出并输出表中大于该数的所有数。 代码提示: …… scanf(“%d”,&x);for(int i=0;i<10;i++){ if(a[i]>x)printf(“%dn”, a[i]);} …… 4、编程统计符合助学金发放标准的学生人数,标准是学习成绩及格并且家庭收入低于每月2000元。 提示如下: o o 定义两个数组,一个是成绩数组cj[10],一个是家庭收入数组sr[10] 关键代码: …… for(int i=0;i<10;i++){ if(cj[i]>=60 && sr[i]<2000)n++;} 5、请写程序求出1-20的偶数和。 6、编程统计1,5,6,7,9,12,15,6,3,9中有几个可以被5整除的数。 7、编程统计1,5,6,7,9,12,15,6,3,9中有几个可以被5整除的数。 8、编写函数fun计算表达式x+2y+3z的值,其中x、y、z为整型参数。 9、编写函数getnum(int a[], n),找出并返回含n个元素的整型数组中的最小值或最大值。 10、编写程序,找出数组中的最小值或最大值。 编程题目重点内容: 多分支选择结构 求数组的最大值,最小值,平均值及大于(或小于)平均值的数 循环及循环嵌套的应用 求某区间范围的奇数和、偶数和或奇数个数(偶数个数),引申题目为“被n整除的数” 函数的定义及调用 以下是课堂中讲得较少的题目,复习时注意查漏补缺。 编程求一元二次方程a*x*x+b*x+c=0的实根(a,b,c都为整数),要求系数a,b,c从键盘输入,若无实根有相应提示。 #include “stdio.h” #include “math.h” main(){ int a,b,c,d;float x1,x2;scanf(“%d%d%d”,&a,&b,&c);d=b*b-4*a*c;if(d>=0){ x1=(-b+sqrt(d))/2*a; x2=(-b-sqrt(d))/2*a; printf(“x1=%f,x2=%fn”,x1,x2);} else } printf(“此方程没有实根!”); 编写函数fun计算表达式x+2y+3z的值,其中x、y、z为整型参数。 int fun(int x,int y,int z){ return x+2*y+3*z;} 编写一个与strlen函数功能一样的函数(测试字符串长度函数),用其测试任意输入的字符串的长度,并输出结果。 #include “stdio.h” main(){ char a[100];int i=0;gets(a);while(1){ if(a[i]!=' ') i++; else break; } printf(“%dn”,i); } 请编程计算并输出数据30.5,55.0,70.4,77.0,100.0,50.8的平均值和小于平均值的数据。 #include “stdio.h” main(){ float a[6]={30.5,55.0,70.4,77.0,100.0,50.8};float sum=0,ave;int i;for(i=0;i<6;i++) sum=sum+a[i];ave=sum/6;printf(“ave=%fn”,ave);for(i=0;i<6;i++){ if(a[i] printf(“%.1f ”,a[i]);} } 读小学的小明同学数学考试不及格,加法题的错误特别多,父亲得知后决定要惩罚他,惩罚措施如下:计算式子1+1=2,2+2=4,4+3=7,7+4=11,...一直算下去,直到某个加式的结果大于1000为止,请问小明一共要写多少个加式?试编程实现之。 #include “stdio.h” main(){ int i,sum;sum=1;for(i=1;sum<=1000;i++){ sum=sum+i;} printf(“%dn”,i); } 设有鸡兔同笼,头共35个,脚共94只,求鸡和兔各几只 #include “stdio.h” main(){ int ji,tu;for(ji=1;ji<=34;ji++){ tu=35-ji; if(2*ji+4*tu==94) printf(“ji=%d,tu=%dn”,ji,tu); } } 输入三个数存入变量a,b,c并进行交换,最后a,b,c三个变量的内容从小到大排列并输出 对输入的温度进行判断,如果低于20度则输出“冷”,21-26输出“适宜”,27以上输出“热” #include “stdio.h” main(){ int t; printf(“请输入温度”);scanf(“%d”,&t);if(t<=20)printf(“冷n”);else if(t>=21 && t<=26)printf(“适宜n”);else printf(“热n”); } 公共C考试注意事项: 1.“两证齐全”:务必带上学生证(或一卡通)与身份证; 2.提前进场检验电脑是否一切正常,如有无法使用情况,及时报告监考老师申请换位置; 3.考试过程中如遇电脑死机,重启等问题,不要自行处理,及时报告监考老师。4.在没做完试卷前,请勿点击“交卷”按钮。5.考试中不定时查看考试界面右下角的“剩余时间”,如遇长时间不动,报告监考老师处理。6.交卷后不要在考场附近逗留影响未交卷考生。 7.交卷后请勿打电话向课任老师求分,如有这种情况,酌情扣减平时成绩。8.考试后3-5天,可在教务系统查询分数,如对分数有异议,可要求查分。 C 语言复习题(2013 版) 一、选择题 请把答案填写在下面的横线上,否则不能得分。 1.B 2.D 3.C 4.D 5.A 6.B 7.A 8.D 9.C 10.D 11.C 12.B 13.D 14.B 15.D 16.C 17.D 18.D 19.A 20.C 21.A 22.D 23.B 24.C 25.C 26.B 27.B 28.A 29.D 30.A 31.C 32.A 33.B 34.A 35.C 36.D 37.B 38.D 39.A 40.C 41.B 42.D 43.C 44.C 45.D 46.D 47.D 48.C 49.D 50.C 51.A 52.B 53.B 54.A 55.C 56.A 57.B 58.A 59.B 60.C 61.D 62.C 63.C 64.A 65.B 66.C 1.下列关于C 程序的说法错误的是()。 A)一个程序必须有一个main 函数B)函数首部后面必须有分号 C)可以使用“/* */”来注释一段代码D)每个语句的末尾必须有分号 2.下列关于C 程序的说法错误的是()。 A)stdio.h 是输入输出头文件B)一个C 语句必须以分号结束 C)VC6.0 中可以使用“//”来注释一行D)#define 命令不是预处理命令 3.下列选项中,不能作为C 语言标识符的是()。A)_total B)p405 C)$123 D)abc 4.若有“float x=123.41;printf(“%4.2f”,x);”,则执行后的输出结果为()。A)12.3 B)12.34 C)123.4 D)123.41 5.下列选项中,不能正确表示分式 4 的C 语言表达式是()。 A)4/3 B)4/3.0 C)1.0*4/3 D)4/(float)3 6.若有定义“int x,y;”,则表达式“x=1,y=x+3/2”的值为()。A)1 B)2 C)2.0 D)2.5 7.下列关于C 程序的说法错误的是()。 A)C 语言程序的基本组成单位是语句B)C 语言程序中一行可以写多条语句 C)每条语句必须以分号结束D)一个语句可以写在多行上 8.以下关于标识符的说法错误的是()。 A)标识符由字母、数字和下划线组成B)标识符不能与系统的关键字同名 C)首字符必须是字母或下划线D)不区分大小写,s 和S 是同一个变量 9.表达式7%4+7/2 的值是()。A)4 B)4.5 C)6 D)6.5 10.已知变量a 和b 是int 型,若有语句“scanf(“a=%d,b=%d”,&a,&b);”,使a 的值是5,b 的值是8,则正确的输入是()。 A)5 8↙ B)5,8↙ C)a=5 b=8↙ D)a=5,b=8↙ 11.若有定义“int a;float b;”,执行“scanf(“%3d%f”,&a,&b);”语句时,从键盘输入: 1234 567.8↙,则a 和b 的值分别是()。A)1234 和567.800000 B)123 和567.800000 C)123 和4.000000 D)234 和567.800000 12.执行“printf(“%f%%”,1.0/3);” 语句后,正确的输出结果是()。 A)0.3 B)0.333333% C)0.3% D)0.003% 13.若要定义符号常量PI 代表3.14,正确的预处理命令是()。A)#define PI 3.14;B)#define PI=3.14 C)define PI 3.14 D)#define PI 3.14 14.以下变量定义及初始化语句中正确的是()。A)double a=0.5;b=1.5;B)char a=97,b='b';C)int a=b=0;D)float a=1,b=&a;15.以下关于算法的描述中不正确的是()。A)算法中每一个步骤的含义都应该是确定的 B)算法中每一个步骤都应该能有效执行 C)正确的算法应在有限步骤内结束 D)正确的算法都必须有输入和输出 16.当一个关系表达式成立时,该表达式的值为()。A)-1 B)0 C)1 D)不确定的非0 值 17.关于if 语句的说法正确的是()。A)双分支语句中有可能两个分支都不执行 B)if 多分支语句中不能没有最后的else C)if 语句中可以使用continue 语句 D)else 总是与前面最近的、没有与其它else 配对的if 配对 18.要判断x 是否满足表达式“-1≤x≤1”,正确的C 语言表达式是()。A)-1<=x<=1 B)-1≤x≤1 C)x>=-1||x<=1 D)x>=-1&&x<=1 19.若有程序段“int x=10;while(x!=0)x=x-1;”,执行完该程序段后x 的值是()。A)0 B)-1 C)10 D)9 20.若有定义“float x,*p=&x;”,能正确输入一个值给x 的语句是()。 A)scanf(“%f”,x);B)scanf(“%lf”,&x);C)scanf(“%f”,p);D)scanf(“%lf”,&p);21.以下选项中,对变量的定义和初始化正确的是()。 A)int a,*p=&a;B)int a,*p=*a;C)int a,p=&a;D)int a,*p=a;22.逻辑运算符两侧运算对象的数据类型为()。A)只能是0 或者1 B)只能是0 或非0 正数 C)只能是整型或字符型数据D)可以是任何类型的数据 23.在c 语言中,执行完语句“for(i=1;i<=10;i++);”后,i 的值是()。A)10 B)11 C)1 D)不确定 24.定义了指向某个变量的指针,其含义是指针变量里存放的是该变量的()。A)值B)名C)地址D)一个标志 25.若有语句“int *pt, a=4;pt=&a;”,则下面均代表地址的一组选项是()A)a,pt B)&a,*pt C)&a,pt D)*pt,&pt 26.若有语句“float *p,m=3.14;”,想要建立如下图所示的存储结构,则正确的赋值语句是 ()。p m A)p=m;B)p=&m;C)*p=m;D)*p=&m;27.有语句“int a=3, b=5, *p, *q;p=&a;q=&b;”,若要实现下图中所示的存储结构,则可以 使用的赋值语句是()。3.14 A)*p=*q;B)p=q;C)p=*q;D)*p=q;28.以下程序段中有个语句是错误的,则下列说法正确的是()。int *p, i;char *q, ch;p=&i;q=&ch;*p=4;p=q;A)p 和q 的类型不一致,不能执行语句p=q B)*p 中应该存放地址值,因此不能执行*p=4 C)q 虽然指向了具体的存储单元,但是该单元中没有具体的值,所以不能执行p=q D)q 没有指向具体的存储单元,所以不能执行p=q 29.若输入字符串:abcde<回车>,则以下while 循环体将执行()次。while((ch=getchar())=='e')printf(“*”);A)5 B)4 C)6 D)1 30.若i,j 已______定义为int 类型,则以下循环嵌套程序段中循环体一共要执行的次数是()。 for(i=5;i>0;i--)for(j=0;j<4;j++){...} A)20 B)25 C)24 D)30 31.关于函数的说法不正确的是()。 A)C 语言用函数实现模块的功能B)可根据需要自己来编写函数 C)可以在一个函数内定义另一个函数D)一个函数可以没有参数 32.C 程序中,若对函数类型未加显式说明,则函数类型默认为()。A)int B)void C)double D)int * 33.在函数内部定义的局部变量,若不对其存储类型进行说明,则默认为()。A)static B)auto C)extern D)以上均不对 34.若函数fun 被调用3 次,则最后一次的输出结果为()。void fun(){ int a=1;a+=2;printf(“a=%dn”,a);} A)a=3 B)a=5 C)a=7 D)a=9 35.若函数fun 被调用3 次,则最后一次的输出结果为()。void fun(){ static int a=1;q 5 b p 3 a a+=2;printf(“a=%dn”,a);} A)a=3 B)a=5 C)a=7 D)a=9 36.如果在一个函数中的复合语句中定义了一个变量,则该变量()。A)在该函数中有效B)为非法变量 C)在本程序范围内均有效D)只在该复合语句中有效 37.C 语言规定,函数返回值的类型是由()。 A)调用该函数时系统临时决定B)在定义该函数时所指定的类型决定 C)return 语句中的表达式类型决定D)调用该函数时主调函数类型决定 38.putchar 函数可以向终端输出一个()。A)整型变量表达式值B)实型变量值 C)字符串D)字符或字符型变量值 39.执行以下程序段的输出结果是()。void fun(int x, int y){ x=10;y=20;} void main(){ int a=1, b=2;fun(a, b);printf(“%d, %dn”, a,b);} A)1,2 B)10,20 C)10,2 D)1,20 40.执行函数调用“fun('5')”得到的返回值为()。int fun(char ch){ return(ch>='0'&&ch<='9');} A)-1 B)0 C)1 D)2 41.关于局部变量的说法正确的是()。 A)有效范围是从定义开始到程序结束的所有函数 B)有效范围是从定义开始到函数结束 C)形参不是局部变量,而是全局变量 D)复合语句中不能定义局部变量 42.关于变量属性的说法错误的是()。 A)动态变量是在函数开始执行时分配内存单元,函数执行完毕后立即释放 B)静态变量是在函数的执行过程中始终占用同一内存单元,程序执行结束时才释放 C)全局变量都是静态变量,只有局部变量才有动态变量 D)动态变量若不赋初值,系统会自动赋值为0 43.若有变量定义“int x=5,*p=&x;”,则执行函数调用“fun(p);”时,传递给fun 函数的是()。 A)指针变量p 的地址B)指针变量*p 的值 C)变量x 的地址D)变量x 的值 44.以下数组的定义形式正确的是()。 A)int k=5,a[k];B)int a[ ];C)char c[]={'a'};D)char a(10);45.以下一维数组的定义及初始化中,错误的是()。A)int a[3]={0};B)int a[3]={1,1,1}; C)static int a[3];D)int n=3,a[n]={0};46.若有定义“int a[ ][3]={0,1,2,3,4,5,6,7};”,则元素a[1][2]的值为()。A)1 B)2 C)4 D)5 47.若有说明语句“int a[2][4]={{1},{2,3}};”,则数组元素a[1][1]的值为()。A)0 B)1 C)2 D)3 48.若有定义“char s1[20],s2[ ]=“China”;”,为使s1 的值与s2 相同,下列选项中正确的是()。 A)s1=s2;B)strcmp(s1,s2);C)strcpy(s1,s2);D)strcpy(s2,s1);49.为了比较字符串s 是否大于t,条件表达式应该写成()。A)s>t B)strcmp(s,t)<0 C)strcmp(s,t)==0 D)strcmp(s,t)>0 50.若有语句“int a[10],*p=&a[2];”,则执行语句“p=p+4;”后,p 指向的数组元素是()。 A)a[4] B)a[5] C)a[6] D)a[7] 51.执行以下程序段的输出结果是()。char s[ ]=“Program”,*ptr;for(ptr=s;*ptr!='g';ptr++)printf(“%c”,*ptr);A)Pro B)Prog C)Proram D)程序有错误 52.对以下说明语句的正确理解是()。int a[10]={6,7,8,9,10};A)将5 个初值依次赋给a[1]至a[5] B)将5 个初值依次赋给a[0]至a[4] C)将5 个初值依次赋给a[6]至a[10] D)因为数组长度与初值的个数不相同,所以此语句不正确 53.以下给字符数组str 定义和赋值正确的是()。 A)char str[10];str={“China!”};B)char str[ ]={“China!”};C)char str[10];strcpy(str, “abcdefghijkl”);D)char str[10]={“abcdefghijkl”};54.当接受用户输入的含有空格的字符串时,应使用()函数。A)gets B)getchar C)scanf D)printf 55.执行以下程序段的输出结果是()。int a[ ]={1,8,2,8,3,8,4,8,5,8};printf(“%d,%dn”,a[4]+3,a[4+3]);A)6,6 B)8,8 C)6,8 D)8,6 56.以下说法正确的是()。 A)p[i]等价于*(p+i)B)&p[i]等价于*(p+i)C)p[i]等价于p+i D)p[i]等价于*p+i 57.设有定义“double a[10], *s=a”,以下能够代表数组元素a[2]的是()。A)(*s)[2] B)*(s+2)C)*s[2] D)*s+2 58.执行下面程序段的输出结果是()。char s[ ]=“Prog”;char *p;for(p=s;p 用不正确的是()。 A)scanf(“%s”,stu.name);B)printf(“%d,%s,%dn”,stu);C)p->score=98;D)strcpy((*p).name,“LiMing”);60.已知如下定义,则下面叙述不正确的是()。struct stu{ int a;float b;}stutype;A)struct 是结构体类型的关键字 B)struct stu 是用户定义的结构体类型 C)stutype 是用户定义的结构体类型名 D)a 和b 都是结构体成员名 61.当定义一个结构体变量时,系统为它分配的内存空间是()。A)结构体中一个成员所需的内存容量 B)结构体中 10.C 语言中求字节的运算符是____________。 11.若有C 语言语句“scanf(“%d,%d”,&a,&b);”,如果要给变量a 输入5,变量b 输入6,则 在程序执行时,应该输入____________,然后回车。12.C 语言中表示换行的转义字符是____________。13.C 语言程序书写格式自由,一行可以写几个语句,一个语句也可以写在多行上。每条语 句的最后必须有一个____________符号表示语句的结束。 14.若有定义“int a=2,b=3,x;x=a>b?a:b;”,则x 的值为____________。 15.switch 语句中,为了在其它条件都不满足时执行某个操作,应该使用____________子句。 16.如果循环体不需要执行任何操作,此时应使用____________语句作为循环体。17.若要提前终止循环语句的执行,应该使用____________语句。 18.若有定义“int a,*p=&a;”,要通过指针变量p 来输入a 的值,请填空。scanf(“%d”,____________);19.若有定义“int x,*p;”,为了让p 指向x,应该执行的操作是____________。20.判断闰年的逻辑表达式为y%4==0&&y%100!=0______y%400______0。21.关系表达式的值是一个逻辑值,只有____________种取值。22.设“a=1,b=2,c=3,d=4,m=n=1”,执行完“(m=a>b)&&(n=c>d)”后,n 的值为____________。23.C 语言提供了3 种基本循环结构:while 循环、do-while 循环和____________循环。24.for 语句中有3 个表达式,各表达式间用____________分隔。25.除了给指针变量赋地址值外,还可以给指针变量赋空值,给指针变量p 赋空值的语句是 ____________。第二篇:c语言复习题
第三篇:C语言复习题
第四篇:c语言复习题