【无标题】C基础 2

//复习:
    ubuntu ---> Linux内核 
    
    1. 放大字体: ctrl shift +
    
       缩小字体: ctrl -
       
    2. vim编辑器 三种模式
    
        一般模式  插入模式 尾行模式(命令行模式)
        
        vim hello.c //一般模式 
        i //进入 插入模式
        o //在光标所在行的下一行插入一行 
        
    ###考点: main函数 一个程序中有且只能有一个main函数
              main函数是入口函数 
              
        #解
    
        #include <stdio.h>
        int main()
        {
            return 0;
        }
        
        //保存退出 
        esc ---> space ---> :wq  :wq!  q! 
        
        面试问题:
        
        gcc是啥?? 编译器 
        vim是啥?? 编辑器 
        gcc hello.c ------> a.out  
        
        //运行程序 ./a.out 
        
        printf("hello world!!\n");
        
        int a;
        a = 10;
        printf("a的值是%d\n",a);
        
        float b;
        b = 2.13;
        printf("b的值是%f\n",b);//.2f 保留小数点后两位
        
        yy //复制当前行 
        
        5yy//复制5行,从当前行算起 
        
        dd //剪切 
        
        5dd //同5yy理解
        
        p //粘贴 
        
        u //撤销 
        
        ctrl + r //反撤销
    
    //整容手法 
    int  a;
    a = 10;
    //天生丽质 
    int a = 10;
    算术运算符 + - * / % 
    考点: 
    
        /法:  整数 / 整数 = 整数  7 / 3 == 2  7里面有2个3    4 / 7 == 0
        
        %取余运算: (1)  % 左右两边必须是整数 
                    (2)  较小的数 % 较大的数  == 较小的数本身  (不打架原则)
    
    关系运算符 
        > >= <= < == !=
        
        if(a = 3)//不会报错 ,正确的语法 if(3) --> 真
        if(a == 3)//判断a和3是否相等
        
        if(!a) === if(a == 0)
        if(a) === if(a != 0)
            
    C语言  
    
        (1) 非零即为真 
        (2) 真的值是1, 假的值是0 
        
            3 != 2  ----> 1
            3 > 2 ---> 1
            3 < 2 ---> 0
    逻辑关系运算符 
    && || !
    
    && //同真为真,一假即假
    || //一真即真,同假为假
    ! //真变为假 假变为真 
    int a = 10;
    a = !a;
    a = !a;
    a = !a;
    a = !a;
    
    if(); //没有else的时候,编译不报错

    if(); -->等价于 
    if()
    {
        ;
    }
        
    if();//编译报错,因为if和else被执行语句分隔开
    {
        //执行语句
    }
    else
    {}
    
    if-else{} 什么时候可以省略不写,只有一条执行语句的时候才可以省略不写
    
    //关于if的语法格式 
    1. if()
    2. if - else 
    3. if嵌套 ----- &&

    if()
    {
        if()
        {
            
        }
    }

    4. if - else if - else if - else  
    5. if并列
    //上下的if彼此之间,没有任何关联
    if()
    {
        
    }    
    if()
    {
        
    }
    
//
新课

2.1.0 sizeof()运算符
    
    sizeof(int)-----> 4
    
    sizeof()作用:求变量或数据类型所占内存空间的大小(以字节为单位)

    int a;
    sizeof(int) ----> 4
    sizeof(a) ----> 4 因为a的类型是int

    
    运算对象:一种是类型名,一种是变量名
    
    运算结果:整型的值


    ----代码测试-----//课后自己验证演练

    定义int, short, long, float,double类型变量,

    然后求出变量占用内存空间大小并打印

    结论:运算结果的大小,取决于变量的类型,与变量的值毫无关系。


    数据类型            格式化输入输出类型和格式                占内存空间的大小
        
        char    字符型            %c                                        1字节
        short    短整型数据        %hd                                        2字节
        int        整型数据        %d                                        4字节
        long    长整型数据        %ld                                        4字节 //32位系统中占4个字节,64位系统中占8个字节
        
        
        float    单精度浮点型(保存小数)%f                                4字节
        double    双精度浮点型(保存小数)%lf                                8字节

