初识C语言二

1.算术操作符:+、-、*、/、%

在写代码时候,⼀定会涉及到计算。
C语⾔中为了方便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。分别是: + - *  /  % ,这些操作符都是双目操作符(有两个操作数
注:操作符也被叫做:运算符,是不同的翻译,意思是⼀样的。

1.1 + -

+ - ⽤来完成加法和减法。

#include <stdio.h>
int main()
{
	int x = 4 + 22;
	int y = 61 - 23;

	printf("%d ", x);
	printf("%d ", y);

	return 0;
}

1.2 *

*用来完成乘法

#include <stdio.h>
int main()
{
	int num = 5 * 5;
	printf("%d", num);

	return 0;
}

1.3 /

运算符 / ⽤来完成除法。
除号的两端如果都是整数,执⾏的是整数除法,得到的结果也是整数
#include <stdio.h>
int main()
{
	float x = 6 / 4;
	int y = 6 / 4;
	printf("%f\n", x); // 输出 1.000000
	printf("%d\n", y); // 输出 1
	return 0;
}
上面示例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,而不是
1.5 。原因就在于 C语言的整数除法是整除,只会返回整数部分,丢弃小数部分。
如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。
#include <stdio.h>
int main()
{
	float x = 6.0 / 4;
	int y = 6 / 4;
	printf("%f\n", x); // 输出 1.500000
	printf("%d\n", y); // 输出 1
	return 0;
}
再看⼀个例子:
#include <stdio.h>
int main()
{
	int score = 5;
	score = (score / 20) * 100;
	return 0;
}
上⾯的代码,你可能觉得经过运算, score 会等于 25 ,但是实际上 score 等于 0 。这是因为
score / 20 是整除,会得到⼀个整数值 0 ,所以乘以 100 后得到的也是 0 这种情况也是新手常犯的错误。
为了得到预想的结果,可以将除数 20 改成 20.0 ,让整除变成浮点数除法。

1.4 %

运算符 % 用于 余运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点 数
#include <stdio.h>

int main()
{
	int x = 6 % 4; // 2
	return 0;
}

如果有负数呢

#include <stdio.h>
int main()
{
	printf("%d ", 11 % -5); // 1
	printf("%d ", -11 % -5); // -1
	printf("%d ", -11 % 5); // -1
	return 0;
}

由结果可以看出,,第⼀个运算数的正负号( 11 -11 )决定了结果的正负号。

2.赋值操作符:=和复合赋值

在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。

int a = 100;//初始化

    a = 200;//赋值

(!注:=为赋值操作符,不能误认为是数学上的等号,C语言有自己的“等于”)

2.1连续赋值

赋值操作符也可以连续赋值,如:

int a = 3;
int b = 5;
int c = 0;
c = b = a + 3;//连续赋值,从右向左依次赋值的。
C语言虽然⽀持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样方便观察代码的 执⾏细节。(连续赋值出现最多的地方就是各位的考卷上)

2.2复合赋值符

在写代码时,我们经常可能对⼀个数进行自增、自减的操作,如下代码:

int a = 10;
a = a+3;
a = a-2;
C语⾔给提供了更加⽅便的写法:
int a = 10;
a += 3; 等价于a = a+3;
a -= 2; 等价于a = a-2;
C语⾔中提供了复合赋值符,⽅便我们编写代码,这些赋值符有:
+= -=
*= /= %=
//下⾯的操作符后期讲解
>>= <<=
&= |= ^=

3.单⽬操作符:++、--、+、-

前⾯介绍的操作符都是双⽬操作符,有2个操作数的。C语⾔中还有⼀些操作符只有⼀个操作数,被称 为单⽬操作符。 ++ -- +( ) -( ) 就是单⽬操作符的。

3.1++和--

++是⼀种⾃增的操作符,⼜分为前置++和后置++,--是⼀种⾃减的操作符,也分为前置--和后置--

3.1.1前置++

int a = 10;
int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++
计算口诀:先+1,后使用
a原来是10,先+1,后a变成了11,再使⽤就是赋值给b,b得到的也是11,所以计算技术后,a和b都是11,相当于这样的代码:
int a = 10;
a = a+1;
b = a;

3.1.2后置++

int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++

计算口诀:先使用,后+1

a原来是10,先使⽤,就是先赋值给b,b得到了10,然后再+1,然后a变成了11,所以直接结束后a是11,b是10,相当于这样的代码:

int a = 10;
int b = a;
a = a+1;

3.1.3前置--

会了++那么--自然不在话下,简直是买一送一的买卖

计算口诀:先-1,后使用
int a = 10;
int b = --a;//--的操作数是a,是放在a的前⾯的,就是前置--

结果a和b都是9

3.1.4后置--

计算口诀:先使用,后-1

int a = 10;
int b = a--;//--的操作数是a,是放在a的后⾯的,就是后置--

3.2+ 和 -

这⾥的+是正号,-是负号,都是单⽬操作符。
运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。
int a = +10; 等价于 int a = 10;
运算符  - ⽤来改变⼀个值的正负号,负数的前⾯加上 - 就会得到正数(负负得正),正数的前⾯加上 - 会得到负 数。相信这对学过数学的各位来说简直是手拿把掐。

4.字符和ASCII编码

在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号 括起来的,如:'a','b','@'
我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆ 进制存储的呢?如果我们每个⼈自己给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为 了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个ASCII 编码,C 语⾔中的字符就遵循了 ASCII 编码的⽅式。
简单来说就是每个 字符都有自己的 编号

参考:https://en.cppreference.com/w/cpp/language/ascii

我们不需要记住所有的ASCII码表中的数字,使用时查看就可以,不过我们最好能掌握几组特殊的数据:
字符A~Z的ASCII码值从65~90
字符a~z的ASCII码值从97~122
对应的大小写字符(a和A)的ASCII码值的差值是32
数字字符0~9的ASCII码值从48~57
换行  \n 的ASCII值是:10
在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,无法打印在屏幕上观察
单个字符的打印可以使⽤%c来指定格式:
#include <stdio.h>
int main()
{
	printf("%c ", 'Q');
	printf("%c ", 81);//这⾥的81是字符Q的ASCII码值,也是可以正常打印的
	return 0;
}

5.转义字符

如果你看一些高手写代码会发现 \n 这些没见过的符号,这些就是转义字符,转义 字符顾名思义:转变原来的意思的字符,那转义字符有什么用呢

⽐如:我们有字符 n ,在字符串中打印的时候⾃然能打印出这个字符,如下:
#include <stdio.h>
int main()
{
	printf("abcndef");
	return 0;
}

输出结果:

如果我们修改⼀下代码,在 n 的前⾯加上 \ ,变成如下代码:

#include <stdio.h>
int main()
{
	printf("abc\ndef");
	return 0;
}

输出结果:

我们可以看到修改的前后代码输出的结果,截然不同的,那这是为什么呢?
这就是转义字符的问题, \n 是⼀个转义字符表⽰换⾏的意思,我们可以简单的理解为 \ n 的意思 发⽣了转变, n 本来是⼀个普通的字符,被 \ 转义为换⾏的意思。
C语⾔中像这样的转义字符还有⼀些,具体如下:
\? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。
\' :⽤于表⽰字符常量'
\" :⽤于表⽰⼀个字符串内部的双引号
\\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
\a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
\b :退格键,光标回退⼀个字符,但不删除字符。
\f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v
\n :换⾏符。
\r :回⻋符,光标移到同⼀⾏的开头。
\t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。
\v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列
下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式
\ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X
\xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0
  \0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其
  ASCII码值是0.
而作为初学者只需特别记住 \n \0 即可
\n 我们知道了,那 \0 又是什么呢

6.字符串和\0

我们知道了什么是字符,那字符串自然就是字符串连起来

C语⾔中字符是⽤单引号 括起来的,而字符串则是用双引号,如:"hello World"  就是⼀个字符串

字符串的打印格式可以使⽤ %s 来指定,也可以直接打印如下:

#include <stdio.h>
int main()
{
	printf("%s\n", "hello World");
	printf("hello world");
	return 0;
}

让我们看看字符串在内存中是如何存储的吧

对于字符串"hello World",我们实际上看到了11个字符(空格也是字符)但是实际上在末尾还隐藏⼀个 \0 的转义字符, \0 是字符串的结束标志

我们在使⽤库函数 printf() 打印字符串或者 strlen() 计算字符串⻓度的时候,遇到 \0 的时候就⾃动停⽌
我们手动加个 \0 试试
#include <stdio.h>
int main()
{
	printf("%s\n", "hello\0 World");
	printf("hello world");
	return 0;
}

运行看结果:

可以看到因为我们手动添加了 \0 让printf()函数认为字符串结束从而没有打印后面的“World”

7.注释

注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。
注释是给程序员自己,或者其他程序员看的,想让大佬帮你看代码,写注释必不可少。
好的注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没必要的注释。

7.1注释

C语言有两种注释方法

7.1.1 /**/式

第⼀种方法是将注释放在 /*...*/ 之间,内部可以分行
/* 注释 */


/*
 这是⼀⾏注释
*/

7.1.2 // 式

第⼆种写法是将注释放在双斜杠 // 后⾯,从双斜杠到行尾都属于注释。这种注释只能是单行,可以
放在行首,也可以放在一行语句的结尾
// 这是⼀⾏注释


int x = 1; // 这也是注释
不管是哪⼀种注释,都不能放在双引号⾥⾯。
双引号⾥⾯的注释符号,会成为字符串的⼀部分,解释为普通符号,失去注释作⽤。
printf("// hello /* world */ ");
上⾯⽰例中,双引号⾥⾯的注释符号,都会被视为普通字符,没有注释作⽤。

7.1.3注释会被替换

编译时,注释会被替换成⼀个空格,所以 min/* 这⾥是注释 */Value 会变成 min Value ,⽽不
minValue 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值