zoukankan      html  css  js  c++  java
  • C语言程序设计第四次作业

    (一)改错题

    输出三角形的面积和周长,输入三角形的三条边a、b、c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数);否则,输出“These sides do not correspond to a valid triangle”。

    输入输出样例1:
      Enter 3 sides of the triangle: 5 5 3
      area = 7.15; perimeter = 13.00
    输入输出样例2:
      Enter 3 sides of the triangle: 1 4 1
      These sides do not correspond to a valid triangle

    源程序(有错误的程序)

     #include <stdio.h>
        #include <math.h>
        int main(void)
        {
        double a,b,c;
        double area,perimeter,s;
    
        printf("Enter 3 sides of the triangle: ");
        scanf( "%lf%lf%lf",&a,&b,&c );
    
        if( a + b > c || b + c > a || a + c > b) 
            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
    ");
    
        return 0;        
        }
    

    错误1:

    原因1:
    在第13行缺少右半括号
    改正1:
    将括号加上
    错误2:

    原因2:
    else没有确切的if,因为在if语句下如果有多条语句,则需要加上大括号
    改正2:将大括号加上
    输出结果1正确:

    输出结果2出现了错误:
    错误3:

    原因3:
    构成三角形的条件应该是两边和大于第三边,并且是且的关系,而题目中写成了或的关系
    改正3:将题目中的||改成&&
    输出结果2正确:

    (二)学习总结
    1.在编程解决问题的过程中,我们会用到多个if语句,if...else if... 语句以及switch语句,查阅资料,总结一下这三种情况的区别何在,并分别举例加以说明。
    1.首先他们都属于流程控制语句,在只需要判断一个条件的时候,自然是使用if语句方便有效;但是当判断条件很多的时候,我们可以使用多个if语句或者if...else if语句或者switch case语句。
    2.if...else if语句和多个if语句的区别还是很大的,if...else if在任何一个环节满足条件的时候就将会终止判断,只处理一个满足条件的情况;而对于多个if语句,
    将会对每一个判断条件进行判断,自然而然会导致程序的执行效率降低。在多个判断条件的情况下,使用if...else if语句相对于使用多个if语句而言,可以减少程序
    的判断次数,提高效率。
    3.在多个判断条件的情况下,不仅可以使用if...else if语句,还可以使用switch case语句。一般情况下,当判断条件较多的情况下,使用switch case语句的
    效率会高于使用if...else if语句。switch...case与if...else if的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳 转表的
    索引号与switch变量的值是相等的。从而,switch...case不用像if...else if那样遍历条件分支直到命中条件,而只需访问对应 索引号的表项从而到达定位分支的目的。
    所以从效率上来说由于if...else if的遍历性,代码执行效率是不高的。
    4、例:用if语句
    if(a>10)
    //程序代码
    if(a>20)
    //程序代码
    用if、、elseif语句
    if(a>10&a<20){
    //程序代码

    }elseif(a<=20&a>30){

    //程序代码

    }

    完成上面的代码对于switch来说,就是很麻烦的事情了

    switch(number){
    case 1:
            //程序代码
            break;
    case 2:
            //程序代码
            break;
    }
    实现上面的功能用switch效率就会更高些
    if语句在没有else语句和else if 语句前提下,一个或者多个if语句使用,系统会一致判定if语句直到结束,如果有else if 语句,系统判定如果else if 后条件符合要求就会终止判断,直接输出结果,若不符合判定下一个else if符合后再次终止判断,以此类推。在if语句中当判断结果为true也就时,就会进入到相应的if(或eleseif)中执行程序代码。然后跳出if...else 语句块执行if后面的程序代码,而switch则是当找到某一个case与判断条件一致时,进入到相应的case中执行代码,并查看是否该case中是否有break语句,如果有break则跳出switch,转到后面的程序代码执行,如果没有则会继续执行下面的case语句中的程序代码,直到遇到break或者switch完成,才转入到switch下面的代码进行执行
    总结来说:在确切知道条件结果,并且结果有限下的条件下可以使用switch,在不能确切表示结果的情况下最好用if...else,在使用switch时候一定要注意break的使用。切记!切记!!
    参考链接:http://www.cnblogs.com/wankun/p/4989831.html
    2.对其他你认为需要进行总结的内容进行总结
    (1)else 总是与它最近的if配对
    (2)在switch,,,case 条件下,总是要加break来跳出循环,否则将都会执行,最后要加defaule.
    (3)条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符。

    (三)实验总结
    一:(1)题目
    本题要求将输入的任意3个整数从小到大输出。
    输入格式:
    输入在一行中给出3个整数,其间以空格分隔。
    输出格式:
    在一行中将3个整数从小到大输出,其间以“->”相连。
    (2)流程图

    (3)源程序

    #include<stdio.h>
    int main()
    {   
       int x,y,z,temp;
       scanf("%d %d %d",&x,&y,&z);
       if(x>y)
       { temp=x;
         x=y;
         y=temp;
    
       }
       if(x>z)
       {
    temp=z;
    z=x;
    x=temp;
    
       }
       if(y>z)
       {
    temp=y;
    y=z;
    z=temp;
    
    
       }
       printf("%d->%d->%d",x,y,z);
    
    
       return 0;
    }
    

    (4)实验分析
    没有太大问题,只是在开始的时候比较大小顺序弄反了
    (5)本题提交列表

    二:(1)题目
    按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
    输入格式:
    输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
    输出格式:
    在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
    (2)流程图

    (3)源程序

     #include<stdio.h>
    int main()
    {   
       int x,y;
       double z;
     scanf("%d %d",&x,&y);
     z=(double)(x-y)/(double)y*100;
     if(z<10&&x>y)
     {
     printf("OK");
     }
     if(z>=10&&z<50)
     {  
     printf("Exceed %0.f%%. Ticket 200",z);
     }
     if(z>=50)
     {
    
     printf("Exceed %0.f%%. License Revoked",z);
     }
     return 0;
    
     }
    

    (4)实验分析
    (1)做题过程中没有注意整形与浮点型的转换,导致得出的结果是0,下次注意,少犯这种错误
    (2)%在输出的时候要注意,两个%才可以输出一个,当时也没注意这个问题,导致结果不正确

    (5)本题提交列表

    三:(1)题目
    现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
    本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
    输入格式:
    输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。
    输出格式:
    在一行中输出应付款额,保留小数点后2位。
    (2)流程图

    (3)源代码

    #include<stdio.h>
    int main(void)
    {
    int a,b,c;
    double m;
    scanf("%d%d %c",&a,&b,&c);
    switch(b)
    {
    	case 90:
    		m = 6.95 * a;
    		break;
    	case 93:
    	    m = 7.44 * a;
    		break;
    	default:
    	    m = 7.93 * a;
    		break;	
    }
    if(c == 'm')
    {
    	m = m * 0.95;
    }
    else
    {
    	m = m * 0.97;
    }
    printf("%.2f",m);
    return 0;
    
    }
    

    (4)实验分析
    (1)if后边赋值需要写成==,而不是=,总是写错
    (2)case后边需要加空格然后加数字,若直接加数字,也能运行,但结果错误,开始没注意这个问题,导致出现了错误
    (5)提交列表

    四:(1)题目
    编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
    输入格式:
    输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。
    提示:在scanf的格式字符串中加入:,让scanf来处理这个冒号。
    输出格式:
    在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。
    (2)流程图

    (3)源程序

    #include<stdio.h>
    int main(void)
    {
    int t,m;
    char c;
    scanf("%d%c%d",&t,&c,&m);
    if(a>12)
    {
    	t=t-12;
    	printf("%d:%d PM",t,m);
    }
    else if(t==12)
    {
    	printf("%d:%d PM",t,m);
    } 
    else
    {
    	printf("%d:%d AM",t,m);
    }
    return 0;
    }
    

    (4)实验分析
    这道题最开始没有读懂,不知道什么意思,后来写的时候没出现什么问题

    (5)本题提交列表


    四:博客互评
    (1)折翼之舞http://www.cnblogs.com/longv587/p/7786770.html
    (2)任佳鹏http://www.cnblogs.com/rjp123/p/7778689.html
    (3)赵晓辉http://www.cnblogs.com/2205747462x/p/7784914.html

  • 相关阅读:
    SORT ORDER BY STOPKEY
    javaScript 数值型和字符串型之间的转换
    Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'Student'
    Caused by: java.sql.SQLException: Field 'stu_id' doesn't have a default value
    Result Maps collection does not contain value for StudentMapper.StudentMap
    集群维护
    logstash 调用exec
    logstash zabbix插件
    logstash 调用脚本告警
    Caused by: java.lang.NoSuchMethodException: com.you.entity.sys.Param.()
  • 原文地址:https://www.cnblogs.com/xing--/p/7764421.html
Copyright © 2011-2022 走看看