一、PTA实验作业
题目1
1.实验代码
int N;
double height;//height用于存放身高数据
char sex;//sex用于存放性别
scanf("%d",&N);//输入用户数N
if(N>0&&N<=10){
while(N!=0){
scanf(" %c %lf",&sex,&height);
if(sex=='F'){//如果sex为女性 ,执行以下内容
height=height*1.09;
printf("%.2f\n",height);
}
if(sex=='M'){//如果sex为男性,执行以下内容
height=height/1.09;
printf("%.2f\n",height);
}
N--;
}
2.设计思路
- 第一步:定义整型变量N用于存放用户数,定义双精度变量height用于存放男女身高以及输出时的最佳情侣身高,定义字符型变量sex用于存放性别
- 第二步:输入用户数N
- 第三步:如果0<N<=10,执行第四步
- 第四步:输入变量sex,height
- 第五步:如果sex为F,则运算height=height*1.09并以保留2位小数的方式输出height
如果sex为M,则运算height=height/1.09并以保留2位小数的方式输出height
- 第六步:N=N-1
- 第七步:如果N不等于0,执行第四步,否则执行第下一步
3.本题调试过程碰到问题及解决办法
- 问题:
虽然程序能运行,但单组数据用了两次结束程序,无法进行下一组数据的输入和输出
- 解决方法:在输入语句%c的前面加个空格,就能实现数据的再读取
4.本题PTA提交列表
题目二
1.实验代码
int a,n,i,sum,b;
scanf("%d %d",&a,&n);
sum=0;
b=0;
if(a>0&&a<=9&&n>0&&n<=9){
for(i=1;i<=n;i++){
b=b+a*pow(10,i-1);
sum=sum+b;
}
printf("s = %d",sum);
2.设计思路
- 第一步:定义整型变量a,n,i,sum,b用于存放正整数,存放最后输入正整数的位数,存放运算次数,存放求和
- 第二步:赋予sum的初值为0,b的初值为0
- 第三步:如果同时满足0<a<=9,0<n<=9的条件,执行以下步骤
- 第四步:令i=1
- 第五步:运算b=b+a*pow(10,i-1),sum=sum+b,i=i+1
- 第六步:如果满足i<=n的条件,则执行第五步,否则执行下一步
- 第七步:以“s = ”的形式输出sum
3.本题调试过程碰到问题及解决办法
- 问题:一开始用一个变量c去代替b,是算法变得稍微麻烦些,但结果是对的
- 解决方法:直接把b用于运算步骤中,无需c代替
4.本题PTA提交列表
题目三
1.实验代码
int min,n,number,number2,i;
scanf("%d",&n);
scanf("%d",&number);
min=number;
for(i=1;i<n;i++){
scanf("%d",&number2);
if(min>=number2){
min=number2;
}
else{
min=min;
}
}
printf("min = %d",min);
2.设计思路
- 第一步:输入整型变量min,n,number,number2分别用于存放最小的正整数,有几个正整数比大小,第一个输入的正整数数,后面输入的正整数
- 第二步:输入变量n,输入变量number
- 第三步:让min的初值为第一个输入的正整数number
- 第四步:令i的初值为1
- 第五步:输入一个新的数据number2
- 第六步:如果min>=number2,则令min=number2,否则令min=min
- 第七步:运算i=i+1,如果满足i<n的条件就执行第五步
- 第八步:以“min = ”的形式输出min的值
3.本题调试过程碰到问题及解决办法
- 问题:最先的代码中循环条件为i<=n,number2=0时调试中再循环一次,在第五步scanf("%d",&number2)时,无新数据读入,卡住进行不了下一步
- 解决方法:调试中发现,因为最先输入的数据number已经算一次输入了,所只要让i<n,少循环一次就好了
4.本题PTA提交列表
题目四
1.实验代码
int number,number2,N,i=0;
scanf("%d",&number);
scanf("%d",&N);
do{
scanf("%d",&number2);
if(number2<0){
break;
}
if(number2>number){
printf("Too big\n");
}
if(number2<number){
printf("Too small\n");
}
i++;
}while(number2!=number);
if(number2<0){
printf("Game Over");
}
else if(i==1){
printf("Bingo!");
}
else if(i>1&&i<=3){
printf("Lucky You!");
}
else if(i<=N){
printf("Good Guess!");
}
else if(i>N){
printf("Game Over");
2.设计思路,
- 第一步:输入整型变量number,number2,N,i,分别存放游戏机随机产生的数,,用户输入的一个数,猜测的最大次数,猜测次数
- 第二步:输入变量number,N
- 第三步:输入并读取新数据number2
如果number2<0,则使用break语句跳出该循环,执行第五步
如果number2>number,则输出Too big并换行
如果number2<number,则输出Too small并换行
- 第四步:运算i=i+1,如果满足number2不等于number则执行第二步,否则执行下一步
- 第五步:如果number2<0,则输出Game Over
否则如果i的值等于1,则输出Bingo
否则如果1<i<=3,则输出Lucky You!
否则如果i<=N,则输出Good Guess!
否则如果i>N,则输出Game Over
3.本题调试过程碰到问题及解决办法
- 问题:最开始代码第五步中条件是i=1,执行代码时Bingo!一直出现
- 解决方法:发现到上述一步时printf语句执行,重新审视条件,发现需要让i==1
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
- (1)首先我对调试的重要性得到了一次充分的认识,上周的分支结构程序调试过程中相当于一场练兵
而这周的循环结构,特别是嵌套循环,使用调试功能来找出错误,解决错误,就像是一场实战,大部分时间再调试当中度过
- (2)学会了使用for语句,while语句,do-while语句,特别是for和while语句,用得已经有的顺手了,写带有循环特性的题目,第一时间想到的就是这两个
- (3)也学会了更深奥一点的嵌套循环语法
2.本周的内容,你还不会什么?
- 大体上都掌握了,但是还不够熟悉,看到题目,要思考好一会儿才能下手,正确率也不高,
对循环结构的题,尤其是嵌套循环,起初看专业书的时候,愣是看了半天也不能很好的理解
要先做题目,从题目中去理解含义,再回过头来看书,才能有大致的领悟,还有需要用到类似
字符型变量的代码的题目(虽然是上周的内容,但这周老师课堂上有提到),比如乘法口诀里的杨辉三角
如何换行,如何整齐排版输出结果,还不是掌握得很充分.