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

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 370 371 407 最小数据,题目数据
7 1741725 9800817 9926315 最大数据

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语句里,一个单独用了一种情况

原文地址:https://www.cnblogs.com/200157zy/p/11705092.html