一.题目
分支结构中题目7-9高速公路超速处罚
1.实验代码
1 #include<stdio.h> 2 int main() 3 { 4 float speed,limit,t;//定义两个浮点型变量 5 scanf("%f %f",&speed,&limit);//分别输入车速及限速 6 int x,y;//定义两个整形变量 7 t=(limit*1.1); 8 x=(int)t;//将limit*1.1的值放入x中 9 t=(limit*1.5); 10 y=(int)t;//将limit*1.5的值放入y中 11 if(speed<x){printf("OK"); //判断车速是否超过或达到限速的1.1倍 12 } //未超速,则输出“OK” 13 else if((speed<y)&&(speed>=x))//判断车速是否超过或达到限速的1.5倍 14 {printf("Exceed %.0f%%. Ticket 200",((speed-limit)/limit)*100); 15 }//车速达到或超出本车道限速的10%则处200元罚款 16 else if(speed>=y)//判断车速是否超过或达到限速的1.5倍 17 {printf("Exceed %.0f%%. License Revoked",((speed-limit)/limit)*100); 18 }//车速达到或超出限速50%,就要吊销驾驶证 19 return 0; 20 }
2.设计思路
(1)
第一步:输入两个float型变量 speed 及 limit 。
第二步:将limit*1.1及limit*1.5的值分别放入整形变量x和整形变量y中
第三步:判断是否speed<x,若是则未超速,输出“OK” printf("OK");若不是进入下一步判断
第四步:判断是否speed>=x 并且 speed <y,若是则输出超速百分比并罚款200元
·printf("Exceed %.0f%%. Ticket 200",((speed-limit)/limit)*100);若不是进入下一步判断
第五步:判断是否speed>y,若是则输出超速百分比并吊销驾照
printf("Exceed %.0f%%. License Revoked",((speed-limit)/limit)*100)
(2)
3.本题调试过程碰到问题及解决办法
问题:当speed=110 , limit=100时,speed<limit*1.1,通过输出 limit*1.1 的值发现当limit=100时 limit*1.1 大于110,导致判断错误。
解决方法:因为speed和limit都是float型变量,浮点数之间不能直接进行比较,所以将limit*1.1及limit*1.5赋给t,再将t转化为整形付给x及y,通过比较speed和x,y的大小来判断是否超速。
循环1中7-3 统计素数并求和
1.实验代码
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 int t=0;//储存素数的个数 6 int i,p;//循环变量 7 int sum=0;//素数之和 8 int m,n;//输入的上下边界 9 int e;//中间变量 10 int c=1;//定义c作为判断是否为素数的条件 11 scanf("%d %d",&m,&n);//输入m,n上下边界 12 if(m>=n){e=m;m=n;n=e;}//将两个数大的赋给n,小的赋给m 13 for(i=m;i<=n;i++)//从m到n循环寻找素数 14 { 15 c=0;//若c的值不变,说明i为素数,若变为1,则i不为素数 16 for(p=2;p<i;p++)//从2到i-1做整除 17 { 18 if((i%p)==0)//若i能被p整除,说明i不为素数 19 { 20 c=1;//c的值变为1,代表i不为素数 21 22 } 23 } 24 if(c==0&&i!=1)//若i不能被整除且不为1,c的值不变,说明i为素数 25 { 26 sum=sum+i;//素数相加 27 t=t+1;//素数个数加1 28 } 29 } 30 printf("%d %d\n",t,sum);//输出素数的个数及素数之和 31 return 0; 32 }
2.设计思路
(1)
第一步:定义m,n两个整形变量储存输入的上下边界。定义整形变量i,p作循环变量,定义整形变量sum储存素数之和,定义整形变量c作为判断是否为素数,定义整形变量e为中间变量,定义整形变量t储存素数的个数。
第二步:输入两个数,将两个数中较大的放入n,较小的放入m。
第三步:设置两层循环,外层循环循环变量为i,i从m循环到n,外层循环语句第一步使c=0。
第四步:进入内层循环,内层循环循环变量为p,p从2循环到i,在内层循环中做判断,若i能被p整除,说明i不为素数,使c=。
第五步:在内层循环结束后,在外层循环中做判断,若c==0并且i!=1,说明i是素数,sum=sum+i;t=t+1,若不是,进入下次循环直至跳出循环
第六步:打印素数的个数及素数之和
(2)
3.本题调试过程碰到问题及解决办法
问题:当m=1时,输出的素数个数总多一个,素数之和比实际值大1。当m!=1时,结果正确。
解决办法:将判断素数的条件改为“ c==0&&i!=1 ”解决了将1当作是素数处理的情况。
循环2中7-2 水仙花数
1.实验代码
1 #include <stdio.h> 2 #include <math.h> 3 int main(){ 4 long n;// 输入的水仙花数位数 5 long j,i;//循环变量 6 long x,z;//上下边界 7 long sum=0,a=0,t=0,c=0;//中间变量 8 scanf("%ld",&n);//输入水仙花数的位数 9 x=pow(10,n-1);//上边界 10 z=pow(10,n)-1;// 下边界 11 for(i=x;i<=z;i++)//从下边界循环到上边界 12 { 13 a=i;//将i赋给a 14 sum=0;//每位数的n次幂之和 15 for(j=1;j<=n;j++) 16 { 17 t=a%10;//取a的个位数 18 a=a/10;//a整除以10 19 sum=sum+pow(t,n);//加上这位的n次幂 20 if(j==n&&sum==i)//判断循环n次后每位数的n次幂之和相加是否等于i 21 {printf("\n%ld",i); 22 } 23 } 24 } 25 return 0; 26 }
2.设计思路
(1)
第一步:输入水仙花数的位数,求出该位数的最大值和最小值x和z。
第二步:设置两层循环,外层循环循环变量i从x到z,将i的值赋给a,并清零sum(sum表示位数的n次幂之和)。
第三步:内层循环循环变量j从1到n,先将a取余10得到t(t表示末位数),再将a整除以10,sum加上t的n次幂,后进行判断,如果j==n并且sum==i那么打印i。
(2)
3.本题调试过程碰到问题及解决办法
问题:当输入的水仙花位数为7时,程序运行超时。
解决办法:将所有变量的类型改为long,便能解决该问题
二.总结
学习内容:
(1)
原文:https://www.cnblogs.com/xzh1114/p/10014015.html