C语言 文档 3.docx

上传人:b****7 文档编号:24022960 上传时间:2023-05-23 格式:DOCX 页数:23 大小:25.49KB
下载 相关 举报
C语言 文档 3.docx_第1页
第1页 / 共23页
C语言 文档 3.docx_第2页
第2页 / 共23页
C语言 文档 3.docx_第3页
第3页 / 共23页
C语言 文档 3.docx_第4页
第4页 / 共23页
C语言 文档 3.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C语言 文档 3.docx

《C语言 文档 3.docx》由会员分享,可在线阅读,更多相关《C语言 文档 3.docx(23页珍藏版)》请在冰豆网上搜索。

C语言 文档 3.docx

C语言文档3

二、循环结构程序设计部分

1. 求s=1+2+3+……+100,并输出结果,要求分别用while,do……while,for三种语句形式实现。

#include

voidmain()

{

inti=1,s=0;

while(i<=100)

{s=s+i;

i++;

}

printf("s=1+2+3+...+100的和是%d\n",s);

 

#include

voidmain()

{

for(inti=1,s=0;i<=100;i++)

s=s+i;

printf("s=1+2+3+...+100的和是%d\n",s);

}

#include

voidmain()

{

inti=1,s=0;

do

{s=s+i;i++;}

while(i<=100);

printf("s=1+2+3+...+100的和是%d\n",s);

}

2. 从键盘接收一个自然数n,计算n!

并输出结果,要求分别用while,do……while,for三种语句形式实现。

#include

voidmain()

{intn;

longs=1;

printf("请输入一个自然数:

");

scanf("%d",&n);

for(inti=1;i<=n;i++)s=s*i;

printf("%d!

=%ld\n",n,s);

}

3. 统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。

#include

voidmain()

{intx=0,y=0,k=0;

floatnum;

for(inti=1;i<51;i++)

{scanf("%f",&num);

if(num>0)x=x+1;

else

if(num<0)y=y+1;

elsek=k+1;

}

printf("正数有%d个,负数有%d个,0有%d个\n",x,y,k);

}

4. 输出码值为32~127的ASCII码码值、字符对照表。

如下图所示

#include

voidmain()

{intx=0;

for(inti=32;i<=127;i++)

{if(i<100)printf("%d%-8c",i,i);

elseprintf("%d%-7c",i,i);

x=x+1;

if(x%8==0)printf("\n");

}

}

5. 求输入的十个整数中正数的个数及其平均值。

#include

voidmain()

{intnum,s=0;

floataverage=0;

printf("请输入10个整数:

");

for(inti=1;i<=10;i++)

{scanf("%d",&num);

s=s+num;

}

printf("平均数是:

%f\n",average/(i-1));

}

6. 求1~100之间的所有素数

#include

#include

voidmain()

{

intm=1,i,j=0;

doublek;

printf("1~100之间的素数有:

\n");

while(m<=100)

{

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>k)

{

printf("%10d",m);

j++;

if(j%5==0)printf("\n");

}

m++;

}

}

7. 将用户输入的小写字母转换成大写字母,直到输入非小写字母字符。

#include

#include

voidmain()

{

charc;

while

(1)

{c=getchar();

if(c>='a'&&c<='y')

{c=c-32;

putchar(c);

putchar('\n');

}

elsebreak;

}

}

8. 验证哥德巴赫猜想:

任一充分大的偶数,可以用两个素数之和表示。

例如:

4=2+2,6=3+3,98=19+79

#include

#include

voidmain()

{

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

for(i=4;i<=1000;i+=2)/*i判断从4到1000之间的整数*/

{

for(n=2;n

{

for(j=2,k=1;j<=(int)sqrt(n);j++)/*判断n是否素数*/

{if(n%j==0)k=0;}

if(k)/*n是素数继续判断i-n是否素数*/

for(j=2,m=1;j<=(int)sqrt(i-n);j++)/*判断i-n是否素数*/

{if((i-n)%j==0)m=0;}

if(m)

{

printf("%d=%d+%d",i,n,i-n);

l++;

if(l%5==0)

printf("\n");

break;

}

}

if(n==i)printf("error%d\n",i);/*n等于i,i不遵循哥德巴赫猜想*/

}

}

9. 

利用下面的公式求π的近似值,要求累加到最后一项小于10-6为止。

 

#include

#include

voidmain()

{ints;

floatn,t,pi;

t=1;pi=0;n=1.0;s=1;

while(fabs(t)>10e-6)

{pi=pi+t;

n=n+2;

s=-s;

t=s/n;

}

pi=pi*4;

printf("pi=%10.6f\n",pi);

}

10.输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。

#include

#defineN8

voidmain()

{

intn,num1,num2;

printf("请输入要转换的十进制数:

");

scanf("%d",&n);

num1=num2=n;

/*以下程序是将10进制数转换为8进制数*/

intarr[N],i;

for(i=0;i

{

arr[i]=num1%8;

num1=num1/8;

if(num1==0)

break;

}

printf("转换为8进制数为:

");

for(;i>=0;i--)

printf("%d",arr[i]);

printf("\n");

/*以下程序是将10进制数转换为16进制数*/

intarr2[N],j;

for(j=0;j

{

arr2[j]=num2%16;

num2=num2/16;

if(num2==0)

break;

}

printf("转换为16进制数为:

");

for(;j>=0;j--)

switch(arr2[j])

{

case10:

printf("A");break;

case11:

printf("B");break;

case12:

printf("C");break;

case13:

printf("D");break;

case14:

printf("E");break;

case15:

printf("F");break;

default:

printf("%d",arr2[j]);

}

printf("\n");

}

 

1. 一个数如恰好等于它的因子之和,这个数就称为“完数”。

编程序找出1000以内的所有完数,并输出其因子(6是一个"完数",它的因子是1,2,3)

#include

#include

voidmain()

{

for(inti=1;i<=1000;i++)

{

for(intj=1,sum=0;j

if(i%j==0)sum=sum+j;

if(sum==i)

{

printf("%ditsfactorsare1",i);

for(j=2;j

{if(i%j==0)

printf(",%d",j);}

printf("\n");

}

}

}

2. 输入一个正整数,输出它的所有质数因子(如180的质数因子为2、2、3、3、5)。

#include

intmain()

{

intnum,y,i,j;

scanf("%d",&num);

printf("%d=",num);

for(i=2;i<=num;i++)

{

while(num%i==0)

{

printf("%d*",i);

num=num/i;

}

}

printf("\n");

}

3. 求出1至100000之间的素数(只能被1和自身整除的数)以每行10个数输出在屏幕上。

#include

#include

voidmain()

{inti,k,n,a=0;

for(i=1;i<=100000;i=i+2)

{k=sqrt(i);

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

if(i%n==0)break;

if(n>=k+1)

{printf("%d",i);

a++;}

if(a%10==0)printf("\n");}

printf("\n");

}

4. 试编程找出1至99的所有,,所谓同构数是指它出现在它的平方数的右边。

如6的平方数36故6是同构数。

#include

voidmain()

{

ints;

for(inti=1;i<100;i++)

{s=i*i;

if(i==s%(i<10?

10:

100))printf("%6d",i);

elseif(i==s%(i<10?

10:

100))printf("%6d",i);

}

}

5. 求这样一个三位数,该三位数等于其每位数字的阶乘之和。

#include

voidmain()

{intn,a,b,x,y,s;

for(n=101;n<1000;n++)

{s=0;

for(a=1;a<101;a*=10)

{y=1;

b=(n/a)%10;

if(b==0)y=0;

for(x=1;x<=b;x++)y*=x;

s+=y;

}

if(n==s)printf("%d",n);

}

}

6. 编写程序。

用面值一元的一张人民币兑换1分、2分和5分的硬币共有多少种换法?

打印出每种换法。

见第26题

7. 编程求下列算式:

(要求最后一项小于10-3)SUM=1+1/2+1/3+1/4+……

#include

#include

voidmain()

{floats,n;

s=1;n=0;

while(fabs(1/s)>10e-3)

{n=n+1/s;

s=s+1;

}

printf("%f\n",n);

}

8. 利用牛顿迭代法求方程

的根。

main()

{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);

}

牛顿迭代法(Newton'smethod)又称为牛顿-拉夫逊方法(Newton-Raphsonmethod),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。

方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x)=0的根。

牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程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的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。

把f(x)在x0点附近展开成泰勒级数f(x)=f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2!

+…取其线性部分,作为非线性方程f(x)=0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=f(x)=0设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0)这样,得到牛顿法的一个迭代序列:

x(n+1)=x(n)-f(x(n))/f'(x(n))。

#include

#include

voidmain()

{floatx1,x0,f,f1;

x1=1.5;

do{x0=x1;

f=((2*x0-4)*x0+3)*x0-6;

f1=(6*x0-8)*x0+3;

x1=x0-f/f1;

}while(fabs(x1-x0)>=1e-5);

printf("%5.2f\n",x1);

}

9. 利用二分法求方程

的根。

#include

#include

voidmain()

{floatx0,x1,x2,fx0,fx1,fx2;

do{printf("enterx1&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("x=%6.2f\n",x0);

}

10.采用Euclid(欧几里德)算法来求最大公因子,其算法是:

(1)输入两个正整数m和n。

(2)用m除以n,余数为r,如果r等于0,则n是最大公因子,算法结束,否则(3)。

(3)把n赋给m,把r赋给n,转

(2)。

#include

voidmain()

{intn,m,temp,p,r;

printf("请输入两个数:

");

scanf("%d,%d",&m,&n);

if(n>m){temp=n;n=m;m=temp;}

p=m*n;

while(n!

=0)

{r=m%n;

m=n;

n=r;

}

printf("最大公约数是%d\n",m);

printf("最小公倍数是%d\n",p/m);

}

 

1. 用循环结构程序设计方法,输出一个九九乘法表

#include

voidmain()

{inti,j;

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

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

printf("%d*%d=%2d",i,j,i*j);

printf("\n");

}

}

2. 求(即求1!

+2!

+3!

+…+11!

+12!

)。

#include

voidmain()

{inta,b,c,s=0;

for(a=1;a<13;a++)

{c=1;

for(b=1;b<=a;b++)c*=b;

s+=c;

}

printf("%d\n",s);

}

3.   

4. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方之和等于该数本身。

#include

voidmain()

{inta,b,c;

for(a=1;a<=9;a++)

for(b=0;b<=9;b++)

for(c=0;c<=9;c++)

if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)

printf("%d%d%d\n",a,b,c);

}

5. 魔方阵

8

1

6

3

5

7

4

9

2

编程实现魔方阵。

即n2(n为奇数)个自然数填入方阵中,使它的每行、每列及对对角线的数之和为

n=3时,则为:

(数组7.7太复杂下次补上)

6. 计算用户输入的两正整数之间的所有整数中0,1,2,…,9数码的个数。

例如,101~104之间总共包含四个整数101,102,103,104,其中0的个数为4,1的个数为5,2、3、4的个数都为1,其余数码没出现都为0。

inputtwointeger:

15003000↙

0–4031–9002–14003–401

4  –4005–5006–5007–500

8–5009–500

#include

main()

{inta,b,c,x,y,n0=0,n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0,n9=0;

printf("inputtwointeger:

");

scanf("%d%d",&a,&b);

for(c=a;c<=b;c++)

{for(x=1;c/x>0;x*=10)

{y=(c/x)%10;

switch(y)

{case9:

n9++;break;

case8:

n8++;break;

case7:

n7++;break;

case6:

n6++;break;

case5:

n5++;break;

case4:

n4++;break;

case3:

n3++;break;

case2:

n2++;break;

case1:

n1++;break;

case0:

n0++;break;

}

}

}

printf

("0-%d\t1-%d\t2-%d\t3-%d\n4-%d\t5-%d\t6-%d\t7-%d\n8-%d\t9-%d\n",n0,n1,n2,n3,

n4,n5,n6,n7,n8,n9);

}

7.    换零钱:

把一元人民币换成现行的角硬币,共有多少种兑换方法?

#include

voidmain()

{inta,b,c,n=0;

for(a=0;a<21;a++)

{for(b=0;b<51;b++)

{for(c=0;c<101;c++)

if(5*a+2*b+c==100)

{printf("%d*5+%d*2+%d=100\t",a,b,c);n++;if(n%3==0)printf("\n");

}

}

}

}

8.    递增的牛群:

若一头小母牛,从第4个年头开始每年生育一头母牛,按照此规律,第n年时有多少头母牛?

请设计求解该问题的c语言程序。

#include

#include

main()

{doublef=0,con=2;

intn=0,a=0,b=0;

printf("请输入年数:

");

scanf("%d",&n);

a=n%4;

b=(n-a)/4;

f=pow(con,(double)b);

printf("最终有%d头母牛\n",(int)f);

}

9.    准备客票:

某铁路线上共有10个车站,问需要准备几种车票?

设计求解该问题的c语言程序。

提示:

这个是累加的问题,有10个站即需要9+8+7+……+1种车票(这里从a站到b

站和从b站到a站用同样的票,如果去和来用不同的车票则总和乘以2就好)。

10.     板砖问题:

有36块砖,由36人搬:

一男搬4块,一女搬3块,两个小孩抬一块。

要求一次全部搬完。

问男、女、小孩人数个若干?

#include

voidmain()

{intm,w,c,t;

for(m=1;m<=9;m++)

{for(w=1;w<=33;w++)

{c=36-w-m;

if(c%2==0&&4*m+3*w+c/2==36)

printf("m=%dw=%dc=%d",m,w,c);

}

}

}

11.  爱因斯坦的阶梯问题:

设有一个阶梯,若每步跨3阶,最后余2阶;若每步跨5阶,最后余4阶;若每步跨6阶,最后余5阶;若每步跨7阶,正好到达。

问共有多少级阶梯。

#include

voidmain()

{inti;

for(i=7;;i++)

if(i%3==2&&i%5==4&&i%6==5&&i%7==0)

{printf("%d\n",i);break;}

}

12.  编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:

“Right!

”,否则提示:

“Wrong!

”,并告诉人所猜的数是大(Toohigh)还是小(Toolow),然后结束游戏。

要求每次运行程序时机器所“想”的数不能都是一样的。

(提示:

随机函数srand为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的“随机化”通过键入随机数种子

产生[0,100]之间的随机数

scanf("%u",&seed);

srand(seed);

magic=rand()%100+1;

#include

#include

voidmain()

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

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1