黑马程序员_iOS开发C语言基础之运算符和流程控制

一、运算符

1、命令窗口卡住后用control+c退出
2、取余运算(就是模运算),%操作数都是整数,
int e = -10 % 3   e=-1
int e = -10 % -3   e=-1
int e = 10 % -3   e=1
%取余结果的正负性只跟%左边的数值有关
3、自动类型转换,强制类型转换(type)
参与运算数据类型是什么类型,结果就是什么类型
10/3    3
int c = 10/3   3
double  c = 10/3  3.000000
所以10/3结果就是3,如果赋值就看什么类型再转换
double c = 10.0/3    3.333333
double c = (double)10/3  3.333333
double c = (double)(10/3)  3.000000

4、 int c = a ?10
?为%时,c的结果不超过10,结果为0~9

5、a += 5 + 6 + 4;  // 相当于a =a + (5 +6 + 4);
6、int a =10;
     b =  (a++) + (++a);   // a=12  b=22
     b = (10) +(12)=22;  //“+”结合方向是从左到右
      // 10 — >11    11— >12
7、sizeof(变量\常量);返回字节数。sizeof 常量\变量 ,去掉括号也行;
     sizeof(double)结果为8   ,但是sizeof double 语法不通过(数据类型)
8、C语言没有布尔类型,任何非0值都为真,只有0才为假。关系运算符运算结果只有两种,1和0,代表真和假。
2==3>1 先计算3>1,得1,2==1得0 ,结果为0
4>3>2结合方向为从左往右,结果为1>2得0
3+4>8-2   (3+4)>(8-2) 得1  ,算术运算符优先级高于关系运算符,优先级不用死背。
9、逻辑运算应用登陆QQ时,当用户名和密码都为1时,点击登陆后才成功。
逻辑值只有1和0即真和假。
逻辑与&&计算时,左边为假时,右边不计算(在性能优化时用到),当左边为真时,才计算右边,
int a =10;
int b =10;
int c = (a>5) &&(++b>=11)    //结果10 11 1
int c = (a<5) &&(++b>=11)    //结果10 10 0
逻辑或“||”计算时,同上原理
int a =10;
int b =10;
int c = (a>5) || (b++ - 11)    //结果10 10 1  注意左边为真,右边不计算
int c = (a<5) || (b++ - 11)    //结果10 11 0
逻辑非“!”
int a = !10;  //结果为0  ,任何数值都有真假性。
int a = !!10;  //结果为1
10、三目运算符
int a = 100 ? 1 : 2   //结果为1
代码少不代表性能高,程序的可读性重要。

二、流程控制

1、if(0 == a) //防止if(a == 0) 写成 if(a=0)
比较大小时,条件运算时,常量值放左边,变量放右边
2、 a == 5;  //在java中会报错,因为结果值必须有保存
在C中是可以的;同样 10;也可以。
3、if(5 > 6) ; //注意“;”空语句
{
printf(“A\n");
}
4、if (10 > 6)
{
int a  = 5;
}
printf(“%d\n”,a); //会提示a未定义

{
if (10 > 6)
int a  = 5;//提示错误;a的作用域不明确,a的作用域只与if有关。
printf(“%d\n”,a);  
 }
/// 结论为如果要在if后面的语句中定义新的变量,必须用大括号{}
5、break退出整个switch语句,如果case后面没有break,条件成立,就会逐条执行后面语句,不再匹配case 之后的值。

switch (c)

    {

        case '+':

            int sum = a+b;

            printf("和是%d\n",sum);

            break;

        case '-':

            int minus = a - b;

            printf("差是%d\n", minus);

            break;

    }

此处的错误和4中a的作用域不明确差不多。编译器只看{},但是有条件判断,产生矛盾。解决办法:

case ‘+’ :

{

int sum = a+b;

        printf("和是%d\n",sum);

        break;

}

如果要在case后面定义新的变量,必须用{}包住。


int main()

{

    int count = 50

    while(count < 50)

     {

         ++count;

        /* 

if(count%10=0)

         {

             printf("%d次做俯卧\n",count);

         }

*/

/*

if(count%10==0)

         {

             //结束本次,进入下一次循环体判断执行

             continue;

         }

         printf("%d次做俯卧撑\n",count);

*/

if(count%10==0)

         {

             //跳出结束循环

             break;

         }

         printf("%d次做俯卧撑\n",count);     } 

    return 0;

}


int n;

     scanf("%d", &n );

     while(n<=0)

     {

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

        scanf("%d", &n );     

     }


6、有时程序刻意制造死循环。

7、for循环中的性能问题,如下程序:

{

    int count = 0;

    for(; count < 50;)

    {

        printf("做俯卧撑\n");

        count++;

    }

    //对比上面的写法,这种写法性能更高,因为count变量只  在for循环中使用。count只能用在for循环中,for结束,count释放。

    for(int count = 0; count < 50;count++)

    {

        printf("做俯卧撑\n");

    }

   //printf(“%d\n”,count);提示错误因为count已释放

   for(int count = 0; count <50;printf("做俯卧\n"),printf("哈哈\n),count++)

    {

        

    }

    //printf("做俯卧撑\n"),printf("哈哈\n");为逗号表达式,从左到右顺序执行。

}


8、for循环使用注意:


// 错,int a作用域不明确

    for(int i = 0; i <5;i++)

        int a =10;

    // 正确

    for(int i = 0; i <5;i++)

    {

        int a =10;

    }

    for(int i = 0; i <5;i++)

    {

        int i =10

        printf("i=%d\n",i ); //输出结果为一直为10,就近原则。

    }



for(int i = 0; i <5;i++)

    {

        //int i =10

        printf("i=%d\n",i ); //输出结果为0,1,2,3,4

    }


// 错,a释放,只能用在循环体中,所以导致语句2错误。

    for(int i = 0; i <5;i++,a++)

    {

        int a  =10

    }


int a = 10;

    for(int i = 0; i <5;i++)

    {

        //int i =10

        printf("a=%d\n",a ); //输出结果a为10

    }


//

    int a = 10;

    for(int i = 0, a=9; i <5;i++)

    {

        //int i =10

        printf("a=%d\n",a ); //输出结果为9

    }


//

   int a = 10;

    for(int i = 0, a=9; i <5;i++)

    {

        int a  =10

        //输出结果将会一直为10,就近原则,由内向外找定义变量a 

        printf("a=%d\n",a ); 

    }


9、break 和 continue

continue 跳出本次循环,进入下次循环

break 跳出整个循环

//

    //

    for(int i=0;i<2;i++)

    {

        for(int j=0 ;j<3;j++)

        {

            if(j==1)

            {

                //continue;  // 跳出本次内循环,就近原则

                break;  //跳出内循环,就近原则

            }

            printf("A\n");

        }

        break;  // 跳出外循环,就近原则

        printf("B\n");

     }



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值