大学C语言练习题及答案合集.docx
《大学C语言练习题及答案合集.docx》由会员分享,可在线阅读,更多相关《大学C语言练习题及答案合集.docx(51页珍藏版)》请在冰豆网上搜索。
大学C语言练习题及答案合集
C语言第1、2章练习题
一、选择题
1.下列运算符中,()结合性从左到右。
A.三目B.赋值C.比较D.单目
2.下列for循环的次数为():
for(i=0,x=0;!
x&&i<=5;i++)
A.5B.6C.1D.无限
3.下述关于循环体的描述中,()是错误的。
A.循环体中可以出现break语句和continue语句;B.循环体中还可以出现循环语句;
C.循环体中不能出现goto语句;D.循环体中可以出现开关语句。
4.下列变量名中,()是合法的。
A.CHINA;B.student-num;C.doubleD.A+b
5.有以下程序段:
intn=0,p; do{scanf(”%d”,&p);n++;}while(p!
=12345&&n<3);
此处do-while循环的结束条件是()。
A.p的值不等于12345并且n的值小于3B.p的值等于12345并且n的值大于等于3
C.p的值不等于12345或者n的值小于3D.p的值等于12345或者n的值大于等于3
6.若有定义:
inta=8,b=5,C;,执行语句C=a/b+0.4;后,c的值为()
A.1.4B.1C.2.0D.2
7.以下程序中,while循环的循环次数是()
voidmain(){
inti=0;
while(i<10){
if(i<1)continue;
if(i==5)break;
i++;}.....
A.1B.10C.6D.死循环,不能确定次数
8.下列while循环的执行次数是()while(i=0)i--;
A.0B.1C.5D.死循环
9.以下说法中正确的是:
()
A.C语言程序总是从第一个的函数开始执行;
B.在C语言程序中,要调用的函数必须在main()函数中定义;
C.C语言程序总是从main()函数开始执行;
D.C语言程序中的main()函数必须放在程序的开始部分。
10.以下程序的输出结果是:
()
voidmain(){
intx=10,y=10;
printf("%d%d\n",x--,--y);
}
A.1010B.99C.910D.109
11.inta=1,b=3;,则下列表达式的结果为“真”的是:
()
A.a>=2||!
b&&b<4B.b-a&&!
a||a-b&&a/b
C.a-!
a%b&&!
b-!
b%bD.a+b&&a-b&&b-3&&a||b
12.请选出合法的C语言赋值语句()
A.a=b=58B.i++;C.a=58,b=58D.k=int(a+b);
13.若有以下定义和语句:
()
charc1='b',c2='e';
printf("%d,%c\n",c2-c1,c2-'a'+'A');
则输出结果是:
A.2,MB.3,EC.2,ED.输出项与对应的格式控制不一致,输出结果不确定。
14.运行以下程序段后变量a的值是:
()
inta=0,b=3;
switch(a+b&&a&&b++&&a++)
{
case0:
a++;
case1:
b++;
case2:
a+=b;break;
case3:
a-=b;
default:
a;
}
(A)-3(B)1(C)5(D)6
15.在以下一组运算符中,优先级最高的运算符是:
()
(A)<=(B)=(C)%(D)&&
16.设inta=12,则执行完语句a+=a-=a*a后,a的值是()
(A)552(B)264(C)144(D)-264
17.C语言中基本数据类型包括()
(A)整型、实型、逻辑型(B)整型、实型、字符型
(C)整型、字符型、逻辑型(D)整型、实型、逻辑型、字符型
18.执行下面程序片段的结果是()
intx=23;
do{
printf("%2d",x--);
}while(!
x);
(A)打印出321(B)打印出23(C)不打印任何内容(D)陷入死循环
19.若k是int型变量,且有下面的程序片段:
()
k=-3;
if(k<=0)printf("####")
elseprintf("&&&&");
上面程序片段的输出结果是
(A)####(B)&&&&(C)####&&&&(D)有语法错误,无输出结果。
20.为表示关系x≥y≥z,应使用C语言表达式()
(A)(x>=y)&&(y>=z)(B)(x>=y)AND(y>=z)(C)(x>=y>=z)(D)(x>=y)&(y>=z)
21.若c为char类型变量,能正确判断出c为小写字母的表达式是()
A)'a'<=c<='z'B)(c>='a')||(c<='z')C)c>='a'||c<='z'D)c<='z'&&c>='a'
22.下面程序执行后输出sum的值是()
A)15B)14C)0D)不确定
voidmain()
{inti,sum;
for(i=0;i<6;i++)sum+=i;
printf("%d\n",sum);
}
23.以下叙述正确的是:
()
A)可以把include和if定义为用户标识符
B)可以把include定义为用户标识符,但不能把if定义为用户标识符
C)可以把if定义为用户标识符,但不能把include定义为用户标识符
D)include和if都不能定义为用户标识符
二、判断下列描述的正确性,对者划√,错者划╳。
1.switch语句中必须有break语句,否则无法退出switch语句。
2.C中标识符内的大小写字母是没有区别的。
3.隐含的类型转换都是保值映射,显式的类型转换都是非保值映射。
4.运算符的优先级和结合性可以确定表达式的计算顺序。
5.while循环语句的循环体至少执行一次。
6.开关语句不可以嵌套,在开关语句的语句序列中不能再有开关语句。
7.C语言在编译时不检查语法;
8.在C语言中,”A”是错误的char类型的常数;
9.字符(char)型数据在微机内存中的存储形式是ASCII码;
10.C语言的源程序不必通过编译就可以直接运行;
11.“Int”是合法的C语言关键字;
三、写出下列程序的运行结果。
(复习单数题)
1.
voidmain(){
inta=4,b=5,c=0,d;
d=!
a&&!
b||!
c;
printf(“%d”,d);
}
3.
voidmain(){
inta=0,i;
for(i=1;i<5;i++){
switch(i){
case0:
case3:
a+=2;
case1:
case2:
a+=3;
default:
a+=5;
}
}
printf(“%d”,a);
}
5.从键盘输入1325。
voidmain(){
intn1,n2;
scanf("%d",&n2);
while(n2!
=0){
n1=n2%10;
n2=n2/10;
printf("%d",n1);}
}
7.
voidmain(){
ints,i;
for(s=0,i=1;i<3;i++,s+=i);
printf("%d\n",s);}
9.
voidmain(){
inta,b;
for(a=1,b=1;a<=100;a++){
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5;}
printf("%d\n",a);
}
(10)=t;}
printf(“%f”,sum);
}
四、完成程序(复习单数题)。
1.程序的功能是:
分别计算1到10之间奇数之和及偶数之和
voidmain(){
inta,b,c,i;a=c=0;
for(i=0;i<=10;i+=2){
a+=i;
b=
(1);
c+=b;}
printf("偶数之和=%d\n",a);
printf("奇数之和=%d\n",
(2));}
7.猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半多一个。
第二天早上又将剩下的桃子吃掉一半多一个。
以后每天早上都吃掉前一天剩下的一半多一个。
到第5天早上吃时,只剩下一个桃子。
求第一天共摘了多少个桃子。
voidmain(){
intday,x1,x2;//day是天数,x1和x2表示前一天和当天剩下的桃子数
day=4;x2=1;//第4天剩下的桃子数
while((13)){
x1=(x2+1)*2;//当天剩桃子数:
x2=x1/2-1
x2=(14);
(15);
}
printf(“桃子总数=%d”,x1);}
3.判断输入的正整数是否为素数。
#include
voidmain(){
intm,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if((5))break;
if((6))printf("%d是素数\n",m)
elseprintf("%d不是素数\n",m);}
五、程序设计题
1.求1-5的阶乘之和。
n!
=(n-1)!
*nsum:
和。
初值为0。
factorial:
积。
初值为1。
#include
voidmain()
{inti,factorial=1,sum=0;
for(i=1;i<=5;i++){
factorial*=i;
sum+=factorial;
}
printf(“%d”,sum);
}
3.输入两个正整数m和n,用辗转相除法求最大公约数和最小公倍数。
(选做)
voidmain(){
inta,b,m,n,temp;
printf("Pleaseinputthetwonumber:
\n");
scanf("%d,%d",&m,&n);
if(m{temp=m;m=n;n=temp;}
a=m;b=n;
while(b!
=0)/*a中放的是最大公约数*/
{temp=a%b;a=b;b=temp;}
printf("最大公约数是:
%d\n",a);
printf("最小公倍数是:
%d\n",m*n/a);
}
一、选择题
1
2
3
4
5
6
7
8
9
10
C
B
C
A
D
B
D
A
C
D
11
12
13
14
15
16
17
18
19
20
D
B
B
C
C
D
B
B
D
A
21
22
23
D
D
D
二、判断题
1
2
3
4
5
6
7
8
9
10
11
F
F
F
T
F
F
F
T
T
F
F
三、读程序
1
2
3
4
5
6
7
8
1
sum=15
31
1
5231
0
5
*#*#*#$
9
10
11
12
8
12369
四、程序填空
(1)
(2)
(3)
(4)
(5)
i+1
c
i<10
j%3
m%i==0
(6)
(7)
(8)
(9)
(10)
i==k+1
num%7==0||num%9==0
num!
=0
x/i
sum+
(11)
(12)
(13)
(14)
(15)
n/10
newnum
day>0
x1
day--
第3-4章练习题
一、选择题
1.以下错误的字符串赋值或赋初值方式是:
(A)charstr1[]=”string”,str2[]=”12345678”;strcpy(str2,str1);
(B)charstr[7]={’s’,’t’,’r’,’i’,’n’,’g’};
(C)charstr[10];str=”string”;
(D)char*str;str=”string”;
2.数组定义中不正确的是:
(A)inta[2][3];(B)intb[][3]={0,1,2,3};
(C)intc[100][100]={0};(D)intd[3][]={{1,2},{1,2,3},{1,2,3,4}};
3.以下对一维数组a正确初始化的是:
(A)inta[10]=(0,0,0,0,);(B)inta[10]={};
(C)inta[10]={0};(D)inta[10]=(10*2);
4.以下选项中,不能正确赋值的是:
(A)chars1[10];s1="Ctest";(B)chars2[]={'C','t','e','s','t'};
(C)chars3[20]="Ctest";(D)char*s4="Ctest\n"
5.若有说明:
inti,j=2,*p=&i;,则能完成i=j赋值功能的语句是:
(A)i=*p;(B)*p=*&j;(C)i=&j;(D)i=**p;
6.下面各语句行中,不能正确进行字符串操作的语句行是:
(A)charst[10]={"abcde"};(B)chars[5]={'a','b','c','d','e'};
(C)char*s;s="abcde";(D)char*s;scanf("%s",s);
7.设有如下的程序段,执行上面的程序段后,*(ptr+5)的值为:
charstr[]="Hello";char*ptr;ptr=str;
(A)'o'(B)'\0'(C)不确定的值(D)'o'的地址
8.请选出以下语句的输出结果
printf("%d\n",strlen("\t\"\065\xff\n"));
(A)5(B)14(C)8(D)输出项不合法,无正常输出
9.以下程序段给数组所有的元素输入数据,请选择正确答案填入。
main()
{inta[10],i=0;
while(i<10)scanf("%d",________);
┇}
(A)a+(i++)(B)&a[i+1](C)a+i(D)&a[++i]
10.若有以下说明和语句,请选出哪个是对c数组元素的正确引用
intc[10],*cp;cp=c;
(A)cp+1(B)*(cp+3)(C)**(cp+1)+3(D)*(*cp+2)
11.设有如下一段程序,执行下面的程序后,ab的值为:
int*var,ab;ab=100;var=&ab;ab=*var+10;
(A)120(B)110(C)100(D)90
12.若有以下定义:
inta[10],*p=a;则p+4表示
A)元素a[4]的地址B)元素a[4]的值C)元素a[5]的地址D)元素a[5]的值
13.判断字符串s1是否小于字符串s2,应当使用
A)if(s114.在下面的定义语句中,错误的是
A)intn=20,a[n];B)char*a[3];C)chars[20]="test";D)inta[]={1,2};
15.对C语言字符数组的描述中错误的是:
A)字符数组可以存放字符串。
B)字符数组的字符串可以整体输入输出。
C)可以在赋值语句中通过赋值运算符对字符数组整体赋值。
D)不可以用关系运算符对字符数组中的字符串进行比较。
16.设有以下说明语句:
structstu
{inta;floatb;}stutype;
则下面的叙述不正确的是:
A)struct是定义结构体类型的关键字。
B)structstu是用户定义的结构体类型。
C)stutype是用户定义的结构体类型名。
D)a和b都是结构体成员名。
二、
5.voidmain(){
intn[3],i,j,k;
for(i=0;i<3;i++)
n[i]=0;
k=2;
for(i=0;ifor(j=0;jn[j]=n[i]+1;
printf("%d\n",n[1]);
}
读程序(复习单数题)。
1.
voidmain(){
char*p="abcd\0efgh\0";
printf("%d",strlen(p));
}
3.
voidmain(){
charb[]="Hello,you";
b[5]=b[9];
printf("%s\n",b);
}
7.voidmain(){
intx[]={10,20,30,40,50,60,70,80,90,100};
ints,i,*p;
s=0;p=x;
for(i=1;i<10;i+=2)
s+=*(p+i);
printf("sum=%d\n",s)
}
9.
voidmain(){
inti=1,n=3,j,k=3;
inta[5]={1,4,5};
while(i<=n&&k>a[i])
i++;
for(j=n-1;j>=i;j--)
a[j+1]=a[j];
a[i]=k;
for(i=0;i<=n;i++)
printf("%3d",a[i]);
}
13.
#include
voidmain()
{char*p1,*p2,str[50]=“ABCDEFG”;
p1=“abcd”;p2=“efgh”;
strcpy(str+1,p2+1);
strcpy(str+3,p1+3);
printf(“%s”,str);
}
15.
#include
#include
voidmain(){
chars1[20]="abcd",s2[20]="ABCD",
str[20]="xyz";
char*p1=s1,*p2=s2;
strcat(p1,p2+1);
strcpy(str+2,p1);
printf("%s\n",str);
}
11.
#include
voidmain(){
chararr[2][4];
strcpy(arr[0],"you");
strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",*arr);
}
填空题
1.已知字符’A’的ACSII码值为65,以下语句的输出结果是:
B_
char ch=’B’;
printf("%c\n",ch++);
2.指针变量的类型用来指定_该指针变量可以指向的变量___的类型;
3.有如下程序段
int*p,a=10,b=1;
p=&a;a=*p+b;
执行该程序段后,a的值为:
_11___;
4.下面程序输出结构体变量sz所占存储单元的字节数。
structst{charname[20];floatscore;};
main()
{structstsz;
printf("szsize:
%d\n",sizeof(structst/sz));
}
三、编程题目
1.编写一个程序,输入一个整形数组array,将该数组的最后一个元素移到第0个位置,其它元素后移一个位置。
在main中将该数组输出。
不要定义辅助数组。
voidmain(){
intarray[10];
inti,t;
for(i=0;i<10;i++)
scanf("%d",&array[i]);
t=array[9];
for(i=9;i>0;i--)
array[i]=array[i-1];
array[0]=t;
for(i=0;i<10;i++)
printf("%d",array[i]);
}
}
2.有一个3×4的矩阵,要求编程序求出其中值
最大的那个元素的值,以及其所在的行号和列号。
voidmain()
{inti,j,row=0,colum=0,max;
inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{max=a[i][j];row=i;colum=j;}
printf("max=%d,row=%d,colum=%d\n",max,row,colum);
}
一、选择题
1
2
3
4
5
6
7
8
9
10
C
D
C
A
B
D
B
A
A
B
11
12
13
14
15
16
17
18
19
20
B
A
D
A
C
C
二、写出程序运行结果
1
2
3
4
5
6
7
8
4
56789
Hello
6
3
4,98
sum=300
13ff58
13ff70
13ff5c
9
10
11
12
13
14
15
1345
5,15.000000
you&me
AQM
Afgd
cdBCD
xyabcdBCD
三、填空题
1
2
3
4
B
该指针变量可以指向的变量
11
structst/sz
第5-7章练习题
一.选择