3.C语言基本运算

 

3.C语言基本运算                            

一. 算术运算                                         

C语言一共有34种运算符,包括了常见的加减乘除运算

1.  加法运算 +

 除开能做加法运算,还能表示正号: +5+90

2.  减法运算

  除开能做减法运算,还能表示负号:-10-29

3.  乘法运算 *

    注意符号, 不是x ,而是 *

4.  除法运算 /

    注意符号,不是 ÷,也不是\ 而是/

    参与运算的是什么类型,得出结果就是什么类型

        例如:

整数除以整数,还是整数。  1/2的值是0,这个并不是二分之一

                   double c = 10/3 ; => 3.000  而不是 3.333

                   double c = 10.0/3 ; => 3.333 

                   double c = (double)10/3 ; => 3.333 

5.  取余运算 % (模运算)

    什么是取余:两个整数相除以后的余数

    %两侧只能是整数

    正负性取决于%左侧的数值

6.  注意点 (类型转换)

1)  自动类型转换

int b = 10.5 + 1.7;  (double  – int , 编译正常通过,但有警告提示)

自动将大类型转换为小类型,会丢失精度

2)  强制类型转换

int a = (int)10.6;   (强制类型转换,编译正常通过~并且无警告提示)

 

3)  自动类型提升

double c = 10.6 + 6;

  表达式
  结合性(结合方向): 2+3+4
  优先级: 5+4*8-3

7.  习题

1)  当?是什么运算符时,不论整数变量a的值怎么变,结果c都不超过10

         int c = a?10;  =>  ? %

2)  提示用户输入两个整数,并输出两个整数的平均值

3)  提示用户输入一个时间的秒数,比如500秒就输入500,然后输出对应的分钟和秒,比如500s就是8分钟20

#include <stdio.h>

int main()

{       

         // 1. 提数输入时间秒

         printf("Please enter time(s): \n");

 

         // 2. 接收用户输入的时间

         int time1;

         scanf("%d", &time1);

 

         // 3. 转化成对应的分钟和秒

         int minute = time1 / 60; // 分钟

         int second = time1 % 60; //

 

         printf("%ds = %d minute %d second \n", time1, minute, second);

 

         return 0;

}

二. 赋值运算                                         

1.  简单赋值

  int a = 10 + 5; 的运算过程

  a = b = 10;

 

2.  复合赋值运算符

a += 5;  =>  a = a + 5

a *= 5;  =>  a = a * 5

 

 

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

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

++a;

 

a ++  ++ a的区别:
案例1

b = a++;  =>   b =a; a=a+1;

案例2

b = ++a;  =>   a=a+1; b=a;

案例3

int b; int a =10;

b = (a++) + (++a);

a++ => a =11;  ++a => a=a+1 =>  a=11+1 =12

b = 10 + 12

案例4

int b; int a =10;

b = (++a) + (a++);

++a => a =a+1=11 ;  a++ => a=11

b = 11 +11

a++ = a+1 = 11+1 =12

案例5:报错

10++;  => 10 = 10 + 1;  报错

三. sizeof                                         

1.  作用

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

 

2.  基本形式

  sizeof (变量/常量)

  sizeof (变量/常量)

  sizeof (数据类型)

  不能sizeof 数据类型

3.  测试案例

 

#include <stdio.h>

 

// sizeof 的用法

int main()

{       

         // 1、常量查看占用内存大小

         // int size = sizeof(10);

         // int size = sizeof 10.8;

 

         // 2、变量查看占用内存大小

         // int a =10;

         // int size = sizeof(a);

         // int size = sizeof a;

 

         // 3、直接查看变量类型,占用内存大小

         // int size = sizeof(float);

         int size = sizeof(double);

 

 

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

 

         return 0;

}

四. 关系运算(比较运算)                                         

1.  条件判断:

  默认情况下,我们在程序中写的每一句正确代码都会被执行,但很多时候,我们想在某个条件成立的情况下才执行某一段代码

  这种情况的话可以使用条件语句来完成,但是我们暂时不学习条件语句,先来看一些更基本的知识,如何判断一个条件成不成立。

2.  真假:

  C语言中,条件成立称为,条件不成立称为,因此,判断条件是否成立,就是判断条件的真假

  怎么判断真假呢?C语言规定,任何数值都有真假性,任何非0值都为,只有0才是,也就是说:108,-134.5-10.5 等都是0则是

3.  关系比较:

开发中经常需要比较,比如斗地主游戏中牌的大小。利用关系运算符就可以比较2个只的大小

  关系运算符的运算结果只有2种:

         如果条件成立,结果就是1,也就是

         如果条件不成立,结果就是0,也就是

4.  优先级:

  关系运算符中:><>=<===!=

关系运算符中==!=、的优先级相等,<<=>>=的优先级相等,却前者的优先级低于后者

例如: 2 = 3 > 1

  关系运算符的结合方向为从左到右 4>3>2

  关系运算符的优先级小于算术运算符: 3+4 > 8-2

5.  习题:

计算下列表达式的值:

#include <stdio.h>

 

// 习题1: 

// int a = 5 != 4 + 2 * 7 > 3 == 10;

int main()

