潭浩强C语言.docx
- 文档编号:24345361
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:29
- 大小:30.03KB
潭浩强C语言.docx
《潭浩强C语言.docx》由会员分享,可在线阅读,更多相关《潭浩强C语言.docx(29页珍藏版)》请在冰豆网上搜索。
潭浩强C语言
第6章循环控制
6.1输入两个带有整数m和n,求其最大公约数和最小公倍数。
程序如下:
#include
voidmain()
{
longm,n,i=1,j,s;
scanf(“%ld,%ld”,&m,&n);
for(;i<=m&&i<=n;i++)
{
if(m%i==0&&n%i==0)
s=i;
}
if(m>=n)
j=m;
else
j=n;
for(;j%m==0&&j%n==0;j++);
printf(“s=%ld,j=%ld\n”,s,j);
}
6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数。
程序如下:
#include
voidmain()
{
charc;
inti=0,j=0,k=0,l=0;
while((c=getchar())!
=’\n’)
{
if(c>=65&&c<=90||c>=97&&c<=122)
i++;
elseif(c>=48&&c<=57)
j++;
elseif(c==32)
k++;
else
l++;
}
printf(“i=%d,j=%d,k=%d,l=%d”,i,j,k,l);
}
6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。
例如:
2+22+222++2222+22222(n=5),n由键盘输入。
#include
voidmain()
{
intn,sum=0,i=1,s=2;
scanf(“%d”,&n);
while(i<=n)
{
sum=sum+s;
s=s+2*pow(10,i);
i++;
}
printf(“sum=%d\n”,sum);
}
6.4求
,(即求1!
+2!
+…+20!
)。
程序如下:
#include
voidmain()
{
intn,i=1;
longsum=0,s=1;
scanf(“%d”,&n);
while(i<=n)
{
s=s*i;
sum=sum+s;
i++;
}
printf(“sum=%ld\n”,sum);
}
6.5求
。
#include
voidmain()
{
doublei=1,j=1,k=1,s1=0,s2=0,s3=0,sum;
for(;i<=100;i++)
s1=s1+i;
for(;j<=50;j++)
s2=s2+j*j;
for(;k<=10;k++)
s3=s3+1/k;
sum=s1+s2+s3;
printf(“sum=%f\n”,sum);
}
6.6打印出所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个水仙花数,因为153=1^3+5^3+3^3。
程序如下:
#include
voidmain()
{
intx=100,a,b,c;
while(x>=100&&x<=1000)
{
a=0.01*x;
b=10*(0.01*x-a);
c=x-100*a-10*b;
if(x==(pow(a,3)+pow(b,3)+pow(c,3)))
printf(“%5d”,x);
x++;
}
}
6.7一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如,6的因子为1,2,3而6=1+2+3,因此6是“完数”。
编程找出1000以内的所有完数,并按下面格式输出其因子:
6itsfactorsare1,2,3
程序如下:
(方法一:
)
#include
voidmain()
{
intm,i,j,s;
for(m=6;m<1000;m++)
{
s=1;
for(i=2;i if(m%i==0) s=s+i; if(m-s==0) { printf(“%5sitsfatorsare1”,m); for(j=2;j if(m%j==0) printf(“%d”,j); printf(“\n”); } } } (方法二: ) #include voidmain() { for(m=6;m<1000;m++) { s=m-1; for(i=2;i if(m%i==0) s=s-i; if(s==0) { printf(“%5ditsfactorsare1”,m); for(j=2;j if(m%j==0) printf(“%d”,j); printf(“\n”); } } } 6.8有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求出这个序列的前20项之和。 程序如下: #include voidmain() { inti=1,n; doublet,x=1,y=2,sum=0; scanf(“%ld”,&n); while(i<=n) { s=y/x; sum=sum+s; t=y; y=y+x; x=t; i++; } printf(“%f”,sum); } 6.9一个球从100m高度自由落下,每次落下地后反跳回原高度的一半,再落下,再反弹。 求它在第10次落下地时,共经过多少米? 第10次反弹多高? 程序如下: #include voidmain() { inti; floatsn=100,hn=sn/2; scanf(“%d”,&n); for(i=2;i<=10;i++) { sn=sn+2*hn;/*第n次落地时共经过的米数*/ hn=hn/2; } printf(“第10次落地时共经过%f米\n”,sn); printf(“第10次反弹%f米\n”,hn); } 6.10猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,就只剩下一个桃子了。 求第一天共摘多少个桃子? 程序如下: #include voidmain() { inti=1,sum=0; for(;i<=10;sum=2*sum+1,i++) printf(“sum=%d\n”,sum); } 6.11用迭代法求 。 求平方根的迭代公式如下: ,要求前后两次求出的x的差的绝对值小于10-5。 程序如下: #include voidmain() { floatx0,x1,a; scanf(“%f”,&a); x1=a/2; do { x0=x1; x1=(x0+a/x0)/2; }while(fabs(x0-x1)>=0.00001); printf(“%.3f\n”,x1); } 6.12用牛顿法求下面方程在1.5附近的根: 程序如下: #include voidmain() { doublex,y; x=1.5; do { y=2*x*x*x-4*x*x+3*x-6; x=x-y/(6*x*x-8*x+3); }while(y! =0); printf(“x=%.3f\n”,x); } 说明: 牛顿法是牛顿在17世纪提出的一种求解方程f(x)=0的方法,多数方程不存在求根公式,从而求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。 设r是f(x)=0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y=f(x)的切线L,L的方程为y=f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标x1=x0-f(x0)/f'(x0),称x1为r的一次近似值,过点(x1,f(x1))做曲线y=f(x)的切线,并求该切线与x轴的横坐标x2=x1-f(x1)/f'(x1)称x2为r的二次近似值,重复以上过程,得r的近似值序列{Xn},其中Xn+1=Xn-f(Xn)/f'(Xn),称为r的n+1次近似值。 上式称为牛顿迭代公式。 6.13用二分法求下面方程在(-10,10)之间的根: 程序如下: #include voidmain() { doublex1,x2,y1,y2; x1=-10; x2=10; do { y1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3); }while(y1! =0); do { y2=2*x2*x2*x2-4*x2*x2+3*x2-6; x2=x2-y2/(6*x2*x2-8*x2+3); }while(y2! =0); printf(“x1=%.3f,x2=%.3f\n”,x1,x2); } 说明: 一般地,对于函数f(x),如果存在实数c,当x=c是f(c)=0,那么把x=c叫做函数f(x)的零点。 解方程即要求f(x)的所有零点。 先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],现在假设f(a)<0,f(b)>0,a 如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,按上述方法在求该区间中点的函数值,这样就可以不断接近零点。 如果f[(a+b)/2]>0,同上。 通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。 6.14输出以下图案: * *** ***** ******* ***** *** * 程序如下: #include voidmain() { inti,j,k; for(i=0;i<=3;i++) { for(j=0;j<=2;j++) printf(“”); for(k=0;k<=2;k++) printf(“*”); printf(“\n”); } for(i=0;i<=2;i++) { for(j=0;j<=i;j++) printf(“”); for(k=0;k<=4-2*i;k++) printf(“*”); peinrd(“\n”); } } 6.15两个乒乓球队进行比赛,各出3人。 甲队为A,B,C3人,乙队为X,Y,Z3人。 已抽签决定比赛名单。 有人向队员打听比赛的名单,Ay产他不和X比,C说他不和X,Z比,请编程度找出3对赛手的名单。 程序如下: #include voidmain() { chari,j,k;/*i是a的对手,j是b的对手,k是c的对手*/ for(i=’x’;i<=’z’;i++) for(j=’x’;j<=’z’;j++) { if(i! =j) for(k=’x’;k<=’z’;k++) { if(i! =k&&j! =k) { if(i! =’x’&&k! =’x’&&k! =’z’) printf(“顺序为: \na-%c\tb-%c\tc-%c\n”,i,j,k); } } } } 第7章 7.1用筛选法求100之内的素数。 程序如下: (方法一: ) #include #include voidmain() { inti,j,a[100]; for(i=2;i<100;i++) { a[i]=i; for(j=2;j<=i;j++) { if(j if(a[i]%j==0) break; if(a[i]-j==0) printf(“%5d”,a[i]); } } printf(“\n”); } (方法二: ) #include #include voidmain() { staticinti,j,k,a[98]; for(i=2;i<100;i++) { a[i]=i; k=sqrt(i); for(j=2;j<=a[i];j++) if(j if(a[i]%j==0) break; if(j>=k+1) printf(“%5d”,a[i]); } Printf(“\n”); } 7.2用选择法对10个整数排序。 程序如下: #include voidmain() { inti,j,a[10],t; for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(a[i]>a[i+1]) { t=a[i+1]; a[i+1]=a[i]; a[i]=t; } for(i=0;i<10;i++) printf(“%5d”,a[i]); } 7.3求一个3*3的整型矩阵对角线元素之和。 程序如下: #include voidmain() { inti,j,a[3][3],s1=0,s2=0; printf(“请输入矩阵元素”); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(“%d”,&a[i][j]); for(i=0;i<3;i++) { s1=s1+a[i][i]; s2=s2+a[i][2-i]; } Printf(“s1=%d,s2=%d”,s1,s2); } 7.4已有一个忆排好序的数组,今输入一个数要求按原来的规律把它插入数组中。 程序如下: #include voidmain() { inti,j,t; inta[10]={1,7,8,17,23,24,59,62,101}; scanf(“%d”,&a[9]); for(i=9;i>0;i--)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 潭浩强 语言