循环结构作业2_第1页
循环结构作业2_第2页
循环结构作业2_第3页
循环结构作业2_第4页
循环结构作业2_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、循环结构作业2:编程练习 注:请将调试成功的程序代码(或截图)拷贝到后面的作业模板中,打印出待提交,同时请保存好作业的电子版。1.编写程序,要求找到用户输入的一串数中的最大值。程序需要提示用户一个一个输入数。当用户输入0或负数时, 程序必须显示输入的最大非负数: Enter a number : 60 Enter a number : 38.3 Enter a number : 4.89 Enter a number : 100.62 Enter a number : 75.2295 Enter a number : 0 The largest number entered was 100.6

2、2 注意,输入的数不要求一定是整数。(While)#include<stdio.h>int main()float a=1,b=0;while(a>0)printf("Enter a number :");scanf("%f",&a);if(a>b)b=a;printf("The largest number entered was :%fn",b);2. 编写程序,要求用户输入两个整数然后计算并显示这两个整数的最大公约数(GCD): Enter two integers: 12 28 Greatest

3、 common divisor :4 提示:求最大公约数的经典算法是Euclid算法,方法如下:分别让变量m 和n存储两个数的值,始终保证m最后存储的是两个数中较大的值;用m除以n;把除数保存在m中,而把余数保存在n中;如果n为0,那么停止操作,m中的值是GCD;否则,从m除以n开始重复上述除法过程。 (While)#include<stdio.h>int main()int m,n,t;printf("Enter two integers :");scanf("%d%d",&m,&n);if (n>m)t=m;m=n;

4、n=t;while(n!=0)t=m; m=n; n=t%n; if (n>m) t=m;m=n;n=t;printf("The largest number entered was :%d n",m);3. 编写程序(While),要求用户输入一个分数,然后将其约分为最简分式: Enter a fraction:6/12 In lowest terms:1/2#include<stdio.h>int main()int m,n,t,a,b;printf("Enter a fraction :");scanf("%d/%d&q

5、uot;,&m,&n);a=m;b=n;if (n>m)t=m;m=n;n=t;while(n!=0)t=m; m=n; n=t%n; if (n>m) t=m;m=n;n=t;a=a/m;b=b/m;printf("The largest number entered was :%d/%d n",a,b); 4. 编写程序可,实现1位或者多位数的反向输出。例如输入12345,则输出54321。提示:使用do_while循环重复执行求余和求商操作,让求出的商重置该数,直到值达到0为止。而余数r则通过算式n=n*10+r重复累加到新数n上。#inc

6、lude<stdio.h>int main() int a; int b = 0; scanf("%d",&a); do b = b * 10 +(a % 10); a = a / 10; while( a ); printf("%dn",b);5. 编写程序,将输入的一个长整型数x中每一位上为偶数的数依次取出,构成一个新数返回。高位仍在高位,低位仍在低位。例如:程序运行时输入:124578902,程序输出:24802. 若输入:1357,输出:0#include<stdio.h>int main() int a,c=0,

7、i=0; int b = 0; scanf("%d",&a); do b=a%10; a =a/10; if(b%2=0) if(i=0) c=b;i+; else c=b*i*10+c; i+; while( a ); printf("%dn",c); 6. 编写程序,要求显示出单月的日历。用户说明这个月的天数和本月起始日是星期几: Enter number of days in month:31 Enter starting day of the week(1=Sun, 7=Sat):3 SunMonTueWedThuFriSat 12345

8、 6789101112 13141516171819 20212223242526 2728293031提示:程序不像看上去那么难。最重要的内容是for语句使用变量i从1计数到n,n是此月的天数,显示出i的每个值。在循环中,用if语句判定i是否是一个星期的最后一天,如果是,就显示一个换行符。 #include <stdio.h> int main() int a=0,b=0,c=0; int i; printf("Enter number of days in month:"); scanf("%d",&a); printf(&quo

