第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 | 函数定义,调用及函数程序的设计 |