c博客作业02--循环结构

2019/10/20 22:31
阅读数 52

#0.展示PTA总分

#本章学习总结 ##1.1学习内容总结 ###1.1.1while语句

while(表达式1)
         {
              循环体语句;
          }
do
{
循环体语句;
}while(表达式一);

do while语句和while主要的区别在于do while对于循环体中的语句先执行一次再判断条件,而while则是先判断条件再看是否执行循环体中的语句;而while语句和for同为循环语句,对于什么时候用while语句什么时候用for语句有一些区别,当不清楚循环次数时用while显然要简单一些,当清楚循环次数则用for; ###1.1.2判断素数的一些技巧方法 我们来看下面这个例子

for(i=2;i<=m/2;i++)
{
     循环语句;
}

or

for(i=2;i<=m;i++)
{
     循环语句;
}

这虽然在一般的题中没有什么问题,但我觉得从时间角度来说,上面的句子节省了一半的循环时间,提高了程序的运行效率;所以我觉得在以后的编程中,多思考思考,也许能找到更好的方法来解决这些问题; ###1.1.3 break和continue语句 举个例子:

for(i=1;i<=3;i++)
{
     printf("*");
     continue;
}

and

for(i=1;i<=3;i++)
{
      printf("*");
      break;
}

第一种输出的结果为‘’**‘’,而第二种输出的结果为‘’‘’,虽然都是跳出循环,但continue只是跳出这次循环,执行下次循环;而break则是跳出循环语句,不再执行它;当然break也可以用于switch语句; ###1.1.4 嵌套循环 嵌套循环无非就是for中for,for中while,while中for;我觉得语法只要单独的掌握了for和while循环,嵌套循环就不是问题,我觉得重要的还是实际例子中的运用;比如初始化变量应该放在for中的哪个地方,以及何时恰当的运用break和continue,使语句恰当的执行; ###1.1.5 通过超星学习通学习的知识 需要清空多余字符时用fflush(stdin); 清屏system(“cls”); 巩固了随机数rand(),它存在于#include<stdlib.h>; 随机种子srand(time(NULL));随机种子存在于#include<time.h>;

##本章学习体会 ###1 在本章学习中,我觉得已经掌握了基本语法,差的只是实际中的运用,多做点题目,我觉得可以掌握,唯一让人就是这星期太多作业了,不是在预习的路上就是在预习,但也让人很充实,没有一点的偷懒; ###2 上周总共代码量为300行 这周的代码量为400行,距离预定的差太多了,这周得再接再厉了;

#2.PTA实验作业 ##2.1 题目名1 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。 ###2.1.1伪代码 数据处理:循环变量 int i,j;计算总和的int sum;取余后最后一位数:int num;去掉最后一位数的变量:int item;

定义变量
初始化变量sum;
输入变量N;

for(i=最小的N位数;i<=最大的N位数;i++)
{
        初始化item=i,sum=0;
         for(j=1;j<=N位数;j++)
         {
                 取出最后一位数为num;
                 去掉最后一位数为item;
                 计算N位数的各个数字的立方和;
          }
          if(判断是否为水鲜花数)
          {
              输出
          }

}

###2.1.2代码截图

###2.1.3造测试数据 输入数据|输出数据|说明 ----------:|------|----: 3|153\n370\n371\n407|最小数据,题目数据 7| 1741725\n9800817\n9926315 |最大数据 ###2 .4PTA提交列表

###2.1.5说明 1.编译错误:未定义变量item 2.答案错误:sum没有在内部初始化,导致下一次循环有原来的值;通过调试,在内部初始化了sum=0; 3.答案错误:没有使item=i,导致每一次item都为原来的值,循环出不来;在一个for内使item=i; 4.部分正确:在改正了前两个后,还有一个在多次调用pow函数造成的运行超时问题;我直接造了一个po函数,让主函数直接调用它,虽然在vs上看不出有多少差别,但在pta上却通过了,事实证明自己写的函数应该比调用系统函数库里的要快一点;

##2.2 题目名2 已知函数ex可以展开为幂级数1+x+x​2​/2!+x3/3!+⋯+x​k /k!+⋯。现给定一个实数x,要求利用此幂级数部分和求e​x的近似值,求和一直继续到最后一项的绝对值小于0.00001。 ###2.1.1伪代码 数据处理:输入实数double x和double sum;循环变量int i;阶乘double temp;

定义变量;
输入x;

for判断条件
{
     阶乘temp;
     求和sum;
}
输出sum;

###2.1.2代码截图

###2.1.3造数据测试 输入数据|输出数据|说明 ----------:|------|----: 1.2|3.3201|题目数据 0|1.0000|最小数据 5|148.1432|最大数据 ###2.1.4PTA提交列表

###2.1.5说明 1.运行超时:起先运行错误,我用vs结果显示5的时候,答案是负数,我就加了一个fabs,结果超时,就以为是调用的问题,解决:无法找出原因,就换了一个方法写; 2.答案错误:换了方法后显示答案错误,这种题用vs查错我也不会,设断点也不行,用printf输出也不行;解决:叫同学帮忙看后,才知道阶乘的定义错了,将int改为double就好了,以前知道但不以为然,这次让我浪费了这么多时间才让我长了教训

##2.3题目名 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? ###2.3.1伪代码 数据处理:定义了循环变量int i;乌龟兔子的路程int rabbit;int tortoise;总时间int time;

定义变量;’
初始化路程;
输入时间;

for循环条件
{
     乌龟兔子的路程;
     if判断是否到了十分钟
          if判断谁跑的远
             if判断是否加了三十分钟超过了总时间time;
      输出结果;
}

###2.3.2代码截图

###2.3.3造数据测试 输入数据|输出数据|说明 ----------:|------|----: 242|@@ 726|最后未满30分钟的 9|^^ 81|未满10分钟的 40|@_@ 120|刚好满30分的 ###2.3.4PTA提交列表

###2.3.5说明 1.答案错误:未将兔子在跑中获胜的算进去。解决:放个if语句进去,判断满30和没满30的情况,分别输出 2.部分正确:输出平局是未将路程写进去,解决:将兔子或乌龟的路程放进去即可

#代码互评 ##第一题

or

1.代码的复杂度不同,一个打印空心菱形用的的一段直接打印,一个用的两段打印上下 2.定义的变量一个多一个少,一个有用到字符变量 ##第二题

or

1.一个输入菜单时用了函数,一个直接打印 2.一个将==0的情况放在了switch语句里,一个单独用了一种情况

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部