C语言—scanf函数、sizeof、三木运算、各种运算符

来源:互联网 发布:8051 单片机内部实现 编辑:程序博客网 时间:2024/05/16 11:58


---scanf函数

1.scanf函数的基本使用

#include <stdio.h>

int main()
{
    // 定义一个变量,用来保存用户输入的整数
    int number;
    
    // scanf函数只接受变量的地址
    // scanf函数是一个阻塞式的函数,等待用户输入
    // 用户输入完毕后,就会将用户输入的值赋值给number变量
    // 函数调用完毕
    scanf("%d", &number);    
    printf("用户输入的值是%d\n", number);   
    return 0;
}

2.一个scanf小练习

/*
 提示用户输入两个整数,计算并且输出两个整数的和
*/

#include <stdio.h>

int main()
{
    // 1.定义2个变量,保存用户输入的整数
    int num1, num2;
    
    // 2.提示用户输入第1个整数
    printf("请输入第1个整数:\n");
    
    // 3.接收用户输入的第1个整数
    scanf("%d", &num1);
    
    // 4.提示用户输入第2个整数
    printf("请输入第2个整数:\n");
    
    // 5.接收用户输入的第2个整数
    scanf("%d", &num2);
    
    // 6.计算和,并且输出
    int sum = num1 + num2;
    printf("%d+%d=%d\n", num1, num2, sum);
    
    //printf("num1=%d, num2=%d\n", num1, num2);
    return 0;
}

3.scanf的一些其他用法和注意的地方

#include <stdio.h>

int main()
{
    /* 1.输入字符
    char myc;
    
    scanf("%c", &myc);
    
    printf("输入的字符是%c\n", myc);
     */
    
    /* 2.一次性输入多个数值,并且以某些符号隔开
    int num1, num2;
     
    scanf("%d#%d", &num1, &num2);
    
    printf("num1=%d, num2=%d\n", num1, num2);
    */
    
    /*
    3.如果scanf参数中以空格隔开,实际输入可以以空格、tab、回车作为分隔符
    int num1, num2;
    scanf("%d %d", &num1, &num2);
    printf("num1=%d, num2=%d\n", num1, num2);
     */
    
    /*
    4.scanf中不能写\n
    int a;
    scanf("%d\n", &a); // 错误写法
    printf("a的值是%d\n", a);
     */
    
    return 0;
}

---算数运算符

1.算数运算符的基本使用

    int a = 10 + 1 + 2 - 3 + 5;
    
    int b = -10;
    
    int c = 10 * b;
    
    int d = 10 / 2;
    
2.取余运算(模运算): % 两边都是整数,%取余结果的正负性只跟%左边的数值有关,如:
    int e = 10 % -3;
    printf("%d\n", e); // 输出结果是1
   
3.数据类型的转换

    1>自动类型转换(double->int)
    int a = 10.8;
    
    2> 强制类型转换(double->int)
    int b = (int) 10.5;
    printf("%d\n", a);
    3>自动类型提升(int->double)

    double c = 10.6 + 6;

    double d = 1 / 3;
    
    double e = (double)3/2;
    
    printf("e的值是%f\n", e);

4.算数运算的一个小练习

/*
 提示用户输入一个时间的秒数,比如500秒就输入500,然后输出对应的分钟和秒,比如500s就是8分钟20秒
 */
int main()
{
    /*
    // 将c的值固定在10以内
    int a = 96546546;
    
    int c = a % 10;
    */
    
    // 1.提示用户输入时间
    printf("请输入一个时间值(秒):\n");
    
    // 2.接收用户输入的时间
    int time;
    scanf("%d", &time);
    
    // 3.转换成对应的分钟和秒
    int minute = time / 60; // 分钟
    int second = time % 60; // 秒
    
    printf("%d秒 = %d分钟%d秒\n", time, minute, second);
    
    return 0;
}

---复合赋值运算符、自增自减和关键字sizeof

1.复合赋值运算符

    a += 5; // a = a + 5;
    
    a *= 5; // a = a * 5;
    
    a += 5 + 6 + 4; // a = a + (5 + 6 + 4);

2.自增自减

a++ 数值上就等于 a += 1 等于 a = a + 1

a++和++a的不同:a++在运算过程中先把a 的值进入运算再做自增;++a在运算过程中先自增再把a 的值进入运算。(自减运算和自增一样)

自增小练习:

/*下面代码打印结果是____12,7______(需要写上分析思路)*/

//1.包含stdio.h头文件
#include <stdio.h>

//2.主函数main,argc表示参数个数,argv存放参数 ,两个参数是给读入命令行参数的
int main(int argc, const char * argv[])
{
//3.定义整形变量 b
    int b;
    
    //4.定义整形变量a并赋予初值5
    int a = 5;
    
    //5.计算 (++a) + (a++)的值并赋予给 b
    b = (++a) + (a++);
    
    //6.输出 b 和 a 的值
    printf("b=%d, a=%d\n", b, a);
    
    //7.函数正常退出
    return 0;
}

/*思路分析 : main函数后面的(int argc, const char * argv[])在此程序中可以不予理会
 mian中定义了整形变量 b 和初值为 5 的 a ,在运行 b = (++a) + (a++) 时需要明白:
 (++a)先做完加 1 运算 a 再参与到 (++a) + (a++)中, (a++)是先将a 参与到 (++a) + (a++)中再做加 1 运算 。 所以在运行 b = (++a) + (a++)时, a做加1运算变为了6 ,所以 (++a)
 的值为6; (a++)的值为6,但a的值已经变为了7。 所以此时 b = 6 + 6 = 12,a的值为7输出b,a两值为 12 和 7.*/

