C练习题汇总.docx
《C练习题汇总.docx》由会员分享,可在线阅读,更多相关《C练习题汇总.docx(38页珍藏版)》请在冰点文库上搜索。
C练习题汇总
一、判断
变量根据其作用域的范围可以分作局部变量和全局变量.答案:
Y
C语言的switch语句中case后只能为整型或字符型常量或常量表达式答案:
Y
while和do…while循环不论什么条件下它们的结果都是相同的.答案:
N
逻辑表达式-5&&!
8的值为1.答案:
N
循环结构中的continue语句是使整个循环终止执行答案:
N
若有说明intc;则while(c=getchar());是正确的C语句。
答案:
Y
表达式(j=3,j++)的值是4.答案:
N
C语言中"%"运算符的运算对象必须是整型.答案:
Y
在C程序中,函数既可以嵌套定义,也可以嵌套调用答案:
N
inti=20;
switch(i/10)
{
case2:
printf("A");
case1:
printf("B");
}
的输出结果为A。
答案:
N
两个字符串中的字符个数不相同时也可进行字符串大小的比较答案:
Y
char*p="girl";的含义是定义字符型指针变量p,p的值是字符串"girl"。
答案:
N
如果有一个字符串,其中第十个字符为'\n',则此字符串的有效字符为9个。
答案:
N
如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。
答案:
Y
C语言中只能逐个引用数组元素而不能一次引用整个数组。
答案:
Y
inta[3][4]={{1},{5},{9}};它的作用是将数组各行第一列的元素赋初值,其余元素值为0。
答案:
Y
C语言的函数可以嵌套定义.答案:
N
函数strlen("ASDFG\n")的值是7。
答案:
N
二、单项选择
1、若有说明:
inta[3][4]={0};则下面正确的叙述是()。
A:
只有元素a[0][0]可得到初值0
B:
此说明语句不正确
C:
数组a中各元素都可得到初值,但其值不一定为0
D:
数组a中每个元素均可得到初值0
答案:
D
2、若有下列定义,则对a数组元素a[2]地址的正确引用是()。
inta[5],*p=a;
A:
*(p+5)
B:
*p+2
C:
*(a+2)
D:
*&a[5]
答案:
C
3、为表示关系x≥y≥z,应使用C语言表达式
A:
(x>=y)&&(y>=z)
B:
(x>=y)AND(y>=z)
C:
(x>=y>=z)
D:
(x>=z)&(y>=z)
答案:
A
4、设有说明:
charc;intx;doublez;则表达式c*x+z值的数据类型为
A:
float
B:
int
C:
char
D:
double
答案:
D
5、能正确表示逻辑关系:
"a≥10或a≤0"的C语言表达式是
A:
a>=10ora<=0
B:
a>=0|a<=10
C:
a>=10&&a<=0
D:
a>=10||a<=0
答案:
D
6、已知p,p1为指针变量,a为数组名,j为整型变量,下列赋值语句中
不正确的是()。
A:
p=&j,p=p1;
B:
p=a;
C:
p=&a[j];
D:
p=10;
答案:
D
7、C语言的if语句嵌套时,if与else的配对关系是()。
A:
每个else总是与它上面的最近的if配对
B:
每个else总是与最外层的if配对
C:
每个else与if的配对是任意的
D:
每个else总是与它上面的if配对
答案:
A
8、已知x=43,ch='A',y=0;则表达式(x>=y&&ch<'B'&&!
y)的值是()。
A:
0
B:
语法错
C:
1
D:
"假"
答案:
C
9、如果inta=2,b=3,c=0,下列描述正确的是
A:
a>b!
=c和a>(b!
=c)的执行顺序是一样的
B:
!
a!
=(b!
=c)表达式的值为1
C:
a||(b=c)执行后b的值为0
D:
a&&b>c的结果为假
答案:
B
10、C语言规定,在一个源程序中,main函数的位置()。
A:
必须在最开始
B:
必须在系统调用的库函数的后面
C:
可以任意
D:
必须在最后
答案:
C
11、下列字符序列中,不可用作C语言标识符的是()。
A:
b70
B:
#ab
C:
symbol
D:
a_1
答案:
B
12、在C语言中,能代表逻辑值“真”的是()。
A:
True
B:
大于0的数
C:
非0整数
D:
非0的数
答案:
D
13、任何一个C语言的可执行程序都是从____开始执行的.
A:
程序中的第一个函数
B:
main()函数的入口处
C:
程序中的第一条语句
D:
编译预处理语句
答案:
B
14、下列语句中,不正确的是()。
A:
chara[2]={1,2};
B:
inta[2]={'1','2'};
C:
chara[2]={'1','2','3'};
D:
chara[2]={'1'};
答案:
C
15、若有说明:
int*p1,*p2,m=5,n;以下均是正确赋值语句的选项是()。
A:
p1=&m;p2=&p1
B:
p1=&m;p2=&n;*p1=*p2;
C:
p1=&m;p2=p1;
D:
p1=&m;*p2=*p1;
答案:
C
16、在C语言中,调用函数除函数名外,还必须有()。
A:
函数预说明
B:
实际参数
C:
()
D:
函数返回值
答案:
C
17、以下叙述中正确的是()。
A:
C程序中注释部分可以出现在程序中任意合适的地方
B:
花括号“{“和”}”只能作为函数体的定界符
C:
构成C程序的基本单位是函数,所有函数名都可以由用户命名
D:
分号是C语句之间的分隔符,不是语句的一部分
答案:
A
18、变量p为指针变量,若p=&a,下列说法不正确的是()。
A:
&*p==&a
B:
*&a==a
C:
(*p)++==a++
D:
*(p++)==a++
答案:
D
19、inta=3,b=2,c=1;
if(a>b>c)a=b;
elsea=c;
则a的值为()。
A:
3
B:
2
C:
1
D:
0
答案:
C
20、在以下给出的表达式中,与do--while(E)语句中的(E)不等价的
表达式是()。
A:
(!
E==0)
B:
(E>0||E<0)
C:
(E==0)
D:
(E!
=0)
答案:
C
21、若用数组名作为函数的实参,传递给形参的是()。
A:
数组的首地址
B:
数组第一个元素的值
C:
数组中全部元素的值
D:
数组元素的个数
答案:
A
22、putchar函数可以向终端输出一个()。
A:
整型变量表达式值
B:
实型变量值
C:
字符串
D:
字符或字符型变量值
答案:
D
三、程序填空共2题(共计25分)
第1题
功能:
从键盘上输入一个正整数,判断其是否是回文数。
说明:
所谓回文数是指顺序读与反序读都是一样的数,如121、25852都是回文数。
将整数的各位依次存入数组a中,然后再进行判断
#include
intmain()
{
intnum,a[10],r;
inti=0,j,flag=1;/*flag作为是否为回文的标志*/
scanf("%d",&num);
if(num<=0)return-1;
do
{
r=num%10;
/***********SPACE***********/
【?
】;
num=num/10;
i++;
}
while(num%10!
=0);
for(j=0,i--;i>=j;i--,j++)
if(a[j]==a[i])
/***********SPACE***********/
【?
】;
else
{
flag=0;
break;
}
/***********SPACE***********/
if(【?
】)
printf("是回文\n");
else
printf("不是回文\n");
return0;
}
答案:
=======(答案1)=======
a[i]=r
=======(答案2)=======
continue或flag=1
=======(答案3)=======
flag或flag!
=0或flag==1
=========或=========
i0
第2题
功能:
用冒泡排序法对数组a进行由小到大的排序。
#include
voidfun(inta[],intn)
{
inti,j,t;
/***********SPACE***********/
for(j=0;【?
】;j++)
/***********SPACE***********/
for(i=0;【?
】;i++)
/***********SPACE***********/
if(【?
】)
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
intmain()
{
inti,a[10]={3,7,5,1,2,8,6,4,10,9};
/***********SPACE***********/
【?
】;
for(i=0;i<10;i++)
printf("%3d",a[i]);
return0;
}
答案:
=======(答案1)=======
j<=n-1或j=======(答案2)=======
i=======(答案3)=======
a[i]>a[i+1]
=======(答案4)=======
fun(a,10)
第3题(10.0分)题号:
76
功能:
找出数组中最大值和此元素的下标,数组元素的值由键盘
输入。
#include
voidmain()
{
inta[10],*p,*s,i;
for(i=0;i<10;i++)
/***********SPACE***********/
scanf("%d",【?
】);
/***********SPACE***********/
for(p=a,s=a;【?
】<10;p++)
/***********SPACE***********/
if(*p【?
】*s)s=p;
/***********SPACE***********/
printf("max=%d,index=%d\n",【?
】,s-a);
}
答案:
=======(答案1)=======
a+i或&a[i]
=======(答案2)=======
p-a
=======(答案3)=======
>
=======(答案4)=======
*s
第4题(15.0分)题号:
27
功能:
输出100到1000之间的各位数字之和能被15整除的所有数,
输出时每10个一行。
#include
intmain()
{
intm,n,k,i=0;
for(m=100;m<=1000;m++)
{
/***********SPACE***********/
【?
】;
n=m;
do
{
/***********SPACE***********/
k=k+【?
】;
n=n/10;
}
/***********SPACE***********/
【?
】;
if(k%15==0)
{
printf("%5d",m);i++;
/***********SPACE***********/
if(i%10==0)【?
】;
}
}
return0;
}
答案:
=======(答案1)=======
k=0
=======(答案2)=======
n%10或n-n/10*10
=======(答案3)=======
while(n>0)或while(n!
=0)或while(n)
=======(答案4)=======
printf("\n")或puts("\n")或putchar('\n')
第5题
功能:
用函数调用方式,实现字符串的复制。
#include
voidstring_copy(char*str_from,char*str_to)
{
inti=0;
/***********SPACE***********/
for(;(*(【?
】)=*(str_from+i))!
='\0';i++);
}
intmain()
{
staticchararray_str1[20]="iamateacher.";
chararray_str2[20];
/***********SPACE***********/
【?
】(array_str1,array_str2);
/***********SPACE***********/
【?
】("array_str2=%s\n",array_str2);
return0;
}
答案:
=======(答案1)=======
str_to+i
=======(答案2)=======
string_copy
=======(答案3)=======
printf
第6题
功能:
以下程序是用选择法对10个整数按从小到大顺序排序。
说明:
每一趟均找到未排好序的数中的最小数的位置,然后将其交换到正确的位置
#include
#defineN10
intmain()
{
inti,j,k,t,a[N];
for(i=0;i<=N-1;i++)
scanf("%d",&a[i]);/*输入10个整数*/
for(i=0;i{
/***********SPACE***********/
【?
】;
/***********SPACE***********/
for(j=i+1;【?
】;j++)
if(a[j]/***********SPACE***********/
if(【?
】)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("outputthesortedarray:
\n");
for(i=0;i<=N-1;i++)
printf("%5d",a[i]);
printf("\n");
return0;
}
答案:
=======(答案1)=======
k=i
=======(答案2)=======
j=======(答案3)=======
k!
=i或k>i
第7题
功能:
打印出如下字母塔。
最后一行字母前无空格
A
BBB
CCCCC
DDDDDDD
#include
intmain()
{
inti,j,k;
/***********SPACE***********/
for(i=0;【?
】;i++)
{
for(j=0;j<3-i;j++)
printf("");
/***********SPACE***********/
for(k=1;k<=【?
】;k++)
/***********SPACE***********/
printf(【?
】);
printf("\n");
}
return0;
}
答案:
=======(答案1)=======
i<=3或i<4
=======(答案2)=======
2*i+1
=======(答案3)=======
"%c",'A'+i或"%c",65+i
第8题
功能:
从读入的整数数据中,统计大于零的整数个数和小于零的
整数个数。
用输入零来结束输入,程序中用变量i统计大于
零的整数个数,用变量j统计小于零的整数个数。
#include
intmain()
{
intn,i,j;
printf("EnteriNTnumber,with0toend\n");
i=j=0;
scanf("%d",&n);
while(n!
=0)
{
/***********SPACE***********/
if(n>0)i=【?
】;
/***********SPACE***********/
if(n<0)j=【?
】;
/***********SPACE***********/
scanf("%d",【?
】);
}
printf("i=%4d\n",i,j);
return0;
}
答案:
=======(答案1)=======
i+1
=======(答案2)=======
j+1
=======(答案3)=======
&n
程序改错
第1题
功能:
求出数组中最大数和次最大数,并把最大数和a[0]中的数
对调、次最大数和a[1]中的数对调。
#include
#defineN20
voidfun(inta[],intn)
{
inti,m,t,k;
for(i=0;i<2;i++)/*两次循环,分别找最大数和次大数*/
{
/**********FOUND**********/
m=0;
for(k=i;k/**********FOUND**********/
if(a[k]>a[m])k=m;
t=a[i];a[i]=a[m];a[m]=t;
}
}
intmain()
{
intb[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;
for(i=0;iprintf("\n");
/**********FOUND**********/
fun(intb[N],n);
for(i=0;iprintf("%d",b[i]);
printf("\n");
return0;
}
答案:
=======(答案1)=======
m=i;
=======(答案2)=======
if(a[k]>a[m])m=k;
=======(答案3)=======
fun(b,n);
第2题
功能:
利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同
学用A表示,70-89分之间的用B表示,60-69分之间的用C表示,
60分以下的用D表示。
#include
intmain()
{
intscore;
/**********FOUND**********/
char*grade;
printf("pleaseinputascore\n");
/**********FOUND**********/
scanf("%d",score);
if(score<0&&score>100)
printf("超出范围!
");
else
{
/**********FOUND**********/
switch(score)
{
case9:
case10:
grade='A';
break;
case7:
case8:
grade='B';
break;
case6:
grade='C';
break;
/***********FOUND***********/
caseelse:
grade='D';
}
}
printf("%dbelongsto%c\n",score,grade);
return0;
}
答案:
=======(答案1)=======
chargrade;
=======(答案2)=======
scanf("%d",&score);
=======(答案3)=======
switch(score/10)
=======(答案4)=======
default:
=========或=========
case0:
case1:
case2:
case3:
case4:
case5:
第2题(15.0分)题号:
153
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
编写函数求2!
+4!
+6!
+8!
。
------------------------------------------------------*/
#include
intsum(intn)
{
inti,j,t,s;
/**********FOUND**********/
s=1;
for(i=2;i<=n;i=i+2)
{
t=1;
/**********FOUND**********/
for(j=1;j<=n;j++)
t=t*j;
s=s+t;
}
/**********FOUND**********/
return(t);
}
intmain()
{
printf("thissum=%ld\n",sum(8));
return0;
}
答案:
=======(答案1)=======
s=0;
=======(答案2)=======
for(j=1;j<=i;j++)
=======(答案3)=======
returns;
第3题(10.0分)题号:
92
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
求二分之一的圆面积,函数通过形参得到圆的半径,函数
返回二分之一的圆面积。
例如:
输入圆的半径值:
19.527输出为:
s=598.950017。
------------------------------------------------------*/
#include
#include
/**********FOUND**********/
doublefun(r)
{
doubles;
/**********FOUND**********/
s=1/2*3.14159*r*r;
/**********FOUND**********/