9、t;Enter starting day of the week(1=Sun, 7=Sat):"); scanf("%d",&b); c=a+b-1; printf("星期日t星期一t星期二t星期三t星期四t星期五t星期六n"); for(i=1;i<=c;i+) if(i<b) printf("t"); else if(i-1)%7=0) printf("n"); printf("%dt",i-b+1); printf("n"); return

10、 0; 7. 编写程序(for),用符号(如*)输出一个钻石形状。运行程序输入n值,则钻石型的上三角就为n行,下三角为n-1行。如下图为n=6的图形。#include <stdio.h> void main()  int n; int i,j,k,z,m=1; printf("enter  n:n"); scanf("%d",&n); printf("n=%dn",n); z=

11、n; for(i=1;i<=n;i+)    printf(" "); for(j=1;j<=m;j+)     printf("*"); z-;             m=m+2;        

12、0;  printf("n");  m=m-2;                for(i=1;i<=n-1;i+)       m=m-2;           for(k=0;k<=z

13、;k+)    printf(" ");  for(j=m;j>=1;j-)     printf("*");         z+;           printf("n");8. 编写程序,利用公式PI/4=

14、1-1/3+1/5-1/7+. 计算PI的近似值。 (1)给定项数计算。例如计算到分母9999的那项为止,9999即是程序运行时用户输入的项。 (2)给定精度计算。例如计算到累加项(±)1/n的绝对值小于等于10-6, 0.000001即是程序运行时用户输入的精度。#include <stdio.h>int main()int i,j=1,d;float a, b, c;a=b=1;c=1;scanf("%d",&d);for(i=1; i<d; i=i+2)j=-j;c = c + 1/(j*i);c=4*c;printf("

15、%fn", c);9. 斐波纳契数列。有一种数列:0,1,1,2,3,5,8,13,21,34,。它以0和1开头,接下来每个数是其前两个数之和。数学家斐波纳契(Fibonacci)首先发现并研究这种数列的性质与应用,该数列因此得名。自然界本身就存在这样的数列,人们在描述螺旋上升的数据时通常要用到它。该数列有个令人称奇的特性:对于连续的两个数来说,前一个数与后一个数之比趋向于常量0.618,后一个数与前一个数之比趋向于常量1.618 。由于这两个数在自然界的许多方面得到体现,符合人类的审美标准因此被称为“黄金分割率”。建筑师经常按黄金分割率设计窗户、房间和建筑物的长宽比,明信片的长宽也

16、往往设计成这一比率。斐波纳契数列的迭代形式如下: F0 = 0 (n=0) F1 = 1 (n=1) Fn = Fn-1 + Fn-2 (n>=2)编写程序,要求将范围m,n之间所有的fibonacci数输出。例如,0,30之间的fibonacci数有7个,它们是:1 2 3 5 8 13 21 ;1000,32767之间有7个,它们是:1597 2584 6765 10946 17711 28657 。10有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20项之和。(穷举法一点儿也不陌生,几乎在所有的程序中都有它的影子,它是与逻辑紧密联系在一起的。所

17、谓穷举也称为蛮干(Brute Force)法,就是逐个访问与处理所给定的大量数据与内容,每个元素访问且仅访问一次。计算机所具有的高速计算的特性确实为穷举法的广泛应用提供了良好的物质基础,并发挥了高速度的优势,从而使穷举法能够成为一种可行的算法。现在程序设计中或多或少地都要用到它。很多问题除了用穷举法还找不到别地方法去解答。可见穷举法做为没有办法的办法而具备了通用行。当然,由于它也显得直接而简单,因而容易理解与普及,由此可见,不管喜欢与否穷举法都是一种很重要的方法。)#include <stdio.h>int main()int i;float a, b, c, d;a = b =

