运算符与表达式

1、常用运算符分类

运算符类型作用
算术运算符用于处理四则运算
赋值运算符用于将表达式的值赋给变量
比较运算符用于表达式的比较,并返回一个真值或者假值
逻辑运算符用于根据表达式的值返回真值或者假值
位运算符用于处理数据的位运算
sizeof运算符用于求字节数长度

2、算术运算符

运算符术语
+正号
-负号
+
-
*
\除(两个整型数据相除,得到的结果是整型 -> 结果向下取整)
%取模(取余),只能对整型数据操作
++前自增
前自减
++后自增
后自减
  • 除法运算:
int a=10;
int b=3;
printf("%d\n",a/b);		//3		两个整型数据相除,得到的结果是整型 -> 结果向下取整

float c=10.0;
printf("%d\n",c/b);		//1.42857

int d=++a*10			//d=110, a=11
int e=b++*10			//e=30,b=4
  • 前自增:先自增,再进行表达式计算
  • 后自增:先进行表达式计算,再自增
  • 前自减:先自减,再进行表达式计算
  • 后自减:先进行表达式计算,再自减

一般建议使用前自增和前自减,能够更具有可读性;后自增和后自减容易产生二义性**

前置和后置混用,在不同操作系统由于实现不同会有不同的结果。

3、赋值运算符

运算符术语
=赋值
+=加等于
-=减等于
*=乘等于
/=除等于
%=模等于

4、比较运算符

比较完成后会返回真或假的布尔值

运算符术语
==相等于
!=不等于
<小于
>大于
<=小于等于
>=大于等于

5、逻辑运算符

运算符术语
&&
||
  • 所有非零的值都是真
  • ! 非 :非真为假,非假为真
  • ! 的优先级高于 &&
  • 单目运算符优先级高于双目运算符,双目运算符优先级高于三目运算符
  • && 与:同真为真,其余为假
  • || 或:同假为假,其余为真

6、运算符的优先级

优先级运算符名称或含义使用形式结合方向说明
1[]数组下标数组名[常量表达式]左到右
1()圆括号(表达式),函数名(形参表)左到右
1.成员对象对象.成员名左到右
1->成员指针对象指针->成员名左到右
2-负号运算符-表达式右到左单目运算符
2~按位取反运算符~表达式右到左单目运算符
2++自增运算符++变量名,变量名++右到左单目运算符
2自减运算符–变量名,变量名–右到左单目运算符
2*取值运算符*指针变量右到左单目运算符
2&取地址运算符&变量名右到左单目运算符
2逻辑非运算符!表达式右到左单目运算符
2(类型)强制类型转换(数据类型)表达式右到左
2sizeof长度运算符sizeof(表达式)右到左
3/表达式/表达式左到右双目运算符
3*表达式*表达式左到右双目运算符
3%取余整型表达式%整型表达式左到右双目运算符
4+表达式+表达式左到右双目运算符
4-表达式-表达式左到右双目运算符
5<<左移变量<<表达式左到右双目运算符
5>>右移变量>>表达式左到右双目运算符
6>大于表达式>表达式左到右双目运算符
6>=大于等于表达式>=表达式左到右双目运算符
6<小于表达式<表达式左到右双目运算符
6<=小于等于表达式<=表达式左到右双目运算符
7==等于表达式==表达式左到右双目运算符
7!=不等于表达式!=表达式左到右双目运算符
8&按位与表达式&表达式左到右双目运算符
9^按位异或表达式^表达式左到右双目运算符
10|按位或表达式|表达式左到右双目运算符
11&&逻辑与表达式&&表达式左到右双目运算符
12||逻辑或表达式||表达式左到右双目运算符
13?:条件运算符表达式1?表达式2:表达式3右到左三目运算符
14=赋值运算符变量=表达式右到左
14/=除后赋值变量/=表达式右到左
14*=乘后赋值变量*=表达式右到左
14%=取模后赋值变量%=表达式右到左
14+=加后赋值变量+=表达式右到左
14-=减后赋值变量-=表达式右到左
14<<=左移后赋值变量<<=表达式右到左
14>>=右移后赋值变量>>=表达式右到左
14&=按位与后赋值变量&=表达式右到左
14^=按位异或后赋值变量^=表达式右到左
14|=按位或后赋值变量|=表达式右到左
15,逗号运算符表达式,表达式,……左到右
int a=10;
int b=20;
int c=(a,b);		//c=20	逗号运算符是最后一个逗号右侧的表达式的值

int d=b=30;			//b=30,c=30

7、类型转换

类型转换有两种方法:

  • 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成;
  • 强制类型转换:把表达式运算的结果强制转换成所需的数据类型。
7.1、隐式类型转换

