c语言上机试题 1.docx
《c语言上机试题 1.docx》由会员分享,可在线阅读,更多相关《c语言上机试题 1.docx(16页珍藏版)》请在冰点文库上搜索。
![c语言上机试题 1.docx](https://file1.bingdoc.com/fileroot1/2023-7/11/2d642f64-ee98-4858-8671-84b2fb199572/2d642f64-ee98-4858-8671-84b2fb1995721.gif)
c语言上机试题1
1整型、实型
1.1实型四舍五入
请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。
例如:
实型数为,则函数返回;实型数为,则函数返回。
注意:
部分源程序存在文件文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include<>
intNONO(void);
floatfun(floath){
}
intmain(void){
floata;
printf("Entera:
");
scanf("%f",&a);
printf("Theoriginaldatais:
");
printf("%f\n\n",a);
printf("Theresult:
%f\n",fun(a));
NONO();
return1;
}
intNONO(void){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。
*/
inti;
floata;
FILE*rf,*wf;
rf=fopen("./05/","r");
wf=fopen("./05/","w");
for(i=0;i<20;i++){
fscanf(rf,"%f",&a);
fprintf(wf,"%f\n",fun(a));
}
fclose(rf);
fclose(wf);
return1;
}
答案1:
longi=h*1000;
if(i%10<5)
return(i/10)/;
else
return(i/10+1)/;
答案2:
longtemp=a*1000,temp2;
temp2=temp/10;
temp=temp%10;
floatresult;44/","r");
wf=fopen("./44/","w");
for(i=0;i<10;i++){
fscanf(rf,"%d,%d",&a,&b);
fun(a,b,&c);
fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);
}
fclose(rf);
fclose(wf);
}
答案:
longi1=(a%10)*1000;
printf("aa=%d,bb=%d",b%10,b/10);
longi2=(b%10)*100;
longi3=a/10*10;
longi4=b/10;
//returna%10*1000+b%10*100+a/10*10+b/10;
returni1+i2+i3+i4;
1.2数学公式
#include<>
/************found************/
fun(intm){
doubley=0,d;
inti;
/************found************/
for(i=100;id=(double)i*(double)i;
y+=/d;
}
return(y);
}
main(){
intn=2000;
printf("\nTheresultis%lf\n",fun(n));
}
答案:
doublefun(intm){
for(i=100;i<=m;i+=100){
1.3数学公式
修正:
当k=1时,第一项为4/1*3
#include<>
#include<>
floatfun(intk){
}
main(){
printf("%f\n",fun(10));
}
答案1:
intn;
floats,w,p,q;
n=1;
s=;
while(n<=k){
w=*n;
p=w-;
q=w+;
s=s*w*w/p/q;n++;
}
returns;
改错:
inti;
floatsum=;
for(i=2;i<=k;i++){
sum*=(2*i*2*i)/((2*i+1)*(2*i-1));//注意数据类型
}
returnsum;
1.4最小公倍数
给定程序中函数fun的功能是:
求三个数的最小公倍数。
例如,给主函数中的变量x1、x2、x3分别输入15112,则输出结果应当是:
330。
请改正程序中的错误,使它能得出正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include<>
/************found************/
fun(intx,y,z){
intj,t,n,m;
j=1;
t=j%x;
m=j%y;
n=j%z;
while(t!
=0||m!
=0||n!
=0){
j=j+1;
t=j%x;
m=j%y;
n=j%z;
}
/************found************/
returni;
}
main(){
intx1,x2,x3,j;
printf("Inputx1x2x3:
");
scanf("%d%d%d",&x1,&x2,&x3);
printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);
j=fun(x1,x2,x3);
printf("Theminimalcommonmultipleis:
%d\n",j);
}
答案:
intfun(intx,inty,intz){
returnj;
编程:
#include<>
//求三个数的最大数
intmax(intx,inty,intz){
}
//求三个数最小公倍数
intfun(intx,inty,intz){
}
main(){
intx1,x2,x3,j;
printf("Inputx1x2x3:
");
scanf("%d%d%d",&x1,&x2,&x3);
printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);
j=fun(x1,x2,x3);
printf("Theminimalcommonmultipleis:
%d\n",j);
}
答案:
inttemp;
if(x>y)temp=x;
elsetemp=y;
if(temp>z)returntemp;
elsereturnz;
inttemp=max(x,y,z);
intresult=temp;
while
(1){
if(result%x==0&&result%y==0&&result%z==0)returnresult;
result=result+temp;
}
1.5n!
改错
给定程序中函数fun的功能是:
计算n!
。
例如,给n输入5,则输出。
请改正程序中的错误,使程序能输出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include<>
doublefun(intn){
doubleresult=;
/************found************/
ifn==0return;
while(n>1&&n<170)
/************found************/
result*=n--
returnresult;
}
main(){
intn;
printf("InputN:
");
scanf("%d",&n);
printf("\n\n%d!
=%lf\n\n",n,fun(n));
}
答案:
if(n==0)return;
result*=n--;
1.6数学公式
#include<>
doublefun(intn){
}
main(){
intn=5;
printf("\nThevalueoffunctionis:
%lf\n",fun(n));
}
答案:
inta,b,c,k;
doubles;
s=;
a=2;
b=1;
for(k=1;k<=n;k++){
s=s+(double)a/b;
c=a;
a=a+b;
b=c;
}
returns;
1.7数列
已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。
给定程序中函数fun的功能是:
计算并输出该数列前n项的平方根之和。
n的值通过形参传入。
例如,当n=10时,程序的输出结果应为:
。
请改正程序中的错误,使程序能输出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include<>
#include<>
doublefun(intn){
}
main(){
intn;
printf("InputN=");
scanf("%d",&n);
printf("%f\n",fun(n));
}
答案:
doublesum,s0,s1,s2,s;
intk;
sum=;
if(n<=2)sum=;
s0=;
s1=;
s2=;
for(k=4;k<=n;k++){
s=s0+s1+s2;
sum+=sqrt(s);
s0=s1;
s1=s2;
s2=s;
}
returnsum;
1.8数学公式
#include<>
/************found************/
intfun(intn){
floatA=1;
inti;
/************found************/
for(i=2;ireturnA;
}
main(){
intn;
printf("\nPleaseentern:
");
scanf("%d",&n);
printf("A%d=%f\n",n,fun(n));
}
答案:
floatfun(intn){
if(2<=n)return(1+fun(n-1));//递归
或:
for(i=2;i<=n;i++)A=(1+A);//另一种
1.9数学公式
给定程序中函数fun的功能是:
根据整型形参m的值,计算如下公式的值。
#include<>
doublefun(intm){
doubley=;
inti;
/**************found**************/
for(i=2;i/**************found**************/
y-=1/(i*i);
return(y);
}
main(){
intn=5;
printf("\nTheresultis%lf\n",fun(n));
}
答案:
for(i=2;i<=m;i++)
y-=(i*i);
1.10数学公式
#include<>
#include<>
doublefun(doubleeps){
doubles,t;
intn=1;
s=;
/************found************/
t=0;
while(t>eps){
s+=t;
t=t*n/(2*n+1);
n++;
}
/************found************/
return(s);
}
main(){
doublex;
printf("\nPleaseenteraprecision:
");
scanf("%lf",&x);
printf("\neps=%lf,Pi=%lf\n\n",x,fun(x));
}
答案:
t=;
return(s*2);
1.11素数
给定程序中函数fun的功能是:
找出一个大于形参m且紧随m的素数,并作为函数值返回。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include<>
intfun(intm){
inti,k;
for(i=m+1;;i++){
for(k=2;k
/**************found**************/
if(i%k!
=0)break;
/**************found**************/
if(k
}
}
voidmain(){
intn;
n=fun(20);
printf("n=%d\n",n);
}
答案:
if(i%k==0)break;
if(k==i)return(i);
1.12整数处理
给定程序中函数fun的功能是:
从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如,当s中的数为:
7654321时,t中的数为:
642。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include<>
/************found************/
//voidfun(longs,longt){
voidfun(longs,long*t){
longsl=10;
s/=10;
*t=s%10;
/************found************/
//while(s<0){
while(s>0){
s=s/100;
*t=s%10*sl+*t;
sl=sl*10;
}
}
main(){
longs,t;
printf("\nPleaseenters:
");
scanf("%ld",&s);
fun(s,&t);
printf("Theresultis:
%ld\n",t);
}
1.13自然数
给定程序中函数fun的功能是:
计算小于形参k的最大的10个能被13或17整除的自然数之和。
k的值由主函数传入,若k的值为500,则函数值为4622。
请改正程序中的错误,使程序能输出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include<>
intfun(intk){
intm=0,mc=0,j;
while((k>=2)&&(mc<10)){
/************found************/
if((k%13=0)||(k%17=0)){
m=m+k;
mc++;
}
k--;
}
returnm;
/************found************/
_____
}
main(){
printf("%d\n",fun(500));
}
if(k%13==0||k%17==0){
//____