一、第一次PTA作业
题目1.温度转换
本题要求编写程序,计算华氏温度150°F对应的摄氏温度。计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。
1.实验代码
#include<stdio.h>
int main()
{
int C,F=150;
C=(F-32)/9*5;
printf("fahr = 150, celsius = %d",C);
return 0;
}
2.设计思路
-
题目不要求输入且变量值已经有了所以只需要输出语句就行
-
先对所用到的变量定义
-
在对C进行赋值后直接用printf语句进行输出
3.本题调试碰到问题及解决办法
-
题目较为简单没有输入所以只需一个printf语句就可以解决
-
原本打算不输入公式直接在printf中将C用公式表示,不过对在printf中是否还能使用小括号不清楚就将C的赋值公式放在外面了
-
之后尝试在printf中直接对C进行赋值发现可行,所以printf中可以使用小括号
printf("fahr = 150, celsius = %d",C=(F-32)/9*5);
题目2.将x的平方赋值给y
假设x的值为3,计算x的平方并赋值给y,分别以“y = x ∗ x”和“x ∗ x = y”的形式输出x和y的值。
1.实验代码
#include<stdio.h>
int main()
{
int y,x=3;
printf("%d = %d * %d\n",y=x*x,x,x);
printf("%d * %d = %d",x,x,y);
return 0;
}
2.设计思路
-
题目依旧不要求输入且已有变量值所以直接用printf输出
-
同样先对所用到的变量定义,此处先对x赋值
-
第一行为对y赋值所以应将公式放入y处完成赋值,而第二行为对x*x赋值所以直接输入y即可
-
直接使用printf语句输出,为了方便将所需公式放入printf语句中
3.本题调试碰到问题及解决办法
-
题目同样较为简单没有输入所以只需一个printf语句就可以解决
-
因为第二行是直接复制粘贴第一行所以第一次提交粗心没注意赋值对象的变化使得等号位置错误
-
对此题这样完成有点疑问,我这样完成应该是想到题目是考察对赋值对象的判断,不过我觉得题目可能还有其他要求而被我忽略了,之后如果发现会在这里补上
-
因为pta提交的特殊性所以如果第二行和第一行对换后结果是否一样?
printf("%d * %d = %d\n",x,x,y=x*x);
printf("%d = %d * %d",y=x*x,x,x);
- 两行对换后y的输出果然出错,发现第一行y并未赋值,如此看来此题如果这样完成又太过简单,是否还有其他思路?之后会补上
题目3.是不是太胖了
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤是公斤的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)
1.实验代码
#include<stdio.h>
int main()
{
int H;
float W;
scanf("%d",&H);
W=(H-100)*0.9;
printf("%.1f",W*2);
return 0;
}
2.设计思路
-
题目要求输入100 < H ≤ 300的正整数作为身高不过由于输入可以由我们决定所以我对100到300的范围进行了无视,不过我觉得这种行为以后可能会吃亏但目前还不知道怎么解决
-
因为体重提到了小数点所以用float对体重定义
-
利用公式对体重赋值后用printf进行输出即可
3.本题调试碰到问题及解决办法
-
题目中有整形和小数所以需要有两种定义
-
对于float和double的选择想了一会,百度了也没准确答案,不过之后printf中的输出.1f中f为浮点数类型所以用了f,不知道如果前面用了double后是否还能使用.1f这样输出
-
差点没看到题目的单位问题,发现后直接在printf里对W乘2
题目4.输出各位数字
给定一个三位正整数,输出其百位数字、十位数字及个位数字。
1.实验代码
#include<stdio.h>
int main()
{
int A,a,b,c;
scanf("%d",&A);
a=A/100;
b=(A/10)%10;
c=A%10;
printf("%d,%d,%d",a,b,c);
return 0;
}
2.设计思路
-
定义A后额外定义百十个位的数字
-
百位较为简单因为是整形所以除以100后只会输出整数,小数点后的数直接排除,由于数值较小所以暂时没想到特殊情况
-
十位需先将个位去除所以我除以10使个位变成小数直接消去,百位此时变成个位,数也变成2位数更好计算,然后在除以10取余数就是十位
-
个位数最简单直接除以10取余数就是个位
-
最后按照格式进行输出
3.本题调试碰到问题及解决办法
-
本题较为困难不过去年做过这题印象清晰所以基本没想直接就打出来了
-
因为数值较小只有三位数所以暂时没想到什么特殊情况不过这种办法也仅能在数值小的情况下使用
-
后面会学到几种直接取出某个数的方法不过去年我后面的课程落下所以不会操作,过段时间会用后面的办法来重新尝试这题
-
c语言中整形直接排除小数的机制不知道是否有什么漏洞,是否会造成死循环,对这方面了解不够希望以后能够实验
二、截图本周题目集的PTA提交列表及最后排名。
PTA提交列表
PTA排名
三、本周学习总结
1.你学会了什么
因为这些东西去年学过基本都是重复的知识所以这次作业和实验加深了印象同时巩固了以前的基础,因为对之后的课程也有了解所以有了一些新的看法和疑问都在前面的总结中提出了。
2.本周的内容你还不会什么
这门课程对比其他理论课来说更加注重实践,所以书本上的理论并非非常系统的从浅入深,夹杂一些之后的知识,例如浮点数的表示就分了两种而课本没有详细说明,同时还有各种特殊情况课本没有演示,这都是需要我们去实践才能得出的结论,所以现在学的东西都是基础不懂的东西还有很多,而这些都要靠代码量和写代码的时间来补充。
3.你碰到什么困难,打算如何解决?
因为去年这些东西都学过题目也做过所以思路很清晰就把代码敲出来了,主要也是因为题目简单只要细心完全没有难度,我就因为有题目不细心导致没有一次提交就完成,不过也不能说完全没有收获,最直接的感受就是写代码的时间越多就越熟悉之后的负担就越轻,反之也是,就像滚雪球一样,所以这学期会非常重视和增加写代码的时间。
之前dev编译完成后无法运行的问题问过老师后直接建空白页不在建项目就解决了,但是百度后还是不明白为什么建项目无法运行的问题,因为去年一直是用建项目来写代码的并没有出现这种情况。因为这个耗了很久无法看运行结果所以代码都写在记事本,解决之后才在pta上一次性提交。