初识C语言————C相关语法知识点速览

一、C语言是什么?

C语言是一门计算机语言,是人与计算机进行交流的一种语言。通过计算机语言编写程序,下达指令给计算机,就可以让计算机工作。目前已经有上千种计算机语言,C语⾔只是众多计算机语言中的一种。

在编程界中有C生万物称,它学习曲线低,易上手,却广泛应用于底层开发,可以让学习者更好理解计算机工作的底层原理。是初学者首学编程语言的不二之选。

二、开发环境

1.编译器

这里笔者使用的是vs2022和dev-C++,二者都是集成开发环境。

其中vs2022对代码要求更加严格一些,并且会指出运行中出现的相关问题,还会对代码进行缩进,有助于初学者养成良好的代码风格。

dev-C++则更加小巧轻便,多用于学校教学和竞赛中。

三、初始C语言

1.第一个C语言程序

这里以vs2022为例,首先创建一个空项目,下一步

 选择源文件,添加新建项

 选择第一个C++文件,注意编写C语言程序的时候要把名称一栏改为以".c"结尾,C++文件时则是以".cpp"结尾。

 下面是代码

#include <stdio.h>  //这一行是头文件,在文中作用是对函数 printf 的声明,以便调用文件中使用的库函数 printf
					//当然还有一些列库函数,调用库函数也要引用不同的头文件进行声明
int main()			//这一行成为主函数,是每个程序的入口,每个文件只能有一个main函数
{
	printf("hello world");//这一行是使用库函数printf进行一个输出,在屏幕上打印出 hello world
	return 0;		 //这一行是程序的正常返回,也是本程序的结束
}

下面是运行结果

这就是我们C语言的第一个程序,让我们知道代码是可以这么运行的,可能还会有不理解的地方,不过别担心,后文会一一提及 

2.数据类型

  1. char // 字符数据类型 // 键盘上所有能敲上的都是字符
  2. short // 短整型 // 就是数字小(绝对值)的整数
  3. int // 整型 // 就是整数
  4. long // 长整型 // 就是数字(绝对值)大的整数
  5. long long // 更长的整型 
  6. float // 单精度浮点数 // 就是小数
  7. double // 双精度浮点数 // 小数位数多的小数

2.1 为什么要有这么多数据类型

因为生活中要用到不同的数据,整数,小数。同时不同数据类型在内存中所占大小是不一样的,如果都用同一数据类类,难免造成空间的浪费,所以人们规定了不同的数据类型,以便空间被物尽其用。

2.2 数据类型的长度

其中标准C中规定long的大小等于int,在不同编译器上long的大小可能为4,也可能为8。

其中sizeof是一个操作符,可以计算数据类型的大小。

3. 变量 && 常量

变量和常量可以用来存储变化和不变的东西

如不变的(比如:圆周率,性别,身份证号码,血型等等)
可变的(比如:年龄,体重,薪资)。

3.1 如何定义变量

数据类型+自定义变量名+赋值 

3.2 变量的分类 

局部变量--全局变量在整个文件内都可使用

全局变量--在自身所在代码块(花括号)内才可使用

#include<stdio.h>
int global = 2019;//全局变量
int main()
{
	int local = 2018;//局部变量
	int global = 2020;//局部变量
	printf("global=%d\n", global);//当局部变量和全局变量相冲突的时候结果如何
	return 0;
}

冲突时答案是局部变量优先 ,局部变量将会覆盖掉全局变量

3.3 变量的使用

3.4 变量的作用域和生命周期

3.4.1

作用域是程序设计的一个概念,一段代码中所用到的概念并不总是有效的

而限定这个名字可用性的代码就是这个名字的作用域

其中局部变量的作用域是局部变量所在的范围

而全局变量的作用域是整个工程

3.4.2

变量的生命周期是指变量的创建到变量的开始这一时间段

局部变量的生命周期是:从进入作用域开始到出作用域结束

全局变量的生命周期是:整个程序的生命周期

3.5 常量

常量分为以下四种

3.5.1 字面常量

如数值常量: 10 20  -1.23

如字符常量: 'a' '1'

如字符串常量: "hello"  "world"

布尔常量:表示真(true)假(false)的值

3.5.2 const修饰的常变量

用const修饰变量,如const int  

将变量赋予静态特性,使它的生命周期变成整个程序,但其本质还是变量,只是被赋予了常属性

 3.5.3 #define定义的标识符常量

#define MAX 100
#include<stdio.h>
int main()
{
printf("%d",max);
return 0;
}

使用预处理指令define,用MAX替换了100,以后每次使用MAX即可代表100。 

3.5.4 枚举常量

 以下是使用形式

enum DAY
{
      MON = 0, TUE, WED, THU, FRI, SAT, SUN
};

枚举常量中的每个变量的大小都会依次增加1,在一些场合较为适用,避免了过多的代码编写 

