潭浩强C语言.docx

上传人:b****3 文档编号:10564117 上传时间:2023-05-26 格式:DOCX 页数:29 大小:30.03KB
下载 相关 举报
潭浩强C语言.docx_第1页
第1页 / 共29页
潭浩强C语言.docx_第2页
第2页 / 共29页
潭浩强C语言.docx_第3页
第3页 / 共29页
潭浩强C语言.docx_第4页
第4页 / 共29页
潭浩强C语言.docx_第5页
第5页 / 共29页
潭浩强C语言.docx_第6页
第6页 / 共29页
潭浩强C语言.docx_第7页
第7页 / 共29页
潭浩强C语言.docx_第8页
第8页 / 共29页
潭浩强C语言.docx_第9页
第9页 / 共29页
潭浩强C语言.docx_第10页
第10页 / 共29页
潭浩强C语言.docx_第11页
第11页 / 共29页
潭浩强C语言.docx_第12页
第12页 / 共29页
潭浩强C语言.docx_第13页
第13页 / 共29页
潭浩强C语言.docx_第14页
第14页 / 共29页
潭浩强C语言.docx_第15页
第15页 / 共29页
潭浩强C语言.docx_第16页
第16页 / 共29页
潭浩强C语言.docx_第17页
第17页 / 共29页
潭浩强C语言.docx_第18页
第18页 / 共29页
潭浩强C语言.docx_第19页
第19页 / 共29页
潭浩强C语言.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

潭浩强C语言.docx

《潭浩强C语言.docx》由会员分享,可在线阅读,更多相关《潭浩强C语言.docx(29页珍藏版)》请在冰点文库上搜索。

潭浩强C语言.docx

潭浩强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--)

if(a[i]

{

t=a[i-1];

a[i-1]=a[i];

a[i]=t;

}

for(i=0;i<10;i++)

printf(“%5d”,a[i]);

printf(“\n”);

}

7.5将一个数组中的值按逆序重新存放。

例如,原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。

程序如下:

#include

#defineN10

voidmain()

{

inti,b[N],temp;

for(i=0;i

scanf(“%d”,&a[i]);

printf(“初始数组为:

”);

for(i=0;i

printf(“%5d”,a[i]);

printf(“\n”);

for(i=0;i

{

temp=a[i];

a[i]=a[N-i-1];

a[N-i-1]=temp;

}

printf(“交换后的数组为:

”);

for(i=0;i

printf(“%5d”,a[i]);

printf(“\n”);

}

7.6输出以下杨辉三角形(要求输出10行)

1

11

121

1331

14641

15101051

程序如下:

#include

#defineN11

voidmain()

{

inti,j,a[N][N];

for(i=1;i

{

a[i][i]=1;

a[i][1]=1;

}

for(i=3;i

for(j=2;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i

{

for(j=1;j<=i;j++)

printf(“%6d”,a[i][j]);

printf(“\n”);

}

Printf(“\n”);

}

7.7输出“魔方阵”。

所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等。

例如,三阶魔方阵为:

816

357

492

要求输出1~n2的自然数构成的魔方阵。

程序如下:

#include

voidmain()

{

inta[16][16],i,j,k,p,m,n;

p=1;

while(p==1)

{

printf(“Entern(n=1~15)”);

scanf(“%d”,&n);

if((n!

=0)&&(n<=15)&&(n%2!

=0))

p=0;

}

for(i=1;i<=n;i++)/*初始化*/

for(j=1;j<=n;j++)

a[i][j]=0;

j=n/2+1;/*建立魔方阵*/

a[1][j]=1;

for(k=2;k<=n*n;k++)

{

i=i-1;

j=j+1;

if((i<1)&&(j>n))

{

i=i+2;

j=j-1;

}

else

{

if(i<1)

i=n;

if(j>n)

j=1;

}

if(a[i][j]==0)

a[i][j]=k;

else

{

i=i+2;

j=j-1;

a[i][j]=k;

}

}

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

printf(“%4d”,a[i][j]);

printf(“\n”);

}

}

7.8找出一个二维数组中的鞍点,即该位置上的元素在该行是大,该列最小。

也可能没有鞍点。

程序如下:

#include

#defineN5

voidmain()

{

inta[N][N],b[N],d[N][N],k=0,l=0;

inti,j;

for(i=0;i

for(j=0;j

scanf(“%d”,&d[i][j]);

for(i=0;i

for(j=0;j

for(i=0,k=0;i

for(j=0;j

{

if(a[i][j]>=a[i][j+1])

b[k]=a[i][j+1]=a[i][j];

else

b[k]=a[i][j+1];

}

for(j=0,l=0;j

for(i=0;i

{

if(a[i][j]<=a[i+1][j])

c[l]=a[i+1][j]=a[i][j];

else

c[l]=a[i+1][j];

}

for(i=0,k=0;i

for(j=0,l=0;j

if(d[i][j]-b[k]==0)

{

if(d[i][j]-c[l]==0)

printf(“d[%d][%d]=%d\n”,i,j,d[i][j]);

else

printf(“d[%d][%d]=%disnotandi\n”,i,j,d[i][j]);

}

}

7.9有15个数按由大到小的顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的第几个元素的值。

如果该数不在数组中,则输出“无此数”。

程序如下:

#include

voidmain()

{

inti,j,m,a[15]={1,4,9,13,21,34,55,89,144,233,377,570,671,703,812};

scanf(“%d”,&m);

printf(“原来的15个数为:

”);

for(i=0;i<15;i++)

printf(“%5d”,a[i]);

printf(“\n”);

i=7;

while(fabs(i-1)<8)

{

if(m

{

if(a[i]-m==0)

{

printf(“itisat(%d)\n”,i+1);

break;

}

i--;

}

elseif(m>a[7])

{

if(a[i]-m==0)

{

printf(“itisan(%d)\n”,i+1);

break;

}

i++;

}

else

printf(“8\n”);

}

if(fabs(i-7)-8==0)

printf(“Thereisnot\n”);

}

7.10有一篇文章,共有3行文字,每行有80个字符。

要求分别统计出其中英文大写字母,小写字母,数字,空格以及其它字符的个数。

程序如下:

#include

voidmain()

{

inti,j=0,k=0,l=0,m=0,n=0;

charstr0[301],str1[100],str2[100],str3[100];

gets(str1);

gets(str2);

gets(str3);

strcat(str0,str1);

strcat(str0,str2);

strcat(str0,str3);

for(i=0;str0[i]!

=’\0’;i++)

{

if(str0[i]>=65&&str0[i]<=90)

j++;

elseif(str0[i]>=97&&str0[i]<=122)

k++;

elseif(str0[i]>=48&&str0[i]<=57)

l++;

elseif(str0[i]==32)

m++;

else

n++;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2