#include <stdio.h>

int main()
{
    int a;
    printf("%d   %d\n",sizeof(int),sizeof(a));
    printf("%d %d %d %d %d %d\n",sizeof(char),sizeof(short),sizeof(int),sizeof(long),sizeof(float),sizeof(double));
    return 0;
}


2.1.1  数字和字符(**)

    美国国家标准委员会,规定了每一个字符,由一个有效的数字来表示,这个数字就是ascii码
    
    //查看ascii值
    man ascii

                                          2进制     16进制     10进制
######练习1: 查找ascii表中 '0'的        0011 0000     0x30       48               
                             'a'           0110 0001     0x61       97
                             'A'          0100 0001     0x41       65        
                             ' ' (SP)     0010 0000     0x20       32   
                             回车(CR)    0000 1101     0x0D       13   
                             esc           0001 1011     0x1B       27
                            '\0'        0000 0000     0x00          00
        
    '\n' ---> 10
    '+'  ---> 43
    '0'  ---> 48//字符0
    ...
    ...
    '9'  ---> 57
    
    '0' ---- '9'  ====> 48 ---- 57
    'A' ---- 'Z'  ====> 65 ---- 90
    'a' ---- 'Z'  ====> 97 ----> 122
    '\0' ----> 0
    '0'  ----> 48
         
    0   //整数0 
    
    "1000" //字符串1000
    1000   //整数1000
        
        
                            
2.1.2 如何来表达字符


    ' '引号来表达字符 
    
    " "双引号是字符串
    
    "hello" ----> 'h' 'e' 'l' 'l' 'o' '\0'

    
数字 1、2、3、4
字符 '1' '2'  '3'  '4'  '#'
        'a' 'A'

'1' = '0' + 1;  
'2' = '0' + 2;
'9' = '0' + 9;

'b' = 'a' + 1;
'c' = 'a' + 2;    
.....

'A' = 'B' - 1; 
'C' = 'A' + 2;


2.1.3 如何来保存一个字符?
    
    char a;//字符类型的变量,保存字符
    
#include <stdio.h>

int main()
{
    char a;
    a = 'B';//等于 a = 66;
//    scanf("%c",&a);//输入一个字符
    printf("a is %c对应的ascii值是%d\n",a,a);//打印输出字符用%c,以字符的格式打印输出
    //%c 以字符的格式输出
    //%d 将a中的字符的ascii值打印输出
    printf("a - 1 ---> %c\n",a-1); // 'B' - 1 == 'A'
    printf("a + 32 ---> %c\n",a+32); // 'B' + 32 ---> 'b'
    printf("a + 3 ---> %c\n",a+3);   // 'B' + 3 ---> 'E'

    return 0;
}
-------------------------------------------------------------------------------------------------------------

######练习2://解题思想同输入一个数,判断是否在10 --- 100之间,同理
            输入一个字符,进行判断
            
            '0' ---- '9'  ====> 48 ---- 57
            'A' ---- 'Z'  ====> 65 ---- 90
            'a' ---- 'Z'  ====> 97 ----> 122
            
            1)如果是 小写字母 打印输出 is small letter!! 'a'  ---- 'z'
            2)如果是 大写字母 打印输出 is big letter!!  'A' ---- 'Z'
            3)如果是 数字    打印输出 is number '0' ---- '9'

#include <stdio.h>

int main()
{
    //char类型的变量也可以用来存整数,字符就是特殊的整数
    char a;
    printf("Please input char:\n");
    scanf("%c",&a);//以字符的格式 输入一个字符
    if(a >= 'a' && a <= 'z')
    {
        printf("%c is small letter!!\n",a);
    }
    if(a >= 'A' && a <= 'Z')
    {
        printf("%c is biger letter!!\n",a);
    }
    if(a >= '0' && a <= '9')
    {
        printf("%c is number!!\n",a);
    }
    
    return 0;
}
    
