C语言程序设计实验及习题答案Word格式.docx
《C语言程序设计实验及习题答案Word格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验及习题答案Word格式.docx(37页珍藏版)》请在冰豆网上搜索。
//{s=s+i;
i++;
1+3+5+…99的和是:
%d\n"
s);
(2)下面程序的功能是输入一个正整数,判断是否是素数,若
为素数输出1,否则输出0。
{inti,x,y=0;
//y=1
scanf("
%d"
&
x);
for(i=2;
i<
=x/2&
&
y;
if((x%i)!
=0)y=0;
//x%i==0
y);
4.设计性实验
(1)题
/*方法
(1)精度控制
*/
math.h>
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)次数控制*/
longtimes;
for(times=1;
times<
=1e9;
times++)
(2)题
{
inti,j,frame;
doublewheattal=0;
doublewheatfnu=1;
Pleaseinputframe’snumbers:
"
);
scanf("
frame);
for(i=0;
frame;
wheattal+=wheatfnu;
wheatfnu+=wheatfnu;
\nTotalwheattatol’stimeter=%e\n"
wheattal/1.40e8);
(3)题
/*方法一:
使用递推公式n=n+2*/
int
i,n=1;
doubles=0,t=1;
for(i=1;
=20;
{
t*=n;
s+=t;
n+=2;
s=%lf"
getch();
/*方法二:
使用通项公式2*i+1*/
i;
t*=2*i+1;
/*方法三*/
#include"
stdio.h"
longtotal,sum,m,n,t;
total=0;
for(m=1;
m<
m++)
{
sum=1;
t=1;
for(n=1;
n<
=m;
n++){sum=sum*t;
t=t+2;
total=total+sum;
total=%ld"
total);
(1)求任意两个整数之间所有的素数。
{inti1,i2,i,j,flag;
inputtwointeger(i1,i2):
%d%d"
&
i1,&
i2);
primenumber:
\n"
for(i=i1;
=i2;
flag=1;
for(j=2;
j<
=i-1;
j++)
if(i%j==0)
flag=0;
break;
if(flag==1)printf("
%d\t"
i);
(2)以下程序的功能是输出下三角九九乘法表。
{inti,j;
=9;
{for(j=1;
=i;
%d*%d=%d\t"
i,j,i*j);
(1)下列程序的功能是输出所有的“水仙花数”。
所
谓“水仙花数”是指一个三位数,该数的各位数字立
方和等于该数本身的数。
例如:
153是一个“水仙
花数”,因为153=13+53+33。
{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之间的所有完数。
若一个整数等于该数的所有因子之和,则称该整数为完数。
ints;
=999;
i++)
{s=1;
//s=0;
for(j=1;
i-1;
j++)★
//for(j=1;
{if(i/j==0)s=s+j;
}★//i%j
if(s=i)printf("
%5d"
//s==i
SY61.C
inti,j,k,n=0;
/*i,j,k分别代表三位整数的百位,十位,个位.n代表个数*/
=9;
for(j=0;
for(k=0;
k<
k++)
if(i*i*i+j*j*j+k*k*k==1099)
/*在所有组合中找出满足指定条件的*/
%4d"
100*i+10*j+k);
n++;
if(n%5==0)
/*表示每行输出5个数*/
SY62.C
string.h>
inti,j,k;
=4;
i++)
/*上三角形有4行,每循环1次输出1行*/
for(k=1;
8-((2*i-1)/2);
k++)
/*该循环输出每行的空格.8用于调节偏离位置,可换成别的数(>
=8)*/
"
for(j=1;
=2*i-1;
j++)
/*该循环输出每行的’*’字符*/
*"
putchar(’\n’);
/*换行*/
for(i=3;
i>
=1;
i--)
/*下面为倒三角形,有3行*/
sy63.c
main()
{intn=1,score,t;
score);
while(score>
=0&
=5)
{n++;
t=0;
while(score!
t=t+(score%10)*(score%10);
score=score/10;
if(t==108)
score);
}
SY64.C
math.h"
floatx0,x1,x2,fx0,fx1,fx2;
/*x1,x2分别表示每次区间的左右端点,x0代表区间的中间点,fx0,fx1,fx2代表相应点的函数值*/
do
{printf("
pleaseinputx1&
x2:
%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);
/*该循环实现二分法求根*/
rootx=%f"
x0);
2)程序填空
(1)
intm,n,num1,num2,temp;
Inputtwopositiveinteger:
%d,%d"
num1,__&
num2_______);
if(num1<
num2)
{temp=num1;
num1=num2;
num2=__temp_______;
m=num1;
n=num2;
while(n!
{temp=__m%n__________;
m=n;
n=temp;
Thegrestestmondivisoris%d\n"
m);
Thelowestmonmultipleis%d\n"
num1*num2/__m____);
(2)下面程序是计算表达式1+(1+2)+(1+2+3)+…+(1+2+3+…+10)和。
{intsum,i,j,t;
sum=①;
=10;
{t=0;
=②;
t=t+j;
sum=③;
1+(1+2)+(1+2+3)+…+(1+2+3+…+10)=%d\n"
①0
②i
③sum+t
(1)下面的程序是求1~100之间的素数,并将所有素数按每行10个输出。
#define<
//#include<
{inti,m,k,n;
//inti,m,k,n=0;
=100;
m=m+2)
if(n/10==0)★
//if(n%10==0)
k=1;
=sqrt(m);
i++)
if(m%i!
=0)★
//if(m%i==0)
{k=0;
if(k==1)
%3d"
n=n+1;
(2)下面程序是求表达式1-1/2+1/3-1/4+1/5-……-1/100的值,结果保留小数后4位。
{inti;
floats;
i=0;
//i=1;
s=1;
//s=0;
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;
1-1/2+1/3-1/4+…-1/100=%10.3f\n"
(1)编程输出以下图形。
voidmain()
=6;
{
=20-(2*i-1)/2;
(2)编写一个程序输出所有5位数字的回文。
方法一:
#include
<
longx,a,t;
//x:
原5位整数,a:
用来暂存x,t:
把a反序后的数
inti,num=0;
//i:
表示原5位数的某一位,num:
回文数的个数
for(x=10000;
=99999;
x++)
//每次取出1个5位整数
a=x;
//把取出的5位整数保存到a
t=0;
//t用来存放反序后的数
while(a>
{i=a%10;
//取出当前数的最后一位到i
t=t*10+i;
//把取出的i组装到t
a=a/10;
if(x==t)
//原来的5位整数等于反序后的数t
{printf("
%ld,"
x);
num++;
if(num%10==0)
//每行输出10个数
方法二:
/*求5位整数中所有回文*/
longintn,m,t=0;
for(n=10000;
n++)
if(hw(n)==1)
{printf("
%6ld"
n);
t++;
if(t%5==0)
/*每行输出5个数*/
inthw(longinta)
/*hw函数测试a是否是回文*/
longint
m,r=0;
m=a;
while(m)
r=r*10+m%10;
m/=10;
if(a==r)
return1