
一.单项选择题
1.组成C程序的基本单位C____。
A)表达式与语句 B)若干文件 C)函数 D)main函数
2.下列为字符常量的是__C_____。
A)HE B)"I" C)'Z' D)She
3.若变量c为char类型,能正确判断c为小写字母的表达式是__d___。
A)'a'<=c<= 'z' B)(c>= 'a')||(c<= 'z') C)('a'<=c)and ('z'>=c) D)(c>='a')&&(c<='z')
4.在C语言中,正确的int类型的常数是__D______。
A)-2U B)059 C)3a D)0xAF
5.下列变量定义正确的是____d____。
A)int x_1 ; y; B)int x=y=5 ; C)int for=4; D)int printf=2,x_y=2;
6.以下函数原型说明正确的是____A____。
A)float add(int x, int y) ; B)int add(int x;int y) ;
C)char add( x,y) ; D)int add(char x[ ] [ ]) ;
7.有程序段如下,不能表示为地址的是___D_____。
int x=2,*p; p=&x; x=x+1;
A)&x B)p C)&p D)&(x+1)
8.简单变量做实参时,实参与其对应的形参之间的数据传递方式是____C____。
A)双向值传递方式 B)地址传递方式 C)单向值传递方式 D)用户指定传递方式
9.下列表达式没有错误的是_C_______。
int x , *p;
A)5.0%2 B)x+1=5 C)&p D)&(x+1)
10.下列错误的语句是C________。
A)int k,*p=&k; scanf(“%d”,&k);
B)int k,*p=&k; scanf(“%d”,p);
C)int k,*p; *p=&k; scanf(“%d”,p);
D)int k,*p ; p=&k; scanf(“%d”,p);
11.任何复杂的程序,都是由__C______构成的。
A)分支结构、顺序结构、过程结构 B)循环结构、分支结构、过程结构
C)顺序结构、循环结构、分支结构 D)循环结构、分支结构
12.有以下定义和赋值语句,能够正确表示a[1][2]的表达式是 _D_______ 。
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[3]= a;
A)*((*p+1)+2) B)(*p+1)+2 C)*(*(p+5)) D)*(*(p+1)+2)
13.以下说法中正确的是___C_____。
A)C程序总是从第一个定义的函数开始执行
B)在C程序中,要调用的函数必须在main函数中定义
C)C程序总是从main函数开始执行的
D)C程序中的main函数必须放在程序的开始部分
14.执行下列两个语句后,输出的结果为( C )
char c1=65,c2=97;
printf(“%c,%d”,c1,c2);
A、65,98 B、65,a C、A,97 D、A,a
15.以下说法错误的是A________。
A)do~while语句与while语句的区别仅是关键词“while”出现的位置不同
B)while语句是先进行循环条件判断,后执行循环体的
C)do~while是先执行循环体,后进行循环条件判断
D)while、do~while和for语句的循环体都可以是空语句
16.C语言程序是从main函数开始执行,这个函数写在_____D___。
A)程序文件开始 B)它所调用函数的前面
C)程序文件最后 D)程序文件任何位置
17.在C语言类型说明中,int、char、short等类型的长度是__B______。
A)由用户自己定义的 B)与机器字长有关的
C)固定的 D)任意的
18.以下字符中,不正确的C语言转义字符分别是_____B___。
A)‘\\\’ B)‘011’ C)‘\’’ D)‘\\xaa’
19.以下选项中,合法的C语言关键字是__C______。
A)integer B)Char C)short D)Long
20.C语言中函数返回值的类型由( D )决定的
A、return语句中的表达式类型 B、调用该函数的主调函数的类型
C、调用函数时临时决定 D、定义函数时所指定的函数类型
21.以下叙述错误的是_____C___。
A)C语言本身没有输入输出语句
B)一个可执行的C源程序必须包含一个main函数
C)C程序中,注释说明只能位于一条语句的后面
D)C程序的基本组成单位是函数
22.设有以下程序片段,请问执行后的输出结果是_B_____。
char ch='A';
ch=(ch>='a' && ch<='z')?ch:ch-'A'+'a';
printf("%c" , ch);
A)A B)a C)Z D)z
23. 已知int x=10,y=5;执行语句x%=y;后x的值是(A )。
A、0 B、1 C、5 D、2
*24.以下有关宏替换的叙述错误的是__A______。
A)宏名必须用大写字母表示 B)宏替换不占用运行时间
C)宏名不具有类型 D)宏替换只是字符替换
25.以下对二维数组a的声明正确的是_C_______。
A)int a [3][ ]; B)int a (3,4); C)int a [1][4]; D)int a (3)(4);
26.如果在一个函数的复合语句中定义一个变量,以下叙述正确的是___B_____。
A)该变量在该函数中有效 B)该变量只在该复合语句中有效
C)该变量为不合法的变量 D)该变量在本程序范围内有效
27.能表示x为偶数的表达式是___A_____。
A)x %2==0 B)x%2==1 C)x%2 D)x%2!=0
28.C语言中运算对象必须是整型的运算符是__A______。
A) % B) / C)= D) <=
29.下列数组定义正确的是__D______。
A)int a[5],b[2,3]; B)char no(30); C)char x[ ]; D)int x[5]={1,2,3};
30.变量定义如下:
int x;
float y;
以下输入语句正确的是__C______。
A)scanf("%f%f",&y,&x); B)scanf("%f%d", y, x);
C)scanf("%f%d",&y,&x); D)scanf("%5.2f%2d",&y,&x);
31.下列函数头中形参说明错误的是___A_____。
A)float average(float array[9], n) B)float average(float *array ,int n)
B)float average(float array[ ] ,int n) C)float average(float array ,int n)
32.函数形参与实参之间的传递是“值传递”,以下叙述正确的是___B_____。
A)实参和与其对应的形参共用一个存储单元
B)实参和与其对应的形参各占用的存储单元
C)当实参和与其对应的形参同名时才共用一个存储单元
D)形参是形式的,不占用存储单元
33.以下if语句错误的是_C_______。
A)if (x C)if (x 34.以下程序的输出结果是( ) void fun(int *p,int b) { *p=2; b=5; } main( ) { int a=3, b=7; fun(&a,b); printf(“%d,%d\\n”, a,b); } A、2,5 B、3,7 C、3,5 D、2,7 35.t为int类型,进入下面的循环之前t的值为0,以下叙述正确的是________。 while( t=l ) { …… } A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对 36.以下说法正确的是________。 A)C语言源程序无论包含了多少函数,总是从main函数开始执行。 B)main是由C语言提供的,并不需要用户自己编写。 C)调用C语言标准库函数时,程序中要用到include命令,它也是C语言的一种语句。 D)在C语言中,要调用的函数必须在main函数中定义。 37.若0<=i<10,则下列________是对数组元素的错误引用。 int a[ ]={1,2,3,4,5,6,7,8,9,0},*p, i; p=a; A)*(a+ i) B)a[p-a] C)p+ i D)*(&a[i]) 38.下列表达式的值为1.5的是________。 int x; float y; A)x=3/2.0 B)x=3/2 C) y=3/2 D)y=3/2.0 39.下列语句实现的功能与其printf语句中所表达的含义相符的是________。 A) int a,b,c; scanf ("%d%d%d" ,&a,&b,&c); if(a=b=c) printf("这是一个等边三角形\\n"); B) int a,b,c; scanf ("%d%d%d" ,&a,&b,&c); if(a+b>c||a+c>b|| c+b>a)printf("这三条边能组成一个三角形\\n"); C) int a,b,c; scanf ("%d%d%d" ,&a,&b,&c); if(a==b&&b==c) printf("这是一个等边三角形\\n"); D) int a,b,c; scanf ("%d%d%d" ,&a,&b,&c); if(a==b||b==c) printf("这是一个等腰三角形\\n") *40.下列关于#include命令的叙述中,错误的是____________。 A)#include命令中,文件名可以用双引号或尖括号括起来 B)一个被包含文件中又可以包含另一个被包含文件 C)一个#include命令中可以指定多个被包含文件 D)一个#include命令中只能指定一个被包含文件 41.若a为整型变量,则以下语句________。 a=-2L; printf (“%d\\n”,a); A)赋值不合法 B) 输出值为-2 C)输出为不确定值 D)输出值为2 42.若有说明语句:int y[ ][4]={0,0,0,0,0,0}; 则正确的叙述是________。 A)数组y的每个元素都可得到初值0 B)二维数组y的行数为1 C)该说明等价于int y[0][4]={0}; D)有元素y[0][0]至y[0][5]可得到初值,其余元素均得不到初值0 43.若 int 类型数据占两个字节,则下列语句的输出为________。 int k=-1; printf(“%d,%u\\n”,k,k); A)-1,-1 B)-1,32767 C)-1,32768 D)-1,65535 44.已知:char a; int b; float c; double d; 执行语句c=a+b+c+d;后,变量c的数据类型是________。 A)int B)char C)double D)float 45.若int i=10;执行下列程序后,变量i的最后结果是( ) switch ( i ) { case 0: i+=1; case 10: i+=1; case 11: i+=1; default: i+=1;break; } A、10 B、11 C、12 D、13 46.若有以下变量说明和数据的输入方式,则正确的输入语句为________。 变量说明:float x1,x2; 数据的输入方式:4.52<回车> 3.5<回车> A)scanf(“%f,%f”,&x1,&x2); B)scanf(“%f%f”,&x1,&x2); C)scanf(“%3.2f,%2.1f”,&x1,&x2); D)scanf(“%3.2f%2.1f”,&x1,&x2); 47.若变量已正确定义,与语句 if(a>b)k=0;else k=1;等效的是________。 A)k=(a>b)?1:0 B)k=a>b; C)k=a<=b; D)a>b?0:1; 48.若有定义:int x,*pb;则正确的赋值表达式是________。 A)pb=&x B)pb=x C)*pb=&x D)*pb=*x 49.已知:int a,*p=&a; 则为了得到变量a的值,下列错误的表达式为________。 A)p[0] B)*p C)&*a D)*&a 50.在C语言中,引用数组元素时,其数组下标的数据类型允许是________。 A)整型常量 B)整型表达式 C)整型常量或整型表达式 D)任何类型的表达式 51.若有定义:int b[5];则以下对b 数组元素的正确引用是________。 A)*&b[5] B)b+2 C)*(*(b+2)) D)*(b+2) 52.设有定义语句char s[ ]= "123";,则表达式s[3]的值是________。 A)'1' B)'3' C)'\\0' D)语法出错 53.语句if (!i ) i++; 中的条件表达式 !i 等价于________。 A)i==0 B)i!=1 C)i!=0 D)-i 54.设有int x,y; 以下语句判断x和y是否相等,正确的说法是该语句________。 if (x=y) printf(" x is equal to y."); A)语法错 B)不能判断x和y是否相等 C)编译出错 D)能判断x和y是否相等 55.C语言中规定,if语句的嵌套结构中,else总是与________配对。 A)与最近的if 配套 B)与第一个if 配套 C)按缩进位置相同的if配套 D)与最近的且尚未配对的if 配套 56.以下有关switch语句的正确说法是________。 A)break语句是语句中必须的一部分 B)在switch 语句中可以根据需要使用或不使用break语句 C)break A语句在switch 语句中不可以使用 D)在switch 语句中的每一个case都要用break语句 57.若有下面的变量定义,以下语句中合法的是( ) int i,a[10],*p; A、p=a+2; B、p=a[5]; C、p=a[2]+2; D、p=&(i+2); 58.当执行以下程序时,________。 #include void main( ) { int a; while(a=5) printf("%d ",a--); } A)循环体将执行5次 B)循环体将执行0次 C)循环体将执行无限次 D)系统会死机。 59.以下函数的类型是________。 int sum(double x, double y) { double s; s=x+y; return s; } A)字符型 B)不确定 C)整型 D)实型 60.以下叙述不正确的是________。 A)一个C源程序文件必须包含一个main( )函数 B)一个C源程序文件可由一个函数组成 C)一个C源程序文件是一个编译单位 D)一个C源程序文件可由多个函数组成 61.若用数组名作为函数调用时的参数,则实际上传递给形参的是________。 A)数组元素的个数 B)数组的第一个元素值 C)数组中全部元素的植 D)数组首地址 62.C语言允许函数值类型的缺省定义,此时该函数值隐含的类型是________。 A)long 型 B)float 型 C)double型 D)int型 63.以下叙述正确的是________。 A)函数的定义和函数的调用均不可以嵌套 B)函数的定义和函数的调用均可以嵌套 C)函数的定义可以嵌套,但函数的调用均不可以嵌套 D)函数的定义不可以嵌套,但函数的调用均可以嵌套 .凡是在函数中未指定存储类别的局部变量,其隐含的存储类别是________。 A)静态(static) B)外部(extern) C)自动(auto) D)寄存器(register) 65.若已定义 x和 y为double类型,则表达式: x=l, y=x+3/2结果是( ) A、1 B、2 C、2.0 D、2.5 66.C语言的编译系统对宏命令的处理是________。 A)在程序连接时进行的 B)在对源程序中的其它语句编译之前进行的 C)在程序运行时进行的 D)和C程序中的其它语句同时进行的 67.下列对字符串的定义中,错误的是___ __ 。 A)char str[5]= "abcde" B)char str[ ]= "abcde" C)char *str ="abcde" D)char str[ ]={ 'a', 'b', 'c', 'd', 'e', '\\0'} 68.若有定义char x[ ]= "12345"; char y[ ]={ '1', '2', '3', '4', '5'};则 。 A)x数组与y数组的长度相同 B)x数组长度大于y的长度 C)x 数组长度小于y数组长度 D)x数组等价与y 数组 69.有如下程序,该程序的输出结果是( ) long fib (int n) { if(n>2) return(fib(n-1)+fib(n-2)); else if(n==2) return(2); else return(1); } main( ) { printf(“%d\\n” ,fib(4)); } A、3 B、4 C、5 D、6 70. 设有定义“int a=3, b,*p=&a;”,则下列语句中使 b不为3的语句是( ) A、 b=* &a B、 b=* p C、 b=a D、b=*a 71. 以下选项中不能正确把cl定义成结构体变量的是( ) A)typedef struct B)struct color cl { int red; { i int blue; } COLOR; };COLOR cl; C)struct color D)s { i i } cl; 72. 以下能正确定义一维数组的选项是 A)int num[]; B)#define N 100 int num[N]; C)int num[0..100]; D)int N=100; int num[N]; 73. 下列选项中正确的语句组是 A)char s[8]; s={"Beijing"}; B)char *s; s={"Beijing"}; C)char s[8]; s="Beijing"; D)char *s; s="Beijing"; 74. 已定义以下函数 fun(int *p) { return *p; } 该函数的返回值是 A)不确定的值 )形参p中存放的值 C)形参p所指存储单元中的值 )形参p的地址值 75. 下列函数定义中,会出现编译错误的是 A)m B)int max(int x,y) { int z; z=x>y ? x:y; return z; } C)m)int max(int x,int y) { int z; { return(x>y?x:y); } z=x>y?x:y; return(z);} 76. 有以下程序 #include main( ) { char str[][20]={"HelloBeijing"}, 程序运行后的输出结果是 A)0 B)5 C)7 D)20 77.有以下程序 main() { int a[3][3] ; *p,i; printf("%d \\n",a[1][2]); } 程序运行后的输出结果是 A)3 B)6 C)9 D)2 78. 有以下程序 main( ) {char s[ ]="ABCD",*p; for(p=s+1; p A) ABCD B) A C) B D) BCD B C CD CD C D D D D 79. 以下叙述中正确的是 A) 局部变量说明为static存储数,其生存期将得到延长 B) 全局变量说明为static存储类,其作用域将被扩大 C) 任何存储类的变量在未赋初值时,其值都是不确定的 D) 形参可以使用的存储类说明符与局部变量完全相同 80. 有以下程序 main( ) { int a=7,b=8,*p=&a,*q=&b,*r; r=p; p=q;q=r; printf("%d,%d,%d,%d\\n",*p,"q,a,b); } 程序运行后的输出结果是 A) 8,7,8,7 B) 7,8,7,8 C) 8,7,7,8 D) 7,8,8,7 81. 若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为 A)0 B)1 C)- D)一个非0值 82. 下列关于C语言数据文件的叙述中正确的是 A)文件由ASCII码字符序列组成,C语言只能读写文本文件 B)文件由二进制数据序列组成,C语言只能读写二进制文件 C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 83. 设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是 A) c1^c2 B) c1&c2 C) ~c2 D) c1|c2 84. 有以下说明和定义语句 struct student { int age; char num[8];}; struct student stu[3]={{20,"200401"},{21,"200402"},{10\\9,"200403"}}; struct student *p=stu; 以下选项中引用结构体变量成员的表达式错误的是 A) (p++)->num B) p->num C) (*p).num D) stu[3].age 85. 有如下程序 #include main( ) { FILE *fp1; fp1=fopen("f1.txt fprintf(fp1,"abc"); fclose(fp1); } 若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为 A) goodabc B) abcd C) abc D) abcgood 86. 有以下程序 main() { int x=3, y=2, z=1; printf("%d\\n",x/y&~z); } 程序运行后的输出结果是 A)3 B)2 C)1 D)0 87. 以下程序的输出结果是 main( ) { char st[20]= "hello\\0\\\\\\\"; printf(%d %d \\n",strlen(st),sizeof(st)); } A) 9 9 B) 5 20 C) 13 20 D) 20 20 88. 整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是 A) x || y B) x | y C) x & y D) x ^ y . 已定义以下函数 fun(char *p2, char *p1) { while((*p2=*p1)!='\\0'){ p1++;p2++; } } 函数的功能是 A)将p1所指字符串复制到p2所指内存空间 B)将p1所指字符串的地址赋给指针p2 C)对p1和p2两个指针所指字符串进行比较 D)检查p1和p2两个指针所指字符串中是否有'\\0' 90. 以下程序的输出结果是 #define M(x,y,z) x*y+z main( ) { int a=1,b=2, c=3; printf("%d\\n", M(a+b,b+c, c+a)); } A) 19 B) 17 C) 15 D) 12 二.填空 1、一个变量的地址,可以通过在变量前加 & 符号来得到。 2、将一维数组x的第i个元素的地址赋给指针变量P的语句是 p=&x[i];。 3、C语言程序由main( )函数开始执行,应在__main( )函数中 ___结束。 4、 设p1,p2为同类型的指针变量,若有p1= =p2,则说明p1与p2指向__同一个变量_ _。 5、结构化程序分为以下三种结构:顺序结构, 选择 结构, 循环 结构。 6、逗号表达式a = 1,a + 1,a + + 的值是____1________。 7、int c;c=1/2; 则c的值是 0 。 8、“20 9、在程序中定义了一个变量:int score;用来存储成绩数据,如果希望取得用户键入的数据,可使用 scanf(“%d”,&score); 语句。 10、int i=6; do{printf(“H”);i=i+1;} while (i<6)写出该段代码运行后的输出内容: H 。 11、最简单的C程序最少由一个函数组成,这个函数是 main() 。 12、printf(“\\“hello world\\””);这条语句输出的内容是: ”hello world” 。 13、C语言中三种常用的循环控制结构是do—while循环、 while 循环和 for 循环。 14、定义一个指向浮点型数据的指针变量p的语句是__float__ *p_; _。 15、设 i,j,k均为 int型变量,则执行完下面的for语句后,k的值为 10 。 for(i=0, j=10;i<=j;i++,j--)k=i+j; 16、当a=2,b=3,c=1时,执行以下程序段后,输出结果是__end____。 if(a>b) if(a>c) printf(″%d\\n″,a); else printf (″%d\\n″,b); printf(″end\\n″); 17、设 int a=7,b=9,t;执行完表达式t=(a>b)?a:b后,t的值是( 9 )。 18、有一个整型变量 int score;若用printf函数输出这个变量的值,应使用____printf(“%d”,score)_;___________________语句。 19、为表示变量a和b都大于0,使用的C语言表达式是__(a>0)&&( b>0)___。 20、“* ”称为___取内容________运算符,“&”称为___取地址______运算符。 21、一个字符变量可存放__1__个字符,可用 字符 数组存放字符串。 22、C语言中数组的下标的最小值是 0 。 23、在一个C程序文件中写一行注释的方法是 /* */ 。 24、判断整型变量a即是5又是7的整数倍的C表达式是 (a%5==0) && (a%7==0) 。 25.在C语言中使用到的变量,都应先( ),后( )。 26.若有定义:char c=′\\010′;则变量c中包含的字符个数为______。 27.函数的返回值是通过函数中的( )语句获得的。 25 .定义 使用 26.1个 27. return 28#include 29C语言表达式2/5*10的值是___0______ 30、凡在C语言函数中未指定存储类别的变量,其隐含的存储类别为 __auto__ 31、在C语言中,数组作为函数的形参,函数调用时,若用数组名作为函数的实参,则实际上传递给形参的是____数组首地址_____ 32、 写出条件“-10≤x≤10”的C语言表达式是_______ 33、 函数指针是函数的________,通过它可以访问该函数 34、 二维数组名是_________的指针常量 35、 数组的下标可以是非负的________ 37、 在格式输出语句中,用于带符号的十进制长整型输出的格式符是______。 38、 C语言程序的3种基本结构是_______、_________、________ 32、 (x>=10)&&(x<=10) 33、 内存地址 34、 一维数组 35、 整型表达式 37、 %ld 38、 顺序结构、选择结构、循环结构 39、已知a=3,b=2,则表达式a*=b+8的值是( 30 )。 40、当a=2,b=2,c=2时,则表达式a = =b= =c的值是( 0 )。 41 已有定义如下: struct node { int data; struct node *next; } *p; 以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空。 p = (struct node *)malloc( sizeof(struct node) ); 42 若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen("d1.dat或"d1.dat或"d1.dat );。 43 有以下程序 void f( int y,int *x) {y=y+*x; *x=*x+y;} main( ) { int x=2,y=4; } 执行后输出的结果是 8 4 三.程序阅读题 1.阅读以下程序,若输入5<回车>,写出程序运行结果。 int main( ) { int i, n; scanf("%d", &n); .0f\\n", fact); } } 2.写出下面程序的运行结果。 void main( ) { int i,j,sum=0; int a[3][3]={1,1,1,2,2,2,3,3,3}; } 3.写出以下程序的运行结果。 程序运行后的输出结果是
