5、在C语言中,设x为int型变量,则执行以下语句后,x的值为
x=10;x=x+--x;:
C:
18
6、在C语言中,执行下面语句后,输出的结果是
intx=10,y=3;printf("%d\n",y=x/y);
C:
3
7、在C语言中,假定所有变量均已正确说明,下列程序段运行后x的值是
a=b=c=0;x=99;
if(!
a)x=9;
elsex=3;
B:
9
8、在C语言中,执行语句:
for(i=1;i<4;i++);后,变量i的值是:
B:
4
9、设intk;则语句for(k=0;k=1;k++);和语句for(k=0;k==1;k++);执行的次数分别是:
A:
无限和0
10、执行语句
printf("Hequestionisinc:
\\tools\book.exe");
其输出为:
C:
Hequestionisinc:
\toolook.exe
11、函数floatAAA(floatx,inty)
{floati,fc=1;
while(y>0)
{
fc*=x;y--;}
returnfc;
}
的功能是:
A:
求x的y次方
12、对两个静态字符数组A和B进行如下初始化。
staticcharA[]="ABCDEF";
staticcharB[]={'A','B','C','D','E','F'};
则下列叙述正确的是:
D:
A数组长度比B数组长
13、对于for(表达式1;;表达式3)可理解为:
B:
for(表达式1;1;表达式3)
14、C语言中,FILE结构指针变量名stdin代表哪类文件。
D:
标准输入
15、下列循环体执行()次
k=70;
while(k=0)k-=1;
D:
0次
16、有以下程序
#defineP3
voidF(intx){return(P*x*x);}
main()
{printf("%d\n",F(3+5));}
程序运行后的输出结果是
D:
编译出错
17、在一个源程序文件中定义的全局变量的有效范围为
C:
从定义处开始到该源程序文件结束
18、有以下程序
main()
{
intp[3]={11,12,13},i=0,j=0;
while(i++<2)if(p[i]%2)j+=p[i];
printf("%d\n",j);
}程序运行后的输出结果是
A:
13
19、以下能正确定义一维数组的选项是:
D:
chara[5]="0123";
20、与定义charc[]={"GOD"};不等价的是
D:
charc[3]={"GOD"};
21、对于下面程序段,执行的结果是
charc[5]={‘a’,’b’,’\0’,’c’,’\0’};
printf(“%s”,c);
B:
ab
22、设charQ='a',*p=&Q;下面说法中错误的是
C:
&p=&Q
23、有以下程序
main()
{inta[]={1,2,3,4,5,6,7,8,9,0},*p;
for(p=a;p<=a+9;p++)printf("%d,",*p);
)
程序运行后的输出结果是
A:
1,2,3,4,5,6,7,8,9,0,
24、若有语句:
inta=4,*p=&a;,下面均代表地址的一组选项是
C:
&a,p,&*p
25、设有语句:
inta[10],*p=a;,则下面的语句中,不正确的是
D:
a=a+1;
26、当int类型长度为2字节时,则类型unsignedint的值域范围为
0至65535
27、有如下程序:
#include
intb;
voidf()
{intt2;t2=b*3;b=100;}
voidmain()
{inta=2;
b=4;f1();
}
叙述正确的是:
D:
a是局部变量,b是全局变量。
28、下面的for循环最多可执行________次。
for(x=0,y=0;(y!
=99)&&(x<4);x++);
A:
4次
29、下列判断char类型变量C1是否为数字的表达式中,哪个表达式最简单且正确。
B:
(C1>='0')&&(C1<='9')
30、若有以下的说明,则对初值中字符'a'的引用方式为________。
staticstruct
{charch;
doublex;
chart;
}c[2][2]={{{'a',35,'b'},{'c',45,'d'},{'a',86,'m'}}};
D:
c[0][0].ch
二、判断题:
1、在C程序中,注释部分从/*开始,到*/结束。
T
2、switch语句中,case后面既可以跟常量,也可以跟已赋值的变量。
F
3、一个C语言程序中包含有多个函数时,按书写顺序从上到下执行各函数。
F
4、若一个函数的返回类型为void,则表示其没有返回值。
T
5、student_name、_name、name8和name_8都是合法标识符。
T
6、不对自动(auto)数组进行初始化,数值型数组隐含初值为0,字符数组隐含初值空字符'\0'。
F
7、假设int型数组a的起始地址为2000,则元素a[3]的地址为:
2000+4×2=2008。
F
8、结构化程序设计认为一个"好"程序主要应该是:
程序短而紧凑。
F
9、如果知道整型变量a的地址是2000,可以直接用int*pa=2000;给指针变量pa赋值,使其指向变量a。
F
10、在C语言的if语句中,用作判断的表达式只能为逻辑表达式和关系表达式。
F
三、综合应用题
1、计算下面公式的值。
T=1/1!
+1/2!
+1/3!
+……+1/m!
当m=10时的结果(按四舍五入保留3位小数)。
(注:
所有变量用float数据类型定义!
)
答案:
1.718
2、求[10,2000]之间能被2或3或5整除的数之和。
改正程序中的错误(共3处错误)。
答案:
1466295
#include
voidmain()
{
intsum;
inti;
for(i=10;i<2000;i++)
if(i%2==0&&i%3==0&&i%5==0)
sum=sum+i;
printf("sum=%d\n",sum);
}
3、/*下面程序的功能是:
计算并输出500以内的最大的10个能被13或者17整除的自然数之和。
请改正程序中的错误,并运行,最后给出程序运行的正确结果。
(注:
只有一处错误!
)*/
#include
voidmain()
{
inttotal=0,mc=1,k=500;
intpm[10],count=0;
while((k>=2)&&mc<=10)
{
if((k%13==0)||(k%17==0))
{
pm[mc]=k;
mc++;
}
k--;
}
for(k=1;k<=10;k++)
total+=pm[k-1];
printf("%d\n",total);
}
答案:
4622
4、下列程序的功能是:
求出以下分数序列的前30项之和,
2/1,3/2,5/3,8/5,13/8,21/13,……请改正程序中的错误,并运行修改后程序,给出程序结果(按四舍五入保留6位小数)。
结果:
48.840601。
(有3处错误)
#include
#include
main()
{intk;
doubles;
longa,b,c;
clrscr();
s=0.0;a=2;b=1;
for(k=1;k<=30;k++)
s=s+a/b;
c=a;a=a+b;b=c;
printf("\n结果:
%lf\n",s);
}
5、/*求200到1000之间的双胞胎数的对数。
双胞胎数:
两素数差为2称为双胞胎数。
例如227和229是一对双胞胎数,它们都是素数且差为2。
*/
#include
intprime(intx)
{
intk;
for(k=2;kif(__________)break;
if(k==x)return1;
elsereturn0;
}
voidmain()
{inta,b,n=0;
intprime(intx);
for(a=200;a<=998;a++)
{
if(prime(a)==1)
{b=a+2;
if(__________)n++;
}
}
printf("%d\n",n);
}
答案:
20
C语言程序设计题库及答案
1、计算下面公式的值。
T=1/1!
+1/2!
+1/3!
+……+1/m!
当m=5时的结果(按四舍五入保留3位小数)。
(注:
所有变量用float数据类型定义!
)答案:
1.717
#include
floatjc(floatx)
{
floatjc=1,i;
for(i=1;i<=x;i++)
jc=jc*i;
returnjc;
}
voidmain()
{
floatjc(floatx);
floatm,t=0,i;
printf("PleaseInput:
\n");
scanf("%f",&m);
for(i=1;i<=m;i++)
t=t+1/jc(i);
printf("t=%.3f\n",t);
}
2、程序填空:
用*号输出字母C的图案。
#include"stdio.h"
#include"conio.h"
main()
{
_printf("***\n");__
printf("*\n");
printf("*\n");
printf("***\n");
getch();
}
3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。
编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。
(注:
所有变量用long数据类型定义!
)答案:
1533459
#include
longf(longx)
{
longs=0;
if(x%2!
=0)
{
while(x>0)
{
s=s+x%10;
x=x/10;
}
if(s%15==0)return1;
elsereturn0;
}
elsereturn0;
}
voidmain()
{
longf(longx);
longi,sum=0;
for(i=1000;i<=9999;i++)
if(f(i))
sum=sum+i;
printf("sum=%ld\n",sum);
}
4、下面程序的功能是:
计算并输出700以内的最大的10个能被13或者17整除的自然数之和。
请改正程序中的错误,并运行,最后给出程序运行的正确结果。
(注:
只有一处错误!
)答案:
6591
#include
voidmain()
{
inttotal=0,mc=1,k=700;//改为:
inttotal=0,mc=0,k=700;
intpm[10],count=0;
while((k>=2)&&mc<=10)
{
if((k%13==0)||(k%17==0))
{
pm[mc]=k;
mc++;
}
k--;
}
for(k=1;k<=10;k++)
total+=pm[k-1];
printf("%d\n",total);
}
5、求x=1+1/5+1/7+1/9+…的近似值,直到最后一项的绝对值小于10-5为止。
#include
#include
main()
{
inti;
doublex;
x=1;
i=5;
do
{
x=x+1/(double)i;
i=i+2;
}while(fabs(1/(double)i)>1e-5);
printf("%.2lf\n",x);
}
输出:
6.058
6、计算如下公式的A20值。
A1=1,A2=1/(1+A1),A3=1/(1+A2),A4=1/(1+A3),......(按四舍五入保留10位小数)。
答案:
0.6180339850
(1)可用递归:
1n=1
F(n)=
1/(1+f(n-1))n>1
#include
doublef(doublen)
{
doublea;
if(n==1)a=1;
elsea=1.0/(1+f(n-1));
returna;
}
voidmain()
{
doublef(doublen);
printf("f(20)=%.10lf\n",f(20));
}
(2)不用递归:
#include
voidmain()
{
doublei,c,a=1,b=1,x;
for(i=1;i<20;i++)
{
c=a;
a=b;
b=c+b;
}
x=a/b;
printf("x=%.10lf\n",x);
}
7、求[10,1600]之间能被7整除的奇数之和。
答案:
90965
(1)用函数可写成:
#include
intjx(intx)
{
if(x%2!
=0)return1;
elsereturn0;
}
intf(intx)
{
if(jx(x))
if(x%7==0)return1;
elsereturn0;
elsereturn0;
}
voidmain()
{
intjx(intx);
intf(intx);
inti,s=0;
for(i=10;i<=1600;i++)
if(f(i))s=s+i;
printf("s=%d\n",s);
}
(2)不用函数可写成:
#include
voidmain()
{
intjx(intx);
intf(intx);
inti,s=0;
for(i=10;i<=1600;i++)
if(i%2!
=0&&i%7==0)s=s+i;
printf("s=%d\n",s);
}
8、函数mystrlen(char*s)的功能是求字符串s的长度。
请填空。
intmystrlen(char*s)
{intnum=0;
while(*s++!
='\0'){_num++_;}
return(num);
}
9、[100,500]之间同时满足除以7余5,除以5余3,除以3余1的整数之和。
答案:
1042
#include
voidmain()
{
inti,sum=0;
for(i=100;i<=500;i++)
{
if(i%7==5&&i%5==3&&i%3==1)
sum=sum+i;
}
printf("sum=%d\n",sum);
}
10、求[100,999]之间所有的素数的个数。
答案:
143
#include
intsushu(intx)
{
inti;
for(i=2;iif(x%i==0)break;
if(i==x)return1;
elsereturn0;
}
voidmain()
{
intsushu(intx);
inti,num=0;
for(i=100;i<=999;i++)
if(sushu(i))
num++;
printf("num=%d\n",num);
}
11、编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。
答案:
110
#include
intf(intx)
{
inta,b,c,d;
a=x/1000;
b=x/100%10;
c=x/10%10;
d=x%10;
if(a+b==b+c)return1;
return0;
}
voidmain()
{
inti,num=0;
for(i=1000;i<=9999;i++)
if(i%8==0)
if(f(i))num++;
printf("num=%d\n",num);
}
12、数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。
下列程序的功能是求出该数列前10项的和。
请改正程序中的错误,并运行修改后的程序,给出程序结果。
(注:
只有一处错误!
)
答案:
311
#include
voidmain()
{
longsum=0,a[30]={1,2,1};
intk,j;
for(k=3;k<10;k++)
a[k]=a[k-1]+a[k-2]+a[k-3];
for(j=1;j<=10;j++)
sum+=a[j];//改为:
sum+=a[j-1];
printf("%ld\n",sum);
}
13、/*求1到2000之间的双胞胎数的对数。
双胞胎数:
两素数差为2称为双胞胎数。
例如227和229是一对双胞胎数,它们都是素数且差为2。
*/答案:
61
#include
intprime(intx)
{
intk;
for(k=2;kif(_x%k==0_)break;
if(k==x)return1;
elsereturn0;
}
voidmain()
{inta,b,n=0;
intprime(intx);
for(a=2;a<=1998;a++)
{
if(prime(a)==1)
{b=a+2;
if(_prime(b)==1_)n++;
}
}
printf("%d\n",n);
}
14、编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。
答案:
4
#include
voidmain()
{
inti,num=0;
inta,b,c;
for(i=200;i<=400;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
if(a*b*c==42&&a+b+c==12)
num++;
}
printf("num=%d\n",num);
}
15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?
答案:
9
#include
voidmain()
{
intnum=0;
inti,j,k;//i为大学生人数,j为中学生人数,k为小学生人数
for(i=1;i<=30;i++)
for(j=1;j<=30-i;j++)
for(k=1;k<=30-i-j;k++)
if(i*3+j*2+k*1==50&&i+j+k==30)
{
printf("%d,%d,%d\n",i,j,k);
num++;
}
printf("num=%d\n",num);
}
16、爱因斯坦走台阶:
有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?
答案:
119
#include
voidmain()
{
intx;
for(x=1;;x++)
if((x%2==1)&&(x%3==2)&&(x%5==4)&&(x%6==5)&&(x%7==0))
{printf("%d\n",x);break;}
}
17、求1000以内最大的10个素数的和。
答案:
9664
#include
intprime(longn)
{
longk;
for(k=2;k<=n-1;k++)
if(__n%k==0__)return0;
return1;
}
voidmain()
{
longt,total=0,num=0;
intprime(longn);
for(t=1000;t>=2;t--)
{
if(_prime(t)__)
{
total=total+t;num++;
}
if(num==10)break;
}
printf("\n%ld",total);
}
18、/*求1!
+2!
+3!
+...+7!
,7!
表示7的阶乘。
*/答案:
5913
#include
longjc(longx)
{
longk,fac=1;
for(k=1;_k<=x__;k++)
fac*=k;
_returnfac__;
}
voidmain()
{
longn,sum=0;
longjc(longx);
for(n=1;n<=7;n++)
_sum=sum+jc(n)_;
printf("\n%ld",sum);
}
19、求10000以内所有完数之和,"完数"是指:
一个数如果刚好与它所有的真因子