一、PTA实验作业
题目1:计算分段函数
1.实验代码
double x,y;
scanf("%lf",&x);
if(x>=0){
y=sqrt(x);
}
else{
y=pow(x+1,2)+2*x+1/x;
}
printf ("f(%.2f) = %.2f
",x,y);
2 设计思路
- 1.定义两个双精度浮点型变量x,y
- 2.输入x的值
- 3.判断x是否大于等于0
- 4.若是,则y=sqrt(x),若否,则y=pow(x+1,2)+2*x+1/x
- 5.输出y的值
3.本题调试过程碰到问题及解决办法
-
(1)编译问题:定义了变量x和f(x)
-
解决办法:从错误提示中知道不能用f(x),百度后得知c语言中表达式的左边不可以有变量,故不能用f(x),只能重新设变量y
4.本题PTA提交列表(要提交列表,不是结果)
题目2:7-4 输出三角形面积和周长##
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
1.实验代码
int a,b,c;
double s,area,perimeter; //area代表三角形的面积,perimeter代表三角形的周长
scanf("%d %d %d",&a,&b,&c);
if(a+b>c&b+c>a&a+c>b) //检验abc三边是否能构成三角形
{
s=(a+b+c)/2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));
perimeter=a+b+c;
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else{
printf("These sides do not correspond to a valid triangle");
2 设计思路
- 1.定义三个整数型变量a,b,c来存放三角形的三条边,定义三个双精度浮点型变量s,area,perimeter
- 2.输入三条边的大小a,b,c
- 3.判断输入的a,b,c是否能构成三角形
- 4.若能,则 s=(a+b+c)/2.0, area=sqrt(s(s-a)(s-b)*(s-c)) , perimeter=a+b+c;并输出area和perimeter的值
- 5.若不能,则输出错误提示-These sides do not correspond to a valid triangle
3.本题调试过程碰到问题及解决办法
-
1.sqrt函数的使用错误导致编译错误
-
2.解决方法:上网百度DevC++的错误提示得知是sprt函数的使用错误并且知道了sqrt的使用对象必须是double或是float型的数据
-
3.同时也反思了:尽管一开始定义s是double型,但是一开始是用s=(a+b+c)/2 得来的,又忽略了整数除以整数等于整数这个易错点
所以要得到double型的s,必须用s=(a+b+c)/2.0
4.本题PTA提交列表(要提交列表,不是结果)
题目3:7-6 出租车计价##
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
1.实验代码
double s,money; //路程和路费
int time; //等待时间
scanf("%lf%d",&s,&time);
if(s<=3){ //判断距离
money=10;
}
else if(s>3&&s<=10){
money=10+(s-3)*2;
}
else{
money=10+7*2+(s-10)*3;
}
if(time<5){ //判断时间
money=money+0;
}
else{
money=money+time/5*2;
}
printf("%.lf",money); //%.lf可用于取整
2 设计思路
- 1.定义两个双精度浮点型变量s,money分别来存放路程和路费,定义一个整数型变量time来存放路途中耽误的时间
- 2.判断距离是否大于3,若不是,则money=10,若是,则money=10+72+(s-10)3
- 3.判断时间是否大于5,若不是,则money=money+0;若是,则 money=money+time/5*2
- 4.输出money
3.本题调试过程碰到问题及解决办法
- (1)编译错误:强行用%d来输出double型的money来实现输出整数型
解决方法:上网百度到double型变量想要四舍五入成整数输出的方法是%.1f - (2)答案错误:误认为路程也要四舍五入导致结果错误
解决方法:多次试用题目数据后重新审题发现没有提及路程需要四舍五入,反思认真审题别解读过度 - (3)部分答案错误:因为想要把money变成整数型然后利用int函数使它变成整数型,然后输出时又用了 %.1f来实现double转变成整数型
解决方法:多次错误后发现自己把它认真地取整了两次,并且上网做了int函数的功能:向下取整为最接近的整数 ,所以利用int(money+0.5)来实现四舍五入也是错误
4.本题PTA提交列表(要提交列表,不是结果)
题目4:7-8 程序设计联考
自从湖南农业大学、吉首大学和怀化学院组织程序设计课程联考以后,举办联考的经验越来丰富。尤其是在使用PTA系统作为考试平台之后,联考工作得到了很多学校的认可和支持。所以,现在参与联考的学校比较多。为了便于区分考生,考生账号的第一位是学校代号。1代表Hunan Agricultural University,2代表Jishou University,3代表Huaihua University,4代表Aerospace University,5代表Ocean University。 请编写程序根据考生的账号区分考生的学校。
1.实验代码
int account,x; //account代表学号,x代表学号的首位数字
scanf("%d",&account);
x=account/100000;
switch(x){
case 1:printf("Hunan Agricultural University");break;
case 2:printf("Jishou University");break;
case 3:printf("Huaihua University");break;
case 4:printf("Aerospace University");break;
case 5:printf("Ocean University");break;
default:printf("Other University");break;
}
2 设计思路
- 1.定义两个整数型变量account,x 分别来存放学号和学号的首位数字
- 2.判断x的数值大小
- 3.利用switch语句实现多分支结构,根据用户输入的account得到的x,用switch语句将相应的学校输出
3.本题调试过程碰到问题及解决办法
- (1)部分答案错误:题目中的Other University是分行写的误认为两个单词之间没有空格
- 解决的方法:认真对一遍题目后觉得other university应该跟上面的格式一致,便加了空格就通过啦~~~
4.本题PTA提交列表(要提交列表,不是结果)
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
- 1.我对分支结构中的if-else语句的使用更加的清楚:(1)
if(表达式) 语句1;else 语句2;
其中的语句1,2都必须是一条语句,若是多个表达式则用复合语句,注意复合语句是一条语句 (2)if后面不是非要跟上else的,视情况可不加 ,else后面也可以是空语句 (3)else总是与它向上最近的if相配对,注意不要搞错逻辑关系 - 2.学会了switch语句来实现多分支结构,
switch(表达式){ case 常量表达式:语句段1 case 常量表达式:语句段2 ··· default 语句段}
在switch语句中常遇到的易错点:(1)switch(x)中的x必须是整型 (2)case后面应该是一个常量表达式,且必须要有一个空格 (3)switch中每个语句段的末尾使用break才能跳出switch否则执行其后的所有语句段 ······ - 3.学习了字符型数据:(1)字符型数据包括字符型变量op和字符型常量‘a' '+''-''*'和’/'等(必须要有单引号) (2)字符型变量在定义时用类型名是char,在函数调用的格式控制字符串中相应的格式控制说明是 %c (3)字符输入函数getchar()从键盘输入一个字符 ,字符输出函数putchar()输出一个字符
- 4.逻辑运算:!代表非,&&代表与,||代表或 注意:-3<=x<=7是错误的表达,将是个恒真命题,正确:-3<=x&&x<=7
2.本周的内容,你还不会什么?
- 1.对getchar和putchar的使用还不熟练
- 2.不太会利用if和getchar相结合来实现输入多个字符的程序
- 3.还有利用if语句来实现判断是否为数字字符和字母字符的程序也不熟练
- 4.对于含有多层嵌套型if-else的语句程序的理解不够迅速
- 5.对于switch,if-else,getchar等等的易错点的了解还不够完整
- 6.课本P55中的自动售货机程序还不太明白
3.你碰到什么困难,打算如何解决?
- 1.从这次的PTA中我发现自己仍然存在着各种细节错误,eg:scanf中的 "; 输成 ;"
- 解决方法:撸起袖子加油干!!!继续沉迷在代码中,每晚打两个小时代码,等到熟练到一定的程度后找错误成为了一种条件反射(想想就很美滋滋······)
- 2.设计程序的思路不够准确和迅速:看到题目后没有迅速的反应而且容易出现偏差
- 解决方法:多看课文经典的例题并且掌握它,然后多打代码题多看题型,紧跟着老师的进度一步一步向前进
- 3.对Dev-C++的调试还不够熟练
- 在今后的题目中遇到问题要尽量学会自己去找出错误,学会利用Dev-C++调试一步步发现自己的错误,终归还是Practice makes perfect和题海战术~~~
- 4.对易错点的总结目前还不够完整
- 养成对老师所讲到的易错点,自己遇到的易错点利用学长安利的app或者自己的笔记本及时记录下来的好习惯然后慢慢从总结中进步~~