18、1.0;c = 0;d = 0;for(i = 0; i < 20; i+)c = a + b;d = d + c / a;b = a;a = c;printf("%fn", d);11.水仙花数的判断。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153 =13+53+33。请编写程序输出所有的水仙花数。#include <stdio.h> int main() int a,b,c,d; for(a=100;a<1000;a+) b=a%10; c=a/10%10; d=a/100%10; if(a=b*b*b+c*c*c+d*

19、d*d) printf("%d ",a); 12完数的判断。完数即“完美的数”。如果一个数恰好是小于它的各个不同因子之和,那么就称该数为完数。比如说,6的因子1、 2、 3 ,而6123,因此6就是一个完数。显然,要判断一个数是否是为完数的关键在于,对它进行适当的因子分解,以得到小于它本身的所有因子。顺乎自然的因子分解方法是遍历试验,也就是说,假设要判断数n是否为完数,那么就从1开始到数n-1,逐个看它是否为n的因子(能整除n)。将各个因子累加起来,最后与这个数进行比较,如果相等该数就是完数。请编写程序求解1000之内的所有完数。#include <stdio.h&g

20、t; int main() int a,b,c=0; for(a=1;a<=1000;a+) c=0; for(b=1;b<a;b+) if(a%b=0)c=c+b; if(c=a) printf("%d ",a); 13.同构数的判断。同构数是会出现在它的平方的右边的数。如5是25右边的数,25是625右边的数,5和25都是同构数。再如十进制同构数以6开头的同构数有:62=36762=57763762=141376。编写程序输出10000之内的所有同构数。#include <math.h>#include<stdio.h>int mai

21、n() int a,b=0,i,c,d; for(i=1;i<10000;i+) a=i; c=i*i; while(i) i=i/10;b+; d=int(pow(10,b); c=c%d; if(a=c)printf("%d ",i); 14. 素数的判断。素数定义:除了1和其本身之外,没有其它的因子,这样的数叫做素数。编写程序求出比x大的最初k(k<1000)个素数。最小的素数是 2 。例如:程序运行时输入:7 10,输出:11 13 17 19 23 29 31 37 41 43。若输入:-7 10, 输出:2 3 5 7 11 13 17 19 23

22、29。#include <stdio.h>int main() int a,b,m,i,flag=1; printf("输入两个数:"); scanf("%d %d",&a,&b); if(a<0)a=1; for(i=a+1;i<b;i+) for(m=2;m<i;m+) if(i%m=0) flag=0; if(flag=1)printf("%d ",i); 15.百钱百鸡问题。我国古代数学家张丘建在算经中出了一道“百钱百鸡”题,题意是:公鸡五元一只,母鸡三元一只,小鸡一元三只。用10

23、0元钱买100只鸡,问公、母、小鸡各买多少只?编写程序输出所有满足条件的组合结果。(三种鸡型必须有,不能为0)。#include <stdio.h> int main() int a,b,c; for(a=1;a<20;a+) for(b=1;b<20;b+) for(c=1;c<33;c+) if(5*a+3*b+c/3=100)printf("可以买%d公鸡,%d母鸡,%d小鸡n",a,b,c); 16. 输入一行字符(回车结束),分别统计出其中英文字母、空格、数字字符和其它字符四类的各自的数目。提示: while( (c=getchar(

24、) !=n)。 。#include <stdio.h>int main() int a=0,b=0,c=0,d=0; char z; while(z=getchar()!='n') if(z=' ') b+; else if(z>='1'&&z<='9') c+; else if(z>='a'&&z<='z')|z>='A'&&z<='Z') a+; else d+; pr

25、intf("The number of letters is:%dn",a); printf("The number of spaces is:%dn",b); printf("The number of digits is:%dn",c); printf("The number of other words is:%dn",d);return 0;17. 翻译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按如下规律将电文变成密码: 将字母A变成字母E,a变成e, 即

