1、欢迎共阅计算机二级C语言试题库1有以下程序 main() int a=1,b=2,m=0,n=0,k; k=(n=ba)|(m=aprintf(%d,%dn,k,m); 程序运行后的输出结果是 A)0,0 B)0,1 C)1,0 D)1,1 2在一个C程序中 A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现 C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位置 3有以下程序 main() int a=5,b=4,c=3,d=2; if (abc) printf(%dn, d); else if ( (c-1 = d) = 1) printf(%d
2、n, d+1); else printf(%dn, d+2); 执行后输出结果是 A)2 B)3 C)4 D)编译时有错,无结果 4有以下程序 main() int i; for (i=0; ib) return(a); else return(b); main() int x=3, y=8, z=6, r; r=fun(fun(x,y), 2*z); printf(%dn, r); 程序运行后的输出结果是 A)3 B)6 C)8 D)12 7有以下程序 int *f(int *x, int *y) if (*x *y) return x; else return y; main() int
3、a=7,b=8,*p,*q, *r; p=&a; q=&b; r = f(p,q); printf(%d,%d,%dn,*p,*q,*r); 执行后输出结果是 A)7,8,8 B)7,8,7 C)8,7,7 D)8,7,8 8以下能正确地定义整型变量a,b和c并为其赋初值5的语句是 A)int a=b=c=5; B)int a,b,c=5; C)a=5,b=5,c=5; D)a=c=b=5; 9若二维数组a有m列,则在aij前的元素个数为 A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+1 10下面程序段是输出两个字符串中对应相等的字符。请选择填空 char x=”prog
4、ramming”; char y=”Fortran”; int i=0; while(xi!=0&yi!=0) if(xi= =yi)printf(“%c”,); else i+; A) xi+ B)y+i C)xi D)yi 11若使用一维数组名作函数实参,则以下正确的说法是 A)必须在主调函数中说明次数组的大小 B实参数组类型与形参数组类型可以不匹配 C在被调函数中,不需要考虑形参数组的大小 D实参数组名与形参数组名必须一致 12以下程序的正确运行结果是 #inclued main() int k=4,m=1,p; p=func(k,m);printf(“%d”,p); p=func(k,
5、m);printf(“%dn”,p); func(int a,int b) static int m=0,i=2; i+=m+1; m=i+a+b; return(m); A)8,17 B)8,16 C)8,20 D)8,8 13若有说明:int *p,m=5,n;以下正确的程序段是 A) p=&n;scanf(“%d”,&p); B) p=&n;scanf(“%d”,*p); C) scanf(“%d”,&n);*p=n; D) p=&n;*p=m; 14执行以下程序后,a和b的值为 main() int a,b,k=4,m=6,*p1=&k,*p2=&m; a=p1=&m; b=(-*p1
6、)/(*p2)+7; printf(“a=%dn”,a); printf(“b=%dn”,b); A)-1 ,5 B)1,6 C)0,7 D)4,10 15若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是 A)”ab+” B)”wb+” C)”rb+” D”ab” 16根据定义和数据的输入方式,输入语句的正确形式为 已有定义: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)
7、 scanf(“%3.2f%2.1f”,&f1,&f2); 17 分析以下程序运行结果 #include int func(int n) if(n=1) return 1; else return(n*func(n-1); void main() int x; x=func(5); printf(“%dn”,x); A)100 B)5 C)1 D)120 18 分析以下程序运行结果 #include void main() int y=2,a=1; while(y-!=-1) do a*=y;a+; while(y-); printf(“%d,%dn”,a,y); A)1,-2 B)2,1 C
8、)1,0 D)2,-1 19下面程序段的运行结果是 char a7=”abcdef”; charb4=”ABC”; strcpy(a,b); printf(“%c”,a5); A)空格 B)0 C)e D)f 20下面是对s的初始化,其中不正确的是 A)char s5=“abc”; B)char s5=a,b,c; C)char s5=”; D)char s5=”abcdef”; 21执行语句for(i=1;i+4; );后变量i的值是 A)3 B)4 C)5 D)不定 22以下程序段 x=-1; do x=x*x; while(!x); A)是死循环 B)循环执行二次 C)循环执行一次 D)
9、有语法错误 23若有以下定义和语句: inion data int i; char c; float f; a; int n; 则以下语句正确的是 A)a=5; B)a=2,a,1.2; C)printf(“%dn”,a); D)n=a; 24下面程序的运行结果是 main() struct cmplxint x; int y; cnum2=1,3,2,7; printf(“%dn”,cnum0.y/cnum0.x*cunm1.x); A)0 B)1 C)3 D)6 25以下程序的运行结果是 main() int k=4,a=3,b=2,c=1; printf(“n%dn”,k A)4 B)3
10、 C)2 D)1 二 填空 1 若有以下定义,则计算表达式y+=y-=m*=以后y的值是_ int m=5,y=2; 2 若有定义:int b=7;float a=2.5,c=4.7;:则下面表达式的值为_ a+(int)(b/3*(int)(a+c)/2)%4 3 有 int a=3,b=4,c=5;,则以下表达式的值为_ !(a+b)+c-1&b+c/2 4 条件”2或x-10”的c语言表达式是_ 5 以下程序的功能是判断输入的年份是否是闰年.请在 内填入正确内容 main() int y,f; scanf(“%d”,&y); if(y%400=0)f=1; else if(5)f=1;
11、else6; if(f) printf(“%d is”,y); else printf(“%d is not”,y); printf(“a leap yearn”); 6 下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5。请填空 #include main(0 int i,s,k,count=0; for(i=100;i=1000;i+) s=0;k=i; while(7)s=s+k%10;k=8; if(s!=5)9; else count+; printf(“%d”,count); 7 下面程序将二维数组a的行和列元素呼唤后存到另一个二维数组b中。请填空 main()
12、int a23=1,2,3,4,5,6; int b32,I,j; printf(“array a:n”); for(i=0;i=1;i+) for(j=0;10;j+) printf(“%5d”,aij); 11; printf(“n”); printf(“array b:n”); for(i=0;12;i+) for(j=0;j=1;j+) printf(“%5d”,bij); printf(“n”); 8 以下search函数的功能是利用顺序查找法从数组a的10个元素中对关键字m 进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字你叫,直到找到此元素或查找到数组尾部时结
13、束。若找到,返回此元素的下标;若仍未找到,则返回值-1。请填空 #include int search(int a10,int m) int I; for(i=0;i=9;i+) if(1)return(i); return(-1); main() int a13,m,i,no; no=search(14); if(15) printf(“nOK FOUND!%d”,no+1); else printf(“nSorry Not Found!”); 9 若有定义:int a=2,4,6,8,10,12,*p=a;则*(p+1)的值是16,*(a+5)的值是17 10 将任意输入的一个偶数n分解为
14、两个素数之和,并给出各种分解方法 #include main() int n,i; int check(int x); do scanf(“%d”,&n); while(n%2!=0); for(i=3;i=n/2;i+) if(check(i)&18) printf(“%d=%d+%dn”,n,i,n-i); int check(int x) int i; for(i=2;iif(19) return(0); return(1); 11 函数调用语句:fgets(buf,n,fp);从fp指向的文件中读入20个字符放到buf字符数组中。函数值为21 12 设数组a包括10个整型元素。下面程序
15、的功能是求出a 中各相邻元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请填空 main() int a10,b10,i; for(i=0;i10;i+) scanf(“%d”,&ai); for(22;i10;i+) 23 for(i=1;i0);D)if(b=0)m=l;n=2; 答案:D 评析:选项A为空语句,选项B是一个由逗号运算符表达式形成的语句,选项c为一个条件语句,选项D有两个分号,是由两个语句构成,不能看成一条语句。 (17)已知i、j、k为int型变量,若从键盘输入:1,2,3,使i的值为l、j的值为2、k的值为3,以下选项中正确的输入语句是_。 A)scanf(
16、2d2d2 dtt,&i,j,&k); B)scanf(ddd,&i,j,k); C)scanf(d,d,dfI,i,j,k); D)scanf(i=d,j=d,k=d-t,&i,&j,&k); 答案:C 评析:如果在格式控制字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。 (18)关于goto语句的使用,下面正确的是_。 A)goto 2;B)goto g; C)goto g:;D)goto 2; 2:exit(0);g:exit(O);g:exit(O);2 exit(0); 答案:B 评析:在c中,goto语句后面的标号的命名规则与c语言中标识符的命名规则
17、相同,在goto语句后面的标号后不要加:号,在某一行上添加标号时,在标号的后面要添加:号。 (19)若有以下程序: main() int k=2,i=2,m; m=(k+=I*=k); printf(d,d、n,m,i); 执行后的输出结果是_。 A)8,6B)8,3C)6,4D) 7,4 答案:C 评析:在赋值符=之前加上其它运算符,可以构成复合的运算符。此运算为右结合性,即从右往左计算。I*=k即i=i*k=2*2=4,k=k+i=2+4=6,然后将k的值赋给m。 (20)以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(int
18、xN) int i=0; while(i 在下划线处应填入的是_。 A)x+iB)&xi+lC)x+(i+)D)&x+I 答案:C 评析:在c中 ,对于一维数组而言,数组变量表示数组中首元素的的地址。当用scanf函数向数组x的第i个元素中输入整型数据时,只要执行scanf(dx+i):由于要循环输入数组中和各个元素,必须要使其地址值不断自增。故本题答案为c。 (21)已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-l&y+z2的值是_。 A)6B)0C)2D)1 答案:D 评析:在本题中,运算符的优先级分别为:!/+,-&即:!(3+4)+5-1&4+52=0+5-1&
19、4+2=4&6=l。 (22)以下选项中,与k=11+完全等价的表达式是_。 A)k=n,n=n+1B)n=n+1,l(=nC)l(=什nD)k+-n+1 答案:A 评析:n+是自增运算,是先使用,然后再使n加1, (28)已定义以下函数: fun(char*p2,char*p1) while(*p2=*p1)!=0)pl+;p2+; 函数的功能是_。 A)将p1所指字符串复制到p2所指内存空间 B)将pl所指字符串的地址赋给指针p2 C)对p1和p2两个指针所指字符串进行比较 D)检查p1和p2两个指针所指字符串中是否有O 答案:A 评析:由于在while循环的条件中执行了*p2=*pl运算
20、,其作用是将*pl中的内容复制到*p2中,而(*p2=*p1)!=0的作用是判断当前字符是否为字符串结束字符O。在循环体中p1+,p2+的目的是移动字 (29)有以下程序 void fun(char*c,int d) *c=*c+1;d=d+1; printf(c,c,*c,d); main() char a:。A,b。a; fun(&b,a);printf(c,cn,a,b); ) 程序运行后的输出结果是_。 A)B,a,B,aB)a,B,a,BC)A,b,A,bD)b,B,A,b 答案:D 评析:将a,b代入函数得+&b=。&b+1=a+l=b,所以打印出第一个字母b; a=a+l=A+l
21、=B,打印出第二个字符B; a=A,输出字母A; b由于是按地址传到函数而被修改,为b,输出字母b (30)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。 void sort(int a,im n) intiJ,t; for(i=O;ifor=i+1 0if(ai main() int aa10:1,2,3,4,5,6,7,8,9,10 ,i; sort(&aa3,5); for(i=0;iprintf(n); ) 程序运行后的输出结果是_。 A)l,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1, C)l,2,3,8,7,6,5,4
22、,9,10,D)l,2,10,9,8,7,6,5,4,3, 答案:C 评析:本题并不是对数组的所有元素进行排序,而是对从a3开始往后的4个元素进行排序。 (31)对于基类型相同的两个指针变量,不能进行的运算是_。 A)O y= O x=O -1 x以下程序段中不能根据x的值正确计算出y的值的是_。 A)if(xO)y=l;else if(x=O)y=0;else y=-l; B)y=O;if(xO)y=1;else if(xC)y=0;if(x=0)if(xO)y=1;else y=-l; D)if(x=0)if(xO)y=l;else y=O;else y=-1; 答案:C 评析:本题应当注
23、意if与else的配对关系。从最内层开始,else总是与它上面最近的(未曾配对的)if配对。 (35)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a,im n) int i,t; for(i=O;it=ai;ai=an-l-i;an-1-i=t; main() int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0; reverse(b,8); for(i=6;i10;i+)s+=bI; printf(dn,s); 程序运行后的输出结果是 A)22B)10C)34D)30 答案:A 评析:本题并不是将整个数组中的
24、内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9,10通过for循环计算b6+b7+b8+b9即2+1+9+10=22。(36)执行下面的程序段后,变量k的值为_。 int k=3,s2; s0=k;k=s1*10; A)不确定B)33C)30D)10 答案:A 评析:由于本题中未对数组进行初始化,因此程序运行时,数组s中各个元素的值都是不确定的,虽然在代码中对sO进行了赋值,但没有对s1进行赋值,故执行l(=s1+10;后,k的值不确定。 (37)有以下程序 #include main() charp=abcde0fghjikO; printf(dn,strl
25、en(p); 程序运行后的输出结果是_。 A)12B)15C)6D)5 答案:D 评析:0是字符串结束标志,当遇到此标志时字符串已结束。所以字符串的长度为5。 (38)程序中头文件t)rpel_h的内容是: #define N 5 #define Ml N*3 程序如下: #includetype 1.h #define M2 N*2 main() int i; i=MI+M2; printf(dn,i); 程序编译后运行的输出结果是_。 A)lOB)20C)25D)30 答案:C 评析:宏定义就是用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: #define标识符字符串 这种
26、方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为宏名。 (39)若有以下的程序段,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是_。 int t33,*pt3,k; for(k=0;k3;k+)ptk=&tkO; A)t20Bt22Ct12Dt21 答案:C 评析:在题面中定义了一个二维数组l,及一个一维指针数组pt,在循环语句中分别对指针 数组赋值为二维数组t的第k行首元素的地址。*(pt+1),表示的是数组pt中下标为1的元素的值,而该值为二维数组t的第l行(从第0行算起)的首元素的地址,故*(*(pt+1)+2)表示的是数组t中t12的元素的值
27、。 (40)以下叙述中错误的是_。 A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B)在程序结束时,应当用fclose函数关闭已打开的文件 C)利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数据 D)不可以用FILE定义指向二进制文件的文件指针 答案:D 评析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个名为FILE的结构体类型的结构体变量中的。而文件又分为ASCII文件和二进制文件,所以,、可以用FILE定义指向二进制文件的文件指针。 (41)有以下程序 #include main(int argc,char *ar
28、gv) inti,len=0; for(i=1;iprintf(dn,len); ) 程序编译连接后生成的可执行文件是exlexe,若运行时输入带参数的命令行是: exl abcd efg 10 则运行的结果是_。 A)22B)17C)12D)9 答案:D 评析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc用于存放命令行中命令字和参数的总和的个数4,argv用来存放命令行中命令字和所有参数的字符串,并规定 argv0存放命令字字符串exl,argv1用来存放第一个参数的字符串abcd,argv21用来存放第二个参数的字符串e龟,argv 3用来存放第三个参数的字符串10。那么for循环将循环3次分别将argv数组中元素的长度累加到len中,所以答案为9。 (42
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。