C语言第三次作业
题目一:
1.实验代码:
int N,i;/*将用户个数存放在N,循环控制变量存放于i*/
double H,E;/*将用户身高存放于H,对应情侣身高存放于E*/
char sex;/*将性别存放于字符型变量sex中*/
scanf("%d\n%c%lf\n",&N,&sex,&H);/*输入变量*/
for(i=1;i<=N;i++){
switch(sex){
case 'F':
E=H*1.09;
printf("%.2f\n",E);
break;
case 'M':
E=H/1.09;
printf("%.2f\n",E);
break;
}
scanf(" %c%lf",&sex,&H);
}
2.设计思路:
- 1.定义整型变量N,i,浮点型变量H,E,字符型变量sex;
- 2.输入变量;
- 3.i=1时,若sex为F,则E=H*1.09;否则E=H/1.09;
- 4.读入新变量;
- 5.重复步骤3.4.,直到i>N,退出循环;
3.本题调试过程碰到问题及解决办法:
-
1.刚开始时发现输入两个变量时只能输出一个值,后来经过调试发现应在循环内再输入一个scanf
读取下一个变量值; -
2.但是问题仍不完全解决,输入两个数是可以输出对应的数值,但当N=3时,依旧只能输出两个,后来发现计算机只能读取后面两位,
第一位无法读取,不过在PTA上也可以通过,所以有点纳闷,反复调试也找不出原因,希望有人指点迷津;
4.本题PTA提交列表:
题目二:
1.实验代码:
int a,n,i,s,j,item,sum; /*将乘数存于a,将a的个数存于n,将循环控制变量存于i,
将所有数的和存于s,将嵌套内的循环控制变量存于j*/
scanf("%d%d",&a,&n);/**/
s=0;
for(i=1;i<=n;i++){
item=a;
sum=0;
for(j=1;j<=i;j++){
sum=sum+item;
item=a*pow(10,j);
}
s=s+sum;
}
printf("s = %d",s);
2.设计思路:
- 1.定义整型变量a,n,i,s,j,item,sum;
- 2.输入变量a,n;
- 3.i=1,item=a,sum=0;
- 4j=1时,sum=sum+item, item=a*pow(10,j);
- 5.重复步骤4.,直到j>i,退出循环,i++,s=s+sum;
- 6.重复步骤3.4.5.,直至i>n,退出循环;
3.本题调试过程碰到问题及解决办法:
- 1.一开始第二个for循环中将 item=apow(10,j);写成 item=item10;后来经过调试改成 item=itempow(10,n);,经调试发现还是不对
最后改成 item=apow(10,j);即正确; - 2.刚开始忘记给item,sum赋初值,导致结果错误,后来经调试发现错误,改正过来;
4.本题PTA提交列表:
题目三:
1.实验代码:
#include<stdio.h>
int main()
{
int n,min,i,number;/*n存放输入个数,min存放最小值,i作为循环控制变量,number存放输入的数值*/
scanf("%d\n",&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.定义整型变量n,min,i,number;
- 2.输入数值n,number;
- 3.用min存放number;
- 4.i=1;再次输入number,如果number<min,则min=number;
- 5重复步骤4,直到i<n,退出循环;
- 6.输出min的值;
3.本题调试过程碰到问题及解决办法:
- 1.格式错误是因为“=”号前后的数字和字母都要空一行,在PTA的提示下改正(格式错误一般都要检查定义或输出);
4.本题PTA提交列表:
题目四:
1.实验代码:
#include<stdio.h>
int main()
{
int i,mynumber,yournumber,N;
scanf("%d%d",&mynumber,&N);
for(i=1;i>=0;i++)
{
scanf("%d",&yournumber);
if(yournumber<mynumber&&i<N){
printf("Too small");
putchar('\n');
}
if(yournumber>mynumber&&i<N){
printf("Too big");
putchar('\n');
}
if(yournumber==mynumber&&i==1){
printf("Bingo!");
break;
}
if(yournumber==mynumber&&i>3&&i<=N){
printf("Good Guess!");
break;
}
if(yournumber==mynumber&&i<=3){
printf("Lucky You!");
break;
}
if(yournumber!=mynumber&&i==N){
printf("Game Over");
putchar('\n');
i=1;
}
if(yournumber==mynumber&&i>N){
break;
}
if(yournumber<0){
break;
}
}
}
2.设计思路:
- 1.定义循环控制变量 i,程序的数字mynumber,用户的数字yournumber,输入个数N;
- 2.输入N;
- 3.输入mynumber;
- 4.’如果yournumber<mynumber,输出Too small;如果yournumber>mynumber且,输出Too big;如果yournumbermynumber且i1,输出Bingo!;
如果yournumbermynumber且i>3且i<=N,输出Good Guess!;如果yournumbermynumber&&i<=3,输出Lucky You!;如果yournumber!=mynumber&&iN,
输出Game Over;如果yournumbermynumber且i>N,或如果yournumber<0,跳出循环; - 5.重复步骤3.4,直到输入负数为止;
3..本题调试过程碰到问题及解决办法:
- 1.调试DEV时,条件都能过,但是PTA做出如下提示:
这个问题还未解决; - 2.看题时不够认真,断章取义,题目说“在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。”,结果只看了“最后每行给出一个用户的输入,直到出现负数为止。”这句话,以为只要不输入负数,就可以无限输入数值,直到才猜对为止;
4.本题PTA提交列表:
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
- 1学会了循环结构及嵌套循环;
- 2.学会了调试代码;
- 3.明白了自学能力的重要性;
- 4.看到大佬们写程序速度飞快,
他们之所以学得这么好,是因为他们比我们倾注了更多的时间,向他们学习;
2.本周的内容,你还不会什么?
- 1.遇到稍微复杂一点的题时,嵌套循环的算法便不会写;
- 2.不会建工程项目;
3.分支结构上机考试总结。
(1)哪些地方错了,为什么? - 1.第一题的log3^16不会表示,因为课本里没有这种函数的表示法,只有lnx的表示法,
后来发现原来只要用数学公式将其互相转换便可以,这里体现了数学里一个重要的转换思想; - 2.成绩转换的题发现输入九十几时最后总会输出AB,而不是A,后来发现是break没加;
- 3.最后一题没来得及提交,第二题没做,做题速度太慢,脑子运行太慢,有待改进;
(2)后续要怎么找程序错误? - 1.当时不会调试程序,以后可以通过调试程序找错误,
结合人工查错和PTA的错误提示来查错;
(3)对自己成绩满意么?不满意的话要怎么改进? - 1.不满意,提升空间非常大;
- 2.以后每天都要写代码,锻炼写代码的能力;
- 3.老师布置的作业要认真完成,绝不能再抱着马马虎虎的态度,必须赋予自己严谨的态度和使命感;
- 4.自学能力有待加强,有空多学一些有关C语言的书,可以巩固课内知识,同时拓展视野;