错题集二
一、选择题
1. 设有条件表达式(EXP) ? i++ : j-- 则下列表达式中与(EXP)完全等价的
是( )。
A)(EXP==0) B)(EXP!=0) C)(EXP==1) D)(EXP!=1)
2. 若有定义 int x,y; 并已正确给变量赋值,则下列选项中与表达式
(x-y)?(x++):(y++)中 的条件表达式(x-y)等价的是( )。
A)(x-y>0) B)(x-y<0)
C)(x-y<0||x-y>0) D)(x-y==0)
3. 设有定义: int a; float b; 执行 scanf("%2d%f",&a,&b);语句时,
若从键盘输入 876543.0
A)876 和 543.000000 B)87 和 6.000000
C)87 和 543.000000 D)76 和 543.000000
4. 有下列程序:
#include
int main( )
{
int k=5;
while(--k)
printf("%d", k-=3);
printf("n");
return 0;
}
执行后的输出结果是( )。
A)1 B)2 C)4 D)死循环
5. 下列选项中,合法的一组 C 语言数值常量是( )。
A)028 B)12. C).177 D)0x8A
.5e-3 0xa23 4e1.5 10,000
.0xf 4.5e0 0abc 3.e5
6. 有下列程序段:
int j; float y;char name[50];
scanf("%2d%f%s", &j, &y, name);
当执行上述程序段,输入 55566 7777abc 后,y 的值为( )。
A)55566.0 B)566.0 C)7777.0 D)566777.0
7. 设有定义:char p[ ]={'1', '2', '3'}, *q=p;,下列不能计算出一个
char 型数据所占字节数 的表达式是( )。
A)sizeof(p) B)sizeof(char) C)sizeof(*q) D)sizeof(p[0])
8. 若有定义语句:int a[2][3],*p[3];,则下列语句中正确的是( )。
A)p=a; B)p[0]=a
C)p[0]=&a[1][2]; D)p[1]=&a;
9. 下列关于字符串的叙述中正确的是 ( )。
A)C 语言中有字符串类型的常量和变量
B)两个字符串中的字符个数相同时才能进行字符串大小的比较
C)可以用关系运算符对字符串的大小进行比较
D)空串一定比空格打头的字符串小
10. 有下列程序:
#include
void fun(int n, int *p) {
int f1, f2;
if(n==1 || n==2)
*p=1;
else{
fun(n-1, &f1);
fun(n-2, &f2);
*p = f1+f2;
}
}
int main( ) {
int s;
fun(3, &s);
printf("%dn", s);
return 0;
}
程序的运行结果是( )。
A)2 B)3 C)4 D)5
11. 设有下列定义:
union data
{ int d1; float d2; } demo;
则下列叙述中错误的是( )。
A)变量 demo 与成员 d2 所占的内存字节数相同
B)变量 demo 中各成员的地址相同
C)变量 demo 和各成员的地址相同
D)若给 demo.d1 赋 99 后,demo.d2 中的值是 99.0
12.有下列程序
#include
int fun(int x, int y) {
static int m=0, i=2;
i += m+1;
m = i+x+y;
return m;
}
int main( )
{
int j=1, m=1, k;
k = fun(j, m);
printf("%d,", k);
k = fun(j, m);
printf("%dn", k);
return 0;
}
执行后的输出结果是( )。
A)5,5 B)5,11 C)11,11 D)11,5
13. 若有定义:int w[3][5];,则下列不能正确表示该数组元素的表达式是( )
A)*(*w+3) B)*(*w+1)[4]
C)*(*(*w+1)) D)*(&w[0][0]+1)
14. 若有定义:char*x="abcdefghi";,下列选项中正确运用了strcpy 函数
的是( )。
A)char y[10]; strcpy(y, x[4]);
B)char y[10]; strcpy(++y, &x[1]);
C)char y[10], *s; strcpy(s=y+5, x);
D)char y[10], *s; strcpy(s=y+1, x+1);
15. 有下列程序:
#include
int add(int a, int b)
{ return (a+b); }
int main( )
{
int k, (*f)( ), a=5, b=10; f = add;…
return 0;
}
则下列函数调用语句错误的是( )。
A)k = (*f)(a, b); B)k = add(a, b); C)k = *f(a, b); D)k = f(a, b);
16. 设有以下语句:
typedef struct TT
{ char c; int a[4]; } CIN; 则下列叙述中正确的是( )。
A)可以用 TT 定义结构体变量 B)TT 是 struct 类型的变量
C)可以用 CIN 定义结构体变量 D)CIN 是 struct TT 类型的变量
17. 有下列结构体说明、变量定义和赋值语句:
struct STD
{
char name[10];
int age;
char sex;
}s[5], *ps;
ps = &s[0];
则下列 scanf 函数调用语句中错误引用结构体变量成员的是( )。
A)scanf("%s", s[0].name); B)scanf("%d", &s[0].age);
C)scanf("%c", &(ps->sex)); D)scanf("%d", ps->age);
18. 设变量均已正确定义,若要通过语句 scanf("%d%c%d%c", &a1, &c1,
&a2, &c2); 为变量 a1 和 a2 赋数值 10和 20,为变量 c1和 c2赋字符 X
和 Y。下列输入形式中正确的是(注:口代表空格字符)( )。
A)10□X□20□Y
C)10□X
19. 设有定义:int k=0;,下列选项的 4 个表达式中与其他 3 个表达式的值不相同的是( )。
A)k++ B)k += 1 C)++k D)k+1
20. 有下列程序,其中%u表示按无符号整数输出。
#include
int main( )
{
unsigned int x=0xFFFF;
printf("%un", x);
return 0;
}
程序运行后的输出结果是( )。
A)-1 B)65535 C)32767 D)0xFFFF
21. 下列选项中,当 x 为大于 l 的奇数时,值为 0 的表达式是( )。
A)x%2==1 B)x/2 C)x%2!=0 D)x%2==0
22. 有下列程序:
#include
int main( ){
int k=5,n=0;
do
{
switch(k)
{
case 1:
case 3: n += 1; k--; break;
default: n=0; k--;
case 2:
case 4; n += 2; k--; break;
}
printf("%d", n);
}while(k>0 && n<5);
return 0;
}
程序运行后的输出结果是( )。
A)235 B)0235 C)02356 D)2356
23. 已知大写字母 A 的 ASCII 码是 65,小写字母 a 的 ASCII 码是 97。下
列不能将变量 c中的大写字母转换为对应小写字母的语句是( )。
A)c=(c-'A')%26+'a' B)c=c+32
C)c=c-'A'+'a' D)c=('A'+C)%26-'a'
24. 设已有定义:float x;,则下列对指针变量 p 进行定义且赋初值的语句中
正确的是( )。
A)float *p=1024; B)int *p=(float)x;
C)float p=&x; D)float *p=&x;
25.有下列程序段:
#include
typedef struct node
{
int data;
struct node *next;
} *NODE;
NODE p;
下列叙述中正确的是( )。
A)p 是指向 struct node 结构变量的指针的指针
B)NODE p;语句出错
C)p 是指向 struct node 结构变量的指针
D)p 是 struct node 结构变量
26.有下列程序:
#include
int main( ){
int n, *p=NULL;
*p=&n;
printf("Input n:");
scanf("%d", &p);
printf("output n:");
printf("%dn", p);
return 0;
}
该程序试图通过指针 p 为变量 n 读入数据并输出,但程序有多处错误,下
列语句正确的是( )。
A)int n, *p=NULL; B)*p = &n; C)scanf("%d", &p) D)printf("%dn", p)
27. 有下列程序:
#include
struct S
{
int n;
int a[20];
};
void f(int *a, int n) {
int i;
for(i=0; i a[i] += i; } int main( ) { int i; struct S s={10,{2,3,1,6,8,7,5,4,10,9}}; f(s.a, s.n); for(i=0; i printf("%d,", s.a[i]); return 0; } 程序运行后的输出结果是( )。 A)2,4,3,9,12,12,11,11,18,9, B)3,4,2,7,9,8,6,5,11,10, C)2,3,1,6,8,7,5,4,10,9, D)1,2,3,6,8,7,5,4,10,9, 28.有下列程序: #include int main( ) { FILE *fp; int i, a[6]={l,2,3,4,5,6}; fp=fopen("d3.dat", "w+b"); fwrite(a, sizeof(int), 6, fp); fseek(fp, sizeof(int)*3, SEEK_SET); fread(a, sizeof(int), 3, fp); fclose(fp); for(i=0; i<6; i++) printf("%d,", a[i]); return 0; } 程序运行后的输出结果是( )。 A)4,5,6,4,5,6, B)1,2,3,4,5,6, C)4,5,6,1,2,3, D)6,5,4,3,2,1, 29. 有下列程序: #include void f(int *q) { int i=0; for(; i<5; i++) (*q)++; } int main( ) { int a[5] ={1,2,3,4,5}, i; f(a); for(i=0; i<5; i++) printf("%d,", a[i]); return 0; } 程序运行后的输出结果是( )。 A)2,2,3,4,5, B)6,2,3,4,5, C)1,2,3,4,5, D) 2,3,4,5,6, 30. 数字字符 0 的 ASCII 值为 48,运行下列程序的输出结果是( )。 #include int main( ){ char a='1', b='2'; printf("%c,", b++); printf("%dn", b-a); return 0; } A)3,2 B)50,2 C)2,2 D)2,50 31. 下列程序的输出结果是( )。 #include int main( ) { int a, b, d=25; a = d/10%9; b = a&&(-1); printf("%d,%dn", a, b); return 0; } A)6,1 B)2,1 C)6,0 D)2,0 32. 下列程序的输出结果是( )。 #include int main( ){ char a[7]="a0 a0 0"; int i, j; i = sizeof(a); j = strlen(a); printf("%d %dn", i, j); return 0; } A)2 2 B)7 6 C)7 2 D)6 2 33. 下列能正确定义一维数组的选项是( )。 A)int a[5]={0,1,2,3,4,5}; B)char a[ ]={0,1,2,3,4,5}; C)char a={'A', 'B', 'C'}; D)int a[5]="0123" 34. 下列程序的输出结果是( )。 void prt(int *m, int n) { int i; for(i=0; i m[i]++; } int main( ) { int a[ ]={1,2,3,4,5}, i; prt(a,5) for(i=0; i<5; i++) printf("%d,", a[i]); return 0; } A)1,2,3,4,5 B)2,3,4,5,6 C)3,4,5,6,7 D)2,3,4,5,1 35. 下列程序的输出结果是( )。 #include #define N 20 void fun(int a[ ], int n, int m) { int i, j; for(i=m; i>n; i--) a[i+1] = a[i] } int main( ) { int i, a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a, 2, 9); for(i=0; i<5; i++) printf("%d", a[i]); return 0; } A)10234 B)12344 C)12334 D)12234 36. 下列程序的输出结果是( )。 #include int main( ){ int a=1, b; for(b=1; b<=10; b++) { if(a >= 8) break; if(a%2 == 1) { a+=5; continue; } a=3; } printf("%dn", b); return 0; } A) 3 B)4 C)5 D)6 37. 下列与函数 fseek(fp, 0L, SEEK_SET)有相同作用的是( )。 A)feof(fp) B)ftell(fp) C)fgetc(fp) D)rewind(fp) 38. 程序中若有下列说明和定义语句: char fun(char *); int main( ) { char *s="one", a[5]={0}, (*f1)( )=fun, ch;… } 下列选项中对 fun()函数的正确调用语句是( )。 A)(*f1)(a); B)*f1(*s); C)fun(&a); D)ch=*f1(s); 39. 下列对结构体类型变量 td 的定义中,错误的是( )。 A)typedef struct aa B)struct aa { int n; { int n; float m; float m; } AA; }td; AA td; struct aa td; C)struct D)struct { int n; { int n; float m; float m; }aa; }td; struct aa td; 40. 下列叙述中正确的是( )。 A)调用 printf()函数时,必须要有输出项 B)使用 putchar()函数时,必须在之前包含头文件 stdio.h C)在 C 语言中,整数可以以十二进制、八进制或十六进制的形式输出 D)调节 getchar()函数读入字符时,可以从键盘上输入字符所对应的ASCII 码 41. 当把四个表达式用作 if 语句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是( )。 A)k%2 B)k%2==1 C)(k%2) != 0 D)!k%2==1 42. 下列叙述中错误的是( )。 A)在 C 语言中,对二进制文件的访问速度比文本文件快 B)在 C 语言中,随机文件以二进制代码形式存储数据 C)语句 FILE fp;定义了一个名为 fp 的文件指针 D)C 语言中的文本文件以 ASCⅡ码形式存储数据 43. 设有定义:int k=1,m=2; float f=7; 则下列选项中错误的表达式是 ( )。 A)k=k>=k B)-k++ C)k%int(f) D)k>=f>=m 44. 设 fun()函数的定义形式为( )void fun(char ch, float x){ … } 则下列对函数 fun 的调用语句中,正确的是 A)fun("abc",3.0); B)t=fun('D',16.5); C)fun('65',2.8); D)fun(32,32); 45. 有下列程序: #include int main(){ int a[ ]={2,4,6,8,10}, y=0, x, *p; p = &a[1]; for(x=1; x<3; x++) y += p[x]; printf("%dn", y); return 0; } 程序运行后的输出结果是( )。 A)10 B)11 C)14 D)15 46. 有下列程序: #include void sum(int a[ ]) { a[0] = a[-1] + a[1]; } int main( ) { int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]); printf("%dn", a[2]); return 0; } 程序运行后的输出结果是( )。 A)6 B)7 C)5 D)9 47. 有下列程序: #include #include void f(char *s, char *t) { char k; k=*s; *s=*t; *t=k; s++; t--; if(*s) f(s, t); } int main( ) { char str[10]="abcdefg", *p; p = str + strlen(str)/2 + 1; f(p, p-2); printf("%sn", str); return 0; } 程序运行后的输出结果是( )。 A)abcdefg B)gfedcba C)gbcdefa D)abedcfg 48. 有下列程序: #include int main( ) { FILE *fp; int i, k, n; fp = fopen("data.dat", "w+"); for(i=1; i<6; i++) { fprintf(fp, "%d ", i); if(i%3==0) fprintf(fp, "n"); } rewind(fp); fscanf(fp, "%d%d", &k, &n); printf("%d%dn", k, n); fclose(fp); return 0; } 程序运行后的输出结果是( )。 A)0 0 B)123 45 C)1 4 D)1 2 49. 有下列程序: #include int main(int argc, char *argv[ ]) { int n=0, i; for(i=l; i
n = n*10 + *argv[i] – '0'; printf("%dn", n); return 0; } 编译连接后生成可执行文件 tt.exe。若运行时输入命令行 tt 12 345 678 程序运行后的输出结果是( )。 A)12 B)12345 C)12345678 D)136 50. 有下列程序: #include int main( ) { int a[4][4]={{l,4,3,2}, {8,6,5,7}, {3,7,2,5}, {4,8,6,1}}; int i, j, k, t; for(i=0; i<4; i++) for(j=0; j<3; j++) for(k=j+1; k<4; k++) if(a[j][i] > a[k][i]) { t = a[j][i]; a[j][i] = a[k][i]; a[k][i] = t; } for(i=0; i<4; i++) printf("%d,", a[i][i]); return 0; } 程序运行后的输出结果是( )。 A)1,6,5,7, B)8,7,3,1, C)4,7,5,2, D)1,6,2,1, 二、填空题: 1. 下列程序运行后的输出结果是 #include int main( ){ int m=011, n=11; printf("%d %dn", ++m, n++); return 0; } 2. 下列程序运行后的输出结果是 #include int main( ){ int x=0210; printf("%Xn", x); return 0; } 3. 下列程序的运行结果是: #include int f(int a[ ], int n) { if(n>1) return a[0] + f(a+1, n-1); else return a[0]; } int main( ) { int aa[10]={1,2,3,4,5,6,7,8,9,10}, s; s = f(aa+2, 4); printf("%dn", s); return 0; } 4. 输入 1234567890 int main( ){ char ch; while((ch=getchar( ))=='0') printf("#"); return 0; } 5. 列程序的运行结果是 #include int k=0; void fun(int m) { m += k; k += m; printf("m=%d k=%d", m, k++); } int main( ) { int i=4; fun(i++); printf("i=%d k=%dn", i, k); return 0; } 6. 下列程序的输出结果是 #include int fun(int *x, int n) { if(n==0) return x[0]; else return x[0] + fun(x+1, n-1); } int main( ) { int a[ ]={1,2,3,4,5,6,7}; printf("%dn", fun(a,3)); return 0; } 7.下列程序的输出结果是 #include int main( ){ char *s1,*s2,m; s1 = s2 = (char*)malloc(sizeof(char)); *s1=15; *s2=20; m=*s1+*s2; printf("%dn", m); return 0; } 8. 下列程序运行时若从键盘输入:10 20 30 #include int main( ){ int i=0, j=0, k=0; scanf("%d%*d%d", &i, &j, &k); printf("%d%d%dn", i, j, k); return 0; } 9. 下列程序运行后的输出结果是 #include int main( ) { int a=3, b=4, c=5, t=99; if(b
t=a; a=c; c=t; if(a t=b, b=a, a=t; printf("%d%d%dn", a, b, c); return 0; } 10. 已知字符 A 的 ASCII 代码值为 65,下列程序运行时若从键盘输入: B33 #include int main( ) { char a, b; a = getchar( ); scanf("%d", &b); a = a-'A'+'0'; b = b*2; printf("%c %cn", a, b); return 0; } 11. 下列程序运行后的输出结果 #include int main( ) { int a=1, b=2, c=3; if(c=a) printf("%dn", c); else printf("%dn", b); return 0; } 12. 下列程序运行后的结果是 #include #include void fun(char *s, int p, int k) { int i; for(i=p; i s[i]=s[i+2]; } int main( ) { char s[] = "abcdefg"; fun(s, 3, strlen(s)); puts(s); return 0; } 13. 下列程序运行后的输出结果是 #include char *ss(char *s) { char *p, t; p=s+1; t=*s; while(*p) { *(p-1)=*p; p++; } *(p-1) = t; return s; } int main( ) { char *p, str[10]="abcdefgh"; p=ss(str); printf("%sn", p); return 0; } 14. 下列程序运行后的输出结果是 #include int f(int a[ ], int n) { if(n>=1) return f(a, n-1) + a[n-1]; else return 0; } int main( ) { int aa[5]={1,2,3,4,5}, s; s = f(aa, 5); printf("%dn", s); return 0; } 参考答案: 一、选择题 1-5 BDBAB 6-10 BACDA 11-15 DBBDC 16-20 CDDAB 21-25 DBDDC 26-30 AAABC 31-35BCBBB 36-40 BDACB 41-45 ACDDC 46-50 ABDDA 二、填空题 1:10 11 2:88 3:18 4:0 5:M=4 K=4 I=5 K=5 6:10 7:40 8:10300 9:4599 10:1B 11:1 12:abcfg 13:bcdefgha 14:15



