循环结构作业2汇总.docx
《循环结构作业2汇总.docx》由会员分享,可在线阅读,更多相关《循环结构作业2汇总.docx(26页珍藏版)》请在冰豆网上搜索。
循环结构作业2汇总
循环结构作业2:
编程练习
注:
请将调试成功的程序代码(或截图)拷贝到后面的作业模板中,打印出待提交,同时请保存好作业的电子版。
1.编写程序,要求找到用户输入的一串数中的最大值。
程序需要提示用户一个一个输入数。
当用户输入0或负数时,程序必须显示输入的最大非负数:
Enteranumber:
60
Enteranumber:
38.3
Enteranumber:
4.89
Enteranumber:
100.62
Enteranumber:
75.2295
Enteranumber:
0
Thelargestnumberenteredwas100.62
注意,输入的数不要求一定是整数。
(While)
#include
intmain()
{
floata=1,b=0;
while(a>0)
{
printf("Enteranumber:
");
scanf("%f",&a);
if(a>b)
b=a;
}
printf("Thelargestnumberenteredwas:
%f\n",b);
}
2.编写程序,要求用户输入两个整数然后计算并显示这两个整数的最大公约数(GCD):
Entertwointegers:
1228
Greatestcommondivisor:
4
提示:
求最大公约数的经典算法是Euclid算法,方法如下:
分别让变量m和n存储两个数的值,始终保证m最后存储的是两个数中较大的值;用m除以n;把除数保存在m中,而把余数保存在n中;如果n为0,那么停止操作,m中的值是GCD;否则,从m除以n开始重复上述除法过程。
(While)
#include
intmain()
{
intm,n,t;
printf("Entertwointegers:
");
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("Thelargestnumberenteredwas:
%d\n",m);
}
3.编写程序(While),要求用户输入一个分数,然后将其约分为最简分式:
Enterafraction:
6/12
Inlowestterms:
1/2
#include
intmain()
{
intm,n,t,a,b;
printf("Enterafraction:
");
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("Thelargestnumberenteredwas:
%d/%d\n",a,b);
}
4.编写程序可,实现1位或者多位数的反向输出。
例如输入12345,则输出54321。
提示:
使用do_while循环重复执行求余和求商操作,让求出的商重置该数,直到值达到0为止。
而余数r则通过算式n=n*10+r重复累加到新数n上。
#include
intmain()
{
inta;
intb=0;
scanf("%d",&a);
do
{
b=b*10+(a%10);
a=a/10;
}while(a);
printf("%d\n",b);
}
5.编写程序,将输入的一个长整型数x中每一位上为偶数的数依次取出,构成一个新数返回。
高位仍在高位,低位仍在低位。
例如:
程序运行时输入:
124578902,程序输出:
24802.若输入:
1357,输出:
0
#include
intmain()
{
inta,c=0,i=0;
intb=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("%d\n",c);
}
6.编写程序,要求显示出单月的日历。
用户说明这个月的天数和本月起始日是星期几:
Enternumberofdaysinmonth:
31
Enterstartingdayoftheweek(1=Sun,7=Sat):
3
SunMonTueWedThuFriSat
12345
6789101112
13141516171819
20212223242526
2728293031
提示:
程序不像看上去那么难。
最重要的内容是for语句使用变量i从1计数到n,n是此月的天数,显示出i的每个值。
在循环中,用if语句判定i是否是一个星期的最后一天,如果是,就显示一个换行符。
#include
intmain()
{
inta=0,b=0,c=0;
inti;
printf("Enternumberofdaysinmonth:
");
scanf("%d",&a);
printf("Enterstartingdayoftheweek(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
printf("\t");
else
{
if((i-1)%7==0)
{
printf("\n");
}
printf("%d\t",i-b+1);
}
}
printf("\n");
return0;
}
7.
编写程序(for),用符号(如*)输出一个钻石形状。
运行程序输入n值,则钻石型的上三角就为n行,下三角为n-1行。
如下图为n=6的图形。
#include
void main()
{ int n; int i,j,k,z,m=1; printf("enter n:
\n");
scanf("%d",&n);
printf("n=%d\n",n); z=n; for(i=1;i<=n;i++)
printf(" "); for(j=1;j<=m;j++)
printf("*"); z--;
m=m+2;
printf("\n"); }
m=m-2;
for(i=1;i<=n-1;i++)
{ m=m-2;
for(k=0;k<=z;k++)
printf(" ");
for(j=m;j>=1;j--)
printf("*");
z++;
printf("\n");
8.编写程序,利用公式PI/4=1-1/3+1/5-1/7+...计算PI的近似值。
(1)给定项数计算。
例如计算到分母9999的那项为止,9999即是程序运行时用户输入的项。
(2)给定精度计算。
例如计算到累加项(±)1/n的绝对值小于等于10-6,0.000001即是程序运行时用户输入的精度。
#include
intmain()
{
inti,j=1,d;
floata,b,c;
a=b=1;
c=1;
scanf("%d",&d);
for(i=1;i{
j=-j;
c=c+1/(j*i);
}
c=4*c;
printf("%f\n",c);
}
9.斐波纳契数列。
有一种数列:
0,1,1,2,3,5,8,13,21,34,。
。
。
它以0和1开头,接下来每个数是其前两个数之和。
数学家斐波纳契(Fibonacci)首先发现并研究这种数列的性质与应用,该数列因此得名。
自然界本身就存在这样的数列,人们在描述螺旋上升的数据时通常要用到它。
该数列有个令人称奇的特性:
对于连续的两个数来说,前一个数与后一个数之比趋向于常量0.618,后一个数与前一个数之比趋向于常量1.618。
由于这两个数在自然界的许多方面得到体现,符合人类的审美标准因此被称为“黄金分割率”。
建筑师经常按黄金分割率设计窗户、房间和建筑物的长宽比,明信片的长宽也往往设计成这一比率。
斐波纳契数列的迭代形式如下:
F0=0(n=0)
F1=1(n=1)
Fn=Fn-1+Fn-2(n>=2)
编写程序,要求将范围[m,n]之间所有的fibonacci数输出。
例如,[0,30]之间的fibonacci数有7个,它们是:
123581321;[1000,32767]之间有7个,它们是:
159725846765109461771128657。
10.有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
(穷举法一点儿也不陌生,几乎在所有的程序中都有它的影子,它是与逻辑紧密联系在一起的。
所谓穷举也称为蛮干(BruteForce)法,就是逐个访问与处理所给定的大量数据与内容,每个元素访问且仅访问一次。
计算机所具有的高速计算的特性确实为穷举法的广泛应用提供了良好的物质基础,并发挥了高速度的优势,从而使穷举法能够成为一种可行的算法。
现在程序设计中或多或少地都要用到它。
很多问题除了用穷举法还找不到别地方法去解答。
可见穷举法做为没有办法的办法而具备了通用行。
当然,由于它也显得直接而简单,因而容易理解与普及,由此可见,不管喜欢与否穷举法都是一种很重要的方法。
)
#include
intmain()
{
inti;
floata,b,c,d;
a=b=1.0;
c=0;
d=0;
for(i=0;i<20;i++)
{
c=a+b;
d=d+c/a;
b=a;
a=c;
}
printf("%f\n",d);
}
11.水仙花数的判断。
所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
例如153=13+53+33。
请编写程序输出所有的水仙花数。
#include
intmain()
{inta,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.完数的判断。
完数即“完美的数”。
如果一个数恰好是小于它的各个不同因子之和,那么就称该数为完数。
比如说,6的因子1、2、3,而6=1+2+3,因此6就是一个完数。
显然,要判断一个数是否是为完数的关键在于,对它进行适当的因子分解,以得到小于它本身的所有因子。
顺乎自然的因子分解方法是遍历试验,也就是说,假设要判断数n是否为完数,那么就从1开始到数n-1,逐个看它是否为n的因子(能整除n)。
将各个因子累加起来,最后与这个数进行比较,如果相等该数就是完数。
请编写程序求解1000之内的所有完数。
#include
intmain()
{
inta,b,c=0;
for(a=1;a<=1000;a++)
{
c=0;
for(b=1;b{
if(a%b==0)c=c+b;
}
if(c==a)
printf("%d",a);
}
}
13.同构数的判断。
同构数是会出现在它的平方的右边的数。
如5是25右边的数,25是625右边的数,5和25都是同构数。
再如十进制同构数以6开头的同构数有:
6^2=36
76^2=5776
376^2=141376
。
。
。
编写程序输出10000之内的所有同构数。
#include
#include
intmain()
{
inta,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。
例如:
程序运行时输入:
710,输出:
11131719232931374143。
若输入:
-710,输出:
2357111317192329。
#include
intmain()
{
inta,b,m,i,flag=1;
printf("输入两个数:
");
scanf("%d%d",&a,&b);
if(a<0)a=1;
for(i=a+1;i
{
for(m=2;m
{
if(i%m==0)
flag=0;
}
if(flag==1)
printf("%d",i);
}
}
15.百钱百鸡问题。
我国古代数学家张丘建在《算经》中出了一道“百钱百鸡”题,题意是:
公鸡五元一只,母鸡三元一只,小鸡一元三只。
用100元钱买100只鸡,问公、母、小鸡各买多少只?
编写程序输出所有满足条件的组合结果。
(三种鸡型必须有,不能为0)。
#include
intmain()
{
inta,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())!
=‘\n’){。
。
。
}。
#include
intmain()
{
inta=0,b=0,c=0,d=0;
charz;
while((z=getchar())!
='\n'){
if(z=='')
b++;
elseif(z>='1'&&z<='9')
c++;
elseif((z>='a'&&z<='z')||z>='A'&&z<='Z')
a++;
elsed++;
}
printf("Thenumberoflettersis:
%d\n",a);
printf("Thenumberofspacesis:
%d\n",b);
printf("Thenumberofdigitsis:
%d\n",c);
printf("Thenumberofotherwordsis:
%d\n",d);
return0;
}
17.翻译密码。
为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。
例如,可以按如下规律将电文变成密码:
将字母A变成字母E,a变成e,即变成其后的第4个字母.W变成A,X变成B,Y变成C,Z变成D.
字母按上述规律转换,非字母字符不变。
例如“China!
”转换为“Glmre!
”.(请参看ASCII表,大写字母后并非紧跟小写字母,还有其它字符)
输入一行字符,要求输出其相应的密码。
#include
intmain()
{
inta=0,b=0;
charz;
z=getchar();
while(z!
='\n')
{if((z>='a'&&z<='z')||z>='A'&&z<='Z')
if((z>='W'&&z<='Z')||z>='w'&&z<='z')
z=z-22;
elsez=z+4;
}
printf("%c\n",z);
return0;
}
18.程序反复做以下工作:
提示输入学号(number),并提示结束标记是什么(本程序用-1作为循环结束的标记)。
由用户输入学号。
程序随后分别提示输入各门课成绩(如:
course1:
),由用户输入学生3门课成绩,最后统计该学生3门课的平均成绩并显示。
成绩和平均分均为实型,显示的平均分保留2位小数。
当用户在提示信息“enterstudent'snumber(-1toend):
”后输入-1时结束程序。
#include
void main()
{ int i,j;
float aver,sum,gra;
printf("Enter student's number(-1 to end):
");
scanf("%d",&i);
while(i!
=-1)
{ sum=0.0; for(j=1;j<=5;j++)
{ printf("course %d:
",j);
scanf("%f",&gra);
sum+=gra; }
aver=sum/5; printf("aver =%.2f\n",aver);
printf("Enter student's number(-1 to end):
");
scanf("%d",&i);
19.编写程序可以把大写字母格式的电话号码翻译成数值格式:
Enterphonenumber:
CALLATT
2255288
提示:
字母在键盘上的对应关系:
2=ABC3=DEF4=GHI5=JKL6=MNO7=PRS8=TUV9=WXY,如果原始的电话号码包含非字母的字符(例如,数字或标点符号)那么保留下来不做变化:
Enterphonenumber:
1-800-COL-LECT
1-800-265-5328
20.飞机票有冗长的标识数字(位数不定),例如47715497443。
为了有效,最后一位数字必须与以其他的数字为整体除以7后的余数相匹配。
(例如4771549744除以7的余数为3.)编写程序检查机票号是否有效:
Enterticketnumber:
47715497443
VALID
提示:
不要试图在单步操作中读取数,而是使用getchar函数逐个获取数字字符再转换成对应的数值,例如读取字符‘4’后转换成数值4。
一次执行一个数字的除法,小心除法中不要包含最后一个数字。
第5单元循环结构程序作业2:
编程练习
姓名____李鹤轩____专业年级___2011____实验课选课时间_周四三四节_____分数___________
1.#include
intmain()
{
floata=1,b=0;
while(a>0)
{
printf("Enteranumber:
");
scanf("%f",&a);
if(a>b)
b=a;
}
printf("Thelargestnumberenteredwas:
%f\n",b);
}
2.#include
intmain()
{
intm,n,t;
printf("Entertwointegers:
");
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("Thelargestnumberenteredwas:
%d\n",m);
}
3.#include
intmain()
{
intm,n,t,a,b;
printf("Enterafraction:
");
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("Thelargestnumberenteredwas:
%d/%d\n",a,b);
}
4.#include
intmain()
{
inta;
intb=0;
scanf("%d",&a);
do
{
b=b*10+(a%10);
a=a/10;
}while(a);
printf("%d\n",b);
}
5.#include
intmain()
{
inta,c=0,i=0;
intb=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("%d\n",c);
}
6.#include
in