【校招 --阶段一:高级程序语言C】语言基础

一、数据类型
常量类型:
常量是固定地值,在程序运行期间不会变化,它的值是固定的,又叫做字面量。常量在定义后就不能改变。常量分为整形常量,字符常量,浮点常量、字符串常量
整形常量:常见二进制,八进制,十六进制和十进制,通常这些常量都加前缀0X为十六尽职前缀,0为八进制前缀,十进制默认不带前缀。常量还有另一种表现方式以小写字母结尾
浮点常量:
浮点常量由整数部分、小数点、小数部分和指数部分组成
字符常量:
字符常量通常包含在单引号中间,例如字符‘c’就是char类型的常量
在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(n)或制表符(t)等。
字符串常量:
字符串常量包含在双引号中间一个字符串就是一个字符串常量,例如字符串"hello word"就是字符串常量。
常量定义:
在C语言有两种定义常量的方式:

  1. #define预处理机
  2. const关键字

1 #define预处理机:

常量定义方式:

#define sum value

sum就是变量名 value就是sum就是对应的值。
在这里插入图片描述

定义常量sum值为10,然后printf()以%d方式输出sum的值。
const关键字:
const type v =value;

const为关键字,type对因数据类型,v为标志符,value为常量v的值他是不可更改的。

在这里插入图片描述

在这里插入图片描述

定义常量var以%d方式输出var的值

在这里插入图片描述
如果给var重新赋值会报左值无法修改因为var为常量,所以无法重新赋值。
变量类型:
在C语言中变量类型基本和常量类型相同;分为整形变量,浮点变量,字符变量,但是没有字符串变量。
整形变量:
整形变量关键字为int,在初始化后它的值还可以改变。在内存空间占四个字节
在这里插入图片描述
int 取值范围为 -2147483648 ~+21474836487

字符变量关键字为char,在初始化后他的值还可以改变。在内存空间站一个字节,八个比特位。

在这里插入图片描述
char也是一个整形变量
浮点变量:
浮点变量分为double(双进度浮点浮点数),float(单精度浮点数)
在这里插入图片描述
首先单精度浮点数float占空间4字节,double占空间8字节,其次是取值范围都不同因为double占空间大小是float内存空间大小的2倍,所以double的取值范围要比float大。
在十进制下double要比float表示一个浮点数精度更精细节。
在这里插入图片描述
给double和float变量都付给同样的值但是,double的表示要比float表示更为精细。

字符串变量:
在C语言中没有字符串这一数据类型但是由字符数组可以代替字符串变量

在这里插入图片描述
字符串占据内存空间的大小由其字符串长度决定。
void类型:
在C语言中void表示为无类型或类型的缺失。
变量声明:
在定义变量时就是变量声明,变量的声明就是告诉编译器这个变量地类型和是否在内存空间是否开辟内存。
C语言中还有一个指针变量,这在后边介绍。
二、C存储类
存储类中定义变量函数地范围和生命周期,一般在放在修饰类型之前。
常见地C存储类包括auto、static、register、extern
auto存储类:

{
int a=0;
auto int b=0;
}

这是一个auto存储类地定义a一般用于全局变量,而b因为前边加了auto只能用于函数中是一个局部变量,auto只用于修饰局部变量。auto是C语言默认地存储类
static存储类:

被static修饰的任何一个变量可以被来看做一个全局变量,可以被任何方法和函数带用,他的作用域变成了这一个文件,它可以在这个文件的任何函数中改变。
给一段程序:

#include<stdio.h>
static int count = 5;
void fun() {
	static int i=5;
	printf("%d,%dn", i--, count--);

}
int main() {
	while (count) {
		fun();
	
	}
	

	return 0;
}

执行结果为这样,为什么?

在这里插入图片描述

因为count和i都被static修饰了,不管是全局变量,局部变量在被static修饰后都变更成了全局变量,每次调用fun函数后i和count都会被改变且改变后值也不会改变,每次执行fun函数改变count和i前的值都是上一次调用fun()函数修改的值。
register 存储类:

register通常定义一个寄存器而不是ram中的局部变量,该变量最大为一个字节,而且不能对他做&运算(因为他没有内存位置)

