C语言上机4Switch和循环结构-答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言上机4Switch和循环结构-答案
C语言上机四逻辑及循环结构程序设计
一、上机目的
1.熟练掌握switch语句;
2.熟练掌握switch语句中break语句的作用。
3.熟练使用while、do-while语句实现循环程序设计
4.理解循环条件和循环体,以及for、while和do-while语句的相同及不同之处
二、上机内容
输入程序,观察输出结果,并对输出结果做出合理的解释。
1)switch
#include
int main()
{
int a;
printf("input integer number: ");
scanf("%d",&a);
switch (a)
{
case 1:printf("Monday\n"); break;
case 2:printf("Tuesday\n"); break;
case 3:printf("Wednesday\n"); break;
case 4:printf("Thursday\n"); break;
case 5:printf("Friday\n"); break;
case 6:printf("Saturday\n"); break;
case 7:printf("Sunday\n"); break;
default:printf("error\n");
}
return 0;
}
观察输出结果
如何修改程序,加上break语句,使程序能够正确输出。
2)switch与break语句
#include"stdio.h"
void main()
{
int x=1,y=0;
switch(x)
{
case 1:
switch(y)
{
case 0:printf("**1**\n");break; //只跳出当前的switch
case 1:printf("**2**\n");break;
} //这里没有break语句
执行完上一case后,下面的case继续执行。
case 2:printf("**3**\n");
}
}
观察输出结果:
break的作用范围是:
3)while 循环与do while循环
#include"stdio.h"
int main()
{
int x=-10;
while (x<0)
{
printf("%3d\n",x+=4);
x--;
} ;
return 0;
}
4)do while循环
#include"stdio.h"
int main()
{
int x=4;
do
{
printf("%3d\n",x-=3);
x--;
}while (x);
x=4;
do
{
printf("%3d",x-=3);
}while (!--x);
return 0;
}
输出结果是什么:
详细分析x的值和循环的次数
5) while循环与do while循环的差别#include"stdio.h"
int main()
{
int x=-10,y=10;
while (x>=0)
{
x+=4;
y%=3;
}
printf("x=%3d, y=%3d\n",x, y);
x=-10;
do
{
x+=4;
y%=3;
}while (x>=0);
printf("x=%3d, y=%3d\n",x, y); return 0;
}
输出结果是什么:
详细分析x的值和循环的次数
6) for循环
#include"stdio.h"
int main()
{
int a,b,c=0,i=0;
for (a=1,b=1;a<5;a++,a++,b++) {
a=b+1;
c++;
printf("%d: a=%d b=%d\n",c,a,b); i++;
}
printf("循环次数为:%d", i); return 0;
}
输出结果是什么:
7) for循环
#include"stdio.h"
int main()
{
int a,b,c;
for (a=1;a<5;a++,a++) {
b=1;
for (c=a;c<5;c++)
b+=c;
}
printf("%d",b);
}
输出结果是什么:
8) 循环+选择
#include"stdio.h"
int main()
{
int i,j,x=0;
for(i=0;i<2;i++)
{
x++;
for (j=0;j<=3;j++)
if (j%2)
x++;
x++;
}
printf("x=%d",x); return 0;
}
输出结果是什么:
详细分析x的值和循环的次数9)多重循环#include"stdio.h"
int main()
{
int a,b,c;
for (a=1;a<5;a++,a++)
for (b=a;b<5;b+=2)
for (c=b;c<5;c+=2)
printf("a=%d, b=%d c=%d\n",a,b,c); return 0;
}
输出结果是什么:
详细分析x的值和循环的次数
10)、死循环
#include"stdio.h"
int main()
{
int a=30,b=40,c=50;
int x=45;
while (a<x<c)< p="">
{ x%=5;
printf("%d\n",x);
x--;
}
return 0;
}
输出结果是什么:
为什么是死循环
如果把while (a<x<x&&x<="">
三、上机作业
(1)从键盘中输入一个数字(不限位数),如何使用循环语句判断这个数字的位数。
请用三种算法完成些程序。
算法1:将输入的数字m 循环与9,99,999,-- (n个9)相比较,直到m 小于(n个9),所得n即为其位数,请将以下程序补充完整。
#include "stdio.h"
void main()
{
double m, x= 9 ;
int n;
printf("请输入一个数字: m = ");
scanf("%lf",&m);
for ( n=1 ; m>x; x=x*10+9 )
n++;
printf("\n输入的数字为正整数有效位为%d位数", n);
}
算法2:将输入的数字m与10n比较。
按此算法,完成程序
#include "stdio.h"
#include "math.h"
void main()
{
double m ,x=0 ;
int n=0;
printf("请输入一个数字: m = ");
scanf("%lf",&m);
while(m>x)
{ n++;
x=pow(10,n);
}
printf("\n输入的数字为正整数有效位为%d位数",n);
}
算法3:
将输入的数字m 循环除10,结果与1比较,如果值大于1,则进行下一循环。
按此算法完成程序。
while(m>1)
{ n++;
m/=10;
}
(2)编写程序,输出1至100之间每位数的乘积大于每位数的和的数。
例如23,其中每位数的乘积为2×3=6,每位数的和2+3=5,6>5,满足要求。
而21,2×1=2,2+1=3,2<3,不满足要求。
#include"stdio.h"
void main()
{
int m, i, s,p;
for (i=1; i<100; i++)
{m=i; p=1; s=0;
while( m>=1)
{
p*=m%10; //每位数的乘积
s+=m%10; //每位数的和
m/=10; }
if (p>s) printf("%d: %d>%d \t",i, p,s);
}
}
(3)编写程序,输出1200至1300之间每位数的乘积大于每位数的和的数。
(例如1215,其中1×2×1×5=10,1+2+1+5=9,
10>9,满足要求。
而1231,其中1×2×3×1=6,1+2+3+1=7,6<7,不满足要求。
关键问题:如何求出个、十、百、千位数,然后进行乘法和加法计算。
提示:灵活运用循环+求余(%)。
#include "stdio.h"
void main()
{
int m, i, s,p;
for (i=1200; i<1300; i++)
{ m=i; p=1; s=0;
while( m>=1)
{ p*=m%10; //每位数的乘积
s+=m%10; //每位数的和
m/=10; }
if (p>s) printf("%d: %d>%d \t",i, p,s);
}
}
(4)趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?
提示:本题使用穷举法,先按题意得到两个三元(男人、女人、小孩)方程,然后设置循环,男人从1-30,女人从1-30,小孩也是从1-30,当所有人花的钱为50时,满足条件,退出循环,此时得到男、女、小孩各自的人数。
答案一、
#include
main()
{
int x,y,z;
printf("Man \t Women \t Childern\n");
for (x=1; x<=30; x++)
for (y=1; y<=30; y++)
for (z=1; z<=30; z++)
if (x+y+z==30 && 3*x+2*y+z==50) printf("%3d\t%5d\t%8d\n",x,y,z);
}
答案二、
#include
main()
{ int x,y,z;
printf("Man \t Women \t Childern\n");
for (x =1; x <=16; x ++)
for (y =1; y <=25; y ++)
{
z =30-x -y;
if (3 * x + 2 * y + z == 50)
printf("%3d \t %5d \t %8d\n",x,y,z);
}
}
(5)编写程序,根据以下公式求e 的值。
要求用两种方法计算:
1) for 循环,计算前50项
2) while 循环,直至最后一项的值小于10-4
#include "stdio.h"
void main()
{
int i;
double e,new;
e=1.0; new=1.0;
for(i=1;i<=50;i++)
{new=new/(double)i;
e=e+new;}
11111111!2!3!4!5!!
e n ≈+++++++
printf("e=%f\n",e);
}
2)直至最后一项的值小于10-4 #include "stdio.h" void main()
{
int i;
double e,new;
e=1.0; new=1.0;
i=1;
while(new>=1e-4)
{new=new/i;
e=e+new;
i++;}
printf("%f",e);
}
</x
</x<c)<>。