C语言第三次博客作业---单层循环结构
题目1: 最佳情侣身高
1.实验代码
int N,i;
double length;
char ch;
( length<=3.0)&&(length>=1.0);
N<=10;
scanf("%d\n",&N);
i=1;
while (i<=N){
scanf("%c%lf\n",&ch,&length);
switch (ch){
case'M' :length=1.0*length/1.09;
printf("%.2f\n",length);break;
case'F' : length=length*1.09;
printf("%.2f\n",length);
break;
}
i++;
}
2 设计思路
- 1 定义变量length为身高,N为查询的用户数,循环变量i,字符变量ch
- 2 i=1
- 3 如果字符变量为M则:length=1.0length/1.09,如果为F则:length=1.0length/1.09
- 4 i++
- 5 重复步骤3,直到i大于N
3.本题调试过程碰到问题及解决办法
-
1 在调试的过程中输入M或F都跳过循环或者直接进入case‘M’的语句然后就输出了,不会进行判断不知道是自己的调试方法有问题还是程序有问题
-
2 通过和同学讨论改变编译的办法,先输入字符变量让它判断是男还是女然后再输入身高进行计算,但还是有一个问题就是调试的时候最后结果只出来一个另一个出不来实在不知道如何解决,但这段代码在PTA上运行确是答案正确,实在让人恼火求老师指点
4.本题PTA提交列表
题目2: 特殊a串数列求和
1.实验代码
int i,s,a,tmp,n;
s=0;
scanf("%d%d",&a,&n);
tmp = a;
for(i = 0; i < n; i++){
s += tmp;
tmp = tmp * 10 + a;
}
printf("s = %d",s);
2 设计思路
- 1 定义变量tmp储存每项的值,s存放数列的和,循环变量i,数列的项n,特殊值a
- 2 i=1,s=0,tmp=a
- 3 s += tmp; tmp = tmp * 10 + a;
- 4 当i>=n时推出循环
3.本题调试过程碰到问题及解决办法
- 1 在写这题的时后吧aaaa看成是aaa*a导致调试过程中答案一直出错
- 2 后来在自己认真看了题目后才恍然大悟吧原来的s+=tmp,tmp=tmp*a改为s += tmp; tmp = tmp * 10 + a;才得出正确答案,以后审题一点要仔细
4.本题PTA提交列表
题目3: 找出最小值
1.实验代码
int i,n,min,k,l;
scanf("%d",&n);
scanf("%d",&l);
min=l;
for(i=1;i<n;i++){
scanf("%d",&k);
if(k<min){
min=k;
}
}
printf("min = %d",min);
2 设计思路
- 1 定义变量l,k存放输入的数字,n限制输入数字的个数,min存放最小的数值,循环变量i=1
- 2 先输入n再输入第一个数字,判断i石否大于等于n,不是则跳过循环输出min
- 3 是则进入循环,再输入一个数字比较两数大小把小的赋予min
- 4 最后输出min
3.本题调试过程碰到问题及解决办法
- 1 刚开始先判断数字是大于0还是小于0如果数字小于0就把那数字赋予min按照PTA的测试点来写代码有顺序的输入的出来的答案是对的但只要改变顺序就答案错误
- 2 翻阅数p83例题在n个成绩中选出最大值得知正确解法
4.本题PTA提交列表
题目4: 猜数字游戏
1.实验代码
int count=0,flag,mynumber,yournumber,N;
flag=0;
scanf("%d",&mynumber);
scanf("%d",&N);
while(count<N){
scanf("%d",&yournumber);
count++;
if(yournumber<0){
break;
}
if (yournumber==mynumber){
if (count<=3&&count>1){
printf("Lucky You!\n");
}
if (count>3&&count<=N){
printf("Good Guess!\n");
}
if (count==1){
printf("Bingo!\n");
}
flag=1;
break;
}
else if(yournumber>mynumber){
printf("Too big\n");
}
else {
printf("Too small\n");
}
}
if (flag==0){
printf("Game Over\n");
}
2 设计思路
- 1 定义变量mynumber存放被猜数yournumber存放你所猜的数,count记录你所猜的次数,N为允许猜的次数,flag来判断是否猜中
- 2 count=flag=0
- 3 输入N和mynumber,判断N是否大于count是则进入循环并输入yournumber同时count++;
- 4 如果yournumber<0则直接退出,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”
- 5 如果count>N则跳出,判断flag是否等于0是则Game Over
3.本题调试过程碰到问题及解决办法
- 1 刚开始以为是让电脑随机产生一个数字采用书上#include<stdlib.h>#include<time.h>的方法来产生结果答案总是飘忽不定和PTA上的答案不相符
- 2 后来与同学交流得知是自己输入的mynumber才调整编程把电脑随机产生数字改写才让答案正确
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
- 1 学会如果程序不能调试的话要重新把编程文件的名字改为英文重新编译再来调试
- 2 在输入字符的时候字符会把空格吸收要在回车的地方加putchar或者在%c前加空格
- 3 一些符号可以直接写在scanf中不需要另外输入
- 4 利用交换值和赋值的方法求数字排大小问题
2.本周的内容,你还不会什么?
- 1 对于有时候在if语句中再嵌套一个switch语句有时判断会跳过switch语句让我十分不知所措,不知道是我程序有问题还是什么。
3.分支结构上机考试总结。
(1)哪些地方错了,为什么?
- 1 在题目要求输入字符时忘记语法,导致不知道整道题作废0分
- 2 不知道怎么调试错误导致答案出错不知道怎么改
(2)后续要怎么找程序错误? - 1 通过程序调试或在适当的地方用printf输出数据来找错误
(3)对自己成绩满意么?不满意的话要怎么改进? - 1 不满意,要加强对语法的记忆与前面知识的复习,多看书,多独立思考。希望下次能取得好成绩