C语言程序设计实验与习题答案.docx
- 文档编号:5170958
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:54
- 大小:26.59KB
C语言程序设计实验与习题答案.docx
《C语言程序设计实验与习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验与习题答案.docx(54页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验与习题答案
2.程序填空
(1)以下程序的功能是计算1~50之间能被7整除的整数之和。
#include
voidmain()
{inti,sum=
0
;
for(i=1;
50
;i++)
if(
i%7==0
)sum+=i;
printf("sum=%d\n",sum);
}
(2)下面程序接收来自键盘的输入,直到输入
为-1)键为止。
这些字符被原样输出,但若有连续一个以上的空格
时只输出一个空格。
请填空。
#include
voidmain()
{charcx;
charfront=’’;
while(
(cx=getchar())!
=’\n’)
{if(cx!
=
’’)
putchar(cx);
if(cx==
’’)
if(front!
=’’)
putchar(cx);
front=cx;
}
}
3.程序改错
(1)下列程序的功能是求1+3+5+,99的和。
#include
voidmain()
{ints,i;★//ints=0,i;
i=1;
while(i<=99)
s=s+i;
★
//{s=s+i;i++;}
printf("1+3+5+
99
的和是:
%d\n",s);
}
(2)下面程序的功能是输入一个正整数,判断是否是素数,若
为素数输出1,否则输出0。
#include
voidmain()
{inti,x,y=0;★//y=1
scanf("%d",&x);
for(i=2;i<=x/2&&y;i++)
if((x%i)!
=0)y=0;★//x%i==0
printf("%d\n",y);
}
4.设计性实验
(1)题
/*方法
(1)精度控制*/
#include
#include
main()
{ints;
floatn,t,pi;
t=1;pi=0;n=1.0;s=1;
while((fabs(t))>=1e-6)
{pi=pi+t;n=n+2;s=-s;t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
/*方法
(2)次数控制*/
#include
#include
main()
{ints;
longtimes;
floatn,t,pi;
t=1;pi=0;n=1.0;s=1;
for(times=1;times<=1e9;times++)
{pi=pi+t;n=n+2;s=-s;t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
(2)题
main()
{
inti,j,frame;
doublewheattal=0;
doublewheatfnu=1;
printf("Pleaseinputframe’snumbers:
");
scanf("%d",&frame);
for(i=0;i
{
wheattal+=wheatfnu;
wheatfnu+=wheatfnu;
}
nTotalwheattatol’stimeter=%e\n",wheattal/1.40e8);
}
(3)题
/*方法一:
使用递推公式n=n+2*/
main()
{
inti,n=1;
doubles=0,t=1;
for(i=1;i<=20;i++)
{
t*=n;
s+=t;
n+=2;
}
printf("s=%lf",s);
getch();
}
/*方法二:
使用通项公式2*i+1*/
main()
{
inti;
doubles=0,t=1;
for(i=1;i<=20;i++)
{
t*=2*i+1;
s+=t;
}
printf("s=%lf",s);
getch();
}
/*方法三*/
#include"stdio.h"
main()
{
longtotal,sum,m,n,t;
total=0;
for(m=1;m<=20;m++)
{
sum=1;t=1;
for(n=1;n<=m;n++){sum=sum*t;t=t+2;}
total=total+sum;
}
printf("total=%ld",total);
}
2.程序填空
(1)以下程序的功能是计算1~50之间能被7整除的整数之和。
#include
voidmain()
{inti,sum=
0
;
for(i=1;
50
;i++)
if(
i%7==0
)sum+=i;
printf("sum=%d\n",sum);
}
(2)下面程序接收来自键盘的输入,直到输入
为-1)键为止。
这些字符被原样输出,但若有连续一个以上的空格时只输出一个空格。
请填空。
#include
voidmain()
{charcx;
charfront=’’;
while((cx=getchar())!
=’\n’)
{if(cx!
=’’)
putchar(cx);
if(cx==’’)
if(front!
=’’)
putchar(cx);
front=cx;
}
}
3.程序改错
(1)下列程序的功能是求1+3+5+,99的和。
#include
voidmain()
{ints,i;★//ints=0,i;
i=1;
while(i<=99)s=s+i;★//{s=s+i;i++;}
printf("1+3+5+,99的和是:
%d\n",s);
}
(2)下面程序的功能是输入一个正整数,判断是否是素数,若
为素数输出1,否则输出0。
#include
voidmain()
{inti,x,y=0;★//y=1
scanf("%d",&x);
for(i=2;i<=x/2&&y;i++)
if((x%i)!
=0)y=0;★//x%i==0
printf("%d\n",y);
}
4.设计性实验
(1)题
/*方法
(1)精度控制*/
#include
#include
main()
{ints;
floatn,t,pi;
t=1;pi=0;n=1.0;s=1;
while((fabs(t))>=1e-6)
{pi=pi+t;n=n+2;s=-s;t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
/*方法
(2)次数控制*/
#include
#include
main()
{ints;
longtimes;
floatn,t,pi;
t=1;pi=0;n=1.0;s=1;
for(times=1;times<=1e9;times++)
{pi=pi+t;n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
(2)题
main()
{
inti,j,frame;
doublewheattal=0;
doublewheatfnu=1;
printf("Pleaseinputframe’snumbers:
");
scanf("%d",&frame);
for(i=0;i
{
wheattal+=wheatfnu;
wheatfnu+=wheatfnu;
}
nTotalwheattatolstimeter=%e\n",wheattal/1’.40e8);
}
(3)题
/*方法一:
使用递推公式n=n+2*/
main()
{
inti,n=1;
doubles=0,t=1;
for(i=1;i<=20;i++)
{
t*=n;
s+=t;
n+=2;
}
printf("s=%lf",s);
getch();
}
/*方法二:
使用通项公式2*i+1*/
main()
{
inti;
doubles=0,t=1;
for(i=1;i<=20;i++)
{
t*=2*i+1;
s+=t;
}
printf("s=%lf",s);
getch();
}
/*方法三*/
#include"stdio.h"
main()
{
longtotal,sum,m,n,t;
total=0;
for(m=1;m<=20;m++)
{
sum=1;t=1;
for(n=1;n<=m;n++){sum=sum*t;t=t+2;}
total=total+sum;
}
printf("total=%ld",total);
}
2.程序填空
(1)求任意两个整数之间所有的素数。
#include
voidmain()
{inti1,i2,i,j,flag;
printf("inputtwointeger(i1,i2):
");
scanf("%d%d",
&i1
&i2
);
printf("primenumber:
\n");
for(i=
i1
;i<=
i2
;i++)
{
flag=1;
for(j=2;j<=i-1;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag==1)printf("%d\t",i);
}
printf("\n");
}
(2)以下程序的功能是输出下三角九九乘法表。
#include
voidmain()
{inti,j;
for(i=1;i<=9;i++)
{for(j=1;j<=i;j++)
printf("%d*%d=%d\t",i,j,i*j);
printf("\n");
}
}
3.程序改错
(1)下列程序的功能是输出所有的“水仙花数”。
所
谓“水仙花数”是指一个三位数,该数的各位数字立
方和等于该数本身的数。
例如:
153是一个“水仙
333
花数”,因为153=1+5+3。
#include
voidmain()
{intx,s,a;
for(s=0,x=100;x<1000;s=0,x++)★
{a=x;while(a!
=0)
{s=s+(a%10)*(a%10)*(a%10);★
a=a/10;
}
if(x==s)printf("%d",x);★
}
}
(2)以下程序的功能是输出1至1000之间的所有完数。
若一个整数等于该数的所有因子之和,则称该整数为完数。
#include
voidmain()
{inti,j;ints;for(i=1;i<=999;i++)
{s=1;★//s=0;
for(j=1;j {if( i/j ==0)s=s+j; } ★ //i%j if( s=i)printf("%5d",i); ★ //s==i } } 4.设计性实验 SY61.C main() {inti,j,k,n=0;/*i,j,k分别代表三位整数的百位,十位,个位.n代表个数*/for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) if(i*i*i+j*j*j+k*k*k==1099)/*在所有组合中找出满足指定条件的*/ { printf("%4d",100*i+10*j+k); n++; if(n%5==0)printf("\n"); /*表示每行输出 5个数*/ } } SY62.C #include #include main() { inti,j,k; for(i=1;i<=4;i++) /*上三角形有 4行,每循环 1次输出 1行*/ { for(k=1;k<8-((2*i-1)/2);k++) /*该循环输出每行的空格 .8用于调节偏离位 置,可换成别的数( >=8)*/ printf(""); for(j=1;j<=2*i-1;j++) /*该循环输出每行的’字*’符*/ printf("*"); putchar( ’n’); /*换行*/ } for(i=3;i>=1;i--)/*下面为倒三角形,有3行*/ { for(k=1;k<8-((2*i-1)/2);k++) printf(""); for(j=1;j<=2*i-1;j++) printf("*"); putchar(’n’); } } sy63.c main() {intn=1,score,t;scanf("%d",&score);while(score>=0&&n<=5){n++; t=0; while(score! =0) { t=t+(score%10)*(score%10); score=score/10; } if(t==108) printf("%d",score); scanf("%d",&score); } } SY64.C #include"math.h" main() { floatx0,x1,x2,fx0,fx1,fx2;/*x1,x2分别表示每次区间的左右端点,x0代表区间的中间点,fx0,fx1,fx2代表相应点的函数值*/ do {printf("pleaseinputx1&x2: "); scanf("%f,%f",&x1,&x2); fx1=x1*((2*x1-4)*x1+3)-6; fx2=x2*((2*x2-4)*x2+3)-6; }while(fx1*fx2>0);/*该循环指定有根的区间*/do { x0=(x1+x2)/2; fx0=x0*((2*x0-4)*x0+3)-6; if((fx0*fx1)<0)/*丢掉右区间*/ { x2=x0; fx2=fx0; } else/*丢掉左区间*/ { x1=x0; fx1=fx0; } }while(fabs(fx0)>1e-5);/*该循环实现二分法求根*/ printf("rootx=%f",x0); } 2)程序填空 (1) #include voidmain() { intm,n,num1,num2,temp; printf("Inputtwopositiveinteger: \n"); scanf("%d,%d",&num1,__&num2_______); if(num1 {temp=num1;num1=num2;num2=__temp_______;} m=num1; n=num2; while(n! =0) {temp=__m%n__________;m=n; n=temp; } printf("Thegrestestcommondivisoris%d\n",m); printf("Thelowestcommonmultipleis%d\n",num1*num2/__m____); } (2)下面程序是计算表达式1+(1+2)+(1+2+3)+, +(1+2+3+,+10)和。 #include voidmain() {intsum,i,j,t; sum=①; for(i=1;i<=10;i++) {t=0; for(j=1;j<=②;j++) t=t+j; sum=③; } printf("1+(1+2)+(1+2+3)+,+(1+2+3+,+10) =%d\n",sum); } ①0②i③sum+t 3.程序改错 (1)下面的程序是求1~100之间的素数,并将所有素数按每 行10个输出。 #include #define ★ //#include voidmain() {inti,m,k,n; ★ //inti,m,k,n=0; for(m=1;m<=100;m=m+2) { if(n/10==0)★//if(n%10==0) printf("\n"); k=1; for(i=2;i<=sqrt(m);i++) if(m%i! =0)★//if(m%i==0) {k=0;break;} if(k==1) {printf("%3d",m);n=n+1;} } printf("\n"); } (2)下面程序是求表达式1-1/2+1/3-1/4+1/5-,,-1/100的 值,结果保留小数后4位。 #include voidmain() {inti; floats; i=0; ★ //i=1; s=1; ★ //s=0; while(i<100) {if(i%2==0) s=s-1/i; ★ //s=s-1.0/i; else s=s+1/i; ★//s=s+1.0/i i=i+1; } printf("1-1/2+1/3-1/4+ -1/100=%10.3f\n",s); } 4.设计性实验 (1)编程输出以下图形。 #include voidmain() { inti,j,k; for(i=1;i<=6;i++) { for(k=1;k<=20-(2*i-1)/2;k++) printf(""); for(j=1;j<=2*i-1;j++) printf("%d",i); printf("\n"); } } (2)编写一个程序输出所有5位数字的回文。 方法一: #include voidmain() { longx,a,t;//x: 原5位整数,a: 用来暂存x,t: 把 inti,num=0;//i: 表示原5位数的某一位,num: for(x=10000;x<=99999;x++)//每次取出1个 a反序后的数 回文数的个数 5位整数 { a=x; //把取出的 5位整数保存到 a t=0; //t 用来存放反序后的数 while(a>0) {i=a%10; t=t*10+i; //取出当前数的最后一位到 //把取出的i组装到t i a=a/10; } if(x==t) //原来的 5位整数等于反序后的数 t {printf("%ld,",x); num++;} if(num%10==0) printf("\n"); //每行输出 10个数 } } 方法二: /*求5位整数中所有回文*/ #include voidmain() { longintn,m,t=0; for(n=10000;n<=99999;n++) { if(hw(n)==1) {printf("%6ld",n); t++; if(t%5==0)printf("\n"); /*每行输出 5个数*/ } } } inthw(longinta)/*hw函数测试a是否是回文*/ { longintm,r=0; m=a; while(m) { r=r*10+m%10; m/=10; } if(a==r) return1;/*是回文返回1*/ else return0;/*是回文返回0*/ } (3)编程计算e=1+1/1! +1/2! +1/3! +,+1/n! 。 精度为1e-6 (即最后一项1/n! <1e-6就停止循环)。 提示: 注意1/n! =1/(n-1)! *1/n;利用循环加上每一次的分项。 #include voidmain() {longi; doublee,t; e=1.0; t=1.0; for(i=1;t>1e-6;i++) {t/=(double)i;e+=t;} printf("e=%f\n",e); } 2. ⑴ ①a[10]=x; ②break; ③a[k]=x; 附: 算法简析 main() { intx,i,j,k;/*感觉
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 习题 答案