首页 > 其他 > 详细

第一次作业

时间:2018-11-29 14:04:33      阅读:159      评论:0      收藏:0      [点我收藏+]

一.题目

分支结构中题目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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!