《C语言程序设计》复习题库答案.doc
下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
2.下载的文档,不会出现我们的网址水印。
3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
24
积分
还剩页未读,继续阅读
关 键 词:C语言程序设计
答案.doc
C语言程序设计
C语言程序设计复习题库
C语言程序设计复习题库答案
C语言程序设计复习题
C 语言程序设计
C 语言程序设
C语言程序设计试题库
资源描述:
《C语言程序设计》复习题库
1、计算下面公式的值。T=1/1!+1/2!+1/3!+……+1/m! 当m=5时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)答案:1.717
main()
{
float T=0,m,n=1;
for(m=1;m<=5;m++)
{
n=n*m;
T=T+1.0/n;
}
printf("%.3f\n",T);
}
2、程序填空:用*号输出字母C的图案。
#include "stdio.h"
#include "conio.h"
main()
{
_____________
printf(" *\n");
_____________
_____________
getch();
}
#include#includemain()
{
printf(" ***\n");
printf("*\n");
printf("*\n");
printf(" ***\n");
}
3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。(注:所有变量用long数据类型定义!) 答案:1533459
long Zi_hanshu(long shu)
{
long ge,shi,bai,qian;
ge=shu%10;
shi=shu%100/10;
bai=shu%1000/100;
qian=shu/1000;
if((ge+shi+bai+qian)%15==0)
return 1;
else
return 0;
}
main()
{
long i,s=0;
for(i=1001;i<=9999;i+=2)
{
if(Zi_hanshu(i)==1)
s+=i;
}
printf("这样的数的总和是%d\n",s);
}
4、 /*下面程序的功能是:计算并输出700以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!)*/ 答案:6591
#include void main()
{
int total=0, mc=1, k=700;
int pm[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);
}
主函数中变量赋初值时mc=1改为mc=0
5、求x = 1+1/5+1/7+1/9+…的近似值,直到最后一项的绝对值小于10-5为止。
#includemain()
{
int i=5;
float n=1,x=0;
while(fabs(n)>=1e-5)
{
x+=n;
n=1.0/i;
i+=2;
}
printf("1+1/5+1/7+1/9+…=%f\n",x);
}
6、计算如下公式的A20值。 A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), ......(按四舍五入保留10位小数)。答案:0.6180339850
main()
{
double A1=1,A2;
int i;
for(i=1;i<20;i++)
{
A2=1.0/(A1+1);
A1=A2;
}
printf("A20=%.10f\n",A1);
}
7、求[10,1600]之间能被7整除的奇数之和。答案:90965
main()
{
int jishu,s=0;
for(jishu=11;jishu<=1600;jishu+=2)
if(jishu%7==0)
s+=jishu;
printf("%d\n",s);
}
8、函数mystrlen(char *s)的功能是求字符串s的长度。请填空。
Int mystrlen(char *s)
{int num=0;
while( ) {____;}
return ( );
}
9、[100,500]之间同时满足除以7余5,除以5余3,除以3余1的整数之和。答案:1042
main()
{
int shu,s=0;
for(shu=100;shu<=500;shu++)
if(shu%7==5&&shu%5==3&&shu%3==1)
s+=shu;
printf("%d\n",s);
}
10、求[100,999]之间所有的素数的个数。答案:143
int su_shu(int shu)
{
int i;
for(i=2;ivoid main()
{
long sum=0,a[30]={1,2,1};
int k,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];
printf(" %ld\n",sum);
}
for(j=1;j<=10;j++)改为for(j=0;j<10;j++)或者for(j=0;j<=9;j++)
因为前面赋值时数组下标是从0开始的
13、 /*求1到2000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/ 答案:61
#include int prime(int x)
{
int k;
for(k=2;kint prime(long n)
{
long k;
for(k=2;k<=n-1;k++)
if(____________) return 0;
return 1;
}
void main( )
{
long t,total=0,num=0;
int prime(long n);
for(t=1000;t>=2;t--)
{
if(____________)
{
total=total+t; num++;
}
if(num==10)break;
} 第一空:if(x%k==0)break;
第二空:if(prime(t)==1)n++;
printf("\n%ld",total);
}
18、 /*求1!+2!+3!+...+7!,7!表示7的阶乘。*/ 答案:5913
#include long jc( long x)
{
long k,fac=1;
for(k=1;________;k++)
fac *=k ;
________;
}
void main( )
{
long n,sum=0;
long jc(long x);
for(n=1;n<=7;n++)
________;
printf("\n%ld",sum);
}第一空:for(k=1;k<=x;k++)//循环x次;累乘即为x的阶乘
第二空:return fac;//返回阶乘值
第三空:sum=sum+jc(n);//阶乘值累加
19、求10000以内所有完数之和,"完数"是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完数。(注:所有变量用int数据类型定义!) 答案:8658 int PanDuan(int shu)
{
int he=0,i=1;
for(i=1;i#include #define N 30
void main()
{
long a[N];
int k;
clrscr();
a[0] = 1; a[1] = 2; a[2]=1;
for( k=3;k<=20;k++ )
a[k] = a[k-1]+a[k-2]+a[k-3];
printf(" %ld\n",a[k-1]);
} for(k=3;k<=20;k++)改为for(k=3;k<=24;k++)因为第25项为a[24]
循环出来后k=25,故输出时应输出a[k-1]
21、/*求区间[200,3000]中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。*/ 答案:87970
#include int hws(long n)
{
long x=n,t=0,k;
while(x>0)
{
k=x%10;
t = t*10 + k;
x=x/10;
}
if( ___________) return 1;
else return 0;
}
void main( )
{
long k,s=0;
int hws(long n);
for(k=200; k<=2000;k++)
if(___________)
s=s+k;
printf("\n%ld",s);
}第一空:if(t==n)return 1;//t为n的倒序数,判断t和n是否相等来判断是否为回文数
第二空:if(hws(k)==1);或者直接if(hws(k));因为if()里面非0为真,返回1时为真。此句判断是回文数则累加
22、/*下面的程序是求表达式的值:
s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+...+(1*2*3*...*n)/(3*5*7*...(2*n+1))请将程序补充完整,并给出当n=25时,程序的运行结果(按四舍五入保留10位小数)。*/答案:1.5707963267
#include double fun(int n)
{
double s=1.0, t=1.0;
int k;
double rtn=1.0;
for(k=1;k<=n; k++)
{
t = t*k;
s = s*(2*k+1);
_________________
}
return rtn;
}
void main()
{
double sum;
__________
printf("\n %.10lf",sum);
}第一空:rtn=rtn+t/s;
第二空:sum=fun(25);
23、已知:Sn=2/1+3/2+4/3+…+(n+1)/n, 求Sn不超过50的最大值(按四舍五入的方式精确到小数点后第三位)。答案:49.395 main()
{
float Sn=0,n=0;
while(Sn<=50)
{
n++;
Sn=Sn+(n+1)/n;
}
Sn=Sn-(n+1)/n;//跳出循环时Sn大于50,
//减去最后一次所加值即得符合要求的最大数
printf("%.3f\n",Sn);
}
24、计算Y=X/1!-X^3/3!+X^5/5!-X^7/7!+……前20项的值(已知:X=2)。要求:按四舍五入的方式精确到小数点后第二位。答案: 0.91 /*开始总是调试不出,后来才意识到是程序中涉及到的数据很大,均设为双精度型变量*/
#includedouble Mi(double m,int n)//求m的n次方函数
{
int i;
double x=1.0;
for(i=1;i<=n;i++)
x*=m;
return x;
}
double Jiecheng(int n)//求n的阶乘函数
{
int i;
double x=1.0;
for(i=1;i<=n;i++)
x*=i;
return x;
}
main()
{
int i;
double y=0,n;
for(i=1;i<=20;i++)//前20项
{
n=Mi(-1,i+1)*Mi(2,2*i-1)/Jiecheng(2*i-1);//各项大小
//Mi(-1,i+1)控制符号,Mi(2,2*i-1)为幂分子,Jiecheng(2*i-1)为阶乘分母
y+=n;//各项和
}
printf("%.2f\n",y);//四舍五入保留两位小数输出
}
25、若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。例:3^2+4^2=5^2,则5为弦数,求[131,200]之间最小的弦数。答案:135 #include//方法1
main()
{
int x,y,z;
for(z=131;z<=200;z++)//在[131,200]内查找
for(x=1;x<=200;x++)//循环给x赋值
for(y=1;y<=200;y++)//循环给y赋值
if(z*z==x*x+y*y)goto End;//只求满足条件的最小数,故一旦满足条件,则退出所有循环
End://退出循环
printf("%d\n",z);//输出满足条件的最小数
}
//方法2
/*
main()
{
int x,y,z,shu;
for(z=131;z<=200;z++)//在[131,200]内查找
for(x=1;x<=200;x++)//循环给x赋值
for(y=1;y<=200;y++)//循环给y赋值
if(z*z==x*x+y*y)
{
shu=z;//保存满足条件的最小的数
x=201;
y=201;
z=201;//通过赋值试循环结束
}//只求满足条件的最小数,故一旦满足条件,则退出所有循环
printf("%d\n",shu);//输出满足条件的最小数
}
*/
26、已知X,Y,Z为三个正整数,且X^2+Y^2+Z^2=25^2,求X+Y+Z的最大值。答案:43 #includemain()
{
int x,y,z,max=0;
for(x=1;x<=25;x++)
for(y=1;y<=25;y++)
for(z=1;z<=25;z++)//循环对x、y、z赋值
if(x*x+y*y+z*z==25*25)//判断是否满足条件
if(x+y+z>max)max=x+y+z;//取满足条件的所有各数和的最大值
printf("%d\n",max);//输出满足条件的所有各数和的最大值
}
27、猴吃桃:有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。以后每天都是吃尚存桃子的一半零一个。到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。问小猴子第一天共摘下了多少个桃子。答案:1534 /*纯粹是个数学题,计算思路出来了,程度也就出来了*/
#includemain()
{
int i,n=1;//n为剩余桃子个数,第十天为1个
for(i=1;i<=9;i++)//小猴子吃了9天的桃子
{
n=2*(n+1);//前一天剩余的桃子数是今天剩余桃子数加1的两倍
}
printf("%d\n",n);//输出第一天剩余的桃子数,即第一天小猴子摘下的桃子数
}
28、求[1,50]之间的所有整数能构成直角三角形的三边的组数。例如:3*3+4*4=5*5,它们构成直角三角形,所以{3,4,5}作为一组,但{4,3,5}视为跟{3,4,5}相同的一组。答案:20 #includemain()
{
int a,b,c;//定义三角形的三条边长度为整型变量
int n=0;//定义组数,赋初值0初始化
for(a=1;a<=50;a++)//选择第一边
for(b=1;b<=50;b++)//选择第二边
for(c=1;c<=50;c++)//选择第三边
//此处不考虑所选择的三条边是否能构成三角形,因为不能构成三角形时
//必不满足直角三角形的条件,对程序结果无影响
if(a*a+b*b==c*c)n++;//判断是否满足构成直角三角形的条件,满足则n加1
n=n/2;//a*a+b*b==c*c等式中,最长边c确定后补可改变,而a、b可互换值使等式成立,
//此时组别均重复累加了一次,故最终需除以2(类比数学中排列组合例子)
printf("%d\n",n);//输出满足条件的组数
}
29、15元钱换成1元、2元、5元的票面,问有多少种不同的兑换方法?输出所有的兑换方法。 答案: 18种#includemain()
{
int i=1,j=1,k=1,n=0;
printf("兑换方法有:\n");
printf("1元/张 2元/张 5元/张\n");
for(i=0;i<=3;i++)//5元的最多3账
for(j=0;j<=7;j++)//2元的最多7张
for(k=0;k<=15;k++)//1元的最多15张
if(5*i+2*j+1*k==15)
{
printf("%4d %4d %4d\n",k,j,i);
n++;//如果满足条件,n加1
}
printf("共有%d种兑换方法\n",n);//输出可兑换方法种数
}
30、用迭代法求x等于a开平方的正数值。
迭代公式为:xn+1=1/(2*(xn+a/xn)),要求直到前后两次求出的x的差的绝对值小于10-5为止。A的值从键盘输入。#include#includemain()
{
float x,a,m;
scanf("%f",&a);
x=a;
do
{
m=x;
x=1.0/(2*(x+a/x));
printf("%f\n",x);
}
while(fabs(x-m)>=1e-5);
printf("%f\n",x);
}
31、求最大的水仙花数,所谓水仙花数,指的是一个三位数,其各个数字的立方之和等于该数。 答案:407 #includeint Shui(int x)//判断水仙花数子函数
{
int ge,shi,bai;
ge=x%10;
shi=x%100/10;
bai=x/100;//分离个、十、百位
if(x==ge*ge*ge+shi*shi*shi+bai*bai*bai)//判读是否是水仙花数
return 1;//是则返回1
else
return 0;//不是则返回0
}
main()
{
int i;
for(i=999;i>=100;i--)//三位数中找最大的水仙花数,从大到小找
if(Shui(i))//判断是否是水仙花数,也可以写成if(Shui(i)==1),因if里面非0为真,可不写==1
{
printf("最大的水仙花数为%d\n",i);
break;//找到最大水仙花数,打印并跳出循环
}
}
32、一球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?
答案: 299.609375 0.097656 #includemain()
{
float s=0,x=100;//x为落下高度,s为小球经过的总路程
int i;
for(i=1;i<=10;i++)
{
//反弹和下落设为一个来回,两者高度相等
s=s+2*x;//小球一个来回的距离为2*x,故总路程为每次反弹的高度两倍的总和
x/=2;//小球每次反弹的高度是上次的一半
}
s-=100;//由于第一次的100米只有落下没有反弹,故多加了100米,需减去
printf("小球共进过 %f 米\n",s);
printf("第10次反弹 %f 米\n",x);
}
33、编写程序,完成如下功能,输入8个float类型的实数,分别求最大值和最小值,保留三位小数输出最大值和最小值。#includemain()
{
int i;
float x;//定义变量用于存放输入的float型数
float max,min;//定义两个变量存放最大数和最小数
printf("请输入8个float型数:\n");
scanf("%f",&x);//输入第一个数
max=min=x;//给最大数和最小数赋初值
for(i=1;i<8;i++)//还要输入7个数
{
scanf("%f",&x);
if(maxx)min=x;//找最小数
}
printf("The max is: %.3f\n",max);
printf("The min is: %.3f\n",min);
}
/*也可以用数组的方式存放变量
*/
34、编写程序输出如下字符图形:
@ @ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @
…
@ @
@ main()
{
int i,j;
for(i=1;i<=11;i++)//一共输出11行,i表示第i行
{
for(j=1;j<=12-i;j++)//第i行有12-i个"@"
printf("@");
printf("\n");
}
35、计算:s=f(-30)+f(-29)+......+f(-1)+f(0)+f(1)+......+f(30)的值。其中函数定义如下:f(x)=(x+1)/(x-2) 如果 x>1; f(x)=0 如果 x=0 或 x=2 ;f(x)=(x-1)/(x-2) 如果 x<0。(按四舍五入保留6位小数) 答案:65.223018 #include} /*总觉得题目给出的式子有问题,*/
#includefloat f(int x)
{
if(x<0)
return (float)(x-1)/(x-2);
else if(x==0||x==2)
return 0.0;
else
return (float)(x+1)/(x-2);
}
main()
{
float s=0;
int i;
for(i=-30;i<=30;i++)
s+=f(i);
printf("%.6f\n",s);
}
36、编写程序输出如下字符图形(最后一行19颗星):
* * *
* * * * *
* * * * * * *
…
* * * … * * * * #includemain()
{
int i,n;
for(n=1;n<=9;n++)//一共输出9行,n为行数
{
for(i=1;i<=9-n;i++)//第n行前面有9-n个空格
printf(" ");
for(i=1;i<=2*n+1;i++)//第n行一共有2*n+1个“*”
printf("*");
printf("\n");//换行
}
}
37、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
38、计算下面公式的值。 T=1+1/(2*3)+1/(3*4)+……+1/(m*(m+1)),当m=50时的结果(按四舍五入保留6位小数)。(注:所有变量用double数据类型定义!) 答案:1.480392 #includemain()
{
double T=0,m;
for(m=2;m<=50;m++)//从第二项开始
T=T+1/(m*(m+1));//累加
printf("%.6f\n",T+1);//结果加上第一项1输出
}
39、程序填空:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:利用while语句,条件为输入的字符不为\n.
#include "stdio.h"
#include "conio.h"
main()
{
char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while((c=getchar())!=\n)
{
if(c>=a&&c<=z||c>=A&&c<=Z)
_________
else if(c== )
_________
else if(c>=0&&c<=9)
_________
else
_________
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, space,digit,others);
getch();
}第一空:letters++;
第二空:space++;
第三空:digit++;
第四空:others++;
40、打印出如下图案(菱形)
*
***
*****
*******
*****
***
* #includemain()
{
printf(" *\n");
printf(" ***\n");
printf(" *****\n");
printf("*******\n");
printf(" *****\n");
printf(" ***\n");
printf(" *\n");
}
41、求出[2,478]以内的:
(1)最大的素数。 *467
(2)素数数目。 *91
(3)所有素数之和。 *19580 #includeint Sushu(int x)//判断素数子函数
{
int i;
for(i=2;ifloat a(int i)//a值函数,参数i为下标
{
if(i%2!=0)
return i;//如果是奇数,返回i
else
return i/2;//如果是偶数,返回i/2
}
float b(int i)//b值函数,参数i为下标
{
if(i%2!=0)
return i*i;//如果是奇数,返回平方
else
return i*i*i;//如果是偶数,返回立方
}
float Jishu(int N)//求级数函数
{
int i,s=0;
for(i=1;i<=N;i++)
s=s+(a(i)-b(i))*(a(i)-b(i));//a-b的平方累加
return s;//返回累加后的结果
}
main()
{
float Y;
Y=Jishu(10);
printf("(1)N=10时,Y=%f\n",Y);//输出N=10时Y的值
Y=Jishu(15);
printf("(2)N=15时,Y=%f\n",Y);//输出N=15时Y的值
//也可以直接输出
//printf("(1)N=10时,Y=%f\n",Jishu(10););
//printf("(2)N=15时,Y=%f\n",Jishu(15););
}
43、已知:, 其中:X = 0.25,n = 1,2,┅,求:
(1) Y值(精确到小数点后第5位) *1.28767
(2) 与(1)匹配的最小的n *7 #include(3) float f(float m,int n)//浮点型数m的n次方函数
(4) {
(5) float s=1;
(6) while(n--)//循环n次
(7) s*=m;//累乘
(8) return s;
(9) }
(10) main()
(11) {
(12) float y=0,X=0.25;
(13) int n=0;
(14) while((f(X,n)/n)>0)
(15) {
(16) n++;
(17) y=y+f(X,n)/n;
(18) }
(19) printf("%.5f\n",y+1);
(20) }
44、以下程序输入三个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,交换后输出a、b、c的值。例如:读入后,a=10、b=20、c=30;交换后,a=20、b=30、c=10。请填空。
#include<stdio.h>
main()
{int a,b,c,t;
printf("Enter a,b,c:");
scanf("%d%d%d", ___);
___;a=b;___;___;
printf("a=%d b=%d c=%d\n",a,b,c);
}第一空:scanf("%d%d%d",&a,&b,&c);
第二空:t=a;a=b;b=c;c=t;
45.下面fun函数的功能是从a数组中查找值为y的元素;若找到,返回该元素的下标值,若不存在值为y的元素,返回0;数列放在a数组的a[1]到a[n]中,a[0]元素用来作为临时存储单元。请填空。
fun(int a[],int y,int n)
{int k=0;
a[0]=y;k=n;
while( ) k--;
return( );
}第一空:while(a[k]!=a[0])k--;//如果不等于a[0]即y则一直循环查询下去,直到k=0,此时返回0;一旦a[k]与a[0]相等,结束while循环,返回下标k
第二空:return(k);
46、 /*下列程序的功能是求出二阶Fibonacci数列前10之和,1,1,2,3,5,8…。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!3是第四项,5是第五项。)*/ 答案:143
#include void main()
{
long sum=0,a[30]={1,1,2};
int k;
for( k=2;k<10;k++ )
a[k] = a[k-1]+a[k-2];
for( k=1;k<=10;k++ )
sum += a[k];
printf(" %ld\n",sum);
} for(k=1;k<=10;k++)改为for(k=0;k<10;k++)或者for(k=0;k<=9;k++)
因为前面数组的下标是从0开始的
47、20,160]之间的所有偶数的平方和。答案:694380 #includemain()
{
int x,s=0;
for(x=20;x<=160;x+=2)//[20,160]之间的偶数
s=s+x*x;//平方和
printf("%d\n",s);
}
48、求[10,2000]之间能被2或3或5整除的数之和。答案:67795 #includemain()
{
int x,s=0;
for(x=10;x<=2000;x++)
{
if((x%2==0)||(x%3==0)||(x%5==0))
s+=x;
}
printf("%d\n",s);
}
49、求800以内的最大的20个素数之和。答案:14510 #includeint Sushu(int x)//判断素数子函数
{
int i;
for(i=2;i0;x--)//从大到小查找
{
if(Sushu(x))//如果是素数
{
s+=x;//累加
num++;//素数个数加1
}
if(num==20)break;//素数个数达到20个,则退出循环
}
printf("%d\n",s);//打印最大的20个素数和
}
50、求当n=60时下式的和:s=1+1/(1+2)+1/(1+2+3)+......+1/(1+2+3+......+n)(按四舍五入保留6位小数)。答案:1.967214 #includefloat f(int n)
{
int i,x=0;
for(i=1;i<=n;i++)
x+=i;//第n项的分母
return 1.0/x;//返回第n项的值
}
main()
{
int n;
float s=0;
for(n=1;n<=60;n++)
s+=f(n);
printf("%.6f\n",s);
}
51、编写程序:输入x的值,按照下列公式计算cos(x)
cos(x)=1-x2/2!+ x4/4!- x6/6!+... 精确到10-5。#include#includedouble Mi(double m,int n)//求m的n次方函数
{
int i;
double x=1.0;
for(i=1;i<=n;i++)
x*=m;
return x;
}
double Jiecheng(int n)//求n的阶乘函数
{
int i;
double x=1.0;
for(i=1;i<=n;i++)
x*=i;
return x;
}
main()
{
int i=0;
double s=0,f;
float x;
scanf("%f",&x);//输入参数x
do
{
f=s;//存放前一次的s值
s=s+Mi(-1.0,i/2)*Mi(x,i)/Jiecheng(i);//更新s的值
i+=2;//根据公式指数差2
}while(fabs(s-f)>=1e-5);//直到相邻两个值的差的绝对值精度达到10^-5,则退出循环
printf("cos(x)=%f\n",s);//输出cos(x)的近似结果
}
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:《C语言程序设计》复习题库答案.doc
链接地址:https://www.renrendoc.com/p-56956355.html