C语言程序设计复习题库
、一、单项选择题
50.若有以下说明和语句,则输出结果是 ( )
char str[]=““x:\abc.dat””;
printf(“%s”,str);
A. 字符串中有非法字符 B. “x:\abc.dat”
C. “x:\abc.dat” D. “x:\abc.dat”
51. 表达式strcmp(“box”,“boss”)的值是一个( )
A.正数 B.负数 C.0 D.不确定的数
52. 已知int a[]={1,2,3,4,5,6},*p=a+2;则p[2]的值是( )
A.3 B.4 C.5 D.6
53.若有定义:int a[8],*p;则与p=a;等价的语句是 ( )
A.p=&a[0]; B.p=a[0]; C.p=*a; D.*p=&a;
54. 若有定义:int i=10,j=20,*p=&i,*q=&j; p=q; 则执行输出的结果是( )
printf(“%d %d\n”,*p,*q);
A. 10 20 B. 20 20 C. 10 10 D.20 10
55.有语句char s[]=“EGIK”,*p=s;则printf(“%c”,*p+2);的输出结果是( )
A.E B.G C.I D.K
56.C语言中可以处理的文件类型是( )
A.文本文件和数据文件 B.文本文件和二进制文件
C.数据文件和二进制文件 D.任何类型文件
57.定义int x=10,y=20; 执行printf(“%d,”, x++);printf(“%d\n”, --y);的结
果是( )
A. 10, 20 B. 11, 20 C. 10, 19 D. 11, 19
58. 语句int x= -1, y= -1, z= -1; ++x||++y&&++z; printf(“%d %d %d\n”,x,y,z);
执行的结果是( )
A. -1 -1 -1 B. 0 -1 -1 C. 0 0 -1 D. 0 0 0
59. 下列语句判别变量x、y大小,若x
A.auto B.static C.extern D. register
71.定义FILE fp; 以“只写”方式打开文件C:\aa.dat的正确语句是( )
A. fp=fopen(“C:\aa.dat”,“w”); B. fp=fopen(“C:\aa.dat”,“r”);
C. fp=fopen(“C:\aa.dat”,“w”); D. fp=fopen(“C:\aa.dat”,“r”);
72.以下选项中能作为合法常量的是( )
A. 1.234e4.0 B. ‘\’ C. 0128 D. ‘Visual C++’
73. C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( )
A. 必须为字母 B. 必须为下划线
C. 必须为字母或下划线 D. 可以是字母、数字和下划线中任一种字符
74.以下选项中值为1的表达式是( )
A. 1-‘0’ B. 1-‘\0’ C. ‘1’-0 D. ‘\0’-‘0’
75.设char ch;,表示ch是小写字母的表达式是( )
A. ‘a’≤ch≤’z’ B.‘a’<=ch<=‘z’ C.ch>=‘a’ and ch<=‘z’ D.ch>=‘a’&& ch<=‘z’
76.下列关系表达式中结果为假的是( )
A. 1!=2 B. 8<=10 C. 4>3>2 D. -1
77.以下能正确地定义三个整型变量a,b和c,并赋初值为5的语句是( )
A. int a=b=c=5; B. int a,b,c=5; C. int a=5,b=5,c=5; D. a=b=c=5;
78.执行int x=0,y=0,z=0; ++x||++y&&++z; printf(“%d %d %d\n”,x,y,z);的结果是( )
A. 0 0 0 B. 1 0 0 C. 1 1 0 D. 1 1 1
79. 下列条件语句中,功能与其他语句不同的是( )
A. if(a) printf("“); else printf(”#“);
B. if(a0) printf(“#”); else printf(““);
C. if (a!=0) printf(””); else printf(“#”);
D. if(a0) printf(”*“); else printf(”#");
80.若有以下说明和定义语句;引用结构体变量成员的表达式错误的是( )
struct student
{ int age; char num[8];
};
struct student stu[3]={{20, “200701”},{21, “200702”},{19, “200703”}};
struct student p=stu;
A. (p++)->num B. p->num C. (p).num D. stu[3].age
81. C语言中,数学表达式,正确的表达方式是( )
A. (ax2+bx+c)/ab B. (axx+bx+c)/ab
C. (axx+bx+c)/ab D. (axx+bx+c)/a/b
82.下列关系表达式中结果为真的是( )
A. 1!=2>1 B. 4>3>2 C. 4&&0 D. 4||0
83.下列表达式中结果为假的是( )
A. 1!=2 B. 8<=10 C. (a=22)==2 D. x=(1+1)==2
84. 定义char c1=92,c2=92; 则以下表达式中值为零的是( )
A. c1^c2 B. c1&c2 C. ~c2 D. c1|c2
85.定义FILE fp; 以“只读”方式打开文件C:\aa.dat的正确语句是( )
A. fp=fopen(“C:\aa.dat”,“w”); B. fp=fopen(“C:\aa.dat”,“r”);
C. fp=fopen(“C:\aa.dat”,“w”); D. fp=fopen(“C:\aa.dat”,“r”);
86.执行语句for (int i=1;i<10&&i%2;i++) printf(""); 将输出( )个*号
A.1 B.4 C.5 D.10
87. C语言源程序要正确地运行,必须有( )
A. printf函数 B. 自定义的函数 C. main函数 D.空函数
88. 有函数定义:void fun(int n, double x) { …… },若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是( )
A. fun(int y,double m); B. k=fun(y,m);
C. fun(y,m); D. void fun(y,m);
89.执行int x=-1,y=-1,z=-1; ++x&&++y||++z;后,x、y、z的值分别是_________
A. 0 -1 0 B. 0 0 0 C. -1 -1 0 D. -1 0 -1
二、程序填空
三. 阅读程序,写出下列程序的运行结果。
2.main( )
{ float num=5.6789;
num=(int)(num*100+0.5); //强制转换为整数,并不四舍五入
num=num/100;
printf(“num=%f\n”,num);
}
程序的输出结果是:
main( )
{ int x,y,z;
x=y=z=-1;
++x&&++y||++z;
printf(“%d %d %d\n”,x,y,z);
}
程序的运行结果:
main( )
{ int x=1,y=2;
if(x>3)
if(x>0)
printf(“%d”,x+10);
else
printf(“%d”,y+10);
printf(“%d”,x);
}
程序的输出结果:
5.main( )
{ int x=2;
switch(x==2)
{ case 1:printf(“*”);break;
case 2:printf(“%”);break;
}
}
程序的运行结果:
6.int f(int x)
{ if(x>0)
return 3+f(x-1);
else
return 10;
}
main( )
{ int x=5;
printf(“f(%d)=%d\n”,x,f(x));
}
程序的输出结果是:
8.main( )
{ char p[4]={“CHINA”,“JAPAN”,“ENGLAND”,“GERMANY”};
char **pp=p;
for(int i=0;i<4;i++)
printf("%c ",(*(pp+i)+2));
}
程序的输出结果是:
10.main( )
{ int a[3][3]={0},i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i>=j) a[i][j]=i*3+j;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf(“%3d”,a[i][j]);
printf(“\n”);
}
}
程序的输出结果是:
11. main()
{ int a[4]={1,2,3,4};
int i;
for(i=0;i<4;i++)
a[i]+=i;
for(i=3;i>=0;i–)
printf(“%d “,a[i]);
printf(”\n”);
}
运行结果:
12. main( )
{ int s[12]={1,2,3,4,1,2,3,4,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++) c[s[i]]++;
for(i=1;i<5;i++) printf(“%d”,c[i]);
printf(“\n”);
}
程序的输出结果是:
14.main( )
{ int k;
int a[3][3]={1,2,3,4,5,6,7,8,9};
for(k=0;k<3;k++)
printf("%d ",a[k][2-k]);
}
运行结果:
15.void increment( )
{ int x=0;static int y=0;
x+=3; y+=3;
printf (“x=%d y=%d\n”,x,y);
}
main()
{ for(int i=1;i<=3;i++)
increment();
}
程序的输出结果是:
17.int f(int x)
{ int y;
if(x0||x1) return (3);
y=x*x-f(x-2);
return y;
}
main()
{ int z;
z=f(3); printf(“%d\n”,z);
}
程序的输出结果是:
main( )
{ int i,s=0;
char str[]=“a1b2c3d4e5”;
for (i=strlen(str);i>0;i–)
if(str[i]>=‘0’&&str[i]<=‘9’)
s+=str[i]-‘0’;
printf(“%d”,s);
}
运行结果:
fun(int x,int y)
{ static int m=0,i=2;
i+=m+1; m=i+x+y; return m;
}
main( )
{ int j=1,m=1,k;
k=fun(j,m); printf(“%d,”,k);
k=fun(j,m); printf(“%d\n”,k);
}
程序的输出结果是:
20.void f(int a,int *b)
{ int t=a;a=*b;*b=t;}
main( )
{ int x=10,y=20;
f(x,&y);
printf(“x=%d y=%d\n”,x,y);
}
程序的输出结果是:
22.void func(int *a,int b[])
{ b[0]=*a+6; }
main( )
{ int a,b[5]; a=0; b[0]=3;
func(&a,b); printf(“%d \n”,b[0]);
}
程序的输出结果是:
23.以下程序的运行结果是:
main( )
{ int x=12321,y;
x=x%100; y=x/2;
printf(“x=%d,y=%d\n”,x,y);
}
void test( int *x,int y)
{
*x+=2;
y+=2;
}
main( )
{
int a=3,b=3;
test(&a,b);
printf(“a=%d,b=%d”,a,b);
}
以上程序的运行结果是:
int x;
void minusone()
{x–; }
int f(int n)
{
static int x=1;
x=x+n;
return x;
}
main( )
{
x=10;
minusone();
minusone();
printf(“x=%d\n”,x);
printf(“f(1)=%d\n”,f(1));
printf(“f(2)=%d\n”,f(2));
}
程序的运行结果是:
main( )
{ int i,sum=0;
for (i=1;i<=50;i++)
{
if(i%2==0)
continue;
sum+=i;
if (sum>10) break;
}
printf(“sum=%d\n”,sum);
}
程序的输出结果是:
int fun(int x)
{
if(x>0)
return 2*fun(x-1);
return 1;
}
main()
{
printf(“%d\n”,fun(5));
}
输出结果是:
main()
{ int a[10], i, *p;
for(i=0; i<10; i++)
a[i]=i+1;
p=a;
i=4;
printf(“a[%d]=%d\n”, i, *(p+i));
}
输出结果是:
以下程序的运行结果是: ,并画出链表结构示意图
#include
struct NODE
{ int num;
struct NODE *next;
};
main( )
{ struct NODE *p,*q,*r;
p=(struct NODE *)malloc(sizeof(struct NODE));
q=(struct NODE *)malloc(sizeof(struct NODE));
r=(struct NODE *)malloc(sizeof(struct NODE));
p->num=1; q->num=2; r->num=3;
p->next=q; q->next=r; r->next=NULL;
printf(“%d\n”,p->next->next->num);
}
四、填空完成程序
1.输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个
小写字母,则把它变成大写字母;其它字符不变。
main()
{ char ch;
scanf (“%c”,&ch );
if (___________________)
ch = ch + 32;
else
if(ch>=‘a’&&ch<=‘z’)
__________________;
printf(“%c”,ch);
}
2.用冒泡法对10个整数从小到大排序。
main()
{ int a[11],i,j,t;
for(i=1;i<11;i++) scanf(“%d”,&a[i]);
for(j=1;j<=9;j++)
for(i=1;i<=10-j;i++)
if(_________________)
{t=a[i];a[i]=a[i+1];a[i+1]=t;
}
for(i=1;i<11;i++)
printf("%d ",a[i]);
}
3.定义一个结构类型,要求输入一个学生的数学和计算机两门课的成绩,然后计
算并输出其平均成绩。
main()
{ struct student
{ int math,computer;}stu;
printf(“请输入分数: “);
scanf(”%d%d”,______________________);
printf("平均分是:%f ",_______________________);
}
4.求一个三位整数的各位数之和。
main()
{ int x,x1,x2,x3;
scanf(“%d”,&x);
x1=x%10;
x2=________;
x3=x/100;
printf(“数字之和为:%d\n”,x1+x2+x3);
}
5. 利用冒泡排序算法将数组a中的n个元素按升序进行排序。
main()
{ int a[7]={66,28,5667,938,422,343,34},n=7, i,j,t;
for(i=1;i
if(a[j]>a[j+1])
_______________________;
for(i=0;i
}
6. 将有N个元素的数组a中的数据逐个后移,最后一个元素移到最前面。如有数组:1 2 3 4 5 6 7 8移动后的结果为:8 1 2 3 4 5 6 7 。
#define N 8
main()
{ int a[N]={1,2,3,4,5,6,7,8},i,t;
t=_____________;
for (i=N-1;i>0;i–)
;
a[0]=t;
for(i=0;i
}
7.输出以下形式的图案:
*
**
***
****
main( )
{ int i,j;
for(i=1;i<=4;i++)
{ for(j=1;j<=
printf(“*”);
printf(“\n”);
}
}
9.用公式求的近似值,直到最后一项的绝对值小于
0.0001为止。
main()
{ int i=1,sign=1;
double pi=0;
while(1.0/i>=)
{ pi+=__________;
sign=-sign;
i+=2;
}
printf(“%lf\n”,4*pi);
}
参考答案使用班级:
一、选择题
1-5. ABDBA 6-10. ACADB 11-15. BAABB 16-20. BDABD
21-25. BDDCA 26-30. BAACA 31-35. AACBD 36-40. CBACA
41-45. DDCAD 46-50. BCBDC 51-55. ACABB 56-60. BCCCA
61-65. ACAAA 66-70. BDDCC 71-75. CBCBD 76-80. CCBDD
81-85. DDCAD 86-89. ACCA
二、填空题
2. x=10,y=5 4. 1 5. 4 6. 5 7. 2 8. 1 9. 0
10.if(a>b) m=a; else m=b; 11. 3 3 12. 5 13. 4 14. x=2, y=3
15. 9
三、完成程序
6. f(5)=25 7. 25 8. I P G R
9.x=3 10. 0 0 0 11. 12. 7 5 3 1
3 4 0
6 7 8
13.a=3 , b=2 14. 3 5 7 15. x=3 y=3 16. 7
x=3 y=6
x=3 y=9
17. 6 18. 15 19. 5 , 11 20. x=10,y=10
21.*p=1 ,m=3 22. 6
23.x=21, y=10
24. a=5 ,b=3
25.x=8 f(1)=2 f(2)=4
26.sum = 16
27. 32 (此题答案不一定正确)
a[4]=5 29. 3