zoukankan      html  css  js  c++  java
  • C语言程序设计(翁恺)--第三周课件中的三个遗留点

    刚刚写完第二周遗留点,下面写第三周的

    第三周:判断

    1.if和else后面也可以没有{}而是一条语句。如果if后不带{},但是后面跟了两条语句,并且后面还有else语句,那么程序会怎么执行?

    在Dev C++中输入如下代码,进行编译

    #include "stdio.h"
    int main()
    {
        int a=0;
        scanf("%d",&a);
        if(a>0)
            a+=1;
            printf("a=%d",a);
        else
            print("a=%d",a);
        return 0;
    }

    发现如下问题:

    image

    提示“9    2 [Error] 'else' without a previous 'if'

    意思是else找不到对应的if了,说明if后面的第二个语句printf使得编译器认为这个if已经结束,它是一个不带else的if语句,所以后面直接输入else会使编译器报错。

    2./* */是注释,编译器不管其中的内容。但是有没有想过编译器会把它替换成什么呢?是一个空格?还是不留痕迹?可以写代码来测试你用的编译器吗?

    在Dev C++中输入如下代码,进行编译

    #include "stdio.h"
    int main()
    {
        int/*sdfd*/b;    //编译通过
        in/*sdff*/t a;   //编译出错,提示[Error] unknown type name 'in'和[Error] expected '=', ',', ';', 
                         //'asm' or '__attribute__' before 'a'
        return 0;
    }

    发现第一条语句编译通过了,而第二条语句编译出错了,提示“[Error] unknown type name 'in'和[Error] expected '=', ',', ';','asm' or '__attribute__' before 'a'”,由这两个结果判断,/**/在编译的时候被编译器替换成了空格

    3.分段函数可以用switch-case吗?划算吗?

    clipboard

    考虑到x=0和x>0是同一个函数f(x)=2*x;那么可以将type分成0/1两种情况来使用switch-case语句,感觉不划算,而且如果分段增加的话就不一定能通过这个方法实现了

    代码如下:

    #include "stdio.h"
    int main()
    {
        int type;
        double x,f;
        scanf("%lf",&x);
        type=(x<0);
        switch(type)
        {
            case 0:
                f=2*x;
                break;
            default:
                f=-1;
                break;
        }
        printf("%f",f);
        return 0;
    }
  • 相关阅读:
    成为明星程序员的10个提示
    每天写出好代码的5个建议
    收集开发相关网站
    Class.getDeclaredFields()和Class.getFields()的区别。 Class.getMethods()和Class.getDeclaredMethods()的区别。
    Oracle数据库插入过程中特殊符号
    @JsonIgnore注解|@JsonProperty
    基本linux命令
    linux基本概述
    php.ini模块
    一个购物车类(session实现的且为单例模式)
  • 原文地址:https://www.cnblogs.com/keepdoing/p/3983117.html
Copyright © 2011-2022 走看看