循环结构作业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.62
注意,输入的数不要求一定是整数。(While)
#include
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 :%f\n",b);
}
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开始重复上述除法过程。(While)
#include
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.编写程序(While),要求用户输入一个分数,然后将其约分为最简分式:
Enter a fraction:6/12
In lowest terms:1/2
#include
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.编写程序可,实现1位或者多位数的反向输出。例如输入12345,则输出54321。提示:使用do_while循环重复执行求余和求商操作,让求出的商重置该数,直到值达到0为止。而余数r则通过算式n=n*10+r重复累加到新数n上。#include
int main()
{
int a;
int b = 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
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++;}
}
}
while( a );
printf("%d\n",c);
}
6.编写程序,要求显示出单月的日历。用户说明这个月的天数和本月起始日是星期几:
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
提示:程序不像看上去那么难。最重要的内容是for语句使用变量i从1计数到n,n是此月的天数,显示出i的每个值。在循环中,用if语句判定i是否是一个星期的最后一天,如果是,就显示一个换行符。
#include
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("星期日\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");
return 0;
}
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
int main()
{
int i,j=1,d;
float a, b, c;
a=b=1;
c=1;
scanf("%d",&d);