{
register int num;
}

寄存器只用于快速放问,比如计数器,定义register并不意味着变量存储在寄存器中,可能也在寄存器中。
extern存储类:

extern这个存储类用于引用外部文件中的变量,外部存储类仅仅告诉这个变更实在其他变量在其他位置定义的,而不是在这里定义这个变量。该变量是在其他文件中给他分配空间并初始化但是在其他文件中也可以改变这个变量的值。使用这个存储类主要用于大型程序中不同文件之间变量的相互引用。
三、程序控制
在C语言中存在3中基本控制结构顺序控制结构,选择控制结构,循环控制结构。
顺序控制结构:

顺序控制结构是C语言中最简单的控制结构,C程序语句按自上而下依次执行。遇到函数先执行函数中的接着等执行玩函数跳出函数接着剩下的语句接着执行。
选择控制结构:

C语言中的选择控制语句有if 、else if、else、swich等结构:
要执行选择结构先要判断是否符合这个选择语句是否为true如果为true就按照顺序结构来来执行这个选择结构中的语句。如果为false接着下一个选择结构。

来看一个程序:

#include<stdio.h>


int main() {
	int a = 0;
	if (a == 1) {
		printf("a的值为1");
	}else if (a == 1) {
		printf("a的值为2");
	}
	else if(a == 3) {
		printf("a的值为3");
	}
	else {
		printf("a的值为0");
	}



	return 0;
}

在这里插入图片描述
定义一个整形方便a用if语句和else if语句来判断它到底是多少。
当选择变多时还能用swich改造:

#include<stdio.h>


int main() {
	int a = 0;
	switch (a) {

	case 1:

		printf("a的值为1");
	case 2:
		printf("a的值为2");
	default:
		printf("a的值为0");





	}


	return 0;
}

在这里插入图片描述
三元运算符选择控制结构为

Exp1 ? Exp2 : Exp3;
Exp1和Exp2比较大小如果Exp1?前结果为true就选Exp2相反就选Exp2。

在这里插入图片描述
a和b利用3原表达式比较大小如过?前结果为true所以c的结果为a也就是a的值1;
循环控制结构:

C语言循环控制结构有以下几种:

while(){}

do{



}while()
for(;;){
}

常见的就这么几种对于while循环while后边的()中是符合循环的条件,符合条件就进入循环,执行循环体中的语句,相反不符合就跳出循环。
对于do{}while()循环来说while()后边的是跳出循环结构的条件,只要符合这个条件就必须跳出循环体。for循环中for后边的()中有两个符号有3个语句,第一和第三个可以省略不写但是第二个是循环条件,必须加上,如果不加上就会变成死循环。

#include <stdio.h>
 
int main ()
{
   for( ; ; )
   {
      printf("该循环会永远执行下去!n");
   }
   return 0;
}

对应的while和do…while()循环如果循环条件不改变可能一直循环下去

int i=5;
while(i>0){

 printf("该循环会永远执行下去!n");
}

这i值没有改变一直符合循环条件这个循环就会变成死循环。

int i=5;
do{


 printf("该循环会永远执行下去!n");
}while(i<0)

这个循环也一样i值不改变。
与循环配合想使用还有2个关键字break和countinue。
break关键字具有跳出循环体的功能:

#include<stdio.h>


int main() {
	int i = 0;
	while (true) {
		if (i == 50) {
			printf("我要跳出循环了");
			break;
		}
		printf("%dn", i);
		i++;
	}
	return 0;
}

在这里插入图片描述
该段程序本来执行的是死循环,在循环体中i一直在自增中当i加到50是进入if中if语句中有一个break;接着跳出循环体。

#include<stdio.h>


int main() {
	for (int i = 0; i < 3; i++) {
		if (i == 1) {
			continue;
		}
		printf("i 为 %dn", i);
	}
}

在这里插入图片描述
这段代码i初始值为0每次加1自增到3后就跳出循环,但是在循环体中存在一个if语句当i为1时执行if语句中的语句但是这个语句是continue。执行这个条件后后边的语句就在不执行了会进入下一次循环。所以当i为1时print()没执行。