{       

 

 

         int a = 5 != 4 + 2 * 7 > 3 == 10;

         /*

         分析如下:

         int a = 5 != 4 + 2 * 7 > 3 == 10;

  =>关系运算符的优先级 小于 算术运算符: 3+4 > 8-2

  =>int a = 5 != (4+2*7) > 3 == 10;

  =>int a = 5 != 18 > 3 == 10;

  =>关系运算符中==!=、的优先级相等,<<=>>=的优先级相等,却前者的优先级低于后者

       // 条件 成立 就返回1

         // 条件不成立就返回0

  =>int a = 5 != 1 == 10;

  =>关系运算符的结合方向为“从左到右”: 4>3>2

  =>int a = 1 == 10;

  =>int a = 0;

         */

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

 

         return 0;

}

五. 逻辑运算                                         

  有时候,我们需要在多个条件同时成立才能执行某段代码。比如:用户只有同时输入了QQ号和密码,才能执行登录代码,如果只输入了QQ或者只输入了密码,就不能执行登录代码,这种情况下,我们就要借助于C语言提供的逻辑运算符

  逻辑运算的结果只有2个,10

1.  && 逻辑与

1)  使用格式

条件A && 条件B

2)  运算结果

只有当条件A 条件B 都成立时,结果才是1,也就是:其余情况的结果都为0,也就是,因此,条件A或条件B只要一个不成立,结果都为0,也就是

3)  运算过程

总是先判断条件A是否成立

  如果条件A成立,接着再判断条件B是否成立;如果条件B成立,条件A && 条件B”的结果就为1,即,如果条件B不成立,结果就为0,也就是

  如果条件A不成立,就不需要判断条件B是否成立;因为条件A已经不成立了,不管条件B如何,条件A && 条件B”的结果就为0,也就是

4)  举例

逻辑与 的结合方向是自左至右。比如表达式(a>3  &&  a<5

  a的值是4,先判断a>3成立,再判断a<5,也成立,因此结果为1

  a的值是2,先判断a>3不成立,停止判断,因此结果为0

  因此,如果a的值在(3~5)这个范围内,结果就为1;否则,结果就为0

5)  注意

  若想判断a的值是否在(3~5)范围内,千万不能写成3<a<5,因为关系运算符的结合方向为从左往右。比如a2,它会先算3<a,也就是3<2,条件不成立,结果为0;再与5比较,即0<5,条件成立,结果为1。因此3<a<5的结果为1,条件成立,也就是当a的值为2时,a的值是在(3~5)范围内的,这明显是不对的,正确的判断方法是:(a>3&&a<5

  C语言规定:任何非0的值都为,只有0才能为。因此逻辑与适用于数值。比如5&&4的结果是1,为-6&&0的结果是0,为

 

2.  || 逻辑或

1)  使用格式

条件A || 条件B

2)  运算结果

当条件A或条件B只有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是;只有当条件A和条件B都不成立时,结果才为0,也就是

3)  运算过程

总是先判断条件A是否成立

  如果条件A成立,就不需要判断条件B是否成立;如果条件A成立,不管条件B如何,条件A || 条件B”的结果肯定为1,即

  如果条件A不成立,接下来判断条件B是否成立;因为条件B已经成立了,条件A || 条件B”的结果肯定为1,即,如果条件B也不成立了,结果就为0,也就是

4)  举例

逻辑或 的结合方向是自左至右。比如表达式(a<3  ||  a>5

  a的值是4,:先判断a<3,不成立,再判断a>5,也不成立。因此结果为0

  a的值是2,:先判断a<3,成立,停止判断。因此结果为1

  因此,如果a的值在(-∞,3)或者(5+∞)范围内,结果就为1;否则,结果为0

 

5)  注意:

C语言规定:任何非0值都为,只有0才为。因此逻辑或也适用于数值。

比如5 || 4的结果是1,为 -6 || 0 的结果是1,为 0||0结果为0,为

 

3.  逻辑非

如果条件成立,就返回0,如果条件不成立,就返回1

int a = !(10>8)

int a = !-10

1)  使用格式

!条件A

2)  运算结果

其实就是对条件A进行取反;若条件A成立,结果就为0,即;若条件A不成立,结果就为1,即。也就是,真的变假,假的变真。

3)  举例

逻辑非 的结合方向是自右至左。比如表达式: !(a>5)

  a的值是6:先判断a>5,成立。因此结果为0

  a的值是2:先判断a>5,不成立。因此结果为1

  因此,如果a的值 > 5,结果就为0;否则,结果为1

4)  注意:

  可以多次联系使用逻辑非 运算符;!(4>2) 结果为0,是!!(4>2) 结果是1,是!!!(4>2)结果是0,是

  C语言规定: 任何非0值都为,只有0才为。因此,对非0值进行逻辑非! 运算的结果都是0,对0值进行逻辑非! 运算的结果为1!5!67!9的结果都为0!0的结果为1

 

 

4.  运算符的优先级   

六. 三目运算符                                        

单目运算符:  !5

双目运算符:  5>2

N目运算符  =>  三目运算符:

(条件数值1  :  数值2)

条件成立,就返回数值1,否则返回数值2.

  int a = 5 ? 10 : 2; 

  获得ab中的最大数

  获得abc中的最大数

 

#include <stdio.h>

 

// 习题1: 

// 求出a、b、c中最大值

int main()

{

  int a = 10;

  int b = 300;

  int c = 2000;

 

  // int ab_max = a>b ? a : b;

  // int Max = ab_max>c ? ab_max : c;

   

  // 把 ab_max看做一个整体就行勒 (不过不推荐,因为不便于理解)

  int Max = (a>b ? a : b) >c ? (a>b ? a : b) : c;

 

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

 

    return 0;

}

转载于:https://my.oschina.net/dataRunner/blog/361066

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值