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.都是先计算出整数的位数,然后才进去判断每一位数的循环;
原文地址:https://www.cnblogs.com/NOH8xxy/p/9867122.html