《计算机二级C语言试题库.pdf》由会员分享,可在线阅读,更多相关《计算机二级C语言试题库.pdf(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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 a
3、=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 下面程序段是输出两个字符串中对应相等的字符。请选择填空cha
4、r x=” programming” ; 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(“
5、%d ” ,p); p=func(k,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,
6、m=6,*p1=&k,*p2=&m; a=p1=&m; b=(-*p1)/(*p2)+7; pri ntf(“ 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) sca
7、nf(“ %f%f” ,&f1,&f2); C) scanf(“ %3.2f %2.1f” ,&f1,&f2); D) 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
8、) do a*=y;a+; while(y-); printf(“ %d,%dn” ,a,y); A)1,-2 B)2,1 C)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; ) ;后
9、变量i 的值是A)3 B)4 C)5 D) 不定22 以下程序段x=-1; do x=x*x; while(!x); A) 是死循环B)循环执行二次C)循环执行一次D) 有语法错误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*c
10、unm1.x); A)0 B)1 C)3 D)6 25 以下程序的运行结果是main() int k=4,a=3,b=2,c=1; printf(“n” ,k A)4 B)3 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 语言表达式是_
11、5 以下程序的功能是判断输入的年份是否是闰年.请在 内填入正确内容main() int y,f; scanf(“ %d ” ,&y); if(y%400=0)f=1; else if(5)f=1; 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; wh
12、ile(7)s=s+k%10;k=8; if(s!=5)9; else count+; printf(“ %d ” ,count); 7 下面程序将二维数组a 的行和列元素呼唤后存到另一个二维数组b 中。请填空main() 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
13、(“ %5d ” ,bij); printf(“n” ); 8 以下 search 函数的功能是利用顺序查找法从数组a的 10 个元素中对关键字m 进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字你叫,直到找到此元素或查找到数组尾部时结束。若找到,返回此元素的下标;若仍未找到,则返回值-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(“nO
14、K 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 分解为两个素数之和,并给出各种分解方法#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); i
15、nt 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 个整型元素。下面程序的功能是求出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;
16、n=2;答案: D 评析:选项A 为空语句,选项B 是一个由逗号运算符表达式形成的语句,选项c 为一个条件语句,选项D 有两个分号,是由两个语句构成,不能看成一条语句。(17)已知 i、j、k 为 int 型变量,若从键盘输入:1,2,3,使 i 的值为 l 、j 的值为 2、 k 的值为 3,以下选项中正确的输入语句是_。A)scanf( 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 评析:如果在格式控制
17、字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。(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 语言中标识符的命名规则相同,在goto 语句后面的标号后不要加:号,在某一行上添加标号时,在标号的后面要添加:号。(19)若有以下程序:main() int k=2 ,i=2 ,m;m=(k+=I*=k);printf( d,
18、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 xN) int i=0 ;while(i 在下划线处应填入的是_ 。A)x+iB)&xi+lC)x+(i+)D)&x+I 答案: C 评析:在c 中 ,对于一维数组而言,数组变量表示数组中首
19、元素的的地址。当用scanf 函数向数组x 的第 i 个元素中输入整型数据时,只要执行scanf( dx+i) :由于要循环输入数组中和各个元素,必须要使其地址值不断自增。故本题答案为c。(21)已有定义: int x=3 ,y=4,z=5 ;,则表达式!(x+y)+z-l &y+z 2 的值是 _ 。A)6B)0C)2D)1 答案: D 评析: 在本题中, 运算符的优先级分别为:!/+,-&即:!(3+4)+5-1&4+5 2=0+5-1&4+2=4&6=l。(22)以下选项中,与k=11+ 完全等价的表达式是_ 。A)k=n ,n=n+1B)n=n+1 , l(=nC)l(= 什 nD)k
20、+-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运算,其作用是将*pl中的内容复制到*p2 中,而(*p2=*p1)!= 0的作用是判断当前字符是否为字符串结束
21、字符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=B ,打印出第二个字符B;a=A,输出字母A;b 由于是按地址传到函数而被
22、修改,为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,9,10,D)l,2,10,9,8,7,6,5,4,3
23、 ,答案: 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 评析:本题应当注意if 与 else 的配对关系。 从最内层
24、开始, 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 评析:本题并不是将整个数组中的内容逆置,而是逆
25、置前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() char p=abcde0fghjik O;print
26、f( dn,strlen(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 评析:宏定义就是用一个指定的标识符(即名字 )来代表一个字符串,它的一般形式为:#d
27、efine标识符字符串这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字 )称为 宏名 。(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 行算起 )的首元素的地址
28、,故*(*(pt+1)+2) 表示的是数组t 中 t12 的元素的值。(40)以下叙述中错误的是_ 。A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以B) 在程序结束时,应当用fclose 函数关闭已打开的文件C)利用 fread 函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数据D) 不可以用FILE 定义指向二进制文件的文件指针答案: D 评析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个名为 FILE 的结构体类型的结构体变量中的。而文件又分为ASCII 文件和二进制文件,所以,、可以用FILE 定义指向二进制文件的文件指针。(
29、41)有以下程序#include main(int argc,char *argv) inti,len=0 ;for(i=1 ;iprintf( dn,len) ;) 程序编译连接后生成的可执行文件是exlexe,若运行时输入带参数的命令行是:exlabcdefg10则运行的结果是_。A)22B)17C)12D)9 答案: D 评析:本题主函数带有两个参数,一个int 型变量 argc,另一个是char 型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc 用于存放命令行中命令字和参数的总和的个数4,argv 用来存放命令行中命令字和
30、所有参数的字符串,并规定argv0 存放命令字字符串 exl,argv1 用来存放第一个参数的字符串abcd,argv21 用来存放第二个参数的字符串e 龟, argv 3用来存放第三个参数的字符串10。那么 for 循环将循环3 次分别将argv 数组中元素的长度累加到len 中,所以答案为9。(42)若有以下说明和定义:_ 。fun(*C) main() int(*a)()=fun,(*b)() ,w10 ,c; 在必要的赋值后,对fun 函数调用正确的是_ 。A)a=a(w) ;B) (*a)(&C) ;C)b=*b(w) ;D)fun(b) ;答案: B 评析:在主函数中定义了二个指向
31、函数的指针a,b,其中指针a 指向函数fun,指针 b 未初始化。对于选项 A、 c, 其返回类型是错误的,对于 D, 其调用的参数是错误的,选项 B 是正确的, 其相当于调用函数fhll(&C) ; 。(43)有以下程序intfa(intx 、returnx*x ; int fb(intxl returnX*X*x; int f(int(*f1)(),int(*f2)() ,int x) return f2(x)-fl(x);) mai n() int i ;i=f(fa,fb,2) ;printf( dn,i) ; 程序运行后的输出结果是A) 4B)1C)4D)8 答案: C (28)已定
32、义以下函数: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运算,其作用是将*pl中的内容复制到*p2 中,而(*p2=*p1)!= 0的作用是判断当前字符是否为字符串结束字符O。在循环体中p1+,p2+的目的是移动字(29)有以下程序void fun(char
33、*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=B ,打印出第二个字符B;a=A,输出字母A;b 由于是按地址传到函数而被修改,为b,输出字母b (30)以下程序中函数sort 的功能是对a 所指数组中的数据进行
34、由大到小的排序。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,9,10,D)l,2,10,9,8,7,6,5,4,3 ,答案: C 评析:本题并不是对数组的所有元素进行排序,而是对从a3开始往后的4 个元素
35、进行排序。(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 评析:本题应当注意if 与 else 的配对关系。 从最内层开始, else 总是与它上面最近的(未曾配对的 )if 配对。(35)以下程序中的函数r
36、everse 的功能是将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 评析:本题并不是将整个数组中的内容逆置,而是逆置前8 个元素。逆置后的数组为:8,7,6,5, 4,3,2, 1, 9,10 通过 fo
37、r 循环计算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() char p=abcde0fghjik O;printf( dn,strlen(p) ; 程序运行后的输出结果是_ 。A)12B)15C)6D
38、)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标识符字符串这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识
39、符(名字 )称为 宏名 。(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 中 t1 2 的元素的值。(40)以
40、下叙述中错误的是_ 。A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以B) 在程序结束时,应当用fclose 函数关闭已打开的文件C)利用 fread 函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数据D) 不可以用FILE 定义指向二进制文件的文件指针答案: D 评析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个名为 FILE 的结构体类型的结构体变量中的。而文件又分为ASCII文件和二进制文件,所以,、可以用FILE定义指向二进制文件的文件指针。(41)有以下程序#include main(int argc,char *argv)
41、 inti,len=0 ;for(i=1 ;iprintf( dn,len) ;) 程序编译连接后生成的可执行文件是exlexe,若运行时输入带参数的命令行是:exlabcdefg10则运行的结果是_。A)22B)17C)12D)9 答案: D 评析:本题主函数带有两个参数,一个int 型变量 argc,另一个是char 型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc 用于存放命令行中命令字和参数的总和的个数4,argv 用来存放命令行中命令字和所有参数的字符串,并规定argv0 存放命令字字符串 exl,argv1 用来存放第
42、一个参数的字符串abcd,argv21 用来存放第二个参数的字符串e 龟, argv 3用来存放第三个参数的字符串10。那么 for 循环将循环3 次分别将argv 数组中元素的长度累加到len 中,所以答案为9。(42)若有以下说明和定义:_ 。fun(*C) main() int(*a)()=fun,(*b)() ,w10 ,c; 在必要的赋值后,对fun 函数调用正确的是_ 。A)a=a(w) ;B) (*a)(&C) ;C)b=*b(w) ;D)fun(b) ;答案: B 评析:在主函数中定义了二个指向函数的指针a,b,其中指针a 指向函数fun,指针 b 未初始化。对于选项 A、 c
43、, 其返回类型是错误的,对于 D, 其调用的参数是错误的,选项 B 是正确的, 其相当于调用函数fhll(&C) ; 。(43)有以下程序intfa(intx 、returnx*x ; int fb(intxl returnX*X*x; int f(int(*f1)(),int(*f2)() ,int x) return f2(x)-fl(x);) main() int i ;i=f(fa,fb,2) ;printf( dn,i) ; 程序运行后的输出结果是A) 4B)1C)4D)8 答案: C (28)已定义以下函数:fun(char*p2,char*p1) while(*p2=*p1)!=
44、 0)pl+ ;p2+ ; 函数的功能是_。A) 将 p1 所指字符串复制到p2 所指内存空间B) 将 pl 所指字符串的地址赋给指针p2 C)对 p1 和 p2 两个指针所指字符串进行比较D) 检查 p1 和 p2 两个指针所指字符串中是否有O答案: A 评析:由于在while循环的条件中执行了*p2=*pl运算,其作用是将*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)
45、; 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=B ,打印出第二个字符B;a=A,输出字母A;b 由于是按地址传到函数而被修改,为b,输出字母b (30)以下程序中函数sort 的功能是对a 所指数组中的数据进行由大到小的排序。void sort(int a ,im n) intiJ ,t;for
46、(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,9,10,D)l,2,10,9,8,7,6,5,4,3 ,答案: C 评析:本题并不是对数组的所有元素进行排序,而是对从a3开始往后的4 个元素进行排序。(31)对于基类型相同的两个指针变量,不能进行的运算是_。A)O y= O
47、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 评析:本题应当注意if 与 else 的配对关系。 从最内层开始, else 总是与它上面最近的(未曾配对的 )if 配对。(35)以下程序中的函数reverse 的功能是将a 所指数组中的内容进行逆置。void reverse(int
48、 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 评析:本题并不是将整个数组中的内容逆置,而是逆置前8 个元素。逆置后的数组为:8,7,6,5, 4,3,2, 1,9,10 通过 for 循环计算b6+b7+b8+b9即 2+1+9+10=22 。(36)执行下面的程序段
49、后,变量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() char p=abcde0 fghjik O;printf( dn,strlen(p) ; 程序运行后的输出结果是_ 。A)12B)15C)6D)5 答案: D 评析: 0是字符串结束标志,当遇到此标志时字符串已结束。所以字符串的
50、长度为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标识符字符串这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字 )称为 宏名 。(39)若有以下的程序段,则在执行for 语句后, *(*(