3.关键字sizeof():返回数据的所占字节数

int main()
{
    //int size = sizeof(10); 
    //int size = sizeof 10.9;
    
    int a = 10;
    
    //int size = sizeof(a);
    //int size = sizeof a;
    
    int size = sizeof(char);
    // int size = sizeof char; // 错误的,字符型数据必须加括号
    
    printf("size=%d\n", size);
    
    return 0;
}

---关系运算符

先计算运算符优先级高的运算,优先级一样的情况下,运算从左往右进行。(运算符优先顺序不要求记,有免费的优先级运算表)
    int a = 10,b = 11;
       
    // 条件成立就返回1,真
    // 条件不成立就返回0,假
    int result = b >= a;

---逻辑运算符


1.逻辑与:“条件A&&条件B”:当两边同时成立的时候返回1.当第一个条件不成立的时候第二个条件不读取。
    //逻辑与 条件1 && 条件2

    // int a  =  10>3 && 7<6; // a = 0
    
    //int a = 0 && 10; // a = 0
   
   { 
    /*
    int a = 10;
    int b = 10;
    
    //int c = (a>5) && (++b>=11);  // c = 1
    
    int c = (a<5) && (++b>=11);  //  c = 0
    
    }

2.逻辑或:“条件1||条件2”:当两边只要有一个成立的时候就返回1,并且当第一个条件成立的时候第二个条件不读取。

    // 逻辑或 条件1 || 条件2
    
    //int a = 0 || 11; // a = 1
    
    int a = 10;
    int b = 10;
    
    int c = (a<5) || (b++ - 10); // c = 0
    
3.逻辑非:!条件。如果条件成立就返回0,如果条件不成立就返回1

    // 逻辑非 !条件

    //int a = !(10>8); // a = 0
    
    //int a = !-10; // a = 0
    
    //int a = !10>8; // a = 0
        
    //int a = !!10; // a = 1
        
---三目运算符

条件 ? 数值1 : 数值2,,,如果条件成立返回数值1如果不成立返回数值2.
    /*求a、b、c三者的最大值*/
    // 求出a、b的最大值
    int abMax = (a > b) ? a : b;
    // 求出最终的最大值
    int d = (abMax > c) ? abMax : c;

---选择结构

1.if的第一种结构
   if(条件)
  {语句1;
   语句2;
   .......
   }
  如果满足条件执行大括号里面的代码段

2.if的第二种结构
   if(条件)
  {语句1;
   语句2;
   .......
   }
   else{语句;.....    }
   如果满足条件执行大括号里面的代码段,不满足条件执行   else里面的代码段

3.if的第三种结构
  if(条件1)
  {语句1;
   语句2;
   .......
   }
   else    if(条件2)
  {语句1;
   语句2;
   .......
   }
   else    if(条件3)
  {语句1;
   语句2;
   .......
   }
   else{语句;.....    }
     执行满足条件的大括号内的代码段


4.if的第四种结构
  if(条件)
      语句1;
      语句2;
   满足条件只执行语句1.

5.if语句的一些注意事项:比较大小时,常量值放左边,变量放右边:if (0 == a)

6.注意赋值运算符,不要写成两个=;注意不要在if语句后面加“;”。

7.下面代码是错误的:作用域不明确
   if(10>6)
   int a = 5;

8.如果要在if后面的语句中定义新的变量,必须用大括号{  },并且作用域只在其大括号的里面

9.if结构三种方法的练习(并比较其性能):

/*
 输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)
 A:90~100
 B:80~89
 C:70~79
 D:60~69
 E:0~60
*/

#include <stdio.h>

int main()
{
    // 1.提示输入
    printf("请输入分数值:\n");
    
    // 2.接收输入
    int score;
    scanf("%d", &score);
    
    // 3.判断等级 (性能最高)
    if (score>=90 && score<=100) { // [90, 100]
        printf("A\n");
    } else if (score>=80) { // [80, 89]
        printf("B\n");
    } else if (score>=70) { // [70, 79]
        printf("C\n");
    } else if (score>=60) { // [60, 69]
        printf("D\n");
    } else { // (-∞, 59]
        printf("E\n");
    }
    
    /* 性能中等
    if (score>=90 && score<=100) { // [90, 100]
        printf("A\n");
    } else if (score>=80 && score<=89) { // [80, 89]
        printf("B\n");
    } else if (score>=70 && score<=79) { // [70, 79]
        printf("C\n");
    } else if (score>=60 && score<=69) { // [60, 69]
        printf("D\n");
    } else { // (-∞, 59]
        printf("E\n");
    }*/
    
    /* 性能最差
    if (score>=90 && score<=100) { // [90, 100]
        printf("A\n");
    }
    
    if (score>=80 && score<=89) { // [80, 89]
        printf("B\n");
    }
    
    if (score>=70 && score<=79) { // [70, 79]
        printf("C\n");
    }
    
    if (score>=60 && score<=69) { // [60, 69]
        printf("D\n");
    }
    
    if (score<=59) { // (-∞, 59]
        printf("E\n");
    }*/
    return 0;
}
0 0