c语言考试题及答案解析免费(c语言考试题及答案解析免费版)求一份大一c语言考试试卷,加答案附件上传失败... C语言期末考试题及答案(1) 1、构成C语言的基本单位是___B____。 过程? 函数? 语句? 命令? 2、设x为整型变量,不能正确表达数学关系:5x10的c语言表达式是__B___。 5 x5x10? x==6||x==7||x==8||x==9? !(x=5)(x10)? 3、在C语言中,逻辑运算符的优先级从高到低的排列顺序为__D___。 、||、!? ||、、!? 、!、||? !、、||? 4、下面语句中,正确的是__D___。 printf("%cn","student");? printf("%cn","c");? printf("%sn",a);? printf("%sn","hello");? 5、对于for(表达式1;;表达式3)可以理解为__B___。 for(表达式1;0;表达式3)? for(表达式1;1;表达式3)? for(表达式1;表达式1;表达式3)? for(表达式1;表达式3;表达式3)? 6、执行下面程序段的结果是__B___。 main() { int x=1,a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; } printf("a=%d,b=%d",a,b); } a=1,b=1? a=2,b=1? a=1,b=0? a=2,b=2? 7、执行下面程序段的结果是__D___。 int x=0; do { printf(“%2d”,x--); }while(x); 打印出321? 打印出23? 不打印任何结果? 陷入死循环? 8、设x=10,y=5;z=15,执行下面一段程序后z的结果是__C___。 If(xy) if(yz)x=y; else z=y; 7? 6? 5? 4? 9、如果一个函数被说明为static,那么__B___。 该函数只能被main函数调用? 该函数能被当前文件的函数调用,但不能被其他文件的函数调用? 该函数不能被当前文件的函数调用,可以被其他文件的函数调用? 任何文件的函数都可以调用该函数? 10、下面关于局部变量的描述中,错误的是__D___。 函数的局部变量的有效范围只能在本函数? 函数的形式参数也是局部变量? 局部变量的名称不能和函数同名称? 不同的函数中不能定义相同名称的局部变量? 11、下列初始化字符数组的语句中,错误的是__A___。 char str[5]="hello";? char str[]={'h','e','l','l','o','\0'};? char str[5]={"hi"};? char str[100]="";? 12、引用数组元素时,数组下标可以是__D___。 整型常量? 整型变量? 整型表达式? 以上均可? 13、 已知:char str[10],*p=str; 下面的语句中正确的是__B___。 str="ABC";? p="ABC";? *str="ABC";? *p="ABC";? 14、下面语句中,错误的是___D__。 int i;int *p;p=i;? int i,*p;p=a;? int i,*p=a;? int i,*p;*p=i;? 15、下面对于结构体类型的描述正确的是__A___。 结构体类型的大小为各成员变量所占内存的总和? 结构体类型变量与简单数据类型变量的引用规则一致。? 结构体类型的大小为其成员中所占内存空间最大的变量的大小? 结构体类型的大小为其最后一个成员中所占内存空间的大小? 16、C语言规定:在一个源程序中,main函数的位置____C____。 必须在最开始? 必须在系统调用的库函数的后面? 可以任意? 必须在最后? 17、表达式18/4*sqrt(4.0)/8值的数据类型是 ___C____。 int? float? double? 不确定? 18、在c语言中,char型数据在内存中的存储形式是 ___D___。 补码? 反码? 原码? ASCII码? 19、阅读以下程序,当输入的数据形式为:25,13,10CR时,正确的输出结果为___D___。 main() { int x,y,z; scanf("%d%d%d",x,y,z); printf("x+y+z=%dn",x+y+z); } x+y+z=48? x+y+z=35? x+z=35? 不能确定? 20、有如下程序 void main() { float x=2.0,y; if(x0.0) y=0.0; else if(x10.0) y=1.0/x; else y=1.0; printf(“%fn”,y); } 该程序的输出结果是( C )。 0.000000? 0.250000? 0.500000? 1.000000? 21、判断char型变量s是否为小写字母的正确表达式是__C____。 'a'=s='z'? (s='a')(s='z')? (s='a')(s='z')? ('a'=s)and('z'=s)? 22、执行以下语句后,y 的值为___A___。 int x,y,z; x=y=z=0; ++x || ++y ++z; 0? 1? 2? 不确定值? 23、有如下程序段: int number=0; while(number++=3) printf(“%dn”,number++); 则正确的执行结果是___C___。 2 3 4? 0 1 2? 1 3? 2 4? 24、有如下程序 void main() { int n=9; while(n6) { n--; printf(“%d”,n); } } 该程序段的输出结果是__B___。 987? 876? 8765? 9876? 25、要使以下程序段输出10个整数,请在空格中填入一个整数。 for(i=0;i=___B___;printf("%dn",i+=2)); 15? 18? 20? 10? 26、设函数fun的定义形式为: fun(char ch,float x){…} 则以下对函数fun的调用语句中正确的是___B___。 fun(“abc”,3)? t=fun(‘D’,5)? fun(‘ab’,3)? fun(‘78’,1)? 27、函数求sum(int n)的功能是计算自然数1到n的和,即1+2+…+n。 Main() { printf("The sum=%dn",sum (10)); } int sum(int n){ int s=0,i; for(i=0;i=n;i++) _____B_____ } 请从备选答案中选择一答案,补全程序。 s=s+n;return s;? s=s+i;return s;? return s;? return s+=I;? 28、设函数fun的定义形式为 int fun(int a[],int n) { int s=0,i=0; for(i=0;in;i++)s+=a[i]; return s; } main() { int a[10]={1,2,3,4,5}; printf("sum=%d", fun(a[2],2)); } 则程序的运行结果为___C___。 3? 5? 7? 9? 29、若有说明:int a[10];则对数组元素的正确引用是___D____。 a[10]? a[3,5]? a(5)? a[10-10]? 30、以下不正确的定义语句是___B___。 double x[5]={2.0,4,0,6,0,8,0,10.0};? int y[5]={0,1,3,5,7,9};? char c1[]={'1','2','3','4','5'};? char c2[]={'x10','xa','x8'};? 31、下面程序的运行结果是___B____。 #include "stdio.h" main() { char str[]="SWLIA",c; int k; for(k=0;(c=str[k])!='\0';k++) { switch(c) { case 'I':++k;break; c SWA? SW*? SW*A? SW? 32、以下能正确进行字符串赋值操作的是___D___。 char s[5]={"12345"};? char s[5]={'1','2','3','4','5',‘6’};? char *s;*s="12345";? char *s="12345";? 33、以下程序段的运行结果是___C___。 Char a[ ]="program", *p; p=a; while (*p!='g') { printf("%c", *p-32); p++; } PROgram? PROGRAM? PRO? proGRAM? 34、若有说明:char *pc[ ]={"aaa", "bbb", "ccc", "ddd"};,则以下叙述正确的是__C____。 *pc[0]代表的是字符串"aaa"的首地址? *pc[0]代表的是字符'a'的首地址? pc[0]代表的是字符串"aaa"的首地址? pc[0]代表的是字符'a'的首地址? 35、下列程序的运行结果是___B___。 #include stdio.h #include string.h void f (char *s, int n) { char a,*q1,*q2; q1=s;q2=s+n-1; while(q1q2) { a=*q1++; *q1=*q2--; *q2=a;} } main() { char b[]="ABCDEFG"; f(b, s GAGGAGA? AGAAGAG? GFEDCBA? AGADAGA? 36、定义如下的结构体描述同学信息 struct Student { unsigned long id; char name[30]; char class[30]; }s; 假设此同学的序号为1002,姓名为黎明,班级为冶金3班,则描述正确的为___C__。 id=1002; name=黎明; class=冶金3班;? id=1002; name=”黎明”; class=”冶金3班”;? s.id=1002; s.name=”黎明”; s.class=”冶金3班”;? s.id=1002; s.name=黎明; s.class=冶金3班;? 37、用来描述C程序中注释的是__C___。 //? ? **? 38、下列变量中合法的定义是__A___。 short _a=2-1? long if=0xabcL? double 1_d=1.5e2? float a=1.5e2.7? 39、当c的值不为0时,能够将c的值赋给变量a和b的是__C___ c=b=a? (a=c)||(b=c)? (a=c)(b=c)? a=c=b? 40、设有以下程序段,执行后的输出结果是___B__ int x=100,y=200; printf("%d",(x,y)); 100? 200? 100,200? 编译出错 C语言期末考试题及答案(2) 1、若执行下面的程序时从键盘输入10,则输出是__B__ main( ) { int a; scanf(“%d”,a); if(a++10) printf(“%dn”,++a); else printf("%dn",a--); } 12? 11? 10? 9? 2、执行下面程序段的结果是__D___ int x=0; do { printf(“%2d”,x--); }while(x); 打印出321? 打印出23? 不打印任何结果? 陷入死循环? 3、执行与句:for(n=0;n++4; ); 后,变量n的值是__C__。 3? 4? 5? 不定? 4、以下关于循环的描述中,错误的是__D___。 可以用for语句实现的循环一定可以用while语句实现? 可以用while语句实现的循环一定可以用for语句实现? 可以用do…while语句实现的循环一定可以用while语句实现? do…while语句与while语句的区别仅仅是关键字while的位置不同? 5、下面的描述错误的是__C__。 函数可以有多个形式参数? 函数可以没有返回值? 函数内可以嵌套定义函数? 函数可以被其他函数调用? 6、函数返回值的类型是由__A__决定的。 定义函数时指定的返回类型? 函数中return语句的表达式类型? 主调函数的实际参数类型? 主调函数的返回值类型? 7、定义了一维int型数组a[10]后,下面错误的引用是__B__。 a[0]=1;? a[10]=2;? a[0]=5*2;? a[1]=a[2]*a[0];? 8、定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为__B__。 24? 25? 18? 17? 9、下面语句中,错误的是__D__。 int i; int *p; p=i;? int i,*p; p=a;? int i,*p=a;? int i,*p; *p=i;? 10、 已知int型二维数组a[3][4],数组元素a[1][2]的地址不能表达为__C__。 a[1][2]? a[1]+2? *a[1]+2? *(a+1)+2? 11、C语言中,5种基本数据类型的存储空间长度的排列顺序为___A___。 char char=int char char=int=long int=float 12、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是 ___B___。 7? 8? 6? 2? 13、若有说明语句:char c='72';则变量c ___A___。 包含1个字符? 包含2个字符? 包含3个字符? 说明不合法,c的值不确定? 14、若x,y均定义为整型,z定义为double型,以下不合法的scanf函数调用语句是___C___。 scanf("%d%lx,%le",x,y,z);? scanf("%2d * %d%lf",x,y,z);? scanf("%x%*d%o",x,y,z);? scanf("%x%o%6.2f",x,y,z);? 15、若输入字符串:abcde回车,则以下while循环体将执行___A___次。 while((ch=getchar())=='e') printf("*"); 1次? 死循环? 0次? 5次? 16、执行下面的程序段后,k的值是___C___。 k=1;n=263; do{k*=n%10;n/=10;}while(n); 3? 63? 36? 2? 17、下面程序段中循环的执行次数是___B___。 a=10;b=0; do{b+=2;a-=2+b;}while(a=0); 10? 3? 5? 4? 18、下面程序段的运行结果是__D____。 x=2; do{printf("*");x--;}while(!x==0); *? ***? 没有输出? **? 19、下面程序段的运行结果是___B___。 i=1;s=1;a=0; do{a=a+s*i;s=-s;i++;}while(i=10); printf("%d",a); 2? -2? 3? 0? 20、有如下程序 void main() { int a=2,b=-1,c=2; if(a) if(b0) c=0; else c++; printf("%dn",c); } 该程序的输出结果是___A___。 0? 1? 2? 3? 21、程序中对fun函数有如下说明 void fun(); 下面说明是错误的是___B___。 fun函数无返回值? fun函数的返回值可以是任意的数据类型? fun函数没有形式参数? void 可以省略? 22、函数求sum(int n)的功能是计算自然数1到n的和,即1+2+…+n。 main() { printf("The sum=%dn",sum (10)); } int sum(int n){ int s=0,i; for(i=0;i=n;i++) _____B_____ } 请从备选答案中选择一答案,补全程序。 s=s+n; return s;? s=s+i; return s;? return s;? return s+=i;? 23、 有以下程序 int f1(int x,int y){return xy?x:y;} int f2(int x,int y){return xy?y:x;} main() { int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(c,d)); f=f1(f2(a,b),f2(c,d)); g=a+b+c+d-e-f; printf()__A___ 4,3,7? 3,4,7? 5,2,7? 2,5,7? 24、若有说明:int a[][3]={1,2,3,4,5,6,7};则数组a第一维的大小是___B___。 2? 3? 4? 无确定值? 25、判断字符串s1是否大于字符串s2,应当使用___D____。 if(s1s2)? if(strcmp(s1,s2))? if(strcmp(s2,s1)0)? if(strcmp(s1,s2)0)? 26、当运行以下程序时,从键盘输入:AhaMA AhaCR CR表示回车,则下面程序的运行结果是___A____。 #include "stdio.h" main() { char s[80],c='a'; int i=0; scanf("%s",s); while(s[i]!='\0') { if(s[i]==c) ahAMa? AhAMa? AhAMa ahA? ahAMa ahA? 27、以下程序执行后a的值为___C____。main( ) { int a,m=2, k=1, *p=k; a=p!=m; printf("%dn",a); } -1? 0? 1? 2? 28、以下能正确读入字符串的程序段是____C___。 char *p;scanf("%s", p);? char str[10];scanf("%s", str);? char str[10], *p;p=str; scanf("%s", p);? char str[10], *p=str;scanf("%s", p[1]);? 29、若有定义:int i, x[3][4];,则不能将x[1][1]的值赋给变量i的语句是___B___。 i=x[1][1] ? i=*(*(x+1))? i=*(*(x+1)+1)? i=*(x[1]+1)? 30、下面程序的运行结果是____A___。 # include stdio.h # include string.h fun(char *s) { char t,*a,*z; a=s; z=s+strlen(s)-1; while(a++z--) { t=*a++; *a=*z--; *z=t;} } main() { char *p; p="a abdddfg? afcdebg? gbedcfa? gfedcba? 31、用来描述C程序中注释的是__C___ / /? ? * *? 32、对于"xyn102\'"字符串的长度是__B___ 7? 6? 12? 13? 33、已知:int x=10;执行语句x-=x+x;后x的值是__A___ -10? 10? -20? 20? 34、下列描述中,正确的是__A___ 所有的输入/输出都是通过调用库函数处理的? 所有的输入/输出都是通过输入/输出语句实现的? getchar和putchar可以省略#include? 在输入/输出格式中的*表示跳过数据的含义? 35、设x=10,y=5;z=15,执行下面一段程序后z的结果是__C___ if(xy) if(yz)x=y; else z=y; 7? 6? 5? 4? 36、执行下面程序段的结果是__D___ int x=0; do { printf(“%2d”,x--); }while(x); 打印出321? 打印出23? 不打印任何结果? 陷入死循环? 37、以下关于switch语句和break语句的描述正确的是__D___ 在switch语句中必须使用break语句? break语句只能用于switch语句体中? break语句只能用于循环语句中? 在switch语句中可以使用break语句? 38、与语句while(!x)等价的语句是__A___ while(x==0)? while(x!=0)? while(x!=1)? while(~x)? 39、下面的描述错误的是__C___ ?函数可以有多个形式参数? ?函数可以没有返回值? ?函数内可以嵌套定义函数? ?函数可以被其他函数调用? 40、 下面关于局部变量的描述中,错误的是__D___ ?函数的局部变量的有效范围只能在本函数? ?函数的形式参数也是局部变量? ?局部变量的名称不能和函数同名称? ?不同的函数中不能定义相同名称的局部变 计算机二级考试(江西考区)试题c语言及答案2010年3月全国计算机等级考试二级C语言笔试真题及参考答案一、选择题 (1)下列叙述中正确的是 A)对长度为n的有序链表进行查找,最坏清况下需要的比较次数为n B)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2) C)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n) D)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)(2)算法的时间复杂度是指 A)算法的执行时间 B)算法所处理的数据量 C)算法程序中的语句或指令条数 D)算法在执行过程中所需要的基本运算次数(3)软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是 A)编辑软件 B)操作系统 C)教务管理系统 D)浏览器(4)软件(程序)调试的任务是 A)诊断和改正程序中的错误 B)尽可能多地发现程序中的错误 C)发现并改正程序中的所有错误 D)确定程序中错误的性质(5)数据流程图(DFD图)是 A)软件概要设计的工具 B)软件详细设计的工具 C)结构化方法的需求分析工具 D)面向对象方法的需求分析工具(6)软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于 A)定义阶段 B)开发阶段 C)维护阶段 D)上述三个阶段(7)数据库管理系统中负责数据模式定义的语言是 A)数据定义语言 B)数据管理语言 C)数据操纵语言 D)数据控制语言(8)在学生管理的关系数据库中,存取一个学生信息的数据单位是 A)文件 B)数据库 C)字段 D)记录(9)数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的 A)需求分析阶段 B)逻辑设计阶段 C)概念设计阶段 D)物理设计阶段(10)有两个关系R和T如下: 则由关系K得到关系T的操作是 A)选择 B)投影 C)交 D)并(11)以下叙述正确的是 A)C语言程序是由过程和函数组成的 B)C语言函数可以嵌套调用,例如:fun(fun(x)) C)C语言函数不可以单独编译 D)C语言中除了main函数,其他函数不可作为单独文件形式存在(12)以下关于C语言的叙述中正确的是 A)C语言中的注释不可以夹在变量名或关键字的中间 B)C语言中的变量可以在使用之前的任何位置进行定义 C)在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致 D)C语言的数值常量中夹带空格不影响常量值的正确表示(13)以下C语言用户标识符中,不合法的是 A)_1 B)AaBc C)a_b D)a-b(14)若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是 A)a=a++,i++; B)i=(a+k)=(i+k); C)i=a%11; D)i=!a;(15)有以下程序 #includestdio.h main() { char a,b,c,d; scanf(“%c%c”,a,b); c=getchar(); d=getchar(); printf(“%c%c%c%cn”,a,b,c,d); } 当执行程序时,按下列方式输入数据(从第1列开始,CR代表回车,注意:回车也是一个字符) 12CR 34CR 则输出结果是 A)1234 B)12 C)12 3 D)12 34(16)以i关于C语言数据类型使用的叙述中错误的是 A)若要准确无误差的表示自然数,应使用整数类型 B)若要保存带有多位小数的数据,应使用双精度类型 C)若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型 D)若只处理“真”和“假”两种逻辑值,应使用逻辑类型(17)若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是 A)1 B)0 C)2 D)不知道a的值,不能确定(18)以下选项中与if(a==1)a=b; else a++;语句功能不同的switch语句是 A)switch(a) {case:a=b;break;brdefault:a++;br}brB)switch(a==1)br{case 0:a=b;break;brcase 1:a++;br} C)switch(a) {default:a++;break;brcase 1:a=b;br} D)switch(a==1) {case 1:a=b;break;brcase 0:a++;br}(19)有如下嵌套的if语句 if (ab) if(ac)k=a; else k=c; else if(bc) k=b; else k=c; 以下选项中与上述if语句等价的语句是 A)k=(a<b)?a:b;k=(b<c)?b:c; B)k=(a<b)?((b<c)?a:b):((b>c)?b:c); C)k=(a<b)?((a<c)?a:):((b<c)?b:c); D)k=(a<b)?a:b;k=(a<c)?a:c;(20)有以下程序 #include<s七dio.h> main() {in i,j,m=1; for(i=1;i<3;i++) {for(j=3;j>O;j--) {if(i*j)>3)break;brm=i*j;br} } printf("m=%d\n",m); } 程序运行后的输出结果是 A)m=6 B)m=2 C)m=4 D)m=5(21)有以下程序 #include(stdio.h> main() {int a=l;b=2; for(;a<8;a++) {b+=a;a+=2;} printf("%d,%d\n",a,b); } 程序运行后的输出结果是 A)9,18 B)8,11 C)7,11 D)10,14(22)有以下程序,其中k的初值为八进制数 #include stdio.h main() {int k=011; printf("%d\n",k++); } 程序运行后的输出结果是 A)12 B)11 C)10 D)9(23)下列语句组中,正确的是 A)char *s;s="Olympic"; B)char s[7];s="Olympic"; C)char *s;s={"Olympic"}; D)char s[7];s={"Olympic"};(24)以下关于return语句的叙述中正确的是 A)一个自定义函数中必须有一条return语句 B)一个自定义函数中可以根据不同情况设置多条return语句 C)定义成void类型的函数中可以有带返回值的return语句 D)没有return语句的自定义函数在执行结束时不能返回到调用处(25)下列选项中,能正确定义数组的语句是 A)int num[0..2008]; B)int num[]; C)int N=2008; int num[N]; D)#define N 2008 int num[N];(26)有以下程序 #include stdio.h void fun(char *c,int d) {*c=*c+1;d=d+1; printf("%c,%c,",*c,d); main() {char b='a',a='A'; fun(b,a);printf("%e,%e\n",b,a); } 程序运行后的输出结果是 A)b,B,b,A B)b,B,B,A C)a,B,B,a D)a,B,a,B(27)若有定义int(*Pt)[3];,则下列说法正确的是 A)定义了基类型为int的三个指针变量 B)定义了基类型为int的具有三个元素的指针数组pt C)定义了一个名为*pt、具有三个元素的整型数组 D)定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组(28)设有定义double a[10],*s=a;,以下能够代表数组元素a[3]的是 A)(*s)[3] B)*(s+3) C)*s[3] D)*s+3(29)有以下程序 #include(stdio.h) main() {int a[5]={1,2,3,4,5},b[5]={O,2,1,3,0},i,s=0; for(i=0;i<5;i++) s=s+a[b[i]]); printf("%d\n", s); } 程序运行后的输出结果是 A)6 B)10 C)11 D)15(30)有以下程序 #include stdio.h main() {int b [3][3]={O,1,2,0,1,2,O,1,2},i,j,t=1; for(i=0;i3;i++) for(j=ij=1;j++) t+=b[i][b[j][i]]; printf("%dn",t); } 程序运行后的输出结果是 A)1 B)3 C)4 D)9(31)若有以下定义和语句.......这是全国2010全国c语言考试的部分题目,楼主需要的话可以自己去下载转自:酷8学习网 求c语言试题及答案!急啊!c语言考试题(一) 一、 单项选择题(每题2分,共20分) 1、以下选项中属于C语言的数据类型是( ) A.复数型 B.逻辑型 C.集合型 D.双精度型 2、一个C程序的执行是从( ) A.main()函数开始,直到main()函数结束 B.第一个函数开始,直到最后一个函数结束 C.第一个语句开始,直到最后一个语句结束 D.main()函数开始,直到最后一个函数结束 3、设有语句int a=3;则执行语句a+=a-=a*a;后,变量a的值是( ) A.3 B.0C.-12 D.9 4、若有 char c[5]={'c','d','\0','e','\0'};则执行语句printf("%s",c);结果是( )。 A.cd\0e B.'c''d' C.cd D.cd e 5、已知:int a[2][3]={1,2,3,4,5,6}, (*p)[3]=a;则下列表达式不是4的是 ( )。 A.*(*p+3) B.*p+3 C.*(*(p+0)+3) D.a[0][3] 6、以下有宏替换不正确的叙述( ). A.宏替换不占用运行时间 B.宏名无类型 C.宏替换只是字符串替换 D.宏名必须用大写字母表示 7、执行char str[10]=”Chnina”; strlen(str)的值是( ) A.5 B.6 C.7 D.9 8、下面程序的输出结果是:( ) #define POWER(x) (x*x) main() {int i=4; printf("%d",POWER(i-2)); } A. -9 B. -7 C. 5 D. -6 9、在定义int a[3][4][2];后,第10个元素是( ) A.a[2][1][2] B.a[1][0][1] C.a[2][0][1] D.a[2][2][1] 10、下面程序的输出结果是:( ) typedef struct {long x[2];brshort y[4];brchar z[8];br}MYTYPE; MYTYPE a; main() { printf("%dn",sizeof(a));} A. 2 B. 8 C. 14 D. 24 二、 填空题(每空1分,共11分) 1、字符串"A"在内存中占用的字节数为 。 2、C语言中的标识符只能由字母、下划线和 组成。 3、若有定义语句“ int a=25,b=14,c=19;",以下语句的执行结果是 if(a++=25b--=2c++) printf("***a=%d,b=%d,c=%dn",a,b,c); else printf("###a=%d,b=%d,c=%dn",a,b,c); 4、有如下定义a[]="B172\'a%%";则执行语句printf("%d",strlen(a));的结果为 。 5、若有定义:int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i; for(i=0;i4;i++) p[i]=a[i*3];则*(*(p+1)+2)的值为 ,*p[2]的值为 。若数组的首地址为2000,则p[1]指向的地址为 。 6、设a=2,b=3,x=3.5,y=2.5,则表达式(float)(a+b)/2+(int)x%(int)y 的结果是 。 7、设x、y都是int型变量,初值都为1,则执行表达式:--xy++后,y的值为 。 8、语句for(i=1;i==10;i++)continue;循环的次数是 。 9、以下程序输出 。 main() {enum em {em1=3,em2=1,em3}; char *aa[]={"AA","BB","CC","DD"}; printf("%s%s%sn",aa[em1],aa[em2],aa[em3]); } 三、 写程序结果(每题5分,共35分) 1、#include main() {int x,y,z;brx=1,y=2,z=3; x+=y+=z;brprintf("1:%dn",z+=xy?x++:y++);brx=0x02ff;y=0xff00;brprintf("2:%dn",(xy)4|0x005f);brx=y=z=-1; ++x||++y++z;brprintf("3:%d,%d,%dn",x,y,z);br} 2、#define f(x) x*x main() {int a=6,b=2,c;brc=f(a+b)/f(b);brprintf(“%dn”,c);br} 3、fun(int k) { printf("%d",k); if(k0) fun(k-1); } main( ) { int w=5; fun(w); printf("n"); } 4、#include main() {int x=1,y=0;brswitch(x)br{ case 1:brswitch(y)br{ case 0:printf(“firstn”);break;brcase 1:printf(“secondn”);break;br} case 2:printf(“thirdn”); } } 5、#include main() { int k=4; func(k); func(k); } func(int a) { static int m=0; m+=a; printf("%d",m); } 6、struct st { int x; int *y; }*p; int s[]={30,20}; struct st a[]={1,s[0],2,s[1]}; main() { p=a; printf("%d,",p-x); printf("%dn",++(*(++p)-y)); } 7、假定在当前盘目录下有2个文本文件,其名称和内容如下: 文件名: a1.txt a2.txt 内容: ABCDEF# abcdef# #include "stdio.h" main() {FILE *fp;brvoid fc();brif((fp=fopen("a1.txt","r"))==NULL)br{printf("Can not open file!n"); exit(1);} else{fc(fp);fclose(fp);} if((fp=fopen("a2.txt","r"))==NULL) {printf("Can not open file!n"); exit(1);} else{fc(fp);fclose(fp);} } void fc(fp1) FILE *fp1; {char c;brwhile((c=fgetc(fp1))!='#')putchar(c);br} 四、 程序填空(每空2分,共14分) 1、下面程序求矩阵a的主对角线元素之和,请填空。 main() { int a[3][3]={2,4,6,8,10,12,14,16,18}; int sum=0,i,j; for(i=0;i3; ① ) for(j=0; ② ;j++) if(i= =j) sum=sum+ ③ ; printf("sum=%dn",sum); } 2、下列函数coy把字符数组S2中的全部字符复制到字符数组S1中, 复制时’\0’也要复制过去,’\0’后面的字符不用。 coy(char s1[],char s2[]) { int i; for(i=0;s2[i]!= ① ;i++) s1[i]=s2[i]; ② ; } 3、下面程序的功能是将字符串a中的下标为奇数的元素由小到大排序,其他元素不变,请填空。 main() { char a[]="students",t; int i,j; for(i=1;i7;i+=2) for(j=i+2;j8; ① ) if( ② ) {t=a[i];a[i]=a[j];a[j]=t;} puts(a); } c语言考试题(二) 一. 填空题(每题2分,共20分) 1. C语言基本数据类型有:_______________________________; 构造类型有:_____________________________________。 P.13 2. C语言源程序注注释符号是:________________________________, 为表明层次结构,C语言源程序通常采用_____________________格式编写。P.4 3. 源程序TEST.C经编译产生的目标文件是:________________________; 经连接处理后,产生的可执行文件是:__________________________。 4. strlen(“1234 0xy)的值为:_____________________________; sizeof(float)的值为:____________________________ 5. 二维数组a[10] [50]最后一行的首地址为:_________________________; 最后一个元素的首地址为:____________________________________。 6. C标准库函数中,数学函数的原型在:________________头文件中,自定义头文件D : MYC MY . H应如何包含到源程序文件中:_________________________。P.130 7. 已知函数定义为:int stat(int a,float *p) {……………} 则此函数的两个参数类型分别是_______________ 、 _____________________。 8. 设int x,y,z=4; x=y=++z; x=(yz)?x+2;x++;则x的值是:_________; 设int a=0,b=0,c=0;c=++a | | b++; ,则a、b、c值分别是:_____________。 9. 与if (x=0) 等价的写法是if ( ! x ); 判断两个(float)变量x,z是否相等一般:if ( fabc(x-z)1e-6 )。 10.已知赋值语句zhang.year=1985;可判断zhang是_______________类型的变量; 定义文件指针的C语句是:_________________________________。 二. 单项选择题 (每题1分,共10分) 1. 组成C程序的基本单位是____________________________。 A.函数 B.标识符 C.表达式 D.语句 2. 设int类型的数据长度为2字节,则该类型数据的取值范围是__________________。 A.0至65536 B.0至65535 C.-32767至32768 D.-32768至32767 3. 在C语言中,逻辑值“真”是用_____________________表示的。 A.预定义为真值的宏 B.非零数 C.正数 D.非零整数 4. C语言对于嵌套if语句规定else总是与_____________________匹配。 A.与最外层的if B.与之前最近的if C.与之前最近的不带else的if D.与最近的{ }之前的if 5. 数组定义char a[10]={`a`,`b`,`c`}:包括了几个元素____________________。 A.3 B.9 C.4 D.10 6. 数组名作为实参传给被调用的函数时,形参获得的是_____________________。 A.该数组第一个元素的值 B.该数组所有元素的值 C.该数组第一个元素的首地址 D.该数组所有元素的首地址 7. 为表示关系x ≥ y ≥z,正确的C语言表达式为_________________________。 A.(x=y=z) B.(x=y)AND(y=z) C.(x=y)(y=z) D.(xy)(y=z) 8. 根据定义int a[ ]={1,2,3},i,*p=a; 从语法分析_________________是不正确的。 A. a[p-a] B.*(a) C.p D.*(*(a+i)) 9. 若有语句scanf(“%d%d”,a,b);要使变量a,b分别得到12和34;正确的输入形式为____________________________。 A.12 34 B.12,34 C.1234 D.12:34 10.union uex {int i;float f;char c;}ex;则sizeof(ex)的值是____________________。 A.4 B.5 C.6 D.7 三. 分析程序,写出运行结果。(每题4分,共20分) 1. 源程序如下,运行时假定键盘输入字符串为``2004`` #include void main(void) { int n=0; char c; while( (c=getchar( )) ! =`n` ) /*字符型数字*/ { if (c=`0`c=`9` ) n = n*10 + c- `0` ; /*数字*/ } printf(“value=%d|n” ,n); } 结果为: value=2004 。 2. 源程序如下: #include void main(void) { int num[9]={399,398,397,396,395,299,290,311,301}; int score[9]={81,85,59,77,90,66,89,93,73}; int iMax,iPos,i; iPos=0; iMax=score[iPos]; for(i=1;i9;i++) if(scoreiMax) { iPos=i; iMax=score[iPox]; } printf(“num=%d,score=%d”,num[iPos];score[iPos]); 结果为: num=311, score=93 。 3. 源程序如下,运行时假定键盘输入数据为:1 2 3 4 5 6 7 8 9 10 #include void main(void) { int i,a[10]; int *p; p=a; for(i=0;i10;i++) scanf(“%d“,p++); for(p=a;p SPAN;p++) if (*p%2)printf(“%3d”,*p); } 结果为: 1 3 5 7 9 。 4. 源程序如下,两次运行,分别输入数据13和21 #include #include void main(void) { int n,s; scant (“%d”,n); s=panduan( n); if(s==1)printf(“yesn”); else printf(“non); } int panduan(int n) { int k,j; k=(int)sqrt((double)n); for(j=2;j=k,j++) { if(n%j==0) break; } if(jk) retum(1); else retum(0); } 结果为 yes no 5.源程序如下,运行时假定键盘输入字符为:AxByCz #include #include void main(void) { char str[80]; int i; gets(str); for(i=0;str!=`\0`;i++) if(str=`a`str=`z`) str-=32; else if (str=`A`str=`Z`) str+=32; puts(str); } 结果为: aXbYcZ 。 四. 下列程序中每个划线处有一个错误,改正划线 中的错误,使其实现题目要求。(每体4分,共20分) 1. 求 s=1+2+3+、、、、、、、+100 include 改正为_________________________。 void sum (void) 改正为_________________________。 { int s,i; for (s=0,i=1;i=100;i++) { s=s+ i ++; 改正为__________________________。 } printf (“s=%f”,s) 改正为__________________________。 } 2. 源程序实现求x #include double pow(float . int) 改正为_________________________。 void main(void) { int i, n; float x; scanf (“%f,%d”,x,n); for (i=1; i9;i++) printf(“%d,%en”, i, pow(i,x); } 改正为______________________。 double v v pow(float x, int n) { int i; double p=0; 改正为______________________。 for (i=1; i i++)改正为_______________________。 p*=x; retum(p); } 3. 源程序实现排升序。 #include void main(void) { int i, j, iMin, a[10]={4,3,5,1,10,12,2,6,7,9}, iTemp; for (i=0; i9; i++) { iMin=0; 改正为_______________________。 for (j=i+1; j10;j++) if(a[iMin] iMin="j;"改正为_______________________。 if (iMin==i) 改正为_________________________。 { iTemp=a; a[iMin]=a; 改正为_________________________。 a[iMin]=iTemp; } } for(i=0; i10; i++) printf(“%4d”, a): } 4. 源程序为求平均值。 #include void main(void) { int i, sum; 改正为____________________。 float avg; int sc[10], *p=sc; for (i=0, i10; i++) 改正为____________________。 { scanf(“%d”, p++); sum+= *p; 改正为____________________。 } avg = sum/ 10; 改正为___________________。 printf(“avg=%f”, avg); } 5. 源程序求 eX=1+x+x2/2!+……+xn/n!前n+1项之和 #include void main(void { float exp , x , t; int i, n; scanf(“%f, %d”,x, n); t=0; 改正为___________________。 exp=1.0; for(i=1 ; i=n; i++) { if(t1e-6) loop; 改正为__________________。 t+=x/i; 改正为___________________。 exp*=t; 改正为___________________。 } printf(“n%15.6f”, exp); } 五. 编程题 (每题6分,共30分) 1. 根据以下程序框架,编写子函数,实现交换两个整型变量x和y的值。 #include void swap (int *, int *); void main (void) { int x, y; scanf(“%d, %d”, x, y); swap( x, y); printf(“%d, %d”, x, y); } void swap( ) { } 2. 设某班人数36人,参加C语言考试,用一维数组score[36]存放考试成绩,已给出一部分程序,完善以下程序,使其实现统计并输出不及格人数及百分比。 #include void main (void) { int i; float scoer[36], precent; int count=0; for (i=0; i36; i++) { scanf(“%f”, score); } 3. 完善以下程序使其实现由键盘任意输入一串字符,统计其中大写字母个数iA、小写字母个数ia、其他字符个数iother。 #include #include void main (void) { char str [80]; int i, iA=0, ia=0, iother=0; } 4. 完善以下程序使其实现求方阵主和辅对角线元素之和及其转置矩阵,设方阵用二维数组a表示,转置矩阵用t表示,sl和s2表示主和辅对角线元素之和。 #include void main(void) { int a[3] [3]={1,3,5,7,9,11,13,15,11}; int i, j, s1, s2; int t[3] [3]; printf(“%d, %d,n”,s1, s2); for(i=0; i3; i++) for(j=0; j3; j++) printf(“%3d”, t [j]); } 5. 已知字符数组str[80],编写返回指针的子函数,实现在其中查找字符ch首次出现的位置。 #include #include #include char *lstrchar(char*, char); void main(void) { char c, *p, str[80]; gets (str); scanf(“%c”, c); p=lstrchar(str,c); if(p==NULL) printf(“char %c not foundn”c); else printf(“The position is %d”, p-str); char “lstrchar( ) { } 历年全国计算机二级考试c语言真题及答案 C语言考试题我来回答下把: 1.1 2.9 解释:t = (ab)?a:b等价于t = ((ab)?a:b),这下应该知道了把 3.96 `(和~键是同一个键) 解释:a=96;96是那个字符的ACSII码值的十进制表示,它的十六进制表示的ASCII码值为60,你可以对96进行除16取余法得到60,然后你去查看下字符的ASCII码 16进制表示的那个表就会发现,它对应的是这个字符,所以就是他了,别和单引号混淆就好,单引号的ASCII码十六进制表示为27 4.a[0] a[1] a[2] 5.1600 6.文本文件 二进制文件 [这个拿的不是很准] 7.fopen fclose fseek 下面: 1.C 解释:a+=a-=a*=a,首先要知道+=,-=,*=的优先级是相同的,但是他们的结合性是由右向左的,所以,他相当于a+=a-=(a=a*a),你还要知道,这是在同一条语句中多次修改同一个变量的值,这里有结合性,可以保证,但是有的时候并不可以,因为语言中明确规定,求值顺序未定义,一般尽可能不要在同一条语句里多次修改同一个变量的值,有的时候还和编译器有关的,a+=a-=(a=a*a)相当于a+=(a=a-(a=a*a)),在a=(a+(a=a-(a=a*a))),所以为0 2.B 3.D 解释:你定义一个带参数的宏#define ADD(x) (x)+(x) 你要知道,宏替换是机械化的替换,不会很智能化的,也就是说 在这里,替换的时候是替换成了这样d=(a+b)+(a+b)*c;所以最后就是80了 4. A 解释:这样理解把, char a[5]; char *p=a;这个是把数组的首地址赋给指针p来初始化指针,你后面再加一句p="abcd";不就是对指针的赋值吗,使指针不再指向数组的首地址,而是指向了字符串的首地址了.相信char *p="abcd";很常见把,呵呵... 5.C 解释:因为k=2,然后执行关系表达式k==0,结果显然判断结果为假,所以不执行循环体 6.C 7.A 指针是不能相加的 8.D 解释:这个应该好好解释下,这个题还好了 struct st{ int n;struct st *next;}; static struct st a[3]={5,a[1],7,a[2],9,‘\0’},*p; p=a[0]; A p++-n B p-n++ C (*p).n++ D ++p-n 分析:首先你要知道,这是定义了一个结构体数组,这个static struct st a[3]={5,a[1],7,a[2],9,‘\0’}写的易读一点就是static struct st a[3]={{5,a[1]},{7,a[2]},{9,'\0'}},是不是明了了好多. 你做这个题目之前还需要明白一点,即箭头操作符的优先级高于++运算符,然后分析选项 选项A.p++是后缀加,所以执行(p++)-n(即p++-n) 相当于执行p-n,即得到的值是5 选项B. p-n++相当于(p-n)++,由于是后缀加,所以得到的值也是5 选项C.(*p).n++ 就是相当于((*p).n)++,更相当于(p-n)++,所以和上面的是一样的,也是5,为什么它相当于它呢,这就要你看看箭头操作符的由来了,箭头操作符的由来就是为了结合解引用操作符*和点操作符.于一起的.来简化书写,增加可读性 选项D.++p-n 相当于++(p-n),由于是前缀加,所以得到的值为6了 9.C,选择W会格式化 10. B ,数组名其实就相当于一个指针,这里对指针做运算,加1使指针下移 写出运行结果: 1. 10623-9003 2. 6 7 8 填空题: 1. #include stdio.h #include math.h 2. 2 3.break; 4.k+1 编程题: 1.代码如下: #includestdio.h int main() { int i,n; long s=1; scanf("%d",n); for(i=1;i=n;i++) s*=i; printf("%ld",s); return 0; } 2.代码如下 #includestdio.h int main() { int i,s=0; for(i=1;i=100;i++) s+=i; printf("%d",s); return 0; } 应该没错把,楼主有什么问题可以发消息给我 两道C语言题目,求答案和解析,谢谢~第9题:【C】 核心知识点:1、逗号表达式,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。2、++a与a++的区别,前者为先自加1而后引用当前值参与计算,后者为先引用当前值参与计算而后自加1。 x=(a=3,b=++a); 1)执行a=3,此时a值为3;2)执行++a,此时a值为4;3)执行b=++a,此时b值为4,a值为4;4)此时逗号表达式值为4,执行x=4,此时x值为4,a值为4,b值为4。 #include?stdio.h #include?stdlib.h int?main?(void)?{ int?x,a,b; x=(a=3,b=++a); printf?("x:%d?a:%d?b:%d",?x,?a,?b); getch?(); return?0; } 运行结果 第10题:【B】 A:连续赋值,除了最右的项外,其余所有项都必须是可以赋值的变量,不可以是常量或者表达式。 B:y==1是一个逻辑表达式,从题干得出其值为0,再将其赋值给x,最终结果是x被赋值0。 C:i=float(x);语法错了。如果要实现将x强制转换为float类型并赋值给i,应该写作i=(float)(x); D:求余运算(%)参与运算的量均必须为整型。 计算机二级C语言选择题及答案(2)} printf("%dn",num); } 程序执行后的输m结果是()。 A.35 B.37 C.39 D.3975 32.以下程序的'输出结果是()。 main() {char st[20]="hello\0t\"; printf("%d%dn",strlen(st).sizeof(st)); } A.9 9 B.5 20 C.13 20 D.20 20 33.若有以下的定义:‘int t[3][2];”,能正确表示t数组元素地址的表达式是()。 A.t[3][2] B.t[3] C.t[l] D.t[2][2] 34.函数fseek(pf,OL,SEEK END)中的SEEK ENE 代表的起始点是()。 A.文件开始 B.文件末尾 C.文件当前位置 D.以上都不对 35.下述程序的输出结果是()。 #include main() { int i; for(i=l;i=10;i++) {if(i*i=20)(i*i=100)) break; } printf("%dn",i*i); } A.49 B.36 C.25 D.64 36.若有定义“int b[8],*p=b;”,则p+6表示()。 A.数组元素b[6]的值 B.数组元素b[6]的地址 C.数组元素b[7]的地址 D.数组元素b[o]的值加上6 37.设变量已正确定义,则以下能正确计算f=n!的程序是()。 A.f=0: for(i=1;i=n;i++)f*=i: B.F=1: for(i=l;i2n;i++)f*=i: C.f=l: for(i=n;i1;i++)f*=i: D.f=1; for(i=n;i=2;i--)f*=i: 38.下述程序执行的输出结果是()。 #include main() { char a[2][4]; strcpy(a,"are");strcpy(a[1],"you"); a[0][3]=’’; printf("%sn",a): } A.areyou B.you C.are D. 39.设x=011050,则x=x01252的值是()。 A.0000001000101000 B.1111110100011001 C.0000001011100010 D.1100000000101000 40.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用(双引号)括起时,寻找被包含文件的方式是()。 A.直接按系统设定的标准方式搜索目录 B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索 C.仅仅搜索源程序所在目录 D.仅仅搜索当前目录 【答案与解析】 1.D。【解析】算法的空间复杂度,是指执行这个算法所需的存储空间。算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间、算法执行过程中所需要的额外空间。 2.D。【解析】数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,用的存储结构有顺序和链式结构。用不同的存储结构,其处理的效率是不同的。 3.D。【解析】所谓的交换排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序通过相邻元素的交换,逐步将线性表变成有序是一种最简单的交换排序方法。 4.C。【解析】结构化程序设计的原则和方法之一是限制使用GOT0语句,但不是绝对不允许使用GOT0语句。其他三项为结构化程序设计的原则。 5.D。【解析】文件系统所管理的数据文件基本上是分散、相互独立的。相对于数据库系统,以此为基础的数据处理存在3个缺点:数据冗余大、数据的不一致性、程序与数据的依赖性强。 6.C。【解析】面对象的设计方法的基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。它虽强调模拟现实世界中的概念而不强调算法,但是它鼓励开发者在软件开发的过程中从应用领域的概念角度去思考。 7.D。【解析】所谓的后序遍历是指,首先遍历左子树,然后遍历右子树,最后访问根结点,并且在遍历左、右树时,仍然先遍历左子树,然后遍历右子树,最后访问根点。因此,后序遍历二叉树的过程也是一个递归过程。 8.B。【解析】软件的过程设计是指系统结构部件转换成软件的过程描述。 9.A。【解析】①对软,牛开发的进度和费用估计不准确:②用户对已完成的软件系统不满意的现象时常发生;③软件产品的质量往往靠不住;④软件常常是不可维护的;⑤软件通常没有适当的文档;⑥软件成本在计算机系统总成本中所占的比例逐年上升;⑦软件开发生产率提高的速度远远跟不上计算机应用迅速普能及深入的趋势。 10.C。【解析】对象的封装性是指从外面看只能看到对象的外部特性,而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。 11.C。【解析】数据库系统由如下5个部分组成:数据库(DB)、数据库管理系统fDBMS)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。其中 DB(DataBase)即数据库,是统一管理的相关数据的集合;DBMS即数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,为用户或应用完程序提供访问DB的方法。由以上可知,选C为正确答案。 12.A。【解析】标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。B选项int不是表达变量类型的标识符,它不能再用做变量名和函数名。C 选项do是C语言的一个关键字。D选项标识符只能以字母或下划线开始。 13.D。【解析】本题考查逻辑运算符的使用。当“”的两个运算对象都是逻辑1时,表达式返回值才是1;“||” 的两个运算对象至少有一个是逻辑1时,表达式返回值也是1,x14.C。【解析】第1个printf函数,格式说明的个数是2,而输出项的个数是3,所以对于多余的输出项k不予输出;第2个printf函数,有两个%说明,第1个%后面的字符要原样输出。本题考查printf函数的格式。①“%x”和“%0”分别表示以十六进制和八进制无符合型输出整型数据(不带前导ox或0);②printf函数中格式说明符之前插入的任何字符都原样输出;③格式说明与输出项的个数,也要相等,如果格式说明的个数少于输出项的个数,则对于多余的输出项不予输出。 15.C。【解析】函数fun(int x,int y)的功能是返回x+y的值。在主函数中,变量a,b,c的初始值分别为1,2,3。因此,逗号表达式“a++,b++,aq b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。 16.D。【解析】在x=2,y=x+3/2中,3/2=1。2+1= 3,因此表达式的值为3,因为x,y为double型变量,故选择D选项。 17.A。【解析】当x为1时,执行case 1,a自加等于1,因为case 1后没有break,接着执行case 2,此时a的值为2,b自加为1,故选择A选项。 18.D。【解析】本题考梦自增运算符“++”、逻辑与运算符“”和逻辑或运算符“||”。自增运算符“++”出现在变量之前,表示先使用变量的值加l,再使用变量的值进行运算;出现在变量之后,表示先使用变量的值进行运算,再使用变量的值加l。当逻辑与运算符“’’两边的运算对象都为真时,逻辑表达式的值才为真;当逻辑或运算符“||”只要一个值为1,值就为1。根据运算符的优先级,题中应先计算内层括号中的值。++j是先自加后运算,因此运算时j的值等于3,所以表达式++j=3成立,即表达式的值为1;1与任何数都为进行或(||)运算,结果都为1,因此k=3的表达式i++是先运算后自加,因此运算时i为1,所以i++=1成立,自加1后i=2。if语句的条件为真即“1”,所以输出i、j、k的值分别是2,3,3。 19.A。【解析】本题考查switch语句。当i一1时,执行case 1,因为没有遇到break语句,所以依次往下运行,“a=a+ 2=2,a=a+3=5”;当i=2时,执行case 2,因为没有遇到break语句,所以依次往下执行,“a=a+2=7,a=a+3= 10”;当i=3时,执行case 3,a=a+1=11,因为没有遇到break语句,所以依次往下运行,a—a+2—13,a—a+3一l6:当i=4时,执行default,a=a+3=19,结束循环。 20.C。【解析】只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i的值,而从0到50能够同时被2、3、7整除的数只有42,故选择C选项。 21.A。【解析】循环的作用是求行下标从1到2列下标从0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][0]+a [2][1]+a[2][2]=3+4+5+6+0=18。 22.A。【解析】在程序语句中,k的初始值为5,进行第l次while循环后,k自减1为4,非0,执行循环体里的printf语句,输出k,此时k的值变为1。程序执行第2次循环时,k 自减1变为0,为假,退出while循环语句。所以程序的最后结果为1。 23.A。【解析】通过地址来引用数组元素的方法有下列5种: (1)a[i][j];(2)*(a[i]+j);(3)*(*(a+j)+i);(4)* (a[i][j]);(5)(aE0][0]q-3*i+j)。故A正确。 24.C。【解析】选项A、B的空间不够;字符串存储要有结束符’\0’,且要占用一个空间,printf用来输出字符,不能输入字符串。 25.D。【解析】由题目ee线性链表的定义可知,要将q 和r所指的结点交换前后位置,只要使q指向r的后一个结点,p指向r结点,r指向q结点即可。而在选项D由,r- next=q,这时r指向的节点为q;p-next r,这时p指向的节点为r;q-next=r-next,因为r节点已经指向q,所以执行这个语句后q又指向q,所以选项D不正确。 26.B。【解析】在第1次外层for循环中,首先x++得到x=1。进入到内层for循环,只有循环j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加两次,当退出内层for循环时,x=3,然后执行x++,得到x=4。在进入执行第2次外层for循环中,首先x++得到x=5。进入到内层for循环,只有循环变量j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量X的值自加1两次,当退出内层for循环时,x=7,然后执行x++,得到x=8,所以打印输出变量x的值为8。 27.C。【解析】子函数fun1(double a)的功能是返回a的平方值的整数部分。子函数fun2(double x,double y)的功能是返回X的平方值的整数部分与Y的平方值的整数部分的和。又因为题中变量w的定义为double型,函数fun(2) 的定义为int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。所以双精度型变量w的值为5.O。 28.C。【解析】在for循环语句中自变量i从0开始,每次自加2,执行s+=*(t+i)语句,因为C语言规定数组名做表达式相当于数组的首地址,也就是第一个元素的地址。因此,*(t+i)代表数组的第i+1个元素。所以程序运行的结果是1+3+5+7+9=25,即变量S的值等于25。 29.A。【解析】本题在函数int fun(int n)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量x时,递归调用的过程为 fun(10)=10…fun(9)=104-94-fun(8)=104-9+84- fun(7) =10+9++8++7++fun(6)=10+9++8+7+6+fun (6) =10+9++8+7+6+5+fun(4) =10+9++8+7+6+5+4+fun(3) =10+9++8+7+6+5+4+3+fun(2) =10+9++8+7+6+5+4+3+2+fun(1) =10+9++8+7+6+5+4+3+2=55 |