------------------------------------------------------------------------------------------------------------
2.1.3 自加、自减

a++;  a = a + 1;
++a;  a = a + 1;

(1)++  (自增运算符)
    
    int a = 1;
    a++;
    printf("a is %d\n",a);//a is 2
    
    int a = 1;
    ++a;
    printf("a is %d\n",a);//a is 2

    //当a++; 和 ++a 这个式子,单独存在的时候,二者等价
    无论是a++;还是++a;语句执行结束之后,自身必然+1

    int x = 4;
    int y;
    y = x++;//++在后, 先运算,后++
            //先运算 将x参与赋值运算 y = x
            //后++   执行自身+1  x = x + 1;
    printf("x is %d y is %d\n",x,y);//x is 5  y is 4
    y = ++x;//++在前, 先++,后运算
            //先++, 先执行自身+1  x = x + 1 ---> 6
            //后运算, 执行赋值运算 y = x   
    printf("x is %d y is %d\n",x,y);//x is 6  y is 6
    
--------代码演示------------

#include<stdio.h>

int main()
{
    int x = 6,y = 7;
    int z;
    z = x++ + ++y;  //x是++在后,所以参与加法运算的时候是6  
                    //y是++在前,所以参与加法运算的时候是8 
                    //z = x + y ----> 14
    printf("x = %d,y = %d,z = %d\n",x,y,z);//x is 7  y is 8 z is 14
}

##笔试题    

    int a = -1;
    if(a++) //++在后, 先运算(if条件判断 if(-1)),后++(a = a + 1)   
    {                
        printf("a is %d\n",a); // a is 0
    }
    //printf会打印吗??会    
    //打印的时候a的值是几??0
    
    #include <stdio.h>

    int main()
    {
        int a = -1;
        if(++a)//++在前,先++(a = a + 1),后运算(if条件判断 if(0)), 所以没有打印输出  
        {
            printf("a is %d\n",a);
        }
        return 0;
    }

(2) -- (自减运算符同理)

    a--; a = a-1;
    --a; a = a-1

###逻辑&& 和 || 的短路运算


###笔试题  中科创达

#include <stdio.h>

int main(int argc, const char *argv[])
{
    int a = -1;
    int b = 2;
    if(++a && ++b ) //&& 一假即假 ,第一个条件为假,后面的条件不需要进行判断, ++b这个语句,根本没有被执行,所以b的值,依然是2不变
    {
        printf("hello world\n");//会打印吗?? 不打印
    }
    printf("a is %d\nb is %d\n",a,b);//a is 0  b is 2
    return 0;
}

#include <stdio.h>

int main(int argc, const char *argv[])
{
    int a = 0;
    int b = 2;
    if(++a || ++b)//|| 一真即真 第一个条件为真,后面的条件不需要进行判断, ++b这个语句,根本没有被执行,所以b的值,依然是2不变 
    {
        printf("hello world\n"); //会打印
    }
    printf("a is %d\nb is %d\n",a,b); // a is 1  b is 2
    return 0;
}

-------------------------------------------------------------------------------------------------------------
2.1.4 算数运算表达式: +=    -=   *=     /=    %=
    
    a += 1; a++; a = a + 1
    a += 3;     <=====>   a = a + 3;
    a -= 3;     <=====>   a = a - 3;
    a *= 3;     <=====>   a = a * 3;
    a /= 3;     <=====>   a = a / 3;
    
    a + 3;
    a = a + 3;

    a += b;      <=====>   a = a + b;
    a += b + 3;  <=====>   a = a + (b + 3);

--------代码演示------------

#include <stdio.h>
int main()
{
    int a = 5;
    int b = 2;
    a += 3;
    printf("a %d\n", a); // a is 8
    a += b;
    printf("a %d\n", a); // a is 10
}
-------------------------------------------------------------------------------------------------------------

