一、PTA实验作业
题目1: 最佳情侣身高
1.实验代码
char sex; //定义字符型变量sex存放性别
int N; //定义整型变量N 表示人数
double height; //定义浮点型变量height表示身高
scanf("%d",&N);
for(N=N;N>0;N--){ //判断条件是否成立,成立则进入循环体
scanf(" %c%lf",&sex,&height); //输入性别代表字符和身高
if(sex=='F'){ //判断性别
height=height*1.09;
printf("%.2f\n",height);
}
if(sex=='M'){
height=height/1.09;
printf("%.2f\n",height);
}
}
2.设计思路
- 第一步:定义字符型变量sex,F表示女性,M表示男性,定义变量N表示人数,定义浮点型变量hight表示身高
- 第二步:输入N
- 第三步:满足N>0,N--
- 第四步:输入sex,hight
- 第五步:若性别为女,hight=hight*1.09;
- 第六步:输出hight
- 第七步:若性别为男,hight=hight/1.09;
- 第八步:输出hight
3.本题调试过程碰到问题及解决办法
- 每次只能输出一组数据,就结束程序。
- 通过观看翁恺视频,知道了可以在scanf语句的第一个%d前面加一个空格,避免每按一次回车都开始执行,可以实现多组数据
- 有过编译错误,for语句中要用;隔开
4.本题PTA提交列表
题目2: 特殊a串数列求和
1.实验代码
int a,n,s=0,i,m=0;//定义变量a,n,s,m,i,初始化变量s=0,m=0
scanf("%d%d",&a,&n);//输入a和n
for(i=1;i<=n;i++){ //判断条件,条件成立则进入循环体
m=m+a*pow(10,i-1); //调用函数pow,用于计算每一项的值
s=s+m;
}
printf("s = %d",s);
2.设计思路
- 第一步:定义变量a、n表示两个不超过9的整数,m表示每一项的值,s表示和,定义i
- 第二步:输入a、n
- 第三步:判断i<=n是否成立,若成立,进行第四步
- 第四步: m=m+a*pow(10,i-1);
s=s+m;
n++
- 第五步:重复三,四步,直到i>n
- 第六步:输出s
3.本题调试过程碰到问题及解决办法
- 答案错误,误把题目理解为要求a+aa......+aa*a...的和,导致代码错误,输出14的结果
- 格式错误,输出结果要用空格隔开
- 通过重新看题,重敲代码改正错误
4.本题PTA提交列表
题目3: 找出最小值
1.实验代码
int i,num,min,n;//定义变量num存放数字,min用于存放最小值,n存放数字个数
scanf("%d",&n);//输入n
scanf("%d",&num);//输入num
min=num;//将输入的第一个数赋值给min
for(i=1;i<n;i++){ //进行判断,条件成立则进入循环体
scanf("%d",&num);
if(min>num)
min=num;
}
printf("min = %d\n",min);
2.设计思路
- 第一步:定义变量i,mark表示输入的数字,min表示最小值,n表示输入数字的个数
- 第二步:输入n和第一个数据num
- 第三步:赋值min=num
- 第四步:判断i<n是否成立,若成立,执行步骤五
- 第五步:输入数据num,
- 第六步:若min>num
- 第七步:min=num
- 第八步:i++
- 第九步:跳到步骤四,重复执行,直到i>=n
- 第十步:输出最小值min
3.本题调试过程碰到问题及解决办法
- 运行程序,输入数据样例后,得到的结果是min=100
- 经过几组数据检验,发现if中的条件打错了,应该是min>num,否则后面的数只要大于第一个输入的数就会结束
4.本题PTA提交列表
题目4: 猜数字游戏
1.实验代码
int number,N,mynumber,i;//number用于存放被猜数,N存放最大次数,mynumber存放猜的数
scanf("%d%d",&number,&N);
for(i=0;i<=N;){
i++;
scanf("%d",&mynumber);
if(mynumber<0){ //判断被猜数是否小于0
printf("Game Over");
break;
}
else{ //否则进入下面的判断
if(mynumber>number){
printf("Too big\n");
}
else if(mynumber<number){
printf("Too small\n");
}
else if(mynumber==number&&i==1){
printf("Bingo!");
break;
}
else if(mynumber==number&&i<=3){
printf("Lucky You!");
break;
}
else if(mynumber==number&&i>3&&i<=N){
printf("Good Guess!");
break;
}
else{
printf("Game Over");
}
}
}
2.设计思路
- 第一步:定义变量number,mynumber,N,i=0,number表示正确数字,mynumber表示猜的数字,N表示最大次数
- 第二步:输入number和N
- 第三步:判断i<=N是否成立,若成立,跳到第四步执行
- 第四步:i++
- 第五步:输入mynumber
- 第六步:如果mynumber<0,输出Game Over,结束程序
- 第七步:如果mynumber>0,跳到第八步执行
- 第八步:判断若mynumber>number,输出Too big,并跳到第三步
- 第九步:若mynumber<number,输出Too Small,并跳到第三步
- 第十步:若mynumbernumber&&i1,输出Bingo!,结束程序
- 第十一步:若mynumber==number&&i<=3,输出Lucky You!,结束程序
- 第十二步:若mynumber==number&&i>3&&i<=N,输出Good Guess!,结束程序
- 第十三步:否则,输出Game Over
3.本题调试过程碰到问题及解决办法
- 第N次时,没有猜对是输出too big或者too small,不会输出game over,条件关系有点混乱,没有完全正确
- 原先在for循环之前加了一个条件判断,判断number是否大于零,用数据尝试时无法执行
- 后来去掉for前的判断,在循环体里面进行判断,得到了完全正确的答案
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
- for循环结构,基本形式为for(expr1;expr2;expr3){ 循环体 }
注意for中的三个expr要用;隔开
基本流程:
a.执行expr1
b.判断expr2,若为真,则执行c,否则退出循环
c.执行循环体
d.执行expr3
e.转到b执行
- while循环结构,基本形式为while(expr){ 循环体 }
注意while循环先判断再执行
基本流程:
a.判断expr,若为真则执行b,否者退出循环
b.执行循环体
c.转到a执行
- do-while循环结构,基本形式do{ 循环体 }while(expr)
注意do-while先执行再判断
基本流程:
a.执行循环体
b.判断expr,若为真,则执行a,否则退出循环
- 对for的嵌套循环有一定的了解,首先执行第一个大循环,若成立,进入小循环,直到小循环条件不成立,再跳到大循环判断,重复执行,直到条件都不成立,输出结果
2.本周的内容,你还不会什么?
- 循环结构中常要进行条件判断,如if else等的语句,对这样的条件判断做的还不太好,经常要漏掉,导致结果部分正确
- 对flag的运用还不太熟练,不大会用
- 对for的嵌套循环还不太熟悉,真正操作有点困难
- while循环中对while后面的条件判断应怎么选择还不太会
- 对极端值的处理不太懂
3.分支结构上机考试总结
- (1)这次分支结构上机考试中犯了很多大小错误,在第一题分段函数中,对数的表达错误,对于整型数除以整型数得到的也是整型数的遗忘,导致此题便耗费了大量的时间;在第二题计算个人所得税中,犯了if条件句中不能出现类似3500<w<=4500的语句,还有对w>0&&w<=1600条件下的处理不合理,导致答案频频错误;第三题,由于前两题的失误,还有看到输入语句要处理:的符号,此时心里已经乱成一团,所以此题甚至还没开始做答;对于第四题成绩转换,一开始想到的是运用switch语句,但是由于格式等没有记牢,后面改用if语句,期间耗费了不少时间;第五题还没开始看题。我觉得,会犯这些错误的主要原因就是不够熟练,代码量还远远不够,对于一些基本的语法、格式还不熟,而且对调试工具的使用也不熟练;还有就是心态问题,有点紧张,遇到难点卡住了就不知所措。
- (2)首先要保证程序的基本语法正确,不出现一些低级的语法错误,可以节省时间;其次,要熟练掌握对调试工具的使用,遇到程序错误时,要用调试监视变量的变化情况,找出错误的地方,并改正;再者,要学会用printf语句来调试程序,验证一些数据,比如极端值,看输出的结果是否正确,也可以找到程序的错误;最后,要调整心态,遇到程序问题不着急,冷静分析,才能找到错误。
- (3)对自己这次的考试成绩非常不满意,甚至因此郁闷许久。我认为最大的问题就是自己的懒,练习量太少,课本还没有去看,考前也没复习。所以,在此之后,我要克服的最大困难就是自己,多去看书、看视频、查阅资料,巩固基础知识,还有就是要多打代码,遇到不会的自己先思考,再和同学讨论,或者请教老师,不心急,不暴躁,不应付,不放弃,我相信对改进学习是有帮助的。