黑马程序员——c语言基础:运算符和分支结构的一些注意点和练习

来源:互联网 发布:winscp linux版 编辑:程序博客网 时间:2024/05/22 13:53

1.sizeof运算符

 注意:sizeof运算符是一个单目运算符不是函数!

 作用:计算常量、变量、数据类型在内存中占用的字节数

 1)用sizeof计算常量在内存中占用的字节数

    sizeof(1) //计算常量 1int类型)在内存中占用的字节数 4

    sizeof(2.3f) //计算float类型的常量在内存中占用的字节数 4

    sizeof(2.3) //计算double 类型的常量在内存中占用的字节数 8

    

   注意:sizeof('a')计算‘a’字符常量在内存中占用的字节数,字符常量在内存中以ASCII码的形式(int类型)储存 4

    char类型的变量把字符的ASCII码转换成二进制(1个字节)进行存储

   所以char类型的变量占1字节,char类型常量占4字节

 

 2)用sizeof运算符计算变量在内存中占用的字节数

    int a = 10;

    float f1 = 2.3f;

    double d1 = 2.3;

    char ch = 'a';

    

    sizeof(a);  //计算int类型变量a在内存中占用的字节数  4

    sizeof(f1);  //计算float类型变量 f1在内存中占用的字节数  4

    sizeof(d1);  //计算double类型变量 d1在内存中占用的字节数  8

    sizeof(ch);  //计算char类型变量 ch在内存中占用的字节数  1

 

 3) sizeof用于计算某一种数据类型在内存中占用的字节数

    sizeof(int) //表示int类型的数据在内存中占用的字节数  4

    sizeof(double) //表示double类型的数据在内存中占用的字节数  8

    sizeof(float) //表示float类型的数据在内存中占用的字节数  4

    sizeof(char) //表示char类型的数据在内存中占用的字节数  1


 注意点:sizeof用在常量和变量的时候,可以省略括号,用在数据类型的时候不能省略括号

    sizeof 2.3;

    sizeof d1;


2.逗号运算符

 1)","是一个逗号运算符,其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式


 2)逗号表达式的求值:对逗号连接的每个表达式逐个求值,用最后一个表达式的值作为整个逗号表达式的值

 

 

    int a =4, b = 5, result =0;

    result = (a +3, b + 4, a + b); //返回a+b=9


3.逻辑运算符的短路问题:

  A && B   // 如果A为假(0),结果为假,B就不执行了,这就是逻辑与短路

A || B  //如果A为真(1),结果为真,B就不执行了,这就是逻辑或短路

举例:

#include <stdio.h>


int main(int argc,constchar * argv[]) {

   int x,y,z,result;

    x = y = z = result =0;

    result = (++x) || (++y) && (z++); // 逻辑或短路了,result = 1, x = 1 ,y = 0 ,z = 0

    result = x && y ++; // 逻辑与短路了,result = 0, x = 0, y = 0

   return0;

}


4.三目运算符

1)三目运算符的格式:表达式1 ?表达式2 :表达式3

2)运算规则:如果表达式1为真,则返回表达式2的值;否则返回表达式3的值

应用举例:

// 实现用户从键盘上输入三个整数,找出最大值,然后输出最大值

#include <stdio.h>


int main(int argc,constchar * argv[]) {

    //定义变量储存用户输入的数和最大值

   int a,b,c,max;

    // 数据初始化

    a = b = c = max =0;

    

    //提示用户输入三个整数

    printf("请输入三个整数,用空格隔开:");

    

    //获取用户输入的整数,储存在变量中

   scanf("%d %d %d",&a, &b, &c);

    

    // 找出最大值

    max = a > b ? a : b; // 如果 a > b 为真,则将 a 赋值给 max; 否则,将 b 赋值给 max

    max = max > c ? max : c; // 如果 max > c 为真,则将 max 的值赋值给 max;否则,将 c 赋值给 max

    

    // 打印输出最大值

   printf("最大值是:%d",max);

    

   return0;

}


5.if…else 嵌套练习:

// 实现代码:输入一个数字,与5做比较:如果等于5,则打印等于5”,如果大于5则打印大于5”,如果小于5,则打印小于5”

#include <stdio.h>


int main(int argc,constchar * argv[]) {

    

    //定义变量,储存用户输入的数

   int num =0;

    

    // 提醒用户输入

    printf("请输入一个整数:");

    

    //接收用户输入的数,并传递给变量

   scanf("%d",&num);

    

    //判断用户输入的数字是否等于5

   if (num ==5) {

        // 如果等于5,则打印等于5”

       printf("等于5");

    } else {//如果不等于5,则判断是否大于5

       if (num >5) {

           printf("大于5");

        }else {

           printf("小于5");

        }

    }

      return0;

}