#######练习4:输入三个数, 将最大值打印输出

    比如:输入的是   a = 8 , b = 5 , c = 3;
    
    则屏幕输出  最大值是 8 

#include <stdio.h>

int main()
{
    int a,b,c;
    int max;//用来保存最大值
    printf("Please input three number:\n");
    scanf("%d%d%d",&a,&b,&c);
    //编程思想: 抢最好的 先假设其中的一个是最大值,与剩余的都比较一次
    //1.先假设 其中的一个是最大值
    max = a;
    //2.与剩余的每一个都比较一次
    if(max < b)
        max = b;
    //执行完上面的if,max保存了a和b的最大值
    if(max < c)
        max = c;
    printf("max is %d\n",max);
    return 0;
}


2.1.5  三目运算符

    ? : 无条件等价于 if --- else  

   ?  :  表达式          c语言中唯一的三目运算符
   
  条件 ?表达式1 :表达式2
  
  //条件为真 执行的 :左边的表达式1 
  //条件为假 执行的 :右边的表达式2

  int min =  a < b ? a : b   
  
  int a = 3;
  int b = 5;
  int max = a > b ? a : b;

#include <stdio.h>

int main()
{
    int a = 5;
    int b = 3;
    int max = a > b ? a : b;
    printf("max is %d\n",max);
    1.1 ? printf("1111111111\n") : printf("22222222222\n");

    return 0;
}

######练习3:输入三个数求最大值程序改成用 ? : 表达式来实现

#include <stdio.h>

int main()
{
    int a,b,c;
    int max;//用来保存最大值
    printf("Please input three number:\n");
    scanf("%d%d%d",&a,&b,&c);
    //编程思想: 抢最好的 先假设其中的一个是最大值,与剩余的都比较一次
    //1.先假设 其中的一个是最大值
    max = a;
    //2.与剩余的每一个都比较一次
    if(max < b)
        max = b;
    //执行完上面的if,max保存了a和b的最大值
    if(max < c)
        max = c;
    printf("max is %d\n",a);
    return 0;
}

#include <stdio.h>

int main()
{
    int a,b,c;
    int max;//用来保存最大值
    printf("Please input three number:\n");
    scanf("%d%d%d",&a,&b,&c);
    //编程思想: 抢最好的 先假设其中的一个是最大值,与剩余的都比较一次
    //1.先假设 其中的一个是最大值
    max = a;
    //2.与剩余的作比较
    max = max > b ? max : b;
    max = max > c ? max : c;
    printf("max is %d\n",max);
    return 0;
}

---------------------------------------------------------------------------------------------------------------------------
//C语言三大程序结构 

1.顺序结构 

    程序自上而下顺序执行
    a = 10; //报错,提示a没有定义    
    int a;
    
2.选择结构

    ? :
    if - else // 单向必选题 A  B 
    if -else if - else if - else if ..... else //单向必选题 A  B C D ....
    
    #输入一个字符,如果是大写,将他装换成小写,如果是小写,转换成大写

#include <stdio.h>

int main()
{
    //A 对
    //a 错 
    char ch;
    printf("Please input char:\n");
    scanf("%c",&ch);
    if(ch >= 'a' && ch <= 'z')
        ch -= 32;
    else if(ch >= 'A' && ch <= 'Z')
        ch += 32;
    printf("ch is %c\n",ch);
    return 0;
}
    
    //你欠我5000块钱
    if(条件1) //你有钱吗? 没有
    {
        执行语句1  //条件1 成立
    }
    else if(条件2) //你有电脑吗?没有
    {
        执行语句2  //条件1 不成立 满足条件2成立
    }
    else if(条件3) //你有手机吗?没有
    {
        执行语句3 条件1 条件2都不成立 满足条件3成立
    }
    ..
    ...
    ...
    else  //以上的所有条件都不成立,就执行else  绝交 
    {
        
    }
    
    switch()语句  
        
3.循环结构

    (1) for循环 
    (2) while循环 
    (3) do-while循环
    
    
    
    
