《ios零基础教程》 ---sizeof、关系运算符、逻辑运算和三目运算和流程控制if选择结构 2014-3-21总结

来源:互联网 发布:linux 总线 编辑:程序博客网 时间:2024/05/21 05:57


今天继续学习了基本运算中的sizeof、关系运算符、逻辑运算和三目运算和流程控制if选择结构。


一、sizeof

1、定义

sizeof 可以用来计算一个变量或者一个常量、一个数据类型所占的内存字节数。

2、sizeof一共3中形式:

1>sizeof(变量/常量)

 2>sizeof变量/常量

 3>sizeof(数据类型)


#include <stdio.h>int main(int argc, const char * argv[]){    //常量//    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;}


二、关系运算符

1、“真”、“假”

C语言中,条件成立称为“真”,条件不成立称为“假”,规定任何非0值都为“真”,只有0才为“假”,如-18、4.5、-10.5等都是“真”,0则是“假”。

#include <stdio.h>int main(int argc, const char * argv[]){    int a = 10;    int b = 11;        //条件成立就返回1,真    //条件不成立就返回0,假        //“== >= !="是比较a 和 b的值,然后将结果通过赋值运算符=返回给result//    int result = b == a;//不成立,假,返回值0//    int resilt = b >= a;//成立,真,返回值1    int result = b != a;//成立,真,返回值1        printf("%d\n",result);    return 0;}


2、运算符优先级表

运算符的优先级(从高到低)

优先级

描述

运算符

1

括号

()、{}

2

正负号

+、--

3

自增自减、非

++、--、!

4

乘除、取余

*、/、%

5

加减

+、-

6

移位运算

<<、>>、>>>

7

大小关系

>、>=、<、<=

8

相等关系

==、!=

9

按位与

&

10

按位异或

^

11

按位或

|

12

逻辑与

&&

13

逻辑或

||

14

条件运算

?

15

赋值运算

= 、+=、-=、*=、/=、%=

16

位赋值运算

&=、<<=、>>=、>>>=

如果在程序中,要改变运算顺序,可以使用()。



三、逻辑运算

1、&&  逻辑与

1> 使用格式
      “条件A && 条件B”

2> 运算结果
只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。

3> 运算过程
如果条件A成立,接着再判断条件B是否成立
如果条件A不成立,就不会再去判断条件B是否成立


2、||      逻辑或

1> 使用格式
“条件A || 条件B”

2> 运算结果
当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。

3> 运算过程
如果条件A成立,就不会再去判断条件B是否成立
:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”
如果条件A不成立,接着再判断条件B是否成立。


3、!    逻辑非

1> 使用格式
“条件A || 条件B”

2> 运算结果
当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。

3> 运算过程
如果条件A成立,就不会再去判断条件B是否成立
:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”
如果条件A不成立,接着再判断条件B是否成立


#include <stdio.h>int main(int argc, const char * argv[]){    //逻辑与  条件1 && 条件2    /*    int a = 10;    int b = 10;    //    int c = (a>5) && (++b>=11);    //最后输出结果:a=10 ,b=11 ,c=1        int c = (a<5) && (++b>=11);    //最后输出结果:a=10 ,b=10 ,c=0    //b=10 ,原因按位与&&符号之前(a<5)不成立,所以编译器直接忽略&&后面的运算过程        printf("a=%d, b=%d , c=%d\n",a , b ,c);    */            //逻辑或  条件1 || 条件2    /*//    int a = 0 || 11;        int a = 10;    int b = 10;        int c = (a>5) || (b++ - 10);    //最后输出结果:a=10 ,b=10 ,c=0    //b=10 ,原因按位或||符号之前(a>5)成立,满足条件了,所以编译器直接忽略||后面的运算过程    //    int c = (a<5) || (b++ - 10);    //最后输出结果:a=10 ,b=11 ,c=0        printf("a=%d, b=%d , c=%d\n",a , b ,c);          */                //逻辑非  !条件            int a = !(10>8); //输出结果a=0;        int b = !-10;  //输出结果b=0;        int c = !10>8;  //输出结果c=0;        int d = !!10;  //输出结果d=1;        printf("c = %d\n",d);         return 0;}


四、三目运算符

C语言提供了唯一一个三目运算符:条件运算符。

1> 使用格式
表达式A ? 表达式B : 表达式C

2> 运算结果
如果表达式A成立,也就是为“真”,条件运算符的结果就是表达式B的值,否则,就为表达式C的值


#include <stdio.h>int main(int argc, const char * argv[]){            //三目运算符  条件 ? 数值1 : 数值2    /*    int a = !100 ? 9 :89;        printf("a = %d",a);    */        //计算2个整数之间的最大值    /*    int a = 10;        int b = 99;        int c = a>b ? a : b;        printf("c is %d\n",c);    */            //计算3个整数之间的最大值        int a = 10;    int b = 99999;    int c = 1000;        //先求a、b之间的最大值    int abMax = (a>b) ? a : b;    //再求出最终的最大值    int d = abMax > c ? abMax : c;        //int d = (((a>b) ? a : b) > c) ? (((a>b) ? a : b) : c);  //此方法不可取,可读性太差    printf("d is %d\n",d);    return 0;}

五、 if 选择结构

1、if 的四种结构