类型转换的原则:占用内存字节数少的(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。

char, short → \rightarrow signed int → \rightarrow unsigned int → \rightarrow long → \rightarrow double

float → \rightarrow double

float p=3.14;
int w=2;

//隐式类型转换
double sum=p*w;

7.2、强制类型转换

强制类型转换运算符不会进行四舍五入,直接去尾

float p=3.14;
int w=2;

//强制类型转换
//(数据类型)
int sum=(int)p*w;

int newSum=(int)(p*w);

8、程序流程结构

C语言支持三种程序运行结构:顺序结构、选择结构、循环结构

  • 顺序结构:程序按顺序执行,不发生跳转
  • 选择结构:依据是否满足条件,有选择的执行相应的功能
  • 循环结构:依据条件是否满足,重复多次执行某段代码
8.1、选择结构 - if 语句
  • 如果表达式结果为真,执行 {} 对应的代码。
// 形式1
if(表达式)
{}

//形式2
if(表达式)
{}
else
{}

//形式3
if(表达式1)
{}
else if(表达式2)
{}
else
{}


//条件嵌套
if(条件1)
{
    if(条件2)
    {}
    else if(条件2)
    {}
    else
    {}
}
else if(条件2)
{}
else
{}

8.2、选择结构 - switch 语句

switch 的执行效率高于 if-else 语句。

int score;
scanf("%d",&score);

//switch语句
switch (score/10)
{
    case 10:
        printf("优秀\n");
        break;
    case 9:
        printf("优秀\n");
        break;
    case 8:
        printf("良好\n");
        break;
    case 7:
        printf("良好\n");
        break;
    case 6:
        printf("及格\n");
        break;
    default:			//default 可以不要
        printf("不及格\n");
        break;
}

// break 一定要写,否则会将所有的条件都执行一遍
8.3、 选择结构 - 条件运算符

三目运算符:

表达式1?表达式2:表达式3

int a=10;
int b=20;

if(a>b)
{
	printf("a>b\n");
}
else
{
    printf("a<=b\n");
}

//三目运算符
a>b?printf("a>b\n"):printf("a<=b\n");
int c;
c=a>b?a:b;

//宏定义表达式
#define MAX(a,b) (a)>(b)?(a):(b)		//计算两数的较大者
int maxValue=MAX(a,b);

9、循环结构

9.1、循环结构-while语句
while(表达式)
{}


int i=1;
while(i<10)
{
    printf("%d\n",i);
    i++;
}

//100以内的偶数
int j=1;
while(j<=100)
{
    if(j%2==0)
    {
        printf("%d\n",j);
    }
    j++;
}

//7的倍数,数字带7,100以内
int k=1;
while(k<=100)
{
    if(k%7==0||k%10==7||k/10==7)
    {
        printf("%d\n",k);
    }
    k++;
}
9.2、循环结构-do - while 语句

do-while 语句与 while 语句的区别:while 语句先判断,再执行;do - while 语句先执行,再判断

数学函数使用

#include<math.h>

int c=pow(a,b);
9.3、循环结构-for 语句
//for 语句
for( ; ;)
{}

for(循环变量初始化表达式;条件判断表达式;改变循环变量)
{}
// 圆括号内的三个语句可以缺省
// 圆括号内的每个语句可以是多个语句使用逗号连接


for(int i=0;i<10;i++)
{
    printf("%d\n",i);
}

//上面的for循环等价于下面的写法
int i=0;
for( ; ; )
{
    if(i>=10)
    {
        break;
    }
    printf("%d\n",i);
    i++;
}
  • gcc 编译的时候选择 c 的版本
# 使用 -std 参数设置C的版本
gcc -o hello.out hello.c -std=c99
  • 产生随机数
    • 导入头文件 time.h stdlib.h
    • 添加随机数种子
    • 获取随机数
//产生随机数
srand((unsigned int)time(NULL));		//每次获取的随机数都不一样

int value=rand()%10;					//产生0-9的随机数
9.4、嵌套循环

循环语句之间可以相互嵌套。

外层执行一次,内层执行一周。

//sleep函数
#include<windows.h>

//电子时钟
for(int i=0;i<24;i++){
    for(int j=0;j<60;j++){
        for(int k=0;k<60;k++){
            
            //输出之前清屏
            system("cls");
            printf("%02d:%02d:%02d\n",i,j,k);
            //每次打印之后休眠1000毫秒
            Sleep(1000);
        }
    }
}


// 九九乘法口诀
/*
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
*/

for(int i=1;i<10;i++)
{
    for(int j=1;j<=i;j++)
    {
        printf("%d*%d=%d\t",j,i,i*j);
    }
    printf("\n");
}

10、跳转语句 break、continue、goto

10.1、break 语句

switch 条件语句和循环语句中都可以使用 break 语句:

  • 在 switch 语句中,作用是终止某个 case 并跳出 switch 结构;
  • 在循环语句中,作用是跳出当前循环;
  • 在嵌套循环语句中,退出当前所在层的循环语句,
10.2、continue 语句

在循环语句中,跳过本次循环。

10.3、goto 语句

无条件跳转,尽量少用。

  • 跳转至另一个位置继续执行,跳过一些代码;
  • 程序有多个出口,满足不同的条件,执行不同的出口,可以在不同出口前跳转;
  • 不要在函数之间跳转
  • 跳出死循环
int mian()
{
    printf("Hello World1\n");
    printf("Hello World2\n");
    goto FLAG:
    printf("Hello World3\n");
    printf("Hello World4\n");
    FLAG:
    printf("Hello World5\n");
    printf("Hello World6\n");
    printf("Hello World7\n");
    printf("Hello World8\n");
    
    return 0;
}


//程序有多个出口,可以这样跳转
int mian()
{
    printf("Hello World1\n");
    printf("Hello World2\n");
    goto FLAG:
    printf("Hello World3\n");
    printf("Hello World4\n");
    printf("Hello World7\n");
    printf("Hello World8\n");
    
    return 0;
    
    FLAG:
    printf("Hello World5\n");
    printf("Hello World6\n");
    
    return 1;
}
  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值