C语言第二次博客作业---分支结构
一、PTA实验作业
1.计算分段函数[2]
本题目要求计算下列分段函数f(x)的值:
(1).实验代码
double x,y;
scanf ("%lf",&x);
if (x>=0){
y=pow(x,0.5);
printf("f(%.2f) = %.2f",x,y);
}else{
y=pow(x+1,2)+2*x+1/x;
printf("f(%.2f) = %.2f",x,y);
}
(2)设计思路
- 设定实数变量x和y;
- 由于要用到数学函数,加入引用头文件math.h;
- 用读入输入的值的scanf语句
- 用分支语句if-else来判断x的值属于哪个范围要做哪种计算,当x>=0时用pow(x,0.5)计算,反之则用pow(x+1,2)+2*x+1/x计算,然后按题目格式输出
(3)调试问题及解决方法
- 本题较简单,在Dev c++中测试没有出错后就贴到了PTA上,一次过了
(4)本题PTA提交列表
2.输出三角形面积和周长
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
(1).实验代码
double a,b,c,area,perimeter,s;
scanf("%lf %lf %lf",&a,&b,&c);
if ((a+b>c)&&(a+c>b)&&(b+c>a)){
s=(a+b+c)/2;
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)设计思路
- 根据题目,引用math.h文件,并设定实数变量a,b,c,area,perimeter,s,其中a,b,c为边的值,area存放计算出的三角形面积的值,perimeter存放三边之和的值,s就是s=(a+b+c)/2;
- 用读入输入的值的scanf语句读入变量a,b,c的值
- 用分支语句if-else来判断,当a,b,c的值满足(a+b>c)&&(a+c>b)&&(b+c>a)成立时进入计算步骤,否则输出These sides do not correspond to a valid triangle
- 计算步骤中,先算出s的值,再用sqrt(s(s-a)(s-b)*(s-c))算出area的值;perimeter的值是perimeter=a+b+c
(3)调试问题及解决方法
- 一开始没有想到if语句的判断可以连续使用两个&&,所以用了多个if语句进行判断,所以错误频出,后来和同学交流之后学会了
- 原来没有设计实数变量s,全用(a+b+c)/2,导致area的计算式相当复杂,也有出错过
(4)本题PTA提交列表
3.出租车计价
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
- 起步里程为3公里,起步费10元;
- 超起步里程后10公里内,每公里2元;
- 超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
- 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
(1).实验代码
double s,price1,price2,price;
int time,n;
scanf("%lf%d",&s,&time);
if (s<=3) {
price1=10;}
else if(s>3 && s<=10) {
price1=10+2*(s-3);}
else if(s>10){
price1=24+3*(s-10);}
if (time<5)
{
price2=0;
}
else if(time>=5)
{
n=time/5;
price2=n*2;
}
price=price1+price2;
printf("%.0f\n",price);
(2)设计思路
- 设置实数变量s,price1,price2,price,整数变量time,n,s存放要输入的路程的值,price1存放单独计算的路程的钱的值,price2存放单独计算的时间的钱的值,price存放price1+price2之和,time存放要输入的时间的值,n则用来存放time/5的值;
- 首先读入键盘输入的s和time的值,用scanf语句
- 接着用if语句先对s进行判断,当s<=3时,price1就为10;当s>3 && s<=10成立时,price1=10+2(s-3);当s>10时,price1=24+3(s-10),
- 再用if语句对time进行判断,当time<5时,price2=0;当time>=5时,n=time/5且price2=n*2
- 两个变量判断完成后,汇总到price,price=price1+price2;并以"%.0f"形式输出
(3)调试问题及解决方法
- 最先是用if语句把s和time同时判断,然后出现了问题,就是当输入的s和time有一个不满足的时候输出的数字就错了,然后决定把s和time分开判断;做出题目后重新思考了s和time一起判断的可能,然后发现自己之前做不出是因为s的所有判断要和time的所有判断要一一结合,如下图才行
(4)本题PTA提交列表
4.程序设计联考
自从湖南农业大学、吉首大学和怀化学院组织程序设计课程联考以后,举办联考的经验越来丰富。尤其是在使用PTA系统作为考试平台之后,联考工作得到了很多学校的认可和支持。所以,现在参与联考的学校比较多。为了便于区分考生,考生账号的第一位是学校代号。1代表Hunan Agricultural University,2代表Jishou University,3代表Huaihua University,4代表Aerospace University,5代表Ocean University。 请编写程序根据考生的账号区分考生的学校。
(1).实验代码
int account,b;
scanf("%d",&account);
b=account/100000;
switch (b){
case 1:b=1;
printf("Hunan Agricultural University");
break;
case 2:b=2;
printf("Jishou University");
break;
case 3:b=3;
printf("Huaihua University");
break;
case 4:b=4;
printf("Aerospace University");
break;
case 5:b=5;
printf("Ocean University");
break;
default:b>5;
printf("Other University");
break;
}
(2)设计思路
- 定义整数变量account,b,account是存放输入的六位数的,b则是存放account/100000的结果;
- 用scanf语句读入account的值;
- 用多分支语句switch语句对计算出的b的值进行判断,若b1,则输出Hunan Agricultural University;若b2,则输出Jishou University;若b3,则输出Huaihua University;若b4,则输出Aerospace University;若b==5,则输出Ocean University;若b都不等于以上的数,则输出Other University
- switch语句中跟在输出后面的break不能丢
(3)调试问题及解决方法
- 这题在看过书本之后算是容易的,因此我在Dev c++中测试几遍没有问题后就PTA一遍过了
(4)本题PTA提交列表
二、截图本周题目集的PTA提交列表及最后排名。
PTA排名
三、本周学习总结
1.你学会了什么?
- 学会在if语句中加入逻辑运算式,switch语句的简单应用,else-if语句的应用,
- 在实际应用中将switch语句和if语句以及else-if语句组合运用
2.本周的内容,你还不会什么?
- else-if语句与if语句的适用范围令我困惑,如它们之后的{}要在什么时候加,什么时候不加。
3.你碰到什么困难,打算如何解决?
- 对题目的解题思路的难以把握,比如出租车计价一题,一开始就没有找对方向,以至于浪费时间,看题目时多加思考,再仔细想想有哪些学过的知识用得上
- 对语句的使用不是很好,反复几次写程序都找不到更好的写法,程序出错时也得找上一阵,多看书本,多写程序,尝试用不同方法解决一道题