循环结构作业2新(共8页)

循环结构作业2:编程练习
  注:请将调试成功的程序代码拷贝到后面的作业模板中,打印出待提交,同时请保存好作业的电子版。
1.编写程序,要求到用户输入的一串数中的最大值。程序需要提示用户一个一个输入数。当用户输入0或负数时, 程序必须显示输入的最大非负数:
  Enter a number : 60
  Enter a number :
  Enter a number :
  Enter a number :
  Enter a number :
  Enter a number : 0
  The largest number entered was
  提示:(1)程序开始设置一存放最大值的变量,如max,给一初值,循环输入一数据和max比较大小,若输入的数大,则将此值赋值给max,让max中始终存储两者中的最大值。 (2)使用while循环。While(x>0){...};(3)试一下最后显示最大值时用%g和%f有什么不同?
2.编写程序,要求用户输入两个整数然后计算并显示这两个整数的最大公约数(GCD):
  Enter two integers: 12  28
  Greatest common divisor :4
提示:求最大公约数的经典算法是Euclid算法,方法如下:分别让变量m 和n存储两个数的值,始终保证m最后存储的是两个数中较大的值;用m除以n;把除数保存在m中,而把余数
保存在n中;如果n为0,那么停止操作,m中的值是GCD;否则,从m除以n开始重复上述除法过程。 (2)用While循环
3.编写程序可,实现1位或者多位数的反向输出。例如输入一个整数12345,则输出一个整数54321。
提示:(1)使用do_while循环重复执行该数x对10的求余r和求商s操作,实现数字分离。(2)每次让求出的商s重置该数x(即x=s),直到值达到0为止。(3)余数r则通过算式n=n*10+r重复累加到新数n上.
4.编写程序,将输入的一个长整型数x中每一位上为偶数的数依次取出,构成一个新数返回。高位仍在高位,低位仍在低位。例如:程序运行时输入:2,程序输出:24802.  若输入:1357,输出:0
5.编写程序,要求显示出单月的日历。用户说明这个月的天数和本月起始日是星期几:
  Enter number of days in month:31
  Enter starting day of the week(1=Sun, 7=Sat):3
  Sun    Mon        Tue        Wed        Thu        Fri        Sat
                1        2        3        4        5
  6        7        8        9        10        11        12
  13    14        15        16        17        18        19
  20    21        22        23        24        25        26
  27    28        29        30        31
提示:
(1)程序提示用户输入打印月的天数n和第1天的顺序号,先输出表头。
printf("%-5s%-5s%-5s%-5s%-5s%-5s%-5s\n","Sun","Mon","Tue","Wed","Tue","Fre","Sat");
(2)上面既然规定了一个项的输出占5个域宽,那么1号前面的项数(如本题是2)共空了2*5个空格,可以使用循环输出这些空格。
(3)用for循环输出变量i从1到n的值。在循环中,用if语句判定i是否是一个星期的最后一天,如果是,就显示一个换行符。如本题( i+2)%7==0 条件成立换行。

6.编写程序(for),用符号(如*)输出一个钻石形状。运行程序输入n值,则钻石型的上三角就为n行,下三角为n-1行。如下图为n=6的图形。
7. 编写程序,利用公式PI/4=1-1/3+1/5-1/7+... 计算PI的近似值。
(1)给定项数计算。例如计算到分母9999的那项为止,9999即是程序运行时用户输入的项。    (2)给定精度计算。例如计算到累加项(±)1/n的绝对值小于等于10-6, 即是程序运行时用户输入的精度。
8. 斐波纳契数列。
有一种数列:0,1,1,2,3,5,8,13,21,34,。。。它以0和1开头,接下来每个数是其前两个数之和。数学家斐波纳契(Fibonacci)首先发现并研究这种数列的性质与应用,该数列因此得名。自然界本身就存在这样的数列,人们在描述螺旋上升的数据时通常要用到它。该数列有个令人称奇的特性:对于连续的两个数来说,前一个数与后一个数之比趋向于常量,后一个数与前一个数之比趋向于常量 。由于这两个数在自然界的许多方面得到体现,符合人类的审美标准因此被称为“黄金分割率”。建筑师经常按黄金分割率设计窗户、房间和建筑物的长宽比,明信片的长宽也往往设计成这一比率。
斐波纳契数列的迭代形式如下:
      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 。
(穷举法一点儿也不陌生,几乎在所有的程序中都有它的影子,它是与逻辑紧密联系在一起的。所谓穷举也称为蛮干(Brute  Force)法,就是逐个访问与处理所给定的大量数据与内容,每个元素访问且仅访问一次。
计算机所具有的高速计算的特性确实为穷举法的广泛应用提供了良好的物质基础,并发挥了高速度的优势,从而使穷举法能够成为一种可行的算法。现在程序设计中或多或少地都要用到它。很多问题除了用穷举法还不到别地方法去解答。可见穷举法做为没有办法的办法而具备了通用行。当然,由于它也显得直接而简单,因而容易理解与普及,由此可见,不管喜欢与否穷举法都是一种很重要的方法。)
9.完数的判断。printf直接输出数字
完数即“完美的数”。如果一个数恰好是小于它的各个不同因子之和,那么就称该数为完数。
比如说,6的因子1、 2、 3 ,而6=1+2+3,因此6就是一个完数。
显然,要判断一个数是否是为完数的关键在于,对它进行适当的因子分解,以得到小于它本身的所有因子。顺乎自然的因子分解方法是遍历试验,也就是说,假设要判断数n是否为完数,那么就从1开始到数n-1,逐个看它是否为n的因子(能整除n)。将各个因子累加起来,最后与这个数进行比较,如果相等该数就是完数。
请编写程序求解1000之内的所有完数。
10. 素数的判断。
素数定义:除了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 29。
11. 输入一行字符(回车结束),分别统计出其中英文字母、空格、数字字符和其它字符四类的各自的数目。
提示: while( (c=getchar()) !=‘\n’){。。。} 。
12. 翻译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按如下规律将电文变成密码: