第1次作业

计算机18秋_分支结构:7-7计算火车运行时间

1:实验代码:

#include<stdio.h>//函数声明和定义
int main()//主函数 
{
    int x,y,a,b;//变量定义 整数型 
    scanf("%d%d",&x,&y);//输入2个4位正整数
    a=y%100-x%100;//求出分钟的差值 
    b=(y/100-x/100);//求出小时的差值 
    if(a<0)//判断是否需要借位 
    {
        a=a+60;//分向时借60分钟 
        b --;//时减去一小时
    }
    printf("%02d:%02d",b,a);//输出结果 
    return 0;
}

2:(1)设计思路:

第一步:进行函数声明与变量定义,定义火车出发与到达的时间变量x,y;
第二步:用(x或y)%100或(x或y)/100来进行"时"和“分”的位数取舍,即取前两位数为小时,后两位数分钟;
第三步:由于时间的问题涉及到时与分的借位,使用if型分支结构来进行判断是否借位; 
第四步:”时“与“分”的转换为60进一在if分支结构下设计a=a+60;b --,“时”与“分”的对应转换;
第五步:输出结果。

( 2 )流程图:

3.本题调试过程碰到问题及解决办法:

问题:

考虑问题不够全面,导致漏掉了分钟位相减小于0需要借位这个情况,导致程序与要求不完全等价。

解决方法:

提交时由系统提醒和上网搜索相关知识点并与同学进行交流,得以了解和更正了时间的借位问题,在程序插入了if型分支结构来判断是否需要借位,if(a<0)a=a+60;b --,最后输出答案正确。

计算机18秋—循环1:7-3 统计素数并求和;

1:实验代码

#include<stdio.h>//函数声明和定义
int main(void)//主函数 
{
    int m,n,i,cnt=0,sum=0;//变量定义
    scanf("%d%d",&m,&n);//输入数据 
    if(m==1)//判断 m输入是否为1 
    m=2;//赋初值 
    for(i=m;i<=n;i++)// 循环从(1≤M≤N) 
    {  int z=1;//z为素数判断的标志量
       int k;
       for(k=2;k<i-1;k++)//判断是否为素数 
       { if(i%k==0)//不是素数 
 
          { z=0;
            break;//跳出此循环 
          }       
       }
       if(z!=0)//是素数 
       {
           cnt++;//计个数 
           sum=sum+i;//求素数和 
       }
    }
    printf("%d %d\n",cnt,sum);//输出结果 
    return 0;
} 

2:(1)设计思路:

第一步:进行变量定义,定义最主要的循环变量m,n;用来计数的变量cnt,求和变量sum;
第二步:选择使用双for型循环来计算与判断素数;
第三步:设计第一个主循环从1<=m<=n的循环,且每次加一for(i=m;i<=n;i++);

第四步:设计第二个次循环并定义一个标志量z来判断在1<=m<=n内的素数for(k=2;k<i-1;k++);

第三步:用if型循环分支(i%k是否等于0)判断素数,素数i%k!=0,反之则不是素数并将值赋给z,使z=0并跳出本次循环;

第四步:设计是素数下的程序运行,cnt++计算素数个数, sum=sum+i计算素数和;
第五步:输出最后的结果。

( 2 )流程图:

 

3.本题调试过程碰到问题及解决办法:

问题:

设计的程序与要求不完全等价,且运行的结果与答案产生偏差;

解决方法:

先检查了思路,发现正确之后,再检查程序内部的细节。我先将printf("%d %d\n",z,k);插入到for(i=m;i<=n;i++)下,检查z,k循环进行后的值是多少与思路中的值是否出现偏差,之后发现若执行了非素数这个判断后会将z=0,在下一步循环中z将会变成等于0,而不是1所以导致了后面的错误。所以将z,k变量定义的情况放在第一个for(i=m;i<=n;i++)下,使进行非素数循环把0赋值给z后下一步循环z的初值将会是0而不是1,最后答案正确。

计算机18秋—循环2:7-3 求整数的位数及各位数字之和;

#include <stdio.h>//函数声明和定义 
int main(void)//主函数 
{
    int n, cnt, sum;//定义变量 
    sum = 0;//赋初值 
    cnt = 0;
    scanf("%d", &n);//输入数据   
    while(n!=0){//利用循环求各数位上的值 
        cnt++;   //计位数    
        sum += n%10;// 对位数求和 
        n /= 10;     //求下一个位数 
    }
    printf("%d %d\n", cnt, sum);//输出 
    return 0;
}

2:(1)设计思路:

第一步:进行函数声明与变量定义,定义循环n,计数cnt=0,和sum=0;
第二步:设置n=0为while循环的条件,求整数的位数及各位数字之和
第三步:利用数学运算“/”取整数和“%”取余数来进行位数的放缩,即用n /= 10将由高位向地位以10进制转换(比如100到10),用n/10是否等于0判断是否继续,继续则位数加一cnt++,

第四步:再利用sum += n%10,求道所对应位数上的值进行求各位数字之和

第五步:输出答案。

( 2 )流程图:

3.本题调试过程碰到问题及解决办法:

问题:

由于对循环的不熟练运用所以导致,所学内容不能灵活使用,且思维过于僵硬死板,使用了if的多分支类型进行问题的设计,导致解题繁琐,只能接=解决局部的问题,解题不具有广泛性,不能完全等价,只有答案正确,导致出错。

经过查阅书籍和上网搜索资料,再请教同学,对循环有了进一步深刻的了解,并对题目的算法进行了相关的更改,将if的分支结构改为了while循环结构最终得以解决了问题。

三、总结和学习进度条:

1.

所学内容:
一:分支结构
1.二分支结构和if-else语句,多分支结构和else-if语句;
2.四则运算中:程序解析,字符型数据的输入和输出,逻辑运算;
3.程序解析,switch语句,多分枝结构;
二:循环结构
1.用格雷戈里公式求派(Π)的值;
2.解析while语句的更深一层次的运用;
3.do-while语句
4.判断素数与对素数相应题目的精讲与练习
5.break语句和continue语句的运用与讲解
6.嵌套循环和循环程序的设计
三:函数
1.计算圆柱体体积对函数进行定义,调用与函数程序的设计;
2.数字金字塔的学习,学会运用不返回结果的函数,培养结构化程序设计思想;
3.复数运算,局部变量和全局变量。
遇到的问题
1.随着所学知识的逐步增加,对各模块对应的相关知识难以融汇贯通,比如说看见一道题目如果不提示具体需要运用那一部分的知识,便往往会不知所措,不知道该从哪里下手。

2.不能够很好的运用所学的知识,缺乏训练,即使对已学过的知识,若一两天问看不久就会变得模糊。

3.对已经教的知识产生了混淆,不能够熟练运用,且交过的多种循环如while,do-while,for型循环,不能够在具体问题中做出选择恰当的解决问题。
解决方法:
1.上中国大学mooc预习下一课的内容,复习上一课老师讲的的知识。

2.在mooc讨论区内进行交流疑问和所学知识,与同学交流课堂所学的内容,进行知识的巩固。

3.在博客园中搜索与阅读相关的知识点,并与提出疑问进行交流和共同学习。

4.反复翻阅教科书,教科书作为国家级的教学材料可以给我提供最专业的知识讲解。

2.

作业点评:

许振豪;

张学友;

徐凤隆;

王天奇;

 

 3.

 周  周代码行数  敲代码时长  写博客字数  写博客时长  学习的知识点
 第九周  600  6h  0  0  分支结构if型与while型
 第十周  700  6.50h  0  0  循环中的while型循环
 第十一周  800  7h  0  0  循环中的for型循环与多重循环
 第十二周  900  7h  0  0  素数判断与循环结构程序设计
 第十三周  1000  7.5h  2400  8  函数定义,调用及函数程序的设计

 

posted @ 2018-11-29 14:02  Assandsmart  阅读(323)  评论(7编辑  收藏  举报