2.2.1 用if语句实现二分支选择结构(四种)

2.2.2 用switch语句实现多分支选择结构

    switch(整型表达式)    //类型 只能是整数 char short int long 枚举
    {
        case 常量1:        //表达式的值和常量表达式的值相等时,就执行此case后面语句。
                语句1;
                break;
        case 常量2:
                语句2;
                break;    
            .
            .
        case 常量n:
                语句n;
                break;
        default:            //默认分支,上面的都不满足,执行default后面语句。
                语句n+1        
    }

--------代码演示-------

由用户输入,如果1,打印monday, 如果是2 打印tuesday, 如果3打印wensday, 如果4打印thursday

#include <stdio.h>
int main()
{
    int day;
    scanf("%d",&day);
    switch(day)//判断day变量里面的值
    {
    case 1:// if(day == 1)
        printf("星期一\n");
        break;//跳出switch体
    case 2:// else if(day == 2)
        printf("星期二\n");
        break;
    case 100://else if(day == 100)
        printf("星期你猜!!\n");
        break;
    default://以上所有的条件都不成立 else 
        printf("啥也不是!!\n");
    }
    return 0;
}

######练习7:

    用switch语句实现一个小型计算器 
    
    例如:输入3 + 5 打印输出 8  '+' '-' '*' '\' 
    
    '+' '-' '*' '/'
     switch()
    {
        case '+':
        break;
        case '-':
        break;
    }
    3+5
    8
    5-3
    2
    
#include <stdio.h>

int main()
{
    int a,b;//保存输入的两个整数
    char oper;//运算符
    scanf("%d%c%d",&a,&oper,&b);
    switch(oper)
    {
    case '+':
        printf("%d + %d = %d\n",a,b,a+b);
        break;
    case '-':
        printf("%d - %d = %d\n",a,b,a-b);
        break;
    case '*':
        printf("%d * %d = %d\n",a,b,a*b);
        break;
    case '/':
        printf("%d / %d = %d\n",a,b,a/b);
        break;
    }
    return 0;
}    
    
/思考 屏幕上打印的结果是什么??
switch只有一个考点:就是刹车问题 break
#include <stdio.h>

int main()
{
    int num = 3;    
    switch(num)
    {
        case 3:
            printf("3");
        case 4:
            printf("4");
        case 5:
            printf("5");
        default:
            printf("6");
    }
}


打印输出3456 

#include <stdio.h>

int main()
{
    int num = 3;    
    int k = 0;
    switch(num)
    {
        case 3:
            k++;
        case 4:
            ++k;
        case 5:
            k++;
        default:
            ++k;
    } 
    printf("k is %d\n",k);  //k is 4
}


2.2.3 类型转换(*)

    ///类型转换
    int a= 3;
    float b = 1.2;
    a + b ?  结果是float  两个不同类型进行运算,要进行类型转换

    //隐式转换(电脑自动帮你做的)
    
    a + b ---> 3.0 + 1.2 ---> 4.2

    转换原则:从小到大  char --> short --> int --> long --> float --> double

#include <stdio.h>
int main()
{
    int a= 3;
    float b = 1.9;
    printf("%f\n", a + b);  //a 转成float类型,此种转换叫隐式转换,或者叫默认转换
    //如果希望,b转成int, 然后进行 + 运算
    printf("%d\n", a + (int)b);  //(int)b   强制类型转换,将b强制转换为int类型 3.9 ---> 3
    //赋值转换,最终的类型是 = 左边为主
    int c = 3.9;
    printf("c is %d\n",c);
    float d = 2;
    printf("d is %f\n",d);
    //笔试题 

    int x = 10, y = 4;
    float z = x / y; //整数 / 整数 = 整数  z = 10 / 4   z = 2 //赋值转换,  z = 2.0000
    printf("z is %f\n",z);

    return 0;
    
}
    
#练习 编写程序,从键盘输入两个整数,分别计算出它们的商和余数,

