C语言 03.运算符

一些关键字:

extern:表示声明。 没有内存空间。 不能提升。
const:限定一个变量为只读变量。
volatile: 防止编译器优化代码。 volatile int flg = 0;
register: 一般在编写底层的时候,应用开发使用很少。定义一个寄存器变量。没有内存地址。 register int a = 10; // 把数直接存到寄存器里面

字符串:

C语言中,用双引号引着的一串字符,称之为字符串。一定有一个结束标记’\0'
char ch = ‘A’;一个字节
"abc" --> 'a''b''c''\0'
‘a’不等价 “a”('a''\0')左边是字符,右边是字符串

输入输出函数

1.scanf函数:

从键盘接收用户输入。
(1) 接收 整数 %d

        int a, b, c;  创建变量空间, 等待接收用户输入。
        scanf("%d %d %d", &a, &b, &c);

(2) 接收 字符 %c

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

(3) 接收 字符串 %s

        char str[10];    // 定义一个数组,用来接收用户输入的 字符串。中括号内必须填写数字,才能告诉字符串如何开辟大小
        scanf("%s", str);    // 变量名要取地址传递给 scanf, 数组名本身表示地址,不用 & 符。

【注意】
1) scanf 具有安全隐患。如果存储空间不足,数据能存储到内存中,但不被保护。【空间不足不要使用】
2) scanf 函数接收字符串时, 碰到 空格换行 会自动终止。不能使用 scanf 的 %s 接收带有空格的字符串。
例:当输入"hello world"时,会输出"hello"
将 #define _CRT_SECURE_NO_WARNINGS 添加到程序 第一行。 解决scanf 4996错误

2.printf函数:
    char ch = 'a';                          //字符
    char str[] = "hello world";             // 数组,一个11位
    printf("ch = %c\n", ch);                // c是字符
    printf("str = %s\n", str);              // s是字符串
    char str2[2] = { 'h','e' };             // 这个后面没有‘\0’,打印完he之后就会一直打印直至出现\0截至,就会出现乱码     
    printf("str2 = %s\n", str2);            // he烫烫烫烫烫烫烫烫烫烫烫烫烫i谍\p
    char str1[3] = { 'h','e','\0' };        // 这里有'\0',打印到'\0'截止,所以输出是he
    printf("str1 = %s\n", str1);            // he
%s打印字符串, 挨着从字符串的第一个字符开始打印,打印到’\0’结束。
%d打印整数
%c打印字符
%x打印16进制数
%u打印无符号
%m.n:打印实型时用到,一共有 m 位(整数、小数、小数点),n位小数。
%0m.nf:其中 f:表示打印实型,一共有 m 位(整数、小数、小数点),n位小数。 0:表示不足 m 位时,用0凑够m位。
%%显示一个%。 转义字符’’ 对 % 转义无效。
%Ns显示N个字符的字符串。不足N用空格向左填充。
%0Ns显示N个字符的字符串。不足N用0向左填充。
%-Ns显示N个字符的字符串。不足N用空格向右填充。
3.putchar函数:

输出一个 字符 到屏幕。
直接使用 ASCII 码。
不能输出字符串。
‘abc’既不是一个有效字符,也不是一个有效字符串。 有效字符‘a’,有效字符串“abc”
常用putchar('\n');来打印换行。
printf("\n");也可以打印换行

4.getchar()函数:

从键盘获取用户输入的 一个字符。
返回该获取的字符的 ASCII 码。

算数运算符:

先 * / % 后 + -
除法运算后,得到的结果赋值给整型变量时,取整数部分。
除0 :错误操作。不允许。
对0取余:错误操作。不允许。
不允许对小数取余。余数不能是 小数。 35 % 3.4;
对负数取余,结果为余数的绝对值。10 % -3; --》 1

++ 和 --:后缀优先级高于前缀

前缀自增、自减:先自增/自减, 在取值。

        int a = 10;
        ++a;        // a = a+1;

后缀自增、自减: 先取值, 再自增/自减。

        int a  = 10;
        a++;        // a = a+1;
	// a = 10,b=20
	   printf("a = %d", a++);   // 先取值给%d,再自增  10
	   printf("a = %d", a);     //11
	   printf("b = %d", ++b);   // 先自增,再取值给%d  21
	   printf("b = %d", b);     // 21
赋值运算:
    int a = 5;
    a += 10;  // a = a+10;
    a -= 30;  // a = a-30;
    a %= 5;      // a = a % 5;
比较运算符:
== 判等。
!= 不等于.
< 小于
<= 小于等于    
> 大于
>= 大于等于
    13 < var < 16 (计算机中不允许); ==> var > 13 && var < 16;

逻辑运算符:

0为假,非0为真。(1)
逻辑非:! 非真为假, 非假为真。

int a = 10;
int b = 0;
printf("!a = %d", !a);      //  0
printf("!b = %d", !b);      //  1

逻辑与: &&(并且)   同真为真,其余为假。
逻辑或:|| (或)     有真为真。同假为假。

    int a = 10;
    int b = 0;
     printf("%d", a && b);         // 不同时为真,所以结果是假
    printf("%d", a || b);         // 有一个为真,结果为真

三目运算符: ? :

表达式1 ? 表达式2 : 表达式3
表达式1 是一个判别表达式。 如果为真。整个三目运算,取值表达式2。 如果为假。整个三目运算,取值表达式3。
默认结合性。自右向左。

逗号运算符

    int a=10, b=20, c=30;
    int x = (a = 1, b = 2, c = 5); // “,”运算过程是从左到右,x的值不断被覆盖,“,”运算优先级别最低
    printf("x = %d\n", x);         //5
    printf("a = %d\n", a);         //1
    printf("b = %d\n", b);         //2
    printf("c = %d\n", c);         //5

运算符优先级:

[]() > ++ -- (后缀高于前缀) (强转) sizeof > 算数运算(先乘除取余,后加减)> 比较运算 > 逻辑运算 > 三目运算(条件运算)> 赋值运算 > 逗号运算
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类型转换:

隐式类型转换: 由编译器自动完成。

由赋值产生的类型转换。 小–》大 没问题。 大 --》 小 有可能发生数据丢失。
在这里插入图片描述

   int r = 3;
    float s = 3.14 * r * r;         // 得到的结构是double(编译器自动完成),但是最后赋值给了float,完成了一种赋值类型转换
    ```
```c
 int a = 321;
 char ch = a;
 printf("ch=%d\n", ch);    // char=65
         256   128     64       32       16         8         4           2       1
     321:  1    0       1        0        0         0         0           0       1               9位
   char ch  =   0       1        0        0         0         0           0       1               8位
强制类型转换:

语法: (目标类型)带转换变量 或 (目标类型)带转换表达式

    float price = 3.6;
    int weight = 4;
    double sum = price * weight;
    double sum2 = (int)price * weight;
    printf("价格:%f\n", sum);        // 14.400000
     printf("sum1:%d\n", (int)sum);  // 这里的Int一定要带括号,不然会报错   sum1:14
    printf("价格:%f\n", sum2);        // 价格:12.000000,这里只是转price,因为()的优先级高于*

大多数用于函数调用期间,实参给形参传值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值