C语言基础

C语言常见概念

目录

C语言常见概念

1.C语言是什么?

2.最简单的C语言程序

3.main函数

4.字符和字符串

5.转义字符

​编辑

6.常量和变量

7.数据类型

8.注释

9.输入与输出

printf函数

scanf函数

putchar和getchar

10.运算符和表达式

算术运算符

前置++,后置++,前置--,后置--

关系运算符和关系表达式

逻辑运算符和逻辑表达式

条件运算符和条件表达式



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'就是换行的意思,一些转义字符如下:

  \? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。
  \' :⽤于表⽰字符常量'
  \" :⽤于表⽰⼀个字符串内部的双引号
  \\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
  \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
  \b :退格键,光标回退⼀个字符,但不删除字符。
  \n :换⾏符。
  \r :回⻋符,光标移到同⼀⾏的开头。
  \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。
  \ddd :d d d表⽰1~3个⼋进制的数字。 如: \120 表⽰字符P
  \xdd :d d表⽰2个⼗六进制数字。 如: \x40 表⽰字符@

接下来我们用实例来进行验证一些转义字符

可以看出前面的转义字符都输出了相应的字符

当打印\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() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以
定制输出⽂本的格式。 printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换行 为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符 \n 。 如下面的代码我们可以发现当没有换⾏符 \n 的时候,不会自动换行。

另外一个需要了解的是占位符,printf() 可以在输出⽂本中指定占位符。 所谓 “占位符”,就是这个位置可以⽤其他值代⼊。 常见的占位符如下:

%a :⼗六进制浮点数,字⺟输出为⼩写。
%A :⼗六进制浮点数,字⺟输出为⼤写。
%c :字符。
%d :⼗进制整数。
%e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。
%E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
%i :整数,基本等同于 %d
%f :⼩数(包含 float 类型和 double 类型)。//float %f double - %lf
%g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e
为⼩写。
%G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
%hd :⼗进制 short int 类型。
%ho :⼋进制 short int 类型。
%hx :⼗六进制 short int 类型。
%hu :unsigned short int 类型。
%ld :⼗进制 long int 类型。
%lo :⼋进制 long int 类型。
%lx :⼗六进制 long int 类型。
%lu :unsigned long int 类型。
%lld :⼗进制 long long int 类型。
%llo :⼋进制 long long int 类型。
%llx :⼗六进制 long long int 类型。
%llu :unsigned long long int 类型。
%Le :科学计数法表⽰的 long double 类型浮点数。
%Lf :long double 类型浮点数。
%n :已输出的字符串数量。 该占位符本⾝不输出,只将值存储在指定变量之中。
%o :⼋进制整数。
%p :指针(⽤来打印地址)。
%s :字符串。
%u :⽆符号整数(unsigned int)。
%x :⼗六进制整数。
%zd size_t 类型。 (比如使用sizeof的时候)
%% :输出⼀个百分号
下面是一些占位符的举例:
除此之外,我们可以使用一定的格式来进行输出,下面用代码和注释的形式来进行说明。
scanf函数
scanf() 的语法跟 printf() 类似,占位符可以参照前面的printf()相关内容。
scanf() 函数⽤于读取⽤⼾的键盘输⼊。 程序运⾏到这个语句时,会停下来,等待用户从键盘输⼊。 用户输⼊数据、按下回⻋键后, scanf() 就会处理用户的输⼊,将其存⼊变量。
需要注意的是 scanf函数格式控制后面是变量地址,而不是变量名 ,所以我们需要使用 & 这个操作符来进行取地址,在进行输入时输入格式应与scanf()中的格式 保持一致
putchar和getchar
      相信从名字大家就知道它是用来干什么的了
putchar是put character的缩写,它的作用是 输出一个字符,一般形式为 putchar(c),。
getchar是get character的缩写,它的作用是 输入一个字符,一般形式为 getchar(c)。
我们用一个例子来看它的效果
可以看出使用putchar输出时, 字符并没有进行换行或者空格处理,这就需要我们自己添加换行符,效果如图

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值