/* 1.if的第1种结构 if(条件) {    语句1;    语句2;    ........ }  2.if的第2种结构 if(条件) {    语句1;    语句2;    ........ } else {  }   3.if的第3种结构 if(条件1) { 语句1; 语句2; ........ } else if(条件2) {  } else if(条件3) {  } else {  } 4.if的第4中结构 if(条件)     语句1;   //只与这条语句有关系 */#include <stdio.h>int main(int argc, const char * argv[]){    /*    // 人数    int count = 60;        if (count >= 50)    {        printf("开班!!!\n");        printf("准备机器!!!\n");    }    else    {        printf("不开班!!!\n");        printf("不准备机器!!!\n");    }     */        /*     int a = 6;        if (a++ > 10)  //a = 7    {        printf("A\n");    }    else if (a++ > 5)  //a = 8,当程序满足这一步条件之后,就不再执行下一步条件    {        printf("B\n");    }    else if (a++ > 3)  //a = 9    {        printf("C\n");    }    else    {    printf("D\n");    }    */        int a = -10;        if (a > 1)        printf("A\n");        printf("B\n");//这条语句域if没有关系        return 0;}


2、if 机构使用注意事项


#include <stdio.h>int main(int argc, const char * argv[]){    //    1、直接输入0、1比较    if (0)  //非0为真,0为假    {        printf("A\n");    }    else    {        printf("B\n");    }                /*    2、比价大小时,常量值放左边,变量放右边    int a = 10;    //    if (a = 0)  //这里是将0赋值给a,所以0为假,结果是a不等于0,    if(0 == a) //为了避免上面的错误,所以这样写    {    printf("a等于0\n");    }    else    {    printf("a不等于0\n");    }    */                /*//    3、注意赋值运算符,不要写成两个=    int a = 10;        a == 15;        printf("%d\n",a);     */            /*//    4、if()后面不要写;    if ( 5 > 6);    {        printf("A\n");    }    */                    /*//    5、if用法中作用域问题    if (10 > 6)    {        int a = 5;//这里的a在定义结束之后就被释放消失    }        printf("%d\n",a);    */                /*//    6、下面代码是错误的,作用域不明确    if (10 > 6)        int a = 5;    *///    printf("%d\n",a);        return 0;}

3、练习题

 1> 输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输入星期一

 

 2> 输入一个整数month代表月份,根据月份输出对应的季节

 春季:345

 夏季:678

 秋季:91011

 冬季:1212


 3> 输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)

/*1.输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输入“星期一”#include <stdio.h>int main(int argc, const char * argv[]){    printf("输入一个整数day==");    int day;    scanf("%d",&day);        if (day == 1) {        printf("星期一\n");    }    else if (day == 2){        printf("星期二\n");    }    else if (day == 3){        printf("星期三\n");    }    else if (day == 4){        printf("星期四\n");    }    else if (day == 5){        printf("星期五\n");    }    else if (day == 6){        printf("星期六\n");    }    else if (day == 7){        printf("星期七\n");    }    else{        printf("这个数字不是星期数\n");    }    return 0;}*//* 2.输入一个整数month代表月份,根据月份输出对应的季节 春季:3、4、5 夏季:6、7、8 秋季:9、10、11 冬季:12、1、2  #include <stdio.h>int main(int argc, const char * argv[]){    printf("输入一个整数month==");    int month;    scanf("%d",&month);        if (3 == month || 4 == month || 5 == month) {        printf("春季\n");    }    else if (6 == month || 7 == month || 8 == month){        printf("夏季\n");    }    else if (9 == month || 10 == month || 11 == month){        printf("秋季\n");    }    else if (12 == month || 1 == month || 2 == month){        printf("冬季\n");    }    else{        printf("这个数字不是月份数\n");    }    return 0;}*/// 3.输入一个整数score代表分数,根据分数输出等级(A-E)(用三种方式)//第三种方法:性能最好#include <stdio.h>int main(int argc, const char * argv[]){    printf("输入一个分数score==");    int score;    scanf("%d",&score);        if (100 >= score && 90 <= score) {        printf("A\n");    }    else if (80 <= score){        printf("B\n");    }    else if (70 <= score){        printf("C\n");    }    else if (60 <= score){        printf("D\n");    }    else if (60 > score && 0 <= score){        printf("E\n");    }    else{        printf("这个数字超出分数范围\n");    }        return 0;} /*第二种方法:性能中等#include <stdio.h>int main(int argc, const char * argv[]){    printf("输入一个分数score==");    int score;    scanf("%d",&score);        if (100 >= score && 90 < score) {        printf("A\n");    }    else if (90 >= score && 80 < score){        printf("B\n");    }    else if (80 >= score && 70 < score){        printf("C\n");    }    else if (70 >= score && 60 <= score){        printf("D\n");    }    else if (60 > score && 0 <= score){        printf("E\n");    }    else{        printf("这个数字超出分数范围\n");    }        return 0;} *//*第一种方法:性能最差#include <stdio.h>int main(int argc, const char * argv[]){    printf("输入一个分数score==");    int score;    scanf("%d",&score);        if (100 >= score && 90 < score) {        printf("A\n");    }        if (90 >= score && 80 < score){        printf("B\n");    }        if (80 >= score && 70 < score){        printf("C\n");    }        if (70 >= score && 60 <= score){        printf("D\n");    }        if (60 > score && 0 <= score){        printf("E\n");    }        else{        printf("这个数字超出分数范围\n");    }        return 0;}*/



0 0