#    输出时,商数要求保留2位小数,并对第三位进行四舍

#include <stdio.h>

int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    printf("result is %.2f\n",(float)a/b);
    return 0;
}


2.2.4 常量(其值不可以改) //常量就是不可变

宏定义 的理解: 无脑替换

100, 'A'
    
    //如何定义一个宏常量

1)  设圆半径为r,求圆周长,圆面积。用scanf输入半径,输出计算结果,请写程序. 
3.14 用宏来表示

2 * PI * r
PI * r * r

#include <stdio.h>

//宏定义 是常量
#define PI 3.1415
#define N ;}
#define X 2
#define Y X+1

//1.见名知意
//2.一改统改

int main(int argc, const char *argv[])
{
    //PI = 2.5;// 3.14 = 2.5;//编译报错,因为PI是常量
    float s = PI * 2 * 2;
    printf("s is %.2f\n",s);
    //笔试题
    printf("result is %d\n",Y*Y);//M+1*M+1 2+1*2+1   5
    return 0 N
    
    
    
    
    
//定义宏的好处
1 能达到一改全改的目的
2 能增加程序的可读性

作业:1

输入学生成绩

    90-100 分打印 A
    80-89  分打印 B
    70-79  分打印 C
    60-69  分打印 D
    
    其他不及格
        
分别用if条件判断   和   switch分支   两种方法实现

//方法一 if --- else if -- else if --- else  

//方法二 switch
    
    91 / 10 ---> 9
    92 / 10 ---> 9
    95 / 10 ---> 9 
    
    int score;
    scanf("%d",&score); //95
    score /= 10;  //score = score / 10;
    switch(score)
    {
        case 10:
        case 9:
            printf("A");
            break;
    }

方法一     
    
#include <stdio.h>

int main(int argc, const char *argv[])
{
    int score;
    printf("Please input score:\n");
    scanf("%d",&score);
    score /= 10;
    switch(score)
    {
    case 10:
    case 9:
        printf("A\n");
        break;
    case 8:
        printf("B\n");
        break;
    case 7:
        printf("C\n");
        break;
    case 6:
        printf("D\n");
        break;
    default:
        printf("裂开了!!\n");

    }
    return 0;
}

//理解 if-else if - else if - else 
//方法二
    
#include <stdio.h>

int main(int argc, const char *argv[])
{
    int score;
    printf("Please input score:\n");
    scanf("%d",&score);
    //1.对输入的数据做一个容错判断
    if(score < 0 || score > 100)
    {
        printf("input error!!\n");
    }
    else//能够进入else,说明输入的数据必然是0-100之间
    {
    
        if(score >= 90)//你有5000块钱吗?
        {
            printf("A\n");
        }
        else if(score >= 80)//你有电脑吗?// else 否定上面的if条件
        {
            printf("B\n");
        }
        else if(score >= 70)//你有手机吗? //else 否定上面的两个if条件
        {
            printf("C\n");
        }
        else if(score >= 60)//你有手表吗?
        {
            printf("D\n");
        }
        else//绝交
        {
            printf("重在参与!!\n");
        }
    }
    return 0;
}

    
作业:2

    用if - else if - else if -- else 语句实现一个小型计算器 
    
    例如:输入3 + 5 打印输出 8  '+' '-' '*' '\' 
    
    '+' '-' '*' '/'
    3+5
    8
    5-3
    2    
    
#include <stdio.h>
int main(int argc, const char *argv[])
{
    int a,b;
    char oper;
    printf("请输入运算式子:\n");
    scanf("%d%c%d",&a,&oper,&b);
    if(oper == '+')
    {
        printf("%d + %d = %d\n",a,b,a+b);
    }
    else if(oper == '-')
    {
        printf("%d - %d = %d\n",a,b,a-b);
    }
    else if(oper == '*')
    {
        printf("%d * %d = %d\n",a,b,a*b);
    }
    else if(oper == '/')
    {
        printf("%d / %d = %d\n",a,b,a/b);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值