1.若有以下程序
#include { int a=1,b=2,c=3,d=4, r=0; if (a!=1) ; else r=1; if (b==2) r+=2; else; if (c!=3) r+=3; else; if (d==4) r+=4; printf(\"%d\\n\ } 则程序的输出结果是 A) 10 B) 7 C) 6 D) 3 参考答案:B 【解析】else总是和与之最近的上面的if配对,执行第一个if,判断条件不成立,执行else r=1;语句。再执行第二个if语句中的判断条件,成立,左移执行r+=2,r的值为3,再执行第三个if的判断条件,不成立执行第7行else后面的空语句\";\"。再执行第四个if的判断条件d==4成立,执行r+=4,r的值为7。然后打印输出。 2.若有以下程序 #include { int a=1,b=2,c=3,d=4, r=0; if (a!=1) ; else r=1; if (b==2) r+=2; if (c!=3); r+=3; if (d==4) r+=4; printf(\"%d\\n\ } 则程序的输出结果是 A) 3 B) 7 C) 6 D) 10 参考答案:D 【解析】第一个if语句a!=1条件为假,所以执行else后的语句r=1。第二个if语句b==2条件成立,执行r+=2,r的值变为3,第三个if语句c!=3条件为假,所以不做任何操作。执行下面的r+=3操作,r的值变为6。判断第四个if条件,d==4条件成立,执行r+=4操作,结果为10。 3.有以下程序: #include { int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3; printf(\"%d,%d,%d,%d\\n\",a,b,c,d); } 程序输出( )。 A) 1,1,2,0 B) 0,0,0,3 C) 编译有错 D) 0,1,2,0 参考答案:C 【解析】本题中if(a=1)b=1;与else d=3; 之间多了语句c=2;所以会出现else语句的位置错误的编译失败提示。 4.有以下程序段: #include a=10; b=50; c=30; if (a>b) a=b, b=c; c=a; printf(\"a=%d b=%d c=%d\\n\", a, b, c); 程序的输出结果是( )。 A) a=10 b=50 c=30 B) a=10 b=50 c=10 C) a=10 b=30 c=10 D) a=50 b=30 c=50 参考答案:B 【解析】本题中a>b的条件不满足,所以不执行逗号表达式a=b,b=c;的操作,而是执行c=a操作,即c的值为10。 5.有以下程序 #include scanf(\"%d\ if(x<=3) ; else if(x!=10) printf(\"%d\\n\ } 程序运行时,输入的值在哪个范围才会有输出结果 A) 小于3的整数 B) 不等于10的整数 C) 大于3或等于10的整数 D) 大于3且不等10的整数 参考答案:D 【解析】根据代码可知如果x的值小于3,执行空语句,不进行打印操作。如果x的值大于3,再判断x的值是否不等于10,如果不等于10就打印x的值,所以选择D选项。 程序分析结果 1.若有定义语句: char *s1=\"OK\ 以下选项中,能够输出\"OK\"的语句是 A) if (strcmp(s1,s2)!=0) puts(s2); B) if (strcmp(s1,s2)!=0) puts(s1); C) if (strcmp(s1,s2)==1) puts(s1); D) if ( strcmp(s1,s2)==0) puts(s1); 参考答案:B 【解析】strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII码值大小),以第一个不相同的字符的大小作为比较结果。因为'OK'<'ok',所以strcmp(s1,s2)为负值,只有B选项正确。 2.有以下程序,程序中库函数islower (ch)用以判断ch中的字母是否为小写字母 #include { if(p[i]==' '&& islower(p[i-1])) p[i-1]=p[i-1]-'a'+'A'; i++; } } main() { char s1[100]=\"ab cd EFG !\"; fun(s1); printf(\"%s\\n\ } 程序运行后的输出结果是 A) ab cd EFg ! C) ab cd EFG ! B) Ab Cd EFg ! D) aB cD EFG ! 参考答案:D 【解析】调用fun函数后,实参数组名s1传给形参指针p,p也指向数组s1。fun函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母的话,就把前一个字符转换为大写。程序中语句p[i-1]=p[i-1]-'a'+'A';即p[i-1]=p[i-1]-32,意思是将p[i-1]中的字符转换为大写。因此D选项正确。 3.有以下程序 #include if (x == 0 || x== 1) return (3); y = x*x - f(x-2); return y; } main() { int z; z = f(3); printf(\"%d\\n\} 程序的运行结果是 A) 0 B) 9 C) 6 D) 8 参考答案:C 【解析】主函数中调用f函数,同时将数值3传递给变量x,执行条件与if(x==0||x== 1);此时条件不成立,跳过return (3);,直接执行语句y=x*x-f(x-2); 这里f(x-2)为函数的递归调用,再次调用f函数,此时x=1,条件语句条件成立,返回3给f(1),y=3*3-3=6,最后将6返回主函数,并进行输出。因此C选项正确。 4.以下函数实现按每行8个输出w所指数组中的数据 #include void fun( int *w, int n) { int i; for(i=0;i printf(\"\\n\"); } 在横线处应填入的语句是 A) if( i/8==0 ) printf(\"\\n\"); B) if( i/8==0 ) continue; C) if( i%8==0 ) printf(\"\\n\"); D) if( i%8==0 ) continue; 参考答案:C 【解析】要按照每行8个输出数据的话,横线处语句的功能应该为:当i是8的倍数时( i%8==0 ),输出一个换行符。因此C选项正确。 5.以下选项中,当x为大于1的奇数时,值为0的表达式是 A) x%2==0 B) x/2 C) x%2!=0 D) x%2==1 参考答案:A 【解析】算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0。B选项的值为不定值,但绝对不是0。C选项的值为真,即1。D选项的值为真,即1。 6.当变量c的值不为2、4、6时,值为\"真\"的表达式是 A) (c>=2 && c<=6)&&(c%2!=1) B) (c==2)||(c==4)||(c==6) C) (c>=2 && c<=6)&& !(c%2) D) (c>=2 && c<=6) || (c!=3) || (c!=5) 参考答案:D 【解析】逻辑或表达式中有一个值不为0,结果即为真,逻辑与表达式中只有两个运算对象均非零,结果才为真。所以只有选项D满足要求。 7.以下叙述中正确的是 A) 在C语言中,逻辑真值和假值分别对应1和0 B) 关系运算符两边的运算对象可以是C语言中任意合法的表达式 C) 对于浮点变量x和y,表达式:x==y 是非法的,会出编译错误 D) 分支结构是根据算术表达式的结果来判断流程走向的 参考答案:B 【解析】A选项中,在C语言中,逻辑真值对应非0; C选项中,表达式:x==y 是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。因此B选项正确。 8.下列关系表达式中,结果为\"假\"的是 A) 3 <= 4 B) (3 < 4) == 1 C) (3 + 4) > 6 D) (3 != 4) > 2 参考答案:D 【解析】B选项中,关系表达式(3<4)==1即1==1,结果为真; C选项中,(3+4)>6即7>6,结果为真;A选项中,3<=4结果为真。D选项中,(3!=4)>2即1>2,结果为假。因此D选项正确。 9.以下叙述中正确的是(短路运算) A) 对于逻辑表达式:a++ || b++,设a的值为1,则求解表达式的值后,b的值会发生改变 B) 对于逻辑表达式:a++ && b++,设a的值为0,则求解表达式的值后,b的值会发生改变 C) else不是一条独立的语句,它只是if语句的一部分 D) 关系运算符的结果有三种:0,1,-1 参考答案:C 【解析】B选项和A选项中,对于逻辑表达式,其中b的值不会因为表达式的结果发生改变;D选项中,关系运算符的结果有\"真\"和\"假\"两种。因此C选项正确。 10.有以下程序(短路运算) #include { int x=35, B; char z='B' ; B = (( x ) && ( z <'b' )); printf(\"%d\\n\ } 程序运行后的输出结果是 A) 1 B) 0 C) 35 D) 66 参考答案:A 【解析】本题重点考察逻辑运算符和关系运算符的相关知识,已知变量x为整型变量,并赋值为35,变量z 为字符型变量,并赋值为'B'。语句B=((x)&&(z<'b'));中,(x)的值为1,'B'的asscii码小于'b'的asscii码,所以(z<'b')的值也为1,1&&1结果为1。因此A选项正确。 11.若变量已正确定义,以下选项中非法的表达式是 A) a!=4||'b' B) 'a'=1/2*(x=y=20,x*3) C) 'a' % 4 D) 'A' + 32 参考答案:B 【解析】A选项中'a'即表示a为字符常量,再给'a'赋值1/2*(x=y=20,x*3),是不正确的。因此B选项正确。 12.与数学表达式x≥y≥z对应的C语言表达式是 A) (x>=y)||(y>=x) B) (x>=y>=z) C) (x>=y)!(y>=z) D) (x>=y)&&(y>=z) 参考答案:D 【解析】本题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。因此D选项正确。 13.以下叙述中正确的是 A) 逻辑\"或\"(即运算符||)的运算级别比算术运算要高 B) C语言的关系表达式:0 【解析】B选项中,(x>0)&&(x<10)的值是1或0,条件是x>0 并且x <10。但是 0 【解析】本题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。因此A选项正确。 15.有以下程序 #include { if( *c >= 'a' && *c <= 'z') *c =*c - ('a' - 'A'); c++; } } main() { char s[81]; gets(s); fun(s); puts(s); } 当执行程序时从键盘上输入Hello Beijing<回车>,则程序的输出结果是 A) hello Beijing B) Hello Beijing C) HELLO BEIJING D) hELLO Beijing 参考答案:C 【解析】主程序读取整个字符串存于s中,调用fun函数,字符指针c指向数组s。函数fun的功能是把指针c所指向的字符数组中的所有小写字符转换为大写。gets函数可以把空格作为字符串的一部分输入,以回车作为输入结束。如果*c为小写字符,则*c=*c-32(转大写)。因此C选项正确。 16.若有以下程序 #include { int a=6, b=0, c=0; for ( ;a&&(b==0); ) { b += a; a -= c++; } printf(\"%d,%d,%d\\n\ } 则程序的输出结果是 A) 5,6,0 B) 6,0,0 C) 6,6,1 D) 5,6,1 参考答案:C 【解析】本题重点考察C语言中for语句和逻辑表达式,for语句的一般形式为: for(表达式1;表达式2;表达式3) 语句 其循环中的\"表达式1(循环变量赋初值)\"、\"表达式2(循环条件)\"和\"表达式3(循环变量增量)\"都是选择项, 即可以缺省,但\";\"不能缺省。该题目中省略了\"表达式1(循环变量赋初值)\"和\"表达式3(循环变量增量)\"。for ( ;a&&(b==0); ){b+=a;a-=c++;}相当于while(a&&(b==0)){ b+=a;a-=c++;}。因此C选项正确。 17.有以下程序 #include { double x=2.0, y; if( x<0.0 ) y=0.0; else if( (x<5.0) && (!x) ) y=1.0 / ( x+2.0 ); else if( x<10.0 ) y=1.0 / x; else y=10.0; printf(\" %f\\n \ } 程序运行后的输出结果是 A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000 参考答案:C 【解析】本题重点考察if语句,变量x和y均为double类型,由于变量x赋值为2.0,因此执行if((x<5.0)&&(!x)),即条件为0,继续执行if( x<10.0 ),条件为1,即执行y=1.0 / x;。依据printf()函数输出类型中f是以小数形式输出单、双精度实数。因此C选项正确。 18.若a是数值类型,则逻辑表达式 (a==1)||(a!=1)的值是 A) 1 B) 0 C) 2 D) 不知道a的值,不能确定 参考答案:A 【解析】逻辑或\"||\"要求只要两边的运算对象有一个非零,结果就为真,虽然不知道a的值,但是若a为1,则左边运算对象为1,若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即1。 19.当变量c的值不为2、4、6时,值也为\"真\"的表达式是 A) (c>=2 && c<=6)&&(c%2!=1) B) (c==2)||(c==4)||(c==6) C) (c>=2 && c<=6)&& !(c%2) D) (c>=2 && c<=6) || (c!=3) || (c!=5) 参考答案:D 【解析】逻辑或运算符中只要有一个运算量为真结果就是真,当c>=2 && c<=6条件不成立时c的值肯定不是2、3、4、5、6,所以c!=3,与c!=5均成立。所以D选项的结果一定为真。 20.有以下程序(短路运算) #include { int a=1,b=2,c=3,d=0; if (a==1 && b++==2) if (b!=2||c--!=3) printf(\"%d,%d,%d\\n\ else printf(\"%d,%d,%d\\n\ else printf(\"%d,%d,%d\\n\} 程序运行后的输出结果是 A) 1,3,2 B) 1,3,3 C) 1,2,3 D) 3,2,1 参考答案:B 【解析】else总是和最近的if配对,所以进入第一个if语句中条件判断时,因为是逻辑与操作需要两边运算对象的值均为非零值,才为真,所以需要逐个执行判断的结果为1,不再执行第二个case语句中的操作。而是进入第二个if语句条件判断,因为b!=2条件成立所以整个条件表达式的值为真,所以不再执行逻辑或的第二个运算对象(c-- !=3)c的值不变,也不再执行第一个else语句。打印a的值1,b的值3,c的值3。 21.若有以下程序(短路运算) #include { int a=1,b=2,c=3,d=4; if ((a=2) || (b=1)) c=2; if ((c==3) && (d=-1)) a=5; printf(\"%d,%d,%d,%d\\n\ } 则程序的输出结果是 A) 1,2,3,4 B) 2,1,2,-1 C) 5,1,2,-1 D) 2,2,2,4 参考答案:D 【解析】第一个if语句的判断条件中是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为真,后面的表达式不再进行执行判断。执行第一个if判断条件时a的值为2,整个表达式的值为真,b的值不变,c的值为2。判断第二个if条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式c==3,不成立,不再判断第二个运算对象,所以不执行d=-1操作和a=5操作。所以结果为选项D。 22.若有以下程序(短路运算) #include { int a=1,b=2,c=3,d=4; if ((a=2) && (b=1)) c=2; if ((c==3) || (d=-1)) a=5; printf(\"%d,%d,%d,%d\\n\ } 则程序的输出结果是 A) 2,2,2,4 B) 2,1,2,-1 C) 5,1,2,-1 D) 1,2,3,4 参考答案:C 【解析】第一个if语句的判断条件中是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if判断条件,均为赋值表达式,第一个运算对象a=2非零,判断第二个表达式b=1也非零,所以条件成立执行c=2的赋值操作。执行第二个if判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中c==3运算对象为假,所以需要判断第二个运算对象d=-1,结果为-1非零,所以条件成立,执行a=5,的操作,所以a值为5,b值为1,c值为2,d值为-1。 23.下关于逻辑运算符两侧运算对象的叙述中正确的是( )。 A) 可以是任意合法的表达式 C) 可以是结构体类型的数据 B) 只能是整数0或非0整数 D) 只能是整数0或1 参考答案:A 【解析】C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A)。 24.设有宏定义: #define IsDIV(k,n) ( ( k%n==1) ? 1 : 0) 且变量m已正确定义并赋值,则宏调用: IsDIV(m,5) && IsDIV(m,7) 为真时所要表达的是 A) 判断m是否能被5和7整除 B) 判断m被5和7整除是否都余1 C) 判断m被5或者7整除是否余1 D) 判断m是否能被5或者7整除 参考答案:B 【解析】本题考查逻辑运算符的相关概念,逻辑与若要为真,那么两边都要为真,所需要m都能被5和7整除都余1,所以选项B正确。 25.若有定义int x,y; 并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y++)中的条件表达式(x-y) 等价的是( )。 A) (x-y<0||x-y>0) B) (x-y<0) C) (x-y>0) D) (x-y==0) 参考答案:A 【解析】条件表达式:x=表达式1?表达式2:表达式3 的含义是:先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。在本题中与表达式1:(x-y)等价的是(x-y<0||x-y>0)。 26.若变量已正确定义 for( x=0,y=0; ( y!=99 && x<4 ); x++ ) 则以上for循环 A) 执行3次 B) 执行4次 C) 执行无限次 D) 执行次数不定 参考答案:B 【解析】本题重点考察for语句的循环次数,for(x=0,y=0;(y!=99&&x<4);x++),y!=99&&x<4即循环条件当y不等于99以及x<4时,执行循环语句,当有一个条件不成立时,均结束循环,因此循环4次,B选项正确。 27.有以下程序 #include { int a = -2, b = 0; while (a++ && ++b) ; printf(\"%d,%d\\n\ a, b ); } 程序运行后输出结果是 A) 0,2 B) 0,3 C) 1,3 D) 1,2 参考答案:D 【解析】本题重点考察while语句,变量a和b分别赋初值为-2和1,while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。a++即a参与运算后,a的值再自增1。++b即b自增1后再参与其它运算。当表达式的值为0时,退出循环,最后输出a和b的值为1和2。因此D选项正确。 28.if语句的基本形式是:if (表达式) 语句,以下关于\"表达式\"值的叙述中正确的是 A) 必须是逻辑值 B) 必须是整数值 C) 必须是正数 D) 可以是任意合法的数值 参考答案:D 【解析】if语句中的表达式可以是任意合法的数值,如常量,变量表达式。所以D选项正确。 29.有以下计算公式 若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是 A) if(x>=0) y=sqrt(x); B) if(x>=0) y=sqrt(x); else y=sqrt(-x); if(x<0) y=sqrt(-x); C) y=sqrt(x); D) y=sqrt(x>=0?x :-x); if(x<0) y=sqrt(-x); 参考答案:C 【解析】公式的要求是无论x大于0还是小于0,y的值都为x绝对值的开方。选项C中如果x值小于0,则y=sqrt(x)就要出错。 30.下列条件语句中,输出结果与其他语句不同的是 A) if ( a!=0 ) printf(\"%d\\n\ else printf(\"%d\\n\B) if ( a==0 ) printf(\"%d\\n\ else printf(\"%d\\n\C) if ( a==0 ) printf(\"%d\\n\ else printf(\"%d\\n\D) if ( a ) printf(\"%d\\n\ else printf(\"%d\\n\ 参考答案:C 【解析】A,B,D选项的含义均为:a的值如果为0时打印y的值,否则打印x的值。但是C选项的含义是:a的值为0时打印x的值,不为0时打印y的值,与其他选项正好相反。 31.设有定义: int a=1,b=2,c=3; 以下语句中执行效果与其它三个不同的是 A) if(a>b) c=a,a=b,b=c; B) if(a>b) {c=a,a=b,b=c;} C) if(a>b) c=a;a=b;b=c; D) if(a>b) {c=a;a=b;b=c;} 参考答案:C 【解析】由于a不小于b ,所以所有选项中的条件都为假,A选项中实际执行了a=b;b=c;两个操作。而B,C,D选项由于条件不成立,所以什么也没有做,所以选择C选项。 因篇幅问题不能全部显示,请点此查看更多更全内容