一、PTA实验作业
题目1
1.实验代码
int i,N;//N为查询用户数
double high,height;//high表示查询用户身高height表示另一半身高
char sex;//sex表示性别
scanf("%d",&N);
for(i=1;i<=N;i++){
scanf(" %c%lf",&sex,&high);
switch(sex)
{
case 'F' :
height=high*1.09;
break;
case 'M' :
height=high*1.0/1.09;
break;
}
printf("%.2f\n",height);
}
2 设计思路
- 1.定义两个整型变量i,N,N为查询用户数。再定义两个双精度浮点型变量high,height,high表示查询用户身高height表示另一半身高,再定义一个字符型变量sex表示性别。
- 2.输入要查询的用户数N。
- 3.输入查询用户的性别,身高。
- 4.如果输入性别为F,height=high*1.09;结束循环;
- 5.如果输入性别为M,height=high*1.0/1.09;结束循环。
- 6.重复步骤3,4,5直到输入用户数大于N。
- 7.输出height。
3.本题调试过程碰到问题及解决办法
- 不知道为什么第一次打出的程序有三个输出,输入也没有办法一次输入两个用户的数据。
解决办法:我的这道题没有办法调试,后来是问了同学,同学说scanf语句不能放到循环的最后,改过来之后就对了。
4.本题PTA提交列表
题目2
1.实验代码
int i,n,number,sum,item,b;//number表示要输入的数字a,sum表示和,item表示第n项的值。
scanf("%d%d",&number,&n);
sum=0;
b=number;
for(i=1;i<=n;i++){
item=b;
b=b*10+number;
sum=sum+item;//累加和
}
printf("s = %d",sum);
2 设计思路
- 1.定义六个整型变量i,n,number,sum,item,b。number表示要输入的数字a,sum表示和,item表示第n项的值。
- 2.输入a,number.
- 3.赋初值sum=0,b=number.
- 4.item=b,b=b*10+number,sum=sum+item.
- 5.重复步骤4,直到输入的a的位数大于n.
- 6.输出结果sum= 。
3.本题调试过程碰到问题及解决办法
- 1.不知道aa, aaa,到底该怎么样用计算式表达出来。
解决办法:一开始想用item=number*(pow(10,i))/10+number,但是根据运算结果和调试过程来看这个式子是错误的,后来去百度了一下借鉴别人的做法来表示a, aa.
- 2.忘记给sum赋初值,导致每次运行结果都比正确结果多1
解决办法:用devc调试发现后解决的。
4.本题PTA提交列表
题目3: 找出最小值
1.实验代码
int i,n,number,min;//n表示输入数据的个数,number表示输入的正整数,min表示最小值
scanf("%d",&n);
scanf("%d",&number);
min=number;
for(i=1;i<n;i++){
scanf("%d",&number);
if(number<min){
min=number;
}
}
printf("min = %d",min);
2 设计思路
- 1.定义四个整型变量i,n,numberr,min.n表示输入数据的个数,number表示输入的正整数,min表示最小值
- 2.输入n,number.
- 3.先让min=number.
- 4.再输入一个number。
- 5.如果number<min,则number=min,否则min的值不变。
- 6.重复步骤3,4,5直到number输完为止。
- 7.输出min.
3.本题调试过程碰到问题及解决办法
- 语句有进入循环,但是却没有办法进行大小比较,最小值永远都是一开始赋给min的初值。
- 解决办法:当时也不知道怎么解决这个问题,然后突发奇想再加一个scanf,莫名奇妙就对了。
4.本题PTA提交列表
题目4: 猜数字游戏
1.实验代码
int n,i,mynumber,yournumber;//n表示可以猜测的最多次数,i表示用户猜的次数,mynumber表示随机数,yournumber表示用户输入的数字
scanf("%d%d",&mynumber,&n);
for(i=1;i<=n;i++)
{
scanf("%d",&yournumber);
if(yournumber<0){ //用户输入数字小于0时
printf("Game Over\n");break;
}
if(yournumber>mynumber){
printf("Too big\n");
}
else if(yournumber==mynumber){
if(i==1){printf("Bingo!\n");
break;
}
if(i>1&&i<=3){printf("Lucky You!\n");
break;
}
if(i>=4&&i<=n){printf("Good Guess!\n");
break;
}
}
else{
printf("Too small\n");
}
}
if(yournumber>=0&&yournumber!=mynumber){
printf("Game Over\n");}
2 设计思路
- 1.先定义四个变量n表示可以猜测的最多次数,i表示用户猜的次数,mynumber表示随机数,yournumber表示用户输入的数字.
- 2.如果用户输入数字小于0,输出Game Over。
- 3.如果用户输入数字大于0,且输入数字大于随机数,输出Too big
- 4.如果用户输入数字大于0,且输入数字大于随机数,输出Too small
- 5.如果用户输入数字大于0,且输入数字等于随机数,并且只输入了一次,输出Bingo!
- 6.如果用户输入数字大于0,且输入数字等于随机数,并且输入次数大于一小于三,输出Lucky You!
- 7.如果用户输入数字大于0,且输入数字等于随机数,并且输入次数大于三小于n,输出Good Guess!
- 8.如果用户输入数字大于0,且输入数字等于随机数,并且输入次数大于n,输出Game Over。
- 9.重复步骤2,3,4,5,6,7,8,直到程序有输出。
3.本题调试过程碰到问题及解决办法
- 1.一开始将输入数字小于0,以及输入次数大于n的情况放在一条语句中,导致错误。 解决办法:将这两种情况分开讨论就对了。
- 2.在输入数字大于随机数时紧接着用if-else 语句判断输入数是否小于随机数,导致每次输入数等于输出数时都输出Too small Good Guess! 解决办法:用devc调试发现如果还是要使用if-else语句,只要将TOO small. 的情况放到最后讨论就好。
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名。
PTA排名
三、本周学习总结
1.你学会了什么?
- 1.对用devc调试来解决问题熟练了一点,比如这次的a+aa+aaa的值,调试到某一步时可以明显看出是这一步出了问题才导致结果错误,因为数学式每一步的结果都很确定,这类问题的调试会一点了。
- 2.之前一直不知道putchar到底是用来干嘛的,,,,但是现在至少知道了它可以让输出结果整个换行。就像让average = 71.2 count = 4,变成
average = 71.2
count = 4
2.本周的内容,你还不会什么?
- 1.关于调试还是有很多问题不明白,就像找出最小值那题,明明语句有进入循环,但是就是没有进行大小比较,这个时候就不知道要怎么办了,还有某些时候语句调试时没办法进入循环,不知道是不是断点设错了,不是很明白。
- 2.现在一直用for语句做题,对于新学的while,do-while 语句一点也不熟练,所以感觉现在还是需要多练练,多做题。
- 3.平时很多语法,知识点都会了,但是离开课本就不行,不看书连switch后面要加个大括号都可能忘记。
3.分支结构上机考试总结。
(1)哪些地方错了,为什么?
- 1.还是太依懒课本,没有课本连有些很简单的语句的基本语法都没有记住。就像switch后面是有大括号的都忘记了。
- 2.时间分配不合理,在前面有一道题怎么调试都没有对,就一直在调试那一题,导致后面时间不够题目都没有看清就敲代码,结果当然是对不了的。
(2)后续要怎么找程序错误?
- 暂时要借助devc调试,在调试之前会先看看有没有逻辑上的错误,有时可能要请教同学来找程序错误。
(3)对自己成绩满意么?不满意的话要怎么改进?
- 非常不满意,我本来觉得自己的C语言或许学的不是那么好,但是也没有那么差,但是离开课本以后我发现自己真的没有办法单独写程序,所以以后在写程序时会尽量脱离课本写,实在不会再看一下课本,不然再这么依赖课本,以后会更麻烦。