C语言博客作业02--循环结构
第二次作业
1.本章学习总结.
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1学习体会
- 这周关于循环的学习内容相较于前几周的来说相对较难,课本内容虽然不多,但题目难度都较大;
- 在循环这一章的学习中更了解到了代码需要严谨,在编写代码的时候需要考虑所有可能出现的情况,如果漏掉其中一种,都会导致循环出错,从而答案错误;
- 因为循环的题目需要考虑的方面较多,大都比较复杂,所以我做题的速度慢了很多,还是需要花更多的时间熟悉代码,希望能提高做题效率;
- 习惯了使用printf调试以及添加查看的方法来检查自己代码中的错误,在循环字数较少时,添加查看可以清楚观察到每一个变量在循环中的变化,所以要找出错误也很方便;
1.2.2 代码累计
2.PTA总分
2.1截图PTA中嵌套、单层的排名得分
2.2 我的总分
- PTA总分:166分;
3.PTA实验作业
3.1 PTA题目1
输入一个整数,输出整数中每一个数对应的拼音
3.1.1 算法分析
输入数num
if(num<0) then
num=-num then
输出拼音fu和一个空格
n=num;
if(num>9) then
do
n=n/10;
i=i*10;
count++;
当n=0时退出循环
i=i/10;
count--;得到的count的值为num位数以及i为对应位数的最小值如num=1234则i=1000
j=count;
Num=num;
do{
if(Num>9&&j!=count) then
在数字后输出一个空格
n=num/i; then
switch(n){
case 0: then
输出数字0的拼音,结束此次循环;
case 1:
printf("yi");break;
case 2:
printf("er");break;
case 3:
printf("san");break;
case 4:
printf("si");break;
case 5:
printf("wu");break;
case 6:
printf("liu");break;
case 7:
printf("qi");break;
case 8:
printf("ba");break;
case 9:
printf("jiu");break;
}
count--;
num=num%i;
i=i/10;
}当count值为0时,num的每一位数都已经输出,结束循环 ```
#### 3.1.2 代码截图
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028202611715-1666241170.png)
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028202627060-1964902141.png)
#### 3.1.3 测试数据
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028203020329-463079163.png)
#### 3.1.4 PTA提交列表及说明
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028203201954-1549909682.png)
* Q1:不知道如何循环读入整数的每一位数;
* A1: 通过不断除10和取余来计算每一位数,然后引入一个新的变量n来存放,循环读入n的值;
* Q2:调试后的答案正确但提交总是提示格式错误;
* A2: 在最后一个输出的拼音后存在空格会出现格式错误,所以把空格加在每一个拼音前输出,并且第一个拼音前不输出;
### 3.2 PTA题目2
输入一个随机数与猜的次数,随后输入若干个数与随机数进行比较大小,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前输入了一个负数,也输出“Game Over”,并结束程序。
#### 3.2.1 算法分析
``` 定义rnum为随机数,num为猜的数,N为限制猜的次数,i为已经猜的次数;
输入随机数和规定次数
i=1;
do
输入猜的数 then
if i=1且一次猜中,输出Bingo,结束循环
else if 三次以内猜中
输出Lucky You!;结束循环
else if 超过三次但在规定次数N次内猜中
输出Good Guess! ;break;
else if 未超过规定次数且猜的数小于随机数rnum
i++;
输出Too small然后换行,继续循环
else if 未超过规定次数且猜的数大于随机数rnum
i++;
输出Too big然后换行,继续循环
else if 猜的次数大于规定次数
直接输出Game Over;结束循环
else if 输入的数为负数
直接输出Game Over");结束循环
}当猜的数num小于0时,结束循环
#### 3.2.2 代码
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028205605809-317143607.png)
#### 3.2.3 测试数据
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028213940147-890153386.png)
#### 3.2.4 PTA提交列表及说明
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028214051636-1754003054.png)
* Q1:输入数字超过N次时循环不会结束
* A1:引入变量i统计输入的次数,只要在规定次数内未猜中i都加1,知道i=N;
* Q2:第三次猜中时总是会输出Good Guess!
* A2:误i的初始值设为0,只要输入了一个猜的数就是猜了一次,所以i的初始值应该是1;
### 3.3 PTA题目3
给定四种水果价格,输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而输入0即退出;输入其他编号,显示价格为0。
#### 3.3.1 算法分析
``` 定义choice为输入的编号,定义n为输入编号的次数;
定义price为水果的价格;
for(n=1;n<=5;n++){
输入需要查询水果的编号
if(n==1) then
输出:[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
if(choice==0)
结束循环
switch(choice){
if choice为1,rice=3.00;结束循环;
case 2:price=2.50;break;
case 3:price=4.10;break;
case 4:price=10.20;break;
default:price=0.00;break;
}
换行输出对应的价格;
return 0;
}
#### 3.3.2 代码
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028222345523-11486118.png)
#### 3.3.3 测试数据
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028222913990-1306403419.png)
#### 3.3.4 PTA提交列表及说明
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028223009286-1027562457.png)
* Q1:菜单会循环输入五次,答案有多余字符;
* A1:在循环中加入另一个条件,即在第一次输入之前才输出菜单,第一次以后菜单不输出;
* Q2:输入超过1~4的数时答案错误;
* A2:在switch语句中加入一个判断,即输入1~4以外的字符时price=0.00;
# 4.代码互评
### 4.1 代码截图
* 同学代码
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028225111671-704049618.png)
* 我的代码
![](https://img2018.cnblogs.com/blog/1474670/201810/1474670-20181028224429602-1748755566.png)
###4.2
不同
1.空格的输出方式不同,我的是在每个拼音前输出,她的是最后单独输出;
2.计算每一位数的方式不同,我采用整除10与不断取余的方式,她采用整除平方的方式;
相同
1.都是先计算出整数的位数,然后才进去判断每一位数的循环;