6.if语句高级应用:

1) 输入一个0-100的成绩,按0-59E),60-69D,70-79(C),80-89(B),90-100(A)分成几等。

#include <stdio.h>


int main(int argc,constchar * argv[]) {

    //定义一个变量,用来存储成绩

   int score = -1;

    

    // 提示用户输入

    printf("请输入一个成绩:");

    

    //接收用户输入的分数,储存在变量中

   scanf("%d",&score);

    

    //判断用户输入的成绩,输出对应等级

   if (score >=90 && score <=100) {

       printf("A");

    }elseif (score >=80){

       printf("B");

    }elseif (score >=70){

       printf("C");

    }elseif (score >=60){

       printf("D");

    }elseif (score >=0 && score <=59){

       printf("E");

    }else {

       printf("输入不合法");

    }

    

   return0;

}


2)实现剪刀石头布游戏

#include <stdio.h>

#include <stdlib.h>

int main(int argc,constchar * argv[]) {

    //定义变量,接收电脑出的拳和玩家出的拳

   int computer = -1, player = -1;

    

    // 电脑出拳:012随机数

    computer =arc4random_uniform(3);

    

    // 提示玩家出拳

    printf("请出拳(0:石头,1:剪刀, 2:布)\n");

    

    // 接收玩家出的拳

   scanf("%d",&player);

    

    // 判断出拳有效性

   if (player<0 || player >2) {

       printf("请按套路出拳");

       return0;

    }

    

    //比较电脑和玩家的猜拳结果

    // 玩家赢的情况

   if ((player ==0 && computer ==1) ||

        (player ==1 && computer ==2) ||

        (player ==2 && computer ==0)) {

       printf("恭喜你,你赢了");

    }elseif ((player ==0 && computer ==2) ||

               (player ==1 && computer ==0) ||

               (player ==2 && computer ==1)) {

       printf("很遗憾,你输了");

    }else {

       printf("平局");

    }


   return0;

}


7.switch语句的应用:
1)判断季节

// 从键盘输入一个月份,输出对应季节:12~2冬季,3~5春季,6~8夏季,9~11秋季(用swiitch

#include <stdio.h>


int main(int argc,constchar * argv[]) {

    

    //定义变量,储存月份

   int month =0;

    

    //提示用户输入月份

    printf("请输入一个月份(1~12): ");

    

    //接收用户输入的月份,传递给变量

   scanf("%d", &month);

    

    // 判断有效性

   while (month <1 || month >12) {

        printf("\n没有这个月份!请重新输入:");

       scanf("%d", &month);

    }

    

    //判断用户输入的月份对应的季节,并输出

   switch (month) {

       case12:

       case1:

       case2:

           printf("冬季");

           break;

       case3:

       case4:

       case5:

           printf("春季");

           break;

       case6:

       case7:

       case8:

           printf("夏季");

           break;

       case9:

       case10:

       case11:

           printf("秋季");

           break;

       default:

           break;

    }

   return0;

}


2)简单计算器

// 使用switch实现简单的计算器

#include <stdio.h>


int main(int argc,constchar * argv[]) {

    

    //定义变量,用于接收数据和运算符号,以及运算结果

   float num1, num2;

   int op;

   float result;

    

    //提示用户输入第一个数

    printf("请输入第一个数:\n");

    

    // 接收第一个数

   scanf("%f",&num1);

    

    //提示用户输入运算符号:+-*/

    printf("请输入运算符(0:+1:-2:*3:/):\n");

    

    // 接收运算符号

   scanf("%d", &op);

    

    //提示用户输入第二个数

    printf("请输入第二个数:\n");

    

    // 接收第二个数

   scanf("%f", &num2);

    

    // 计算

   switch (op) {

       case0: // 加法

            result = num1 + num2;

           break;

       case1: // 减法

            result = num1 - num2;

           break;

       case2: // 乘法

            result = num1 * num2;

           break;

       case3: // 除法

            result = num1 / num2;

           break;

       default:

           break;

    }

   printf("计算结果为:%f ",result);

   return0;

}




8.if语句和switch语句的选择:

1)分支比较多且无法穷尽或进行大量列举时最好用if

2)如果分支数量不是很多,但是使用if代码量比较大的时候,可以选用switch


0 0