实验4-分支结构程序设计
实验四 分支结构程序设计
姓名 学号 班级 1.练习题一
编写程序,计算练习一分段函数的值。 (1) 用scanf函数输入x的值。
(2) 运行程序时,分别按x的值小于0、x的值在0-15
之间、x的值大于15三种情况输入数据,检查输出的y值是否正确。
# include int k=1;void test();//程序是否继续 void main () { while (k==1) { int x,y,c; printf(\"Input x:\"); scanf(\"%d\ while ((c=getchar())!='\\n'&&c!=EOF); if (x<0) { y=x+10; printf(\"x=%d,y=x+10=%d\\n\ } else if(x<15) { y=3*x+5; printf(\"x=%d,y=3*x+5=%d\\n\ } else { y=2*x-10; printf(\"x=%d,y=2*x-10=%d\\n\ }test(); } } 实验四 分支结构程序设计void test() { char c; printf(\"Test again?y/n\\n\"); if ((c=getchar())=='n'||c=='N')//只有当输入N或n时才终止程序 k=0; } 运行结果截图: 思考题及问题: 判断x的值在0-15之间可否使用表达式“0<=x<15”?为什么?正确的表示方法是什么? 答案: 不可。因为一个条件判断表达式中最多只能有一个运算符。正确的表示方法是x>=0&&x<15. 2.练习题二
输入3个数字,判断他们是否能构成三角形,如果不能,输出提示信息;否则判断它是直角、等边、等腰还是普通三角形。
实验四 分支结构程序设计
# include int k=1;void test(); void main() { while(k==1) { int a,b,c,d; printf(\"Input a,b,c:\"); scanf(\"%d,%d,%d\ while ((d=getchar())!='\\n'&&c!=EOF);//清空输入缓存区 if(!(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&b+c>a)) printf(\"三条边无法构成三角形。\\n\"); else if (a*a+b*b==c*c||a*a==b*b+c*c||b*b==a*a+c*c) printf(\"这是一个直角三角形\\n\"); else if (a==b&&b==c) printf(\"这是一个等边三角形\\n\"); else if (a==b||b==c||a==c) printf(\"这是一个等腰三角形\\n\"); else printf(\"这是一个普通三角形\\n\"); test(); } } void test() { char c; printf(\"Test again?y/n:\"); if ((c=getchar())=='n'||c=='N')//只有当输入N或n时才终止程序 k=0; }运行结果截图:
实验四 分支结构程序设计
思考题及问题: 判断三角形的类型时需要用到各种判断条件,入等边三角形的判断条件是3条边相等,该判断条件可否描述为“a=b=c”?为什么? 答案: 不能,“=”在C语言中是赋值符号,在条件判断式中是一个永真式,会引起语义错误。 1. 练习题三
编写一个程序,输出给定的某年某月的天数。 要求:
采用switch语句实现。 程序代码:
实验四 分支结构程序设计
# include void main() { int year,mon,days,leap; printf(\"年.月:\"); scanf(\"%4d.%2d\ switch(mon) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:days=31;break; case 4: case 6: case 9: case 11:days=30;break; case 2: if (year%4==0&&year%100!=0||year%400==0) leap =1; else leap=0; if (leap) days=29; else days=28; } printf(\"%d年%d月的天数为%d天\\n\}运行结果截图: 思考题及问题:
① 本程序所给代码中的switch语句没有default语句可以吗?default语句应该在switch语
句的什么位置?
实验四 分支结构程序设计
可以。Default语句可以在{}之间的任意位置。 ② 本程序所给代码中的最后一个case语句中,没有break正确吗?请解释。 正确。在switch语句中,当找到符合条件的case时,执行该case语句及之后的其他情况的语句,故C语言会在case语句和default语句后加break;防止执行下面的语句。而最后一个case语句后无其他语句,故没有break语句也正确。 1. 自测练习一
编写程序,计算逻辑表达式的值。 假设int a=0,b=1,c=1,d=3;
(1)表达式a*b&&c-d、c-d&&a*b是多少?为什么?
程序代码: # include void main() { int a=0,b=1,c=1,d=3; printf(\"%d,%d\} 运行结果截图及原因:实验四 分支结构程序设计
a*b=0,逻辑假,由于与运算的短路性,&&右边的表达式不进行,直接为0; c-d=-2,逻辑真,为1,故第二个运算式为1&&0=0. (2)表达式—a||++b&&--c的值是多少?变量a、b、c的值分别是多少?为什么?
程序代码: # include void main() { int a=0,b=1,c=1,d=3; printf(\"%d\\n\ printf(\"a=%d,b=%d,c=%d\} 运行结果截图及原因: ++b即b的值为2,是真值1,--c值即c的值为0,假值0。-a即a的值为0,假值0. 故结果为0||1&&0=1&&0=0, (3)表达式++b&&--c||--a的值是多少?变量a、b、c的值分别是多少?为什么?程序代码: # include void main() { int a=0,b=1,c=1,d=3; printf(\"++b&&--c||--a=%d\\n\ printf(\"a=%d,b=%d,c=%d\} 运行结果截图及原因:实验四 分支结构程序设计
++b即b的值为2,是真值1,--c值即c的值为0,假值0。--a即a的值为-1,真值1. 故结果为1&&0||1=1, 2. 自测练习二
设整型变量a、b、c分别存放从键盘输入的3个整数。编写C程序,按从大到小排列这3个数,使a成为最大值,c成为最小值,并且按序输出这3个数。
源程序代码: # include void main() { int a[3]={0},t,j,i,k; for (i=0;i<=2;i++) { printf(\"Input %c:\ scanf(\"%d\ } for (j=0;j<=2;j++)//冒泡法 { for (i=0;i<=2-j;i++) if (a[i]实验四 分支结构程序设计3. 自测练习三
从键盘输入一个小于六位的正整数,判断它是几位数,并按照相反的顺序输出各位上的数字,例如输入1234,输出为4321。
源程序代码: # include # include void main() { int i=4,a[6]={0},k=0; printf(“请输入一个小于六位的正整数:\"); scanf(\"%d\ while (a[5]<(int)pow(10,i))//判断输入数据的位数 i--; k=i+1; printf(\"它是%d位数\ a[i+1]=a[5]; for (;i>=1;i--) { a[i]=a[i+1]%(int)pow(10,i); a[i+1]=a[i+1]/(int)pow(10,i); } for (i=1;i<=k;i++)//倒序输出 printf(\"%d\ printf(\"\\n\"); } 运行结果截图:实验四 分支结构程序设计
4. 自测练习四
假设今天是星期日,编写一个程序,求n(n由键盘输入)天后是星期几。
源程序代码: # include void main() { int n,t; printf(\"假设今天是星期日,求n天后是星期几\\n输入n=\"); scanf(\"%d\ t=n%7; switch(t) { case 0:printf(\"n天后还是星期日\\n\");break; case 1:printf(\"n天后是星期一\\n\");break; case 2:printf(\"n天后是星期二\\n\");break; case 3:printf(\"n天后是星期三\\n\");break; case 4:printf(\"n天后是星期四\\n\");break; case 5:printf(\"n天后是星期五\\n\");break; case 6:printf(\"n天后是星期六\\n\"); } } 运行结果截图:实验四 分支结构程序设计
5. 自测练习五
假定向邮寄包裹的收费规则如下:首先,包裹重量向上取整到最近的15g的倍数,然后按书上表格收费,编写一个程序根据用户输入的包裹的重量和里程计算邮费。
包裹邮费计算表
重量(g) 15 30 45 60 75及以上
源程序代码: # include int k=1,c=0;//全局变量 void test() { printf(\"Test again?y/n:\"); if ((c=getchar())=='n'||c=='N')//只有当输入N或n时才终止程序 k=0; } 收费(元) 5 9 12 14(每足1000km加1元) 15(每足1000km加2元) 实验四 分支结构程序设计void main() { while(k==1) { int m,s; printf(\"请输入包裹重量(g)\"); scanf(\"%d\ printf(\"请输入里程数(km)\"); scanf(\"%d\ while((c=getchar())!='\\n'&&c!=EOF);//清空输入缓存区 if(m%15!=0)m=(m/15+1)*15;//取m为15的倍数 s/=1000; printf(\"收费:\"); if(m<=15)printf(\"5元\"); else if (m<=30)printf(\"9元\"); else if(m<=45)printf(\"12元\"); else if(m<=60)printf(\"%d元\ else printf(\"%d元\ printf(\"\\n\"); test(); } } 运行结果截图:
实验四 分支结构程序设计