一、PTA实验作业
题目一、最佳情侣身高差
1.实验代码
int N;//存放输入的人数
char sex;
double hight1,hight2;//分别存放输入的身高和输出的身高
scanf("%d",&N);
for(N=N;N>0;N--)
{
scanf(" %c%lf",&sex,&hight1);
if(sex=='M'){
hight2=hight1/1.09;
printf("%.2f\n",hight2);
}
if(sex=='F'){
hight2=hight1*1.09;
printf("%.2f\n",hight2);
}
}
2.设计思路
- 第一步:定义一个整形变量N,定义一个字符型变量sex,定义两个双精度浮点变量height1,height2
- 第二步:输入查询的人数N
- 第三步:输入性别sex以及身高height1
- 第四步:判断性别,如果输入的性别为男,计算hight2=hight1/1.09
- 第五步:若为输入的性别为女,则计算hight2=hight1*1.09
- 第六步:输出height2
- 第七步:N--
- 第八步:重复第3步,直到N<=0
3.本题调试过程中碰到的问题及解决办法
- 碰到的问题:scanf(" %c%lf",&sex,&hight1)该语句中%c前没有空格,第一轮循环结束后,回车键被当做字符,导致第二轮循环直接结束。
- 解决办法:尝试输入N为3,发现第二轮输出为空,经过调试发现第一轮和第三循环中判断条件没有执行,想到上机考试最后一题没加%c前空格导致不能进入判断,从而进行修改。
调试过程截图:
这个时候判断sex,输入的为M,但并未判断
判断的F也没有进入,进入了下一次循环
第二次循环并没有输入,但是输入的语句被跳过了,进入了M的判断
第三次循环输入数据后再次被跳过,程序结束
本题PTA提交列表
题目二、特殊a串数列和
1.本题实验代码
int a,n;//a用于存放输入的数,n用于存放a的最高个数
int s=0;//s用于存放数的和
int b=1,c;//c用于存放每个an的值,b表示c的最高位数为10的多少次方
scanf("%d%d",&a,&n);
c=a;
for(b=1;b<=n;b++){
s=s+c;
c=c+a*pow(10,b);//计算下一个an
}
printf("s = %d\n",s);
2.设计思路
- 第一步:定义5个整形变a,,n,s,b,c
- 第二步:输入a和n
- 第三步:赋值c=a
- 第四步:s=s+c
- 第五步:计算下一个an,c=c+a*pow(10,b)
- 第六步:b++
- 第七步:重复第四步,知道b<=n
- 第八步:输出s的值
3.本题调试过程中遇到的问题及解决方法
- 遇到的问题:本题的问题主要在计算每一个an的值,计算过程中没有另外定义一个变量来存放上一个an,导致每次循环计算是an的值出现问题
调试过程截图:
- 解决方法:另外定义了一个变量c用于表示每个特殊值
4.本题PTA提交列表
题目三、找出最小值
1.本题代码
int i,mark,min,n;//mark用于存放数字,min存放最小值
scanf("%d",&n);
scanf("%d",&mark);
min=mark;
for(i=1;i<n;i++){
scanf("%d",&mark);
if(min>mark)
min=mark;
}
printf("min = %d\n",min);
return 0;
2.设计思路
- 第一步:定义四个整形变量i,mark,min,n
- 第二步:输出数字个数n
- 第三步:输入一个数字mark
- 第四步:赋值min=mark
- 第五步:输入一个数字mark
- 第六步:判断min与mark的大小,若min>mark,赋值min= mark
- 第七步:i++
- 第八步:重复第五步,直到i>=n
- 第九步:输出最小值min
3.本题调试过程中遇到的问题及解决方法
无
调试过程截图:
4.本题PTA提交列表
题目四、猜数字游戏
1.实验代码
int number;//number用于存放被猜数
int mynumber,N;//mynumber用于存放猜的数,N用于存放猜测的最大次数
int count=0;//count用于存放猜测的次数
scanf("%d %d",&number,&N);
while(count<=N){
count++;
scanf("%d",&mynumber);
if(mynumber<0){ //判断输入数字是否为负数,若为负数直接结束
printf("Game Over\n");
break;
}else{ //输入的数字为正数,进行判断是否猜中
if(mynumber>number){
printf("Too big\n");
continue;
}else if (mynumber<number){
printf("Too small\n");
continue;
}else { //猜中数字,判断猜中的次数
if(count==1){
printf("Bingo!\n");
break;
}
if(count<=3){
printf("Lucky You!\n");
break;}
if(count>3&&count<=N){
printf("Good Guess!\n");
break;
}
}
if(count>N){
printf("Game Over\n");
}
}
}
2.设计思路
- 第一步:定义四个整形变量number,mynumber,count=0,N
- 第二步:输入被猜数number和最大猜测次数N
- 第三步:count++
- 第四步:输入用户猜的数mynumber
- 第五步:判断number是否为负数,若为负数,输出Game Over
- 第六步:若不为负数,判断用户输入的数和被猜数的大小,若用户猜的数大于被猜数,则输出Too Big,重复第四步
- 第七步:若用户猜的数小于被猜数,则输出Too Small,重复第四步
- 第八步:若用户猜的数等于被猜数,判断用户所用的次数count,若count=1,输出Bingo!
- 第九步:若用户所用的次数count大于1,小等于3,输出Lucky You!
- 第九步:若用户所用的次数count大于3,小等于N,输出Good Guess!
- 第十步:若用户所用的次数count大于N,输出Game Over
3.本题调试过程中遇到的问题及解决方法
遇到的问题:最后一个判断count是否大于N,最开始写的是N+1,导致超过N次猜对出现错误
解决方法:通过调试发现需要多输入一次,但最后一次输出为空,所以改成count>N
发现错误的调试过程截图:
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
- 通过本周的学习,我学会嵌套循环的应用,还学会了getchar的用法。
- 通过对嵌套循环结构的学习,我明白了先写算法的重要性,以前总是看了题目打开Dvec就开始打代码,到循环结构发现直接打代码很吃力,而且会有很多问题,有很多地方会考虑的不周到出现纰漏,导致错误,先写算法的话,能捋清楚思路能知道应该用什么结构去处理问题,会有一个大致的方向,这样打代码的过程就不会那么吃力。
- 同时也开始重视调试的过程,调试的过程相当于在复习一遍算法,这个过程能找出很多算法上的问题。
- 还有变量名的问题,这周的代码,我开始更多的用变量的英文名定义,一些没有用英文名的变量名后面也会加上注释
2.本周的内容,你还不会什么?
- 对本周的内容困惑的地方主要是对于三种循环语句应用什么时候最好,虽然明白它们的区别但是每次打代码的时候只是凭感觉去选择应该用哪一个,特别是在do while 和while上,明知道是有区别的,有时感觉用起来没有区别,只要适当的改变变量的值或者判断的条件,好像先判断再做和先做再判断都行。