二级C上机题库100题.docx
《二级C上机题库100题.docx》由会员分享,可在线阅读,更多相关《二级C上机题库100题.docx(51页珍藏版)》请在冰豆网上搜索。
二级C上机题库100题
C语言机试答案
第一套1.编写函数fun,它的功能是:
计算并输出下列级数和:
S=1/2+1/2*3+1/3*4+...1/n*(n+1)
例如,当n=10时,函数值为:
0.909091
#include
#include
doublefun(intn)
{
doubles=0;
inti;
for(i=1;is+=1.0/(i*(n+1));
returns;
}
main()
{
printf("%f\n",fun(10));
}
2.在[10000,20000]范围内考察个位数字是7的素数,问:
(1)这样的素数有多少个?
(2)其中最大的一个等于几?
#include
intmain(void)
{
intmax,num=0;
inti,j;
for(i=10000;i<20001;i++)
{
for(j=2;j
if(i%j==0)
break;
if(i==j&&i%10==7)
{
num++;
max=i;
}
}
printf("num=%d,max=%d\n",num,max);
return0;
}
3.编写程序,从键盘输入一年份,判断该年份是否为闰年。
#include
intmain(void)
{
intyear;
printf("pleaseinputtheyear:
\n");
scanf("%d",&year);
if((year%400==0)||(year%4==0&&year%100!
=0))
printf("%disaleapyear!
",year);
else
printf("%disnotaleapyear!
",year);
return0;
}
第二套1.编写函数fun,它的功能是:
计算并输出下列级数和:
例如,当n=10时,函数值为:
0.909091
#include
#include
doublefun(intn)
{
doubles=0;
inti;
for(i=1;is+=1.0/(i*(n+1));
returns;
}
main()
{
printf("%f\n",fun(10));
}
2.回文数是指正读和反读都一样的自然数。
例如,8,121,5445这三个数都是回文数。
求:
(1)[1,1000]之内既是回文数,又是素数的最大整数。
(2)[1,1000]以内既是回文数,又是素数的整数有多少个。
#include
inthuiwen(intn)
{
intp,m,flag=0;
ints=0;
m=n;
do
{
p=m%10;
s=s*10+p;
m=m/10;
}while(m);
if(s==n)
flag=1;
returnflag;
}
intsushu(intn)
{
inti,flag=0;
for(i=2;iif(n%i==0)
break;
if(i==n)
flag=1;
returnflag;
}
intmain(void)
{
inti,max,num=0;
for(i=1;i<1001;i++)
{
if(huiwen(i)&&sushu(i))
{
max=i;
num++;
}
}
printf("num=%d,max=%d\n",num,max);
return0;
}
3.编写程序,能对输入一行字符,统计其中分别有多少个单词和空格。
比如输入:
”Howareyou”,有3个单词和2个空格
#include
intmain(void)
{
charline[81];
intword=0,blank=0,flag=0;
inti=0;
gets(line);
while(line[i]!
='\0')
{
if(line[i]=='')
{
blank++;
if(flag)
flag=0;
}
else
if(!
flag)
{
word++;
flag=1;
}
i++;
}
printf("word=%d,blank=%d",word,blank);
return0;
}
第三套1.编写函数fun,它的功能是:
求Fibonacci数列中大于t的最小的一个数,结果由函数返回。
其中Fibonacci数列F(n)的定义为:
F(0)=0,F
(1)=1F(n)=F(n-1)+F(n-2)例如:
当t=1000时,函数值为:
1597。
#include
#include
#include
intfun(intt)
{
intf1=0,f2=1,temp;
while(f2{
temp=f1;
f1=f2;
f2=temp+f1;
}
returnf2;
}
main()
{
intn;
n=100;
printf("n=%d,f=%d\n",n,fun(n));
}
2.先从键盘上输入一个3行3列矩阵元素的值,然后输出主对角线元素平方之和.
#include
intmain(void)
{
intarray[3][3];
inti,j,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf("%d",&array[i][j]);
if(i==j)
sum+=array[i][j]*array[i][j];
}
printf("sum=%d\n",sum);
return0;
}
3.编程:
删除字符串中的数字字符。
#include
intmain(void)
{
charstring[81];
inti=0,j;
gets(string);
while(string[i]!
='\0')
{
if(string[i]>='0'&&string[i]<='9')
{
j=i;
do
{
string[j]=string[j+1];
j++;
}while(string[j]!
='\0');
}
else
i++;
}
printf("%s\n",string);
return0;
}
第四套1.编写函数fun,它的功能是:
求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。
例如若n为1000时,函数值应为:
s=153.909064。
#include
#include
#include
doublefun(intn)
{
inti;
doubles,sum=0;
for(i=1;i<1000;i++)
{
if(i%3==0&&i%7==0)
sum+=i;
}
s=sqrt(sum);
returns;
}
main()
{
printf("s=%f\n",fun(1000));
}
2.编程求出两个非零正整数的最大公约数.
#include
intmain(void)
{
intm,n,t;
printf("pleaseinputtwopositiveinteger:
\n");
scanf("%d%d",&m,&n);
if(m>0&&n>0)
{
if(m{
t=m;m=n;n=t;
}
do
{
t=m%n;
m=n;
n=t;
}while(t);
printf("themaxcommondivisoris%d\n",m);
}
else
printf("Error!
\n");
return0;
}
3.请编写程序:
根据以下公式求π(要求满足精度0.0005)的近似值:
π/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+……+(1*2*3*4*……*n)/(3*5*7*……*(2n+1))
#include
intmain(void)
{
doublesum=1;
doublep=1,q=1;
intn=1;
while(p/q>5e-4)
{
p*=n;
q*=(2*n+1);
sum+=p/q;
n++;
}
printf("pi=%f",2*sum);
return0;
}
第五套1.现矩阵(3行3列)的转置(即行列互换)。
例如,输入下面的矩阵:
100200300
400500600
700800900
程序输出:
100400700
200500800
300600900
#include
#include
intfun(intarray[3][3])
{
inttemp,i,j;
for(i=0;i<3;i++)
{
for(j=0;j
{
temp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
}
}
return0;
}
main()
{
inti,j;
intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
fun(array);
printf("convertedarray:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
return0;
}
2.编写程序,计算s=s=1-1/2+1/3-1/4+……+1/99-1/100
#include
intmain(void)
{
doubles=0;
inti,flag=1;
for(i=1;i<101;i++)
{
s+=1.0/i*flag;
flag=-flag;
}
printf("s=%f\n",s);
return0;
}
3.编写程序,求2~100中的所有的亲密素数对的个数。
亲密素数:
如果x是素数,则x+2也是素数。
#include
intsushu(intn)
{
inti,flag=0;
for(i=2;iif(n%i==0)
break;
if(i==n)
flag=1;returnflag;
}
intmain(void)
{
inti,num=0;
for(i=2;i<101;i++)
if(sushu(i)&&sushu(i+2))
{
printf("%d,%d\n",i,i+2);
num++;
}
printf("num=%d\n",num);
return0;
}
第六套1.从键盘入一个整数k(2≦k≦10000),输出它的所有质因子(即所有为素数的因子)。
例如,若输入整数:
2310,则应输出:
2、3、5、7、11。
#include
intsushu(intn)
{
inti,flag=0;
for(i=2;iif(n%i==0)
//break;
if(i==n)
flag=1;
returnflag;
}
intmain(void)
{
inti,k;
printf("pleaseinputaninteger:
(2<=k<=10000)\n");
scanf("%d",&k);
for(i=2;i{
if(k%i==0&&sushu(i))
printf("%d\t",i);
}
return0;
}
2.编写函数fun,它的功能是:
计算正整数n所有因子(1和n除外)之和作为函数值返回。
例如:
n=120时,函数值为239
#include
#include
intfun(intn)
{
inti,sum=0;
for(i=2;iif(n%i==0)
sum+=i;
returnsum;
}
main()
{
printf("%d\n",fun(120));
}
3.编写程序,求s=1/(1*2)+1/(2*3)+……+1/(n*(n+1)
#include
#include
doublefun(intn)
{
doubles=0;
inti;
for(i=1;is+=1.0/(i*(n+1));
returns;
}
main()
{
printf("%f\n",fun(10));
}
第七套1.编写函数fun,它的功能是计算下列级数和,和值由函数值返回。
例如,当n=10,x=0.3时,函数值为1.349859
#include
#include
#include
doublefun(doublex,intn)
{
doubles=1,p=1;
inti;
for(i=1;i{
p*=x/i;
s+=p;
}
returns;
}
main()
{
printf("%f\n",fun(0.3,10));
}
2.编写程序,求出并输出所有的“水仙花数”。
所谓水仙花数,是指一个三位数,其各位数字的立方之和等于该数。
#include
main()
{
inta,b,c,d,k;
for(k=100;k<=999;k++)
{
a=k/100;
b=(k-a*100)/10;
c=k-a*100-b*10;
d=a*a*a+b*b*b+c*c*c;
if(k==d)
printf("%5d",k);
}
printf("\n");
}
3.给出三角形的三边a,b,c,求三角形的面积。
#include
#include
main()
{
floata,b,c,area,p;
scanf("%f,%f,%f",&a,&b,&c);
p=(a+b+c)/2;
if(a+b>c&&a+c>b&&b+c>a)
{
area=sqrt(p*(p-a)*(p-b)*(p-c));
printf("Area=%6.2f\n",area);
}
elseprintf("Error\n");
}
第八套1.编写函数fun,函数的功能是:
根据以下公式计算s,计算结果作为函数值返回:
n通过形参传入。
S=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+…+N)
例如:
若n的值为11时,则函数的值为:
1.833333
#include
#include
#include
floatfun(intn)
{
inti;
floats=0,p=0;
for(i=1;i{
p+=i;
s+=1.0/p;
}
returns;
}
main()
{
intn;
floats;
printf("\npleaseenterN:
");
scanf("%d",&n);
s=fun(n);
printf("theresultis:
%f\n",s);
}
2.编程求:
一球从100米高度自由落下,每次落地后反跳回原来高度的一半,再落下。
求它在第10次落地时,共经过多少米?
第10次反弹多高?
#include
intmain(void)
{
inti;
doubles=100,sum=100;
for(i=1;i<10;i++)
{s=s/2;
sum+=2*s;
}
printf("s=%lf,sum=%lf\n",s/2,sum);
return0;
}
3.编程:
根据以下公式求π值,并作为函数值返回.(精确到0.000001).
π/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+……
#include
intmain(void)
{
doublesum=1;
doublep=1,q=1;
intn=1;
while(p/q>5e-4)
{
p*=n;
q*=(2*n+1);
sum+=p/q;
n++;
}
printf("pi=%f",2*sum);
return0;
}
第九套1.下列程序中,函数fun的功能是:
将十进制正整数m转换成k(2≤k≤9)进制数,并按位输出。
例如:
若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
#include
#include
voidfun(intm,intk)
{
intt=1;
longs=0;
do
{
s+=(m%k)*t;
t*=10;
}
while(m/=k);
s+=(m%k)*t;
printf("%d",s);
}
main()
{
intb,n;
printf("\npleaseenteranumberandabase:
\n");
scanf("%d%d",&n,&b);
fun(n,b);
printf("\n");
}
2.一个自然数平方的末几位与该数相同时,称该数为同构数.例如,252=625,则25为同构数.编程求出1~1000中所有的同构数.
#include"stdio.h"
main()
{
inta,b;
for(a=1;a<10;a++)
{
b=a*a;
if(b%10==a)printf("%4d\n",a);
}
for(a=10;a<100;a++)
{
b=a*a;
if(b%100==a)printf("%4d\n",a);
}
for(a=100;a<=1000;a++)
{
b=a*a;
if(b%1000==a)printf("%4d\n",a);
}
}
3.编程计算的值。
当程序正确时,结果为:
2488.000000。
函数定义-1.0如下:
f(x)=2x*x+3x+4(x>=2)且f(x)=-2x*x+3x-4(x<2)
#include
doublefun(doublex)
{
doubles;
if(x<=2)
s=2*x*x+3*x+4;
else
s=-2*x*x+3*x-4;
returns;
}
intmain(void)
{
doubles;
s=fun(fun(-1.0)+fun(5.0));
printf("%f\n",s);
return0;
}
第十套1.下列程序中,fun函数的功能是:
求s=aa…aa-…-aaa–aa–a
(此处aa…aa表示n个a,a和n的值在1至9之间)
例如:
a=3,n=6,则以上表达式为:
s=333333–33333–3333–333–33–3其值为:
296298
#include
#include
longfun(inta,intn)
{
inti;
longs=a,p=a;
for(i=1;i{
p=p*10+a;
if(i==n-1)
s=p-s;
else
s+=p;
}
returns;
}
main()
{
inta,n;
printf("\npleaseenteraandn:
");
scanf("%d%d",&a,&n);
printf("Thevalueoffunctionis:
%ld\n",fun(a,n));
}
2.将4~100中的偶数分解成两个素数之和,每个数只取一种分解结果.如100=3+97,100=11+89,100=17+83等,但我们只取第一种分解即可.
#include
main()
{
intx,k,a,b,count=0;
for(x=4;x<101;x=x+2)
{
for(a=2;a<=(x/2);a++)
{
for(k=2;kif(a%k==0)break;
if(a==k)
{
b=x-a;
for(k=2;k
if(b%k==0)break;
if(b=k)
{
printf("%3d=%3d+%3d\t",x,a,b);
count++;
break;
if(count%3==0)
printf("\n");
}
}
}
}
}