一、PTA实验作业
题目1:最佳情侣身高差
1.实验代码
int N,i;
double height; //height表示身高
char sex; //sex表示性别
(height>=1.0&&height<=3.0);
(N>0&&N<=10);
scanf("%d",&N);
for(i=1;i<=N;i++){
scanf("\n%c%lf",&sex,&height);
if(sex==‘F‘){
printf("%.2f\n",height*1.09);
}
else{
printf("%.2f\n",height/1.09);
}
}
2.设计思路
- 第一步:首先定义整型变量N,i,双精度浮点型变量height存放身高,字符型变量sex存放性别,输入N的范围1.0<=hight<=3.0
- 第二步:输入N的值
- 第三步:输入性别sex,输入身高hight,变量初始化 i =1
- 第四步:如果输入的sex为F,则输出hight*1.09的值,并保留两位小数;否则,则输出hight/1.09的值,并保留两位小数。i 加一
- 第五步:重复步骤3,直到 i >N
3.本题调试过程碰到问题及解决办法
- 这一题写了各种方法,for语句,while语句,switch语句但还是输出答案等于0.00,后来请教了同学要在输入的地方加上换行符,改成这样scanf("\n%c%lf",&sex,&height);输入的M或者F就不会被空格吸收了。
4.本题PTA提交列表
题目2:特殊a串数列求和
1.实验代码
int a,n,i,s,item; //item用于存放每一项,s用于存放累加和
(a,n>0&&a,n<=9);
scanf("%d%d",&a,&n);
i=1;
s=0;
item=0;
while(i<=n){
item=item+a*pow(10,i-1);
s=s+item;
i++;
}
printf("s = %d\n",s);
2.设计思路
- 第一步:定义变量a,n,i,s,item,item用于存放每一项,s用于存放累加和,输入a,n的范围0<a,n<=9
- 第二步:变量初始化 i =1;s=0;item=0并且输入a,n的值
- 第三步:item=item+a*pow(10,i-1); s=s+item; i++;
- 第四步:重复步骤3,直到 i >N
- 第五步:输出s的值
3.本题调试过程碰到问题及解决办法
- 本题没有太大的问题,在最开始思考的时候没有引进变量item,后来思考了几分钟想到公式就正确了。
4.本题PTA提交列表
题目3:找出最小值
1.实验代码
int n,i,number,min; //min为最小值
(n>0);
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\n",min);
2.设计思路
- 第一步:定义整型变量i,n,number,min,n>0
- 第二步:输入n的值,和一个number的值,并且将number的值赋给min
- 第三步:再输入一个number,如果number>min,则把number的值再赋给min,i++;
- 第四步:重复步骤3,直到i>=n
- 第五步:输出miin的值
3.本题调试过程碰到问题及解决办法
- 把提示放进了循环里,输出了多个Enter marks:看到与题目输出不符,就把printf调了出去,然后devc++上对了pta还是答案错误,后来想到题目给出的输出格式里只有min等于多少,就把所有的输出提示都删掉了就对了。
4.本题PTA提交列表
题目4:猜数字游戏
1.实验代码
int yournumber,mynumber,N,i,count;
scanf("%d%d",&mynumber,&N);
for(count=1;count<=N;count++){
scanf("%d",&yournumber);
if(yournumber<0){
printf("Game Over\n");break;
}
else if(yournumber>mynumber&&count<=N)printf("Too big\n");
else if(yournumber<mynumber&&count<=N)printf("Too small\n");
else if(yournumber==mynumber){
if(count==1){
printf("Bingo!\n");
break;
}
if(count==2||count==3){
printf("Lucky You!\n");
break;
}
if(count>3&&count<=N){
printf("Good Guess!\n");
break;
}
}
}
if(yournumber!=mynumber&&count>N)printf("Game Over");
2.设计思路
- 第一步:定义变量 mynumber,yournumber,i,N。
- 第二步:输入变量mynumber和N的值,mynumber表示系统随机产生数,N控制循环次数。
- 第三步:进入循环语句判断输入的数与系统随机产生数的大小,如果在第一次就猜中就输出Too big,在前三次猜中就输出Lucky You!,在规定次数内猜中就输出Good Guess!,如果太大就输出Too big,太小就输出Too small,在游戏次数超过或者输入超出范围就输出Game Over。
3.本题调试过程碰到问题及解决办法
- 这题真的是印象深刻,devc++上的运行是对的,但是改了好几次提交了一直都只有一分,然后就一直修改,最后问了同学之后才发现,一直没有关注输入的顺序,mynumber与N输入顺序调换了,应该先mynumber再N。在当i>N时输出的game over也在循环外,可是就算在循环里面也是运行正确的,最后我还是把输出语句放到了循环外。如图
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名。
PTA排名
提交列表
三、本周学习总结
1.你学会了什么?
- 学会了for语句循环,在约分最简分式那一题打破了惯性思维(惯性只使用i=1;i<=n;i++)。学会了字符型变量的输入,要注意回车和空格,回车空格也算字符,否则需要输入的字符就会被空格或者回车代替。
- 会在恰当的位置使用break结束循环。
- 学会了利用devc++进行简单的调试,根据输入数据的变化找出出错的地方。
2.本周的内容,你还不会什么?
- 比较复杂的题目错了还是对调试比较不懂,自己的思路很难理清
- do-while语句很少用,可能是不太判断,所以经常都是用while或者for语句
- 对于没有输入的题目,像那个韩信点兵的题,就感觉会很吃力,但是这种例型我觉得多做做就会懂得的。
3.分支结构上机考试总结。
(1)哪些地方错了,为什么?
- 那个输出时间的,最开始把12点也减去了12,然后加上PM,因为我看题目认为中午12点单位是PM,就把它跟下午的时间放在一起,导致答案错误
(2)后续要怎么找程序错误?
- 由于时间不足我是问同学的,后续我想多利用一下调试,看看是哪一步出的问题,在进行修改,多练习调试
(3)对自己成绩满意么?不满意的话要怎么改进?
不满意。调试还是不太会,不知道在哪里断点比较好,有的时候就只会干看着,然后自己觉得哪里不对再去修改,并且打代码太慢,都很浪费时间。向同学请教,并且经常使用调试来寻找错误,然后打字练练练。