1、在一个c程序中( )。 a) main函数必须出现在所有函数之前 b) main函数可以在任何地方出现 c) main函数必须出现在所有函数之后 d) main函数必须出现在固定位置 a、c语言中main函数的位置不固定 b、c语言中main函数的位置不固定 c、c语言中main函数的位置不固定 d、c语言中main函数的位置不固定
2、以下选项中合法的用户标识符是( )。 a) long b) _2test c) 3dmax d) a.dat a、标识符不能是关键字 b、符合标符的定义 c、标示符不能用数字开头 d、标识符中不能有除下划线以外的其他特殊字符
3、以下选项中不属于c语言的类型的是( )。 a) integer b)float c) int d) char a、integer不是c语言中的类型关键字 b、float是c语言中的浮点类型关键字 c、int是c语言中的整型关键字 d、char是c语言中的字符类型关键字
4、以下变量x.、y、z均为double类型且已正确赋值,不能正确表示数学式子的c语言表达式是( )。 a) x/y*z b) x*(1/(y*z)) c) x/y*1/z d) x/y/z a、该答案表示的是 b、符合要求 c、符合要求 d、符合要求
5、c语言中运算对象必须是整型的运算符是( )。 a) % b) / c) = d) <= a、%是求余运算,运算对象只能是整型数据 b、/是除法运算符,运算对象可以是实型数据 c、=是赋值运算符,运算对象可以是其它类型 d、<=是关系运算符,运算对象可以是其它类型
6、设有 int x=11; 则表达式(x * 1/3) 的值是( )。 a) 3 b) 4 c) 11 d) 12 a、表达式x * 1/3运算过程中,先使用x的值参于运算,等同于11/3,由于运算对象均为整型,故得整数商3,当该表达式运算结束后,x的值自增为12 b、不符合运算规则 c、不符合运算规则 d、不符合运算规则
7、以下选项中,非法的字符常量是( )。 a) ‘\t’ b) ‘\17’ c)“n” d) ‘\xaa’ a、是转义字符 b、是转义字符 c、是字符串,不是字符 d、是转义字符
8、若有定义:int a=8,b=5,c;,执行语句c=a/b 0.4;后,c的值为( )。 a) 1.4 b) 1 c) 2.0 d) 2 a、不符合运算规则 b、a/b的结果是1,1加上0.4是1.4,由于c是整型变量,进行强制类型转换,故c的值是1 c、不符合运算规则 d、不符合运算规则
9、以下程序的输出结果是( )。 #include void main() { char c=’z’; printf(“%c”,c-25); } a) a b) z c) z-25 d) y a、字符‘z’的ascii码值是122,122-25=97,97是字符‘a’的ascii码值,按%c格式输出为字符'a'。 b、计算错误 c、表示错误 d、计算错误
10、以下选项中,与k=n 完全等价的表达式是( )。 a) k=n,n=n 1 b) n=n 1,k=n c) k= n d) k =n 1 a、k=n 的含义是先将n的值赋给变量k,然后n自加1,故等价于逗号表达式k=n,n=n 1 b、不符合k=n 的含义 c、不符合k=n 的含义 d、不符合k=n 的含义
第二章 c语言控制语句
第二章单元测试
1、能正确表示逻辑关系:“a≥=10或a≤0”的c语言表达式是( )。 a) a>=10 or a<=0 b) a>=0||a<=10 c) a>=10 &&a<=0 d) a>=10||a<=0 a、解析错误 b、解析错误 c、解析错误 d、表达式“a≥=10或a≤0”是指a大于等于10或者小于等于0,故只有该答案正确。
2、设 a、b、c、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值应为( )。 a) 0 b) 1 c)2 d) 3 a、理解错误 b、理解错误 c、表达式(m=a>b)&&(n=c>d)运算时,由于m=a>b的值是0,故&&运算不再继续运算,产生运算短路,n=c>d不再执行,故c的值不变 d、理解错误
5、若有定义: float w; int a, b; 则合法的switch语句是( )。 a) switch(w) b) switch(a) { case 1.0: printf("*\n"); { case 1 printf("*\n"); case 2.0: printf("**\n"); case 2 printf("**\n"); } } c) switch(b) d) switch(a b); { case 1: printf("*\n"); { case 1: printf("*\n"); default: printf("\n"); case 2: printf("**\n"); case 2: printf("**\n"); default: printf("\n"); } } a、case后的常量是实数,不符合规则 b、case后面无冒号 c、符合switch语句的构造规则 d、switch后面多了分号
6、程序 #include void main() { int n=9; while(n>6) {n--;printf(“%d”,n);} } 的输出结果是( ) a)987 b) 876 c) 8765 d)9876 a、输出结果不对 b、循环体执行三次,第一次输出8,第二次输出7,第三次输出6。 c、输出结果和输出次数都不对 d、输出结果和输出次数都不对
7、以下程序段的输出结果是( )。 int x=3; do { printf("=,",x-=2); }while(!(--x)); a)1 b) 0 c)死循环 d) 1,-2, a、分析错误 b、分析错误 c、分析错误 d、do...while是一个先执行循环体再判断的循环语句,初始x=3,执行printf("=,",x-=2);输出1,此时x=1; while(!(--x))中的循环条件是先让x自减1,x=0,!(x)为真,继续执行循环体,printf("=,",x-=2);输出-2,再判断!(--x)的值,此时!(--x)为假,结束循环。
8、设i、j、k均为int型变量,则执行完下面的for循环后,k的值为( )。 for(i=0,j=10;i<=j;i ,j--)k=i j; a)12 b) 10 c) 11 d) 9 a、分析错误 b、循环体共执行了6次,每一次k的值均等于i j,结果为10. c、分析错误 d、分析错误
9、以下程序的输出结果是( )。 #include void main() { int a, b; for(a=1, b=1; a<=100; a ) { if(b>=10) break; if(b%3==1) { b =3; continue; } } printf(“%d\n”,a); } a)101 b) 6 c) 5 d) 4 a、分析错误 b、分析错误 c、分析错误 d、注意continue和break的使用,循环体共执行了4次
10、以下程序的输出结果是( )。 #include void main() { int a=0,i; for(i=1;i<5;i ) { switch(i) { case 0: case 3:a =2; case 1: case 2:a =3; default:a =5; } } printf("%d\n",a); } a)31 b)13 c)10 d)20 a、循环共执行了4次,由于switch语句中没有使用break语句,当i=1时执行了a =3;a =5;结果是a=8;当i=2时执行了a =3;a =5;结果是a=16;当i=3时执行了a =2;a =3;a =5;结果是a=26;当i=4时执行了a =5;结果是a=31 b、分析错误 c、分析错误 d、分析错误
第三章 数组
第三章单元测试
1、假定int类型变量占用两个字节,定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是( ) a) 3 b) 6 c) 10 d) 20 a、理解错误 b、理解错误 c、理解错误 d、int x[10]={0,2,4}实际上定义一个具有10个int型元素的一维数组,每个元素占2字节,故共占20个字节
2、执行下面的程序段后,变量k中的值为( )。 int k=3, s[2]; s[0]=k; k=s[1]*10; a)不定值 b) 33 c) 30 d) 10 a、int k=3,s[2];定义了一个一维数组s[2],s[2]中有两个元素s[0]和s[1],后面的语句使s[0]=3,但s[1]没有确定的值,故执行语句k=s[1]*10后,k的值不确定 b、理解错误 c、理解错误 d、理解错误
3、若有说明“int x[3][4];”,则对x数组元素的正确引用是( )。 a) x[2][4]; b) x[1,3] c) x[4-2][0] d) x[3][0] a、x[2][4]中的第二个下标越界 b、x[1,3]不符合c语言的语法规则 c、int x[3][4]共定义了12个数组元素,分别是x[0][0],x[0][1],x[0][2],x[0][3],x[1][0],x[1][1],x[1][2],x[1][3],x[2][0],x[2][1],x[2][2],x[2][3]。x[4-2][0] 指的是x[2][0] 。 d、x[3][0]中的第一个下标越界
4、若的以下语句,则下面( )是正确的描述。 char x[]=”12345”; char y[]={‘1’,’2’,’3’,’4’,’5’}; a)x数组和y数组的长度相同 b) x数组的长度大于y数组的长度 c) x数组的长度小于y数组的长度 d) x数组等价于y数组 a、理解错误 b、由于字符串”12345”隐含着一个字符串结束标志'\0',故char x[]=”12345”定义的数组x的长度是6; 而char y[]={‘1’,’2’,’3’,’4’,’5’};定义的y数组长度是5。 c、理解错误 d、理解错误
6、程序 #include void main() { int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&p[i]%2){k=k p[i];i ;} printf("%d\n",k); } 执行后输出结果是( )。 a) 58 b) 56 c) 45 d) 24 a、循环条件分析错误 b、循环条件分析错误 c、循环条件分析错误 d、当表达式i<7&&p[i]%2值为真时执行循环体,故该程序的循环体只执行了两次,k的值是24。
7、以下程序的输出结果是( )。 #include void main() { int i, a[10]; for(i=9;i>=0;i--) a[i]=10-i; printf(“%d%d%d”,a[2],a[5],a[8]); } a) 258 b) 741 c) 852 d) 369 a、分析方法错误 b、分析方法错误 c、该程序的循环语句使得:a[9]=1,a[8]=2,a[7]=3,a[6]=4,a[5]=5,a[4]=6,a[3]=7,a[2]=8,a[1]=9,a[0]=10,printf(“%d%d%d”,a[2],a[5],a[8]);的输出结果852 d、分析方法错误
8、以下程序的输出结果是( ) #include void main() { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i ) for(j=i;j<=i;j ) t=t b[i][b[j][j]]; printf("%d\n",t); } a) 3 b) 4 c) 1 d) 9 a、循环分析错误 b、本题考查是的数组的下标变化,注意内循环的循环条件是j<=i,输出结果是4。 c、循环分析错误 d、循环分析错误
9、程序 #include #include void main() { char s[]="\n123\\"; printf("%d,%d\n",strlen(s),sizeof(s)); } 执行后输出结果是( )。 a) 赋初值的字符串有错 b) 6,7 c) 5,6 d) 6,6 a、不理解字符串初始化 b、对字符串和字符数组分析错误 c、char s[]="\n123\\"中‘、'\n'是转义字符换行,'\\'是转义字符表示'\',故字符串的长度是5,为数组s开辟了6个字节的内存空间。 d、对字符串和字符数组分析错误
10、程序执行后的输出结果是( )。 #include #include void main() { char arr[2][4]; strcpy(arr[0],"you"); strcpy(arr[1],"me"); arr[0][3]='&'; printf("%s \n",arr); } a) you&me b) you c) me d) err a、二维数组的在内存的存储方式是行主序存储,char arr[2][4]定义了8个数组元素,它们以 arr[0][0],arr[0][1],arr[0][2],arr[0][3],arr[1][0],arr[1][1],arr[1][2],arr[1][3]顺序在内存开辟空间, 语句strcpy(arr[0],"you") 使arr[0][0]=‘y’,arr[0][1]=‘o’,arr[0][2]=‘u’,arr[0][3]=‘\0’。语句strcpy(arr[1],"me");使arr[1][0]=‘m’,arr[1][1]]=‘e’,arr[1][2]]=‘\0’。arr[0][3]='&'使arr[0][3]重新赋值为'&'。printf("%s \n",arr)以字符串格式输出,arr为首地址,故输出结果为you&me。 b、字符串结束标志分析的不对 c、字符串起始地址分析的不对 d、理解错误
第四章函数
第四章单元测试
1、以下函数值的类型是( )。 fun( float x ) { float y; y= 3*x-4; return y; } a) int b) 不确定 c) void d) float a、没有指定函数类型时,系统默认函数的类型是int类型。 b、没有指定函数类型时,系统默认函数的类型是int类型。 c、没有指定函数类型时,系统默认函数的类型是int类型。 d、没有指定函数类型时,系统默认函数的类型是int类型。
2、有如下函数调用语句 func(rec1,rec2 rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是( )。 a) 3 b) 4 c) 5 d) 不确定 a、func(rec1,rec2 rec3,(rec4,rec5))函数中共有rec1,rec2 rec3,(rec4,rec5)三个实在参数。 b、func(rec1,rec2 rec3,(rec4,rec5))函数中共有rec1,rec2 rec3,(rec4,rec5)三个实在参数。 c、func(rec1,rec2 rec3,(rec4,rec5))函数中共有rec1,rec2 rec3,(rec4,rec5)三个实在参数。 d、func(rec1,rec2 rec3,(rec4,rec5))函数中共有rec1,rec2 rec3,(rec4,rec5)三个实在参数。
3、以下程序的输出结果是( )。 #include fun(int x, int y, int z) { z=x*x y*y; } void main() { int a=31; fun(5,2,a); printf(“%d\n”,a); } a) 0 b) 29 c) 31 d) 无定值 a、理解错误 b、x值不能回传 c、变量a是主函数中的变量,作为实在参数通过fun(5,2,a)实现函数调用,只能将a的值传递给形参x,但x值不能回传给a,故a的值仍然是31。 d、无效选项
4、程序 #include int func(int a,int b) { return(a b);} void main() { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf("%d\n",r); } 输出的结果是( )。 a) 12 b) 13 c) 14 d) 15 a、理解错误 b、理解错误 c、理解错误 d、r=func(func(x,y),z)运用了函数的嵌套调用,func(x,y)的值是7,func(func(x,y),z)相当于func(7,8),其值为15,故r=15。
5、程序 #include long fib(int n) { if(n>2) return(fib(n-1) fib(n-2)); else return(2); } void main() { printf("%d\n",fib(3));} 输出结果是( )。 a) 2 b) 4 c) 6 d) 8 a、理解错误 b、该程序实现了函数的递归调用,欲求fib(3),在fib函数中由于实参3大于2,故需计算fib(2) fib(1),在fib(2) fib(1)中需调用fib(2)和fib(1),由于此时实参均不大于2,fib(2)和fib(1)的函数值都是2,然后回溯求得fib(3)的值等于4。 c、理解错误 d、理解错误
7、程序 #include int f1(int x,int y) { return x>y?x:y; } int f2(int x,int y) { return x>y?y:x; } void main() { int a=4,b=3,c=5,d,e,f; d=f1(a,b); d=f1(d,c); e=f2(a,b); e=f2(e,c); f=a b c-d-e; printf("%d,%d,%d\n",d,f,e); } 执行后输出结果是( )。 a) 3,4,5 b) 5,3,4 c) 5,4,3 d) 3,5,4 a、理解错误 b、理解错误 c、函数f1是求两数中的最大值,函数f2是求两数中的最小值,经过连续的函数调用,d获得了a,b,c中的最大值,e获得了a,b,c中的最小值,又执行f=a b c-d-e;f获得了三个数中的中间值。 d、理解错误
8、以下程序的输出结果是( )。 #include int a,b; void fun() { a=100;b=200;} void main() { int a=5,b=7; fun(); printf("%d%d\n",a,b); } a) 100200 b) 57 c) 200100 d) 75 a、对全局变量和局部变量理解错误 b、全局变量的作用范围不包括同名局部变量所在的函数,fun()函数中的a,b是全局变量,main()函数中的a,b是局部变量,故输出结果是57。 c、对全局变量和局部变量理解错误 d、对全局变量和局部变量理解错误
9、程序 #include int a=3; void main() { int s=0; { int a=5; s =a ; } s =a ; printf("%d\n",s); } 运行后的输出结果是( )。 a) 8 b) 10 c) 7 d) 11 a、{ int a=5; s =a ; } 中的a是局部变量,此时执行 s =a ,s的值是5。其后的 s =a 中的a是全局变量,执行该语句后,s的值是8。 b、理解错误 c、理解错误 d、理解错误
10、以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define n 10 void arrin(int x[n]) { int i=0; while(i a、i没有发生变化 b、i没有发生变化 c、x (i ) 是x数组中元素的地址,每次循环时让i发生了变化 d、先让发生变化,没有访问到x[0]
第六章 自定义数据类型
第六章单元测试
1、设有以下定义,叙述( )是错误的。 struct ex { int x; float y; char z; }example; a) struct是结构体类型的保留字 b) example是结构体类型名 c) x、y、z是结构体类型成员名 d) ex是结构体类型名 a、表述正确 b、example是结构体类型的变量名 c、表述正确 d、表述正确
4、程序 #include struct stu { char num[10]; float score[3]; }; void main() {struct stu s[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p=s; int i; float sum=0; for(i=0;i<3;i ) sum=sum p->score[i]; printf("%6.2f\n",sum); } 输出结果是( )。 a) 260.00 b) 270.00 c) 280.00 d) 285.00 a、解析错误 b、所定义数组s各元素的值是s[0].num="20021",s[0].score[0]=90,s[0].score[1]=95,s[0].score[2]=85,s[1].num="20022",s[1].score[0]=95,s[1].score[1]=80,s[1].score[2]=75,s[2].num="20023",s[2].score[0]=100,s[2].score[1]=95,s[2].score[2]=90,指针变量p指向数组的首地址,循环完成了s[0].score[0]=90,s[0].score[1]=95,s[0].score[2]=85三个数的相加。 c、解析错误 d、解析错误
5、设有如下定义: struck sk { int a;float b;}data; int *p; 若要使p指向data中的a域,正确的赋值语句是( )。 a) p=&a; b) p=data.a; c) p=&data.a; d) *p=data.a; a、不能直接访问成员名 b、没有取地址运算 c、合法引用 d、*p得到了data.a的值,p未必指向data中a域
6、以下程序的输出结果是( )。 #include struct har {int x, y; struct har *p;}h[2]; void main() { h[0].x=1; h[0].y=2; h[1].x=3; h[1].y=4; h[0].p=&h[1]; h[1].p=h; printf("%d %d \n",(h[0].p)->x,(h[1].p)->y); } a) 12 b) 23 c) 14 d) 32 a、解析错误 b、解析错误 c、解析错误 d、该结构体有三个域,其中两个数据域x,y,一个指针域p,程序中h[0].p指向h[1],h[1].p又指向了h[0],故h[0].p)->x的值是h[1].x,h[1].p)->y的值是h[0].y,输出结果为32
8、假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是( )。 a) free(q); p->next=q->next; b)(*p).next=(*q).next; free(q); c) q=(*q).next;(*p).next=q; free(q); d) q=q->next; p->next=q; p=p->next; free(p); a、删除了q以后的所有结点 b、正确 c、未释放当前的q结点 d、释放了当前q结点以后所有结点
9、假设int类型占2个字节,long类型占4个字节,char类型占1个字节,有如下定义,则变量a所占内存字节数是( )。 union u { char st[4]; int i; long l; }; struct a { int c; union u u; }a; a) 4 b) 5 c) 6 d) 8 a、解析错误 b、解析错误 c、union u定义了一个共用体,为该类型分配的空间是最大的那个域所占的空间,故该共用体占4个字节,struct a定义了一个结构体,该类型变量所占的空间为各分量所占空间的和。因为a.c占2个字节,a.u占4个字节,所以变量a占据了6个字节的内存空间。 d、解析错误
7、下列程序输出结果是: 。 #include main(){ int a[3][3] = {1,3,5,7,9,11,13,15,17}; int sum = 0,i,j; for(i=0;i<3;i ) for(j=0;j<3;j ) if(i==j) sum = sum a[i][j]; printf(“sum=%d\n”,sum); }
8、下列程序输出的结果是 。 #include int f(int x ){ static y = 1; y ; x = y; return x; } main(){ int k; k =f(3); printf(“%d %d\n”,k,f(k)); }