C语言常见概念
目录
1.C语言是什么?
“知己知彼,百战百胜”,大学计算机专业接触的第一门专业课就是C语言,那么什么是C语言呢?人和人之间可以用汉语、英语进行交流,那人和计算机之间应该如何交流呢?这个时候就需要计算机语言。C语言就是常见的计算机语言中的一种,还有Java、C++等计算机语言。
2.最简单的C语言程序
既然作为一门语言,C语言也有自己的格式。
下面有一个简单的C语言程序:在屏幕上输出This is a C porgram.
从代码中可以看出,C语言程序包含以下几个部分:
#include<stdio.h> 编译预处理指令
int main() 定义主函数
{函数体} {}中就是函数的主体
return 0; 函数执行完毕时返回函数值0
#include<stdio.h>
int main()
{
printf("This is a C porgram.\n");
return 0;
}
3.main函数
main函数是程序的入口,每一个C语言程序有且仅有一个main函数,也被叫做主函数。main前面的int表示函数结束的时候会返回一个整型类型的值。函数的最后有return 0;与它相呼应。
4.字符和字符串
像a、q、@这些我们称为字符,C语言中会将字符用单引号括起来。C语言中的字符遵循了ASCII编码的方式。下面是ASCII表(美国信息交换标准代码)。
像hello这种由两个及以上字符组成的叫做字符串,C语言中会将字符串用双引号括起来。
5.转义字符
在前面我们看到了‘\n'这样一种特殊的字符,这是一种转变原来意思的字符,也就是转义字符,'\n'就是换行的意思,一些转义字符如下:
接下来我们用实例来进行验证一些转义字符
可以看出前面的转义字符都输出了相应的字符
当打印\120时先进行进制转换:120(八进制)——>80(十进制),再以80为ASCII值输出对应的字符‘P',同理,打印\x40时,40(十六进制)——>64(十进制),输出字符’@‘
6.常量和变量
计算机语言中有常量和变量这两种数据表现形式。
程序运行过程中值不会发生改变的量,我们称之为常量,而值可以发生改变的量,我们称之为变量。变量需要先定义再使用,在定义的时候需要指定变量的名字和类型,如 int a = 0;
变量的名字就是a,int说明a的类型为整型变量(数据类型涉及),变量创建的时候赋一个初始值0,叫做初始化。
变量可以分为全局变量和局部变量
#include<stdio.h>
int a = 10;//a为全局变量
int main()
{
int a = 1;//这里a为局部变量
printf("%d\n",a):
return 0;
}
需要注意的是当全局变量和局部变量同名的时候,局部变量优先使用,所以上面的代码运行结果为1.
7.数据类型
前面提到变量需要定义变量名字和类型,这里我们就需要提及数据类型。
常见数据类型有:
基本整型(int)
短整型(short int)
长整型(long int)
双长整型(long long int)
字符型(char)
单精度浮点型(float)
双精度浮点型(double)
布尔类型(bool)专门用来表示真假的类型,使用需要包含头文件<stdbool.h>,变量的取值是true或者false
联合体类型(union)
数组类型([])
结构体类型(struct)
枚举类型(enum)
其中后面四种类型为自定义类型,我们可以使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不 同,存储的数据范围就有所差异。我们可以使用sizeof这个操作符来计算操作数的类型长度的。
如图,我们可以知道基本数据类型的长度,它们以字节为单位。
8.注释
在前面,有的地方我使用//来进行了注释,注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。有了注释可以让自己和他人更好的理解代码。
注释有//(放在行首) /*......*/(同时注释多行)两种方式,可以根据个人喜好来进行注释。
需要注意的是,在编译时注释会被替换成一个空格。比如hello/*注释的内容*/Jack会变成
hello Jack,而不是helloJack。
9.输入与输出
在C语言中,我们可以用scanf函数来输入数据,用printf函数来输出数据。
我们从前面提过的printf函数开始介绍。
printf函数
另外一个需要了解的是占位符,printf() 可以在输出⽂本中指定占位符。 所谓 “占位符”,就是这个位置可以⽤其他值代⼊。 常见的占位符如下:
scanf函数
putchar和getchar
10.运算符和表达式
算术运算符
它们分别是+,-,*,/,%它们都有两个操作数,所以是双目操作符。
+,-用来完成加法和减法
*用来完成乘法
/所得到的结果是两个数的商,除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数,如果想得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。
%所得到的结果是两个数的余数,这个运算符只能⽤于整数,不能⽤于浮点数。负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。
由下面的例子我们可以看出输出第五行9/2以浮点数输出的时候,输出结果为0,说明这是一种错误的输入方式。
前置++,后置++,前置--,后置--
要点:前置++,先加1再使用 前置--:先减1再使用
后置++,先使用再加1 后置--:先使用再减1
关系运算符和关系表达式
C语言中有<(小于),<=(小于等于),>(大于),>=(大于等于),==(等于),!=(不等于)这六种关系运算符(=表示赋值,==表示判断相等)
用关系运算符将两个数值或者数值表达式连接起来的式子,称为关系表达式。关系表达式的值是一个逻辑值,即“真”或者“假”,在C语言的逻辑计算结果中,输出时以1表示真,以0表示假。
逻辑运算符和逻辑表达式
&&(并且) 例:a&&b 当a和b都表示真时,则结果为真
||(或者) 例:a||b 当a和b有一个条件以上为真,则结果为真
!(非) 例:!a 如果a为真,则!a为假
判断一个量真假的时候以0为假,非0表示真。
前面所提到运算符优先顺序如下:
(高)!---->算术运算符----->关系运算符---->&&和||---->赋值运算符(低)
&&和||有两个操作数(两个运算对象),所以它们是双目操作符。
你知道下面的逻辑表达式输出结果是什么吗?
#include<stdio.h>
int main()
{
int a = 3;
int b = 4;
int c = 5;
printf("%d\n", a || b + c && b - c);
printf("%d\n", !(a + b) + c - 1 && b + c / 2);
return 0;
}
答案如下:(表达式从左向右按优先次序扫描求解)
逻辑运算符短路现象:
C语言中从左向右进行扫描求解,有时候左边的条件满足,就不会对右边进行求解,这就是短路。
对于&&来说,左边操作数的结果是0的时候(已经为假),右边操作数就不再执行。
如果 || 操作符的左操作数的结果不为0时(已经为真),就无需执⾏右操作数。
特别需要注意的是当&&和||操作符同时存在的时候,下面的代码会有所提及。
你知道下面四个代码运算结果是什么吗?
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 1, d = 2;
int i = (a++ && ++b && d++);
printf("i=%d a=%d b=%d c=%d d=%d\n", i, a, b, c, d);
return 0;
}
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 1, d = 2;
int i = (a++ || ++b || d++);
printf("i=%d a=%d b=%d c=%d d=%d\n", i, a, b, c, d);
return 0;
}
#include<stdio.h>
int main()
{
int a = 0, b = 3, c = 1, d = 2;
int i = (a++ || ++b && d++);
printf("i=%d a=%d b=%d c=%d d=%d\n", i, a, b, c, d);
return 0;
}
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 1, d = 2;
int i = (++a && b++ || d++);
printf("i=%d a=%d b=%d c=%d d=%d\n", i, a, b, c, d);
return 0;
}
条件运算符和条件表达式
条件表达式一般形式:表达式1?表达式2:表达式3
条件运算符由两个符号(?和:)组成,必须一起使用,因为有三个操作对象,所以称为三目(元)操作符,表达式2和表达式3可以是数值表达式,也可以是赋值表达式或者函数表达式
它的执行顺序是先求解表达式1,若为真(非0)则求解表达式2,整个条件表达式的值就是表达式2的值;若表达式1为假(0),则求解表达式3,整个条件表达式的值就是表达式3的值.
如下面这个例子:
表达式1为假,所以求解表达式3