26、变成其后的第4个字母. W变成A ,X变成B,Y变成C,Z变成D. 字母按上述规律转换,非字母字符不变。例如“China!”转换为“Glmre!”.(请参看ASCII表,大写字母后并非紧跟小写字母,还有其它字符) 输入一行字符,要求输出其相应的密码。#include <stdio.h>int main() int a=0,b=0; char z; z=getchar(); while(z!='n') if(z>='a'&&z<='z')|z>='A'&&z<=&#

27、39;Z') if(z>='W'&&z<='Z')|z>='w'&&z<='z') z=z-22; else z=z+4; printf("%cn",z);return 0;18. 程序反复做以下工作:提示输入学号(number),并提示结束标记是什么(本程序用-1作为循环结束的标记)。 由用户输入学号。程序随后分别提示输入各门课成绩(如: course 1:),由用户输入学生3门课成绩,最后统计该学生3门课的平均成绩并显示。成绩和平均分均为实型,

28、显示的平均分保留2位小数。当用户在提示信息“enter student's number (-1 to end): ”后输入-1时结束程序。#include<stdio.h> void main()  int i,j;  float aver,sum,gra;      printf("Enter student's number(-1 to end):"); 

29、; scanf("%d",&i);  while(i!=-1)  sum=0.0;  for(j=1;j<=5;j+)   printf("course %d:",j);   scanf("%f",&gra);        sum+=gra;    

30、60;aver=sum/5;  printf("aver =%.2fn",aver);      printf("Enter student's number(-1 to end):");  scanf("%d",&i);19. 编写程序可以把大写字母格式的电话号码翻译成数值格式:Enter phone number: CALLATT2255288提示:字母在键盘上的对应

31、关系:2=ABC 3=DEF 4=GHI 5=JKL 6=MNO 7=PRS 8=TUV 9=WXY,如果原始的电话号码包含非字母的字符(例如,数字或标点符号)那么保留下来不做变化:Enter phone number : 1-800-COL-LECT1-800-265-532820. 飞机票有冗长的标识数字(位数不定),例如47715497443。为了有效,最后一位数字必须与以其他的数字为整体除以7后的余数相匹配。(例如4771549744除以7的余数为3.)编写程序检查机票号是否有效:Enter ticket number : 47715497443VALID提示:不要试图在单步操作中读取

32、数,而是使用getchar函数逐个获取数字字符再转换成对应的数值,例如读取字符4后转换成数值4。一次执行一个数字的除法,小心除法中不要包含最后一个数字。第5单元 循环结构程序作业2:编程练习姓名_李鹤轩_ 专业年级_2011_ 实验课选课时间_周四三四节_ 分数_1. #include<stdio.h>int main()float a=1,b=0;while(a>0)printf("Enter a number :");scanf("%f",&a);if(a>b)b=a;printf("The largest

33、number entered was :%fn",b);2. #include<stdio.h>int main()int m,n,t;printf("Enter two integers :");scanf("%d%d",&m,&n);if (n>m)t=m;m=n;n=t;while(n!=0)t=m; m=n; n=t%n; if (n>m) t=m;m=n;n=t;printf("The largest number entered was :%d n",m);3. #incl

34、ude<stdio.h>int main()int m,n,t,a,b;printf("Enter a fraction :");scanf("%d/%d",&m,&n);a=m;b=n;if (n>m)t=m;m=n;n=t;while(n!=0)t=m; m=n; n=t%n; if (n>m) t=m;m=n;n=t;a=a/m;b=b/m;printf("The largest number entered was :%d/%d n",a,b);4. #include<stdio.

35、h>int main() int a; int b = 0; scanf("%d",&a); do b = b * 10 +(a % 10); a = a / 10; while( a ); printf("%dn",b);5. #include<stdio.h>int main() int a,c=0,i=0; int b = 0; scanf("%d",&a); do b=a%10; a =a/10; if(b%2=0) if(i=0) c=b;i+; else c=b*i*10+c; i+; w

36、hile( a ); printf("%dn",c); 6. #include <stdio.h> int main() int a=0,b=0,c=0; int i; printf("Enter number of days in month:"); scanf("%d",&a); printf("Enter starting day of the week(1=Sun, 7=Sat):"); scanf("%d",&b); c=a+b-1; printf(&quo

37、t;星期日t星期一t星期二t星期三t星期四t星期五t星期六n"); for(i=1;i<=c;i+) if(i<b) printf("t"); else if(i-1)%7=0) printf("n"); printf("%dt",i-b+1); printf("n"); return 0; 7. #include <stdio.h> void main()  int n; int i,j,k,z,m=

38、1; printf("enter  n:n"); scanf("%d",&n); printf("n=%dn",n); z=n; for(i=1;i<=n;i+)    printf(" "); for(j=1;j<=m;j+)     printf("*"); z-; 

39、0;           m=m+2;           printf("n");  m=m-2;                for(i=1;i<=n-1;i+)

40、60;      m=m-2;           for(k=0;k<=z;k+)    printf(" ");  for(j=m;j>=1;j-)     printf("*");      

41、   z+;           printf("n");8(1)#include <stdio.h>int main()int i,j=1,d;float a, b, c;a=b=1;c=1;scanf("%d",&d);for(i=1; i<d; i=i+2)j=-j;c = c + 1/(j*i);c=4*c;printf("%fn", c);8(2)#includ

42、e <stdio.h>int main()int i,j=1;float a, b, c,d;a=b=1;c=1;scanf("%f",&d);d=1/d;for(i=1; i<d; i=i+2)j=-j;c = c + 1/(j*i);c=4*c;printf("%fn", c);910#include <stdio.h>int main()int i;float a, b, c, d;a = b = 1.0;c = 0;d = 0;for(i = 0; i < 20; i+)c = a + b;d = d

43、+ c / a;b = a;a = c;printf("%fn", d);11#include <stdio.h> int main() int a,b,c,d; for(a=100;a<1000;a+) b=a%10; c=a/10%10; d=a/100%10; if(a=b*b*b+c*c*c+d*d*d) printf("%d ",a); 12#include <stdio.h> int main() int a,b,c=0; for(a=1;a<=1000;a+) c=0; for(b=1;b<a;b+

44、) if(a%b=0)c=c+b; if(c=a) printf("%d ",a); 13#include <math.h>#include<stdio.h>int main() int a,b=0,i,c,d; for(i=1;i<10000;i+) a=i; c=i*i; while(i) i=i/10;b+; d=int(pow(10,b); c=c%d; if(a=c)printf("%d ",i); 14#include <stdio.h>int main() int a,b,m,i,flag=1; p

45、rintf("输入两个数:"); scanf("%d %d",&a,&b); if(a<0)a=1; for(i=a+1;i<b;i+) for(m=2;m<i;m+) if(i%m=0) flag=0; if(flag=1)printf("%d ",i); 15#include <stdio.h> int main() int a,b,c; for(a=1;a<20;a+) for(b=1;b<20;b+) for(c=1;c<33;c+) if(5*a+3*b+c/3

46、=100)printf("可以买%d公鸡,%d母鸡,%d小鸡n",a,b,c); 16#include <stdio.h>int main() int a=0,b=0,c=0,d=0; char z; while(z=getchar()!='n') if(z=' ') b+; else if(z>='1'&&z<='9') c+; else if(z>='a'&&z<='z')|z>='A'

47、&&z<='Z') a+; else d+; printf("The number of letters is:%dn",a); printf("The number of spaces is:%dn",b); printf("The number of digits is:%dn",c); printf("The number of other words is:%dn",d);return 0;17#include <stdio.h>int main() int a=0,b=0; char z; z=getchar(); while(z!='n') if(z>='a'&&z<='z')|z>='A'&&z<='Z') if(z>='W'&&z<='Z')|z>='w&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论