4.字符串 && 转义字符&&注释

4.1 字符串

有双引号引起来的一串字符称为字符串

  1. 注:字符串的结束标志是一个\0的转义字符。在计算字符串长度时\0只是结束标志,不算做字符串内容。

4.2 转义字符

什么是转义字符:通俗来讲,转义字符就是加上\的字符和字符单独出现时所代表的意义不一样。

  1. 下面展示一些常见转义字符
  2. \? 在书写连续多个问号时使用,防止他们被解析成三字母词
  3. \’ 用于表示字符常量’
  4. \" 用于表示一个字符产内部的双引号
  5. \\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
  6. \a 警告字符,蜂鸣
  7. \b 退格符
  8. \f 进纸符
  9. \n 换行
  10. \r 回车
  11. \t 水平制表符
  12. \v 垂直制表符
  13. \ddd ddd 表示1~3个八进制的数字。如:\130X
  14. \xdd dd 表示2个十六进制数字。如:\x30 0

所以在输出的时候要注意转义字符被解释成相关含义,而无法正常输出 。

4.3 注释

代码中不需要的代码可以直接删除掉,也可以注释掉(对程序没有任何影响)

代码中难懂的地方,可以加一些注释解释

注释的方法://+注释内容  或  /*注释内容*/

//这里就是注释
/*还有这里*/

5. 选择(判断)&&循环语句 

5. 1 选择语句

5.1.1

如下代码,首先判断if后括号的内容,若为真则执行下代码块中执行内容 

注:C语言中0为假,非0为真。

if (条件表达式){
	// 条件满足
	执行语句
}
    

// 用法
if (条件表达式){
	// 条件满足
	执行语句
}else{
	// 条件不满足
	执行语句
}      

其中若if为假,则可执行else中的语句

if (条件表达式1){
	// 满足条件表达式1
	执行语句;
}else if (条件表达式2) {
	// 满足条件表达式2
	执行语句;
}else if (条件表达式3) {
	// 满足条件表达式3
	执行语句;
}

...

else if (条件表达式n) {
	// 满足条件表达式n
	要执行的语句;
}else{
	// 所有条件表达式都不满足
	要执行的语句;
}

 当然也可以多次判断,若满足则进入对应语句中,若不满足则执行最后一个else语句

5.1.2 switch语句
switch语句:

```c
switch(表达式)
{

	case 常量a: 
		// 如果表达式的值等于常量a,执行下面的语句1
		语句1 ;
		break;(跳出语句)

	case 常量b: 
		// 如果表达式的值等于常量b,执行下面的语句2
		语句2;
		break;

		...

	case 常量n:
		// 如果表达式的值等于常量n,执行下面的语句n
		语句n;
		break;

	default:
		// 默认执行的语句,如果没有通过上面的开关语句退出,就会执行下面的语句n+1
		语句n+1;
		// 使用default可以省略break;因为它本身就是最后执行,执行完就会退出开关语句。

}

5.2 循环

1. while循环
初始化;
while(条件)
{
执行和调整语句;
}

while循环只要判断条件为真,就可以执行语句,然后再次判断,在次执行,直到判断为假。 

2. for循环

结构:
for (初始化1;判断2;调整3)
{
语句;
}
循环逻辑:
step1:先执行表达式1
step2:然后执行表达式2,
step3:如果step2结果为真,执行语句,否则退出循环
step4:如果step3没有退出循环,则循环至满足条件二时跳出循环

for循环可以先初始化数据,然后判断真假,若为真即可以执行语句,再进行数据的调整,判断调整后的数据是否为真,若为真即可再次执行语句,直至判断为假。 

3.do...while语句
do
{ 执行和调整语句;}
while(条件)

这个循环很有意思,和while循环类似,不过它会先执行一次语句,然后进行判断真假,也就是说,它的语句至少执行一次。 

6. 函数

编程中的函数不同于数学的函数,如何理解它呢,可以把它当作一个计算器,你输入一些数据,他就会给你返回计算后的数据。

函数分为库函数和自定义函数。

库函数:是指编译厂商已经写好了的函数,包含头文件后可以直接使用的,如printf,scanf。

自定义函数:指的是由自己编译的函数,类型,功能和返回值都由自己设置。

在编码过程中,难免遇到重复使用某组语句,这时候创建一个函数能使编码简便快捷许多–简化重复使用。

如下展示一个加法的自定义函数

int Add(int x, int y)//函数的定义 数据类型+函数名+函数参数  注:定义函数时的参数为形参
{
  int z = 0;
  z = x + y;         //这里是函数的功能
  return z;          //这里是函数的返回值
}//
int main()
{
  int a = 10;
  int b = 20;
  int ret = 0;
  ret = Add(a,b); //函数的调用   调用时函数的参数为实参
  printf("%d\n", ret)
  return 0;

7. 数组

7.1 数组的定义

数组定义:一组相同类型的集合

语法:类型+数组名[长度];
数组引用:

数组的引用要调用下标,而下标都是从0开始的。 

如下的一维数组,想要调用数字3,即可使用a[2],其中[ ]是操作符,2则是下标。

int a[10]={1,2,3,4,5,6,7,8,9,10};

8. 操作符

操作符有如下种类

再此单独介绍几个现阶段的,未讲解的会在后文提及

其中'%'是数学的模,比如7%3的结果是1,另外此运算符只适用于整数

 赋值运算符可以举几个例子,看下代码

a=2;a+=3和a=a+3等价,结果a等于5;

a=2;a *=3和a=a*3等价,结果a等于6;

其他的是一样的道理。

 !:可以放在变量常量之前,如条件判断时,!0即为真。

&:可以配合scanf使用,是要在变量名前加上&,&+变量的意思是取变量a的地址,这是&符号的作用之一。

 逻辑操作符可用作条件判断

&&:如a&&b,只有a和b同为真,整体才为真。

||:如a||b,只要a和b其中一方为真,即为真。

接下来讲一下条件操作符,它和判断语句有些类似,它的逻辑是

表达上1?表达式2;表达式3

首先判断表达式1的真假,若为真,则执行表达式2,否则执行表达式3。

逗号表达式是 C 语言中的一种运算符,它使用逗号将两个或多个表达式连接在一起形成一个新的表达式。(本质上还是一种运算)
详情见下

int main()
{
	int x, y;
	x = (5, 3, 8);//5,3可直接忽略,最后会将9赋给x;
	y = (x++, x + 2, x * 2);
	//等价于
	int x, y;
	x = 8;
	y = (x++, x + 2, x * 2);
	//y的最后结果为16
	//1.x++等价于x=x+1,所以这一步x变为9;
	//2.x+2 执行结果为11,但并没有进行赋值操作,所以x还是为9;
	//3.执行y=x*2;对于逗号表达式来说,只有最后一个子表达式才有赋值的操作
	return 0;
}
 
int main()
{
    int arr[] = { 1,2,(3,4),5 };
    printf("%d\n", sizeof(arr));//输出结果是16
    return 0;                   //(3,4)是逗号表达式,从左向右执行,等价于4
                                //也即等价于arr[]={1,2,4,5};
}

9. 常见关键字

在此介绍几个常见的关键字 

1. break

关键字break在switch和循环语句中使用的较多,它的作用是调出该层的循环,终止该语句。

2. continue 

它常用于循环语句中。它的作用是当符合条件时,continue后面的语句不再执行,跳出本次循环,再开始下一次循环。

3. typedef

typedef可以理解成类型重命名 比如:

//将unsigned int 重命名为uint,uint就也是一个类型名
typedef unsigned int uint;
int main()
{
	unsigned int num1 = 0;
	uint num2 = 0;		//这里num1 和num2的类型是一样的
	return 0;
}

可以化繁琐类型为简单。 

4. static

在C语言中,static是用来修饰变量和函数的

1. 修饰局部变量-静态局部变量

将局部变量赋予常属性

#include <stdio.h>
void test()
{    int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
    int i = 0;
    for(i=0; i<10; i++)  
  {       
     test();
    }
    return 0;
}

可见上一段代码,由于i是局部变量,生命周期在对应函数内,出作用域后销毁,所以i走出函数后的值恒为0。

而下方代码用 static修饰,将局部变量赋予了静态属性,即使它的生命周期变成整个函数。

#include <stdio.h>
void test()
{ 
   //static修饰局部变量    static int i = 0;
    i++;   
    printf("%d ", i);}
    int main()
{   
 int i = 0;  
 for(i=0; i<10; i++)  
   {    
    test(); 
   } 
   return 0;
}

 注:以.c结尾的是源文件,而以.h结尾的是头文件,一个工程里可以有多个文件。

2. 修饰全局变量-静态全局变量

一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,

不能在其他源文件内使用。

3. 修饰函数-静态函数

一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

10. define定义常量和宏

define定义常量在上3.5.3提及

以下是define定义宏,类似函数,用define把函数名和函数体替换,实现如下,更详细内容后文会提及,先了解。

#define ADD(x, y) ((x)+(y))
int main()
{
    int sum = ADD(2, 3);
    printf("sum = %d\n", sum);
    sum = 10*ADD(2, 3);
    printf("sum = %d\n", sum);
    return 0;
}

11. 指针

指针也被称为C语言的灵魂,后续会详细讲。

12. 结构体

自定义类型的结构体,枚举,联合后文也会开单章,可以转移目光到下篇博客。

四、 总结

先初步了解C语言是什么,C语言的大体语法如何,有助于我们后续专项的学习,做到有的放矢,后续博客也会把知识和场景结合起来,加深记忆。

最后笔者也是初入大一,我们的梦想一起从C语言启航吧

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值