计算机考研C语言基础
admin
2024-05-22 22:44:47
0

计算机考研C语言基础

概述

​ C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是役产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
​ 最新的C语言标准是C18 [10]。

简单描述

一款面向过程的高级程序设计语言
面向过程:用一个个的函数将具体的业务逻辑表达出来

简单的程序

打印输出 hello world (c99标准)
#include  // standard in & out.head
int main(){printf{ I"hello world in” );return O;
}
//注意:#并不是c中的语法
格式化输出变量
# include 
# include int main(){         // 定义变量格式化输出char c = 'a';int b = 4;float a = 3.1415;printf("%f\n", a);printf("%i\n", b);printf("%c\n", c);system("pause");return 0;
}
常量 (不能改变的量)
格式:
1、#define NUM 50;  // 采用define关键字,不分配内存空间的
2、const int A = 10;  // 采用const关键字,在函数内部会分配内存空间
这两种常量使用方式的差异:
// 定义常量
# include 
# include 
# define NUM 10   // 第一种在全局定义常量int main(){const int a = 30;   // 第二种在函数内部定义printf("%i\n", a);printf("%i\n", NUM);system("pause");return 0;
}

数据类型

常见的数据类型归纳

数据类型{基本类型{整型类型{基本整型(int)短整型(shortint)长整型(longint)双长整型(longlongint)字符型(char)布尔型(bool)浮点类型{单精度浮点类型(float)双精度浮点类型(double)复数浮点类型(float_comple,double_comple...)枚举类型(enum)空类型(void)派生类型{指针类型(∗)数组类型([])结构体类型(struct)共用体类型(union)函数类型数据类型\begin{cases} 基本类型\begin{cases} 整型类型\begin{cases}基本整型(int)\\ 短整型(short\;int)\\长整型(long\; int)\\双长整型(long\; long\; int)\\ 字符型(char)\\ 布尔型(bool)\end{cases}\\ 浮点类型\begin{cases}单精度浮点类型(float)\\双精度浮点类型(double)\\复数浮点类型(float\_comple, double\_comple...)\end{cases}\end{cases} \\ 枚举类型(enum) \\ 空类型(void)\\派生类型\begin{cases}指针类型(*)\\数组类型([\;])\\结构体类型(struct)\\共用体类型(union)\\函数类型\end{cases}\end{cases} 数据类型⎩⎧​基本类型⎩⎧​整型类型⎩⎧​基本整型(int)短整型(shortint)长整型(longint)双长整型(longlongint)字符型(char)布尔型(bool)​浮点类型⎩⎧​单精度浮点类型(float)双精度浮点类型(double)复数浮点类型(float_comple,double_comple...)​​枚举类型(enum)空类型(void)派生类型⎩⎧​指针类型(∗)数组类型([])结构体类型(struct)共用体类型(union)函数类型​​

sizeof()函数的作用
# include 
# include 
// sizeof 函数输出各数据类型占用的字节int main(){printf("int:%i\n", sizeof(int));printf("float:%i\n", sizeof(float));printf("double:%i\n", sizeof(double));printf("char:%i\n", sizeof(char));printf("short int:%i\n", sizeof(short int));system("pause");return 0;
}

打印输出

int:4
float:4
double:8
char:1
short int:2
请按任意键继续. . .

运算符

算术运算符:+-*/
赋值运算符:=
比较运算符:==
# include 
# include int main(){int a = 20;int b = 10;printf("%i\n", a + b);printf("%i\n", b/a);printf("%i\n", a*b);printf("%i\n", a-b);system("pause");return 0;
}

流程控制

1.顺序
2.选择
(1)if(condition) — else — 使用( 如果if后面的表达式成立则执行第一个大括号的语句,否则执行第二个天括号的语句。)

任意输入2个数字,比较两者关系

# include 
# include 
// if else 流程控制int main(){int a, b;scanf("%i", &a);scanf("%i", &b);if(a >= b){printf("a>=b");}else{   printf("a < b");};system("pause");return 0;
}
(2)if(condition) — else if(condition) — else — (如果if后面的表达式成立则执行第一个大括号的语句,然后判断else if的语句是否成立。若成立则执行第二个大括号的语句,否则执行第三个天括号的语句。并宜可以继续嵌套。)

任意输入2个数字,比较两者关系

# include 
# include 
// 流程控制int main(){int a, b;scanf("%i", &a);scanf("%i", &b);if(a > b){printf("a > b");}else if( a == b){   printf("a = b");}else{printf("a < b");};system("pause");return 0;
}
3.循环
(1)for循环(格式)
for(表达式1;表达式2;表达式3){代码块}
表达式1给控制变量赋初值,表达式2为设置跳出条件,表达式3为步长。

让变量i循环10次

# include 
# include 
// for 循环int main(){int a = 10;int i = 0;for(i; iprintf("%i\n",i);};system("pause");return 0;
}
(2)while循环(格式)
while循环格式:while(表达式){代码块}
如果while的条件为永真,则会一直执行,陷入死循环;如果为永假,则一次也不执行。

利用while实现for循环的需求

# include 
# include 
// while 循环int main(){int a = 10;int i = 0;while (i < a){printf("this is %i\n", i);i++;}system("pause");return 0;
}

数组

1.在数据结构中,数组可以被定义为一个数据类型相同的有限序列。简单来说。数组就是能够存储一组数据的变量
2.声明格式, 数据类型数组名[元素个数]={元素值-按逗号分隔}
#include 
#include int main(){int arr[5] ={1,2,3,4,5};printf("下标为0的元素值为%i\n", arr[0]);printf("下标为1的元素值为%i\n",arr[1]);printf("下标为2的元素值为%i\n",arr[2]);printf("下标为3的元素值为%i\n",arr[3]);printf("下标为4的元素值为%i\n",arr[4]);system("pause");return 0;
}

函数

函数格式
返回值的数据类型   函数名(形参){函数体return 返回值
}

简单的求和函数

# include 
# include 
// 函数int sum(int a, int b){return a + b;
}int main(){int a, b, c;scanf("%i", &a);scanf("%i", &b);c = sum(a , b);printf("a + b = %i", c);system("pause");return 0;
}

指针

指针就是地址,地址就是指针
指针变量是专门用来存储其他变量地址的变量,指针变量的类型必须和所指向变量的类型—致。
注意: 指针和指针变量的区别

1、指针就是地址,地址就是指针

2、指针与指针变量的区别

# include 
# include int main(){int a = 20;int b = 10;printf("a的值%i\n", a);printf("b的值%i\n", b);printf("a的地址%x\n", &a);  // %x 表示使用十六进制printf("b的地址%x\n", &b);system("pause");return 0;
}
Note

指针运算符*

地址运算符&

声明格式
数据类型	* 	变量名
int a=10;
int * pa = &a;
float b = 3.14;
float * pb = &b;
指针运作的简单例子
# include 
# include 
// 指针int main(){int a = 10;int b = 30;int *pa, *pb;pa = &a;pb = &b;printf("a的地址%x\n", pa);printf("b的地址%x\n", pb);printf("a的值%d\n", *pa);printf("b的值%d\n", *pb);  // 通过*获取到地址的值system("pause");return 0;
}
使用指针交换两个变量值
# include 
# include 
// 使用函数交换两个数字// 如果使用这个函数则不能达到交换目的,因为在这里会开辟新的a, b 内存地址空间, 且调用该函数结束后,系统会回收该函数的开辟的内存资源,最终达不到交换目的
int swap(int a, int b){  int tamp;tamp = a;a = b;b = tamp;return 0;
}// 使用指针的方法可以达到目的
int swap2(int *a, int *b){int tamp;tamp = *a;*a = *b;*b = tamp;return 0;
}int main(){int a = 10;int b = 20;// swap(a, b);  // 调用该函数并不能实现变量交换swap2(&a, &b);  // 通过指针地址指向去实现对变量的交换printf("交换后的a为%d\n", a);printf("交换后的b为%d\n", b);system("pause");return 0;
}

结构体

自定义数据类型

typedef 关键字

typedef  关键字 别名

typedef 使用方法

# include 
# include 
// typedef 关键字的使用int main(){int a = 10;typedef int new_type;new_type b = 20;printf("%d\n", b);// system("pause");return 0;
}

malloc () 函数 动态分配申请内存空间

1. 需要引入  头文件
2. free()释放内存空间
# include 
# include 
# include int main(){int * p;  // 定义一个指针变量p = malloc(sizeof(int));  // 获取int 4个字节的大小的内存空间的地址赋值给p* p = 30;  // 将值赋值给指针指向的地址printf("%d\n", * p);free(p);  //释放内存system("pause");return 0;
}
内存分配

1.栈区(stack):
此区域由编译器自动分配释放内存,存放函数的参数值,局部变量等值。

⒉.堆区(heap): (malloc的使用)
堆用于在程序在运行时动态地申请某个大小的内存。
一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏

结构体定义

struct 结构体名 {基础数据类型;结构体类型;
}struct People{char name[10];int age;
};

结构体变量

struct 结构体名 变量名

. 和 -> 的区别

结构体变量访问成员只能用.
结构体指针变量访问成员用 ->

区分. 和-> 的作用

# include 
# include 
# include int main(){struct People{int age;char name[10];};struct People p;strcpy(p.name ,"张三");  // string copyp.age = 18;printf("%s", p.name);printf("%i", p.age);// struct People * p1= &p;// p1 -> age = 18;// strcpy(p1 ->name, "张三");// printf("%s", p.name);// printf("%i", p.age);system("pause");return 0;
}

使用头插法构造一个链表

# include 
# include 
# include int main(){typedef struct Node {int data;  // 节点的数据域struct Node * next;  // 节点的指针域} N;N p; //头节点N * head;  // 头指针int data; // 新增头节点数据int len = 0; // 链表有效长度,初始化为0// 链表初始化头指针指向头结点head = &p;head ->data = NULL;head->next =NULL;// 从键盘接收一个数字为链表长度scanf("%i", &len);//新增节点指针N *newNode;for (int i = 0; inewNode = (N *)malloc(sizeof(N));scanf("%i", &data);newNode->data = data;newNode->next = head->next;head->next = newNode;}newNode = head->next;while (newNode !=NULL){printf("%i\n", newNode->data);newNode = newNode->next;}system("pause");return 0;
}

相关内容

热门资讯

亲子游去四川成都旅游3天2晚大... 在繁忙的生活中,我一直渴望带着孩子去领略不同地方的风土人情,而四川,这个充满魅力与神秘的地方,一直是...
暑假四川成都3天2夜游预算多少... 暑假,向来是出游的黄金时节。在忙碌的学习和工作之余,大家都渴望能有一段放松身心的旅程。而四川,这个充...
带爸妈去四川成都3天2晚需多少... 作为一个热爱旅行的人,我一直梦想着带父母去体验一下四川的美丽风光和丰富文化。四川,这个拥有悠久历史和...
四川九寨沟乐山大佛旅游攻略旅游... 四川,这片位于中国西南部的神奇土地,以其壮丽的自然风光、深厚的文化底蕴和丰富的美食文化吸引着无数游客...
年轻人如何在本地生活中领取露营... 年轻人越来越追求高效与便捷,尤其是在享受露营烧烤的乐趣时,如何省钱成为了一个重要的考量。慧赚生活通过...
黑龙江法院车辆在呼伦贝尔旅拍?... 千里之外公车私用?黑龙江的法院车辆停在内蒙古大草原旅拍?黑河市中院、纪委等多部门(21日)最新回应,...
原创 总... 今年是西藏自治区成立60周年。六十年来,西藏经济社会发生历史性巨变,实现了“短短几十年,跨越上千年”...
乌兰察布民宿体验:住进风景里的... 乌兰察布,位于内蒙古的中部,素有“草原明珠”的美誉,这里不仅拥有广袤的草原、连绵的山脉,还有着浓厚的...
原创 去... “喀纳斯”这名字啊,其实是蒙古语翻译过来的,意思是“美丽又神秘的湖”。在新疆北部的阿尔泰山深处,藏着...
很难找到比这篇,更全的日照攻略... 如果你是首次来日照,网红攻略看的眼花缭乱的,一直搞不明白威海到底应该怎么玩?那这篇攻略真的很适合你,...
日照三日线路参考,P人旅行必看 山东日照可以这样玩~ 日照三日线路参考: D1:灯塔广场—万平口—巧克力渔家—海之秀 D2:海洋公...
王正宇|我要去西藏 我要去西藏 □ 王正宇 去年,有亲戚去了趟西藏,归来后绘声绘色地向我讲述所见所闻,让我坚定了奔赴西藏...
山西云冈石窟景区被指现“拍照刺... 8月21日,云冈研究院发布“关于云冈石窟景区周边拍照事件”的情况说明,全文如下: 2025年8月19...
内蒙四天经典行程推荐,四日玩转... 人均1500+,内蒙四天经典行程推荐!四日玩转必游景点,这样规划太值了!“天苍苍,野茫茫,风吹草低见...
西双版纳机场今年以来中老航线出... 中新网云南西双版纳8月21日电 (岳嘉)西双版纳出入境边防检查站21日通报称,截至当日18时,西双版...
暑假去重庆5天四晚自由行多少钱... 嘿,宝子们!重庆,这座充满魅力与惊喜的城市,宛如一颗镶嵌在中国西南部的璀璨明珠,散发着独特而迷人的光...
青海旅游带孩子6日游纯玩价格,... 💰青海带孩子 6 日纯玩游,人均 2100 左右,童趣漫游超开心! 青海,是藏着奇幻冒险的高原乐园。...
千里大别山 夜游在六安 编者按 六安市以创新赋能文旅发展,突破传统避暑模式,构建“清凉+”多元消费场景。通过拓展玩水空间、延...
张纪中一家人到山西大同旅游,两... 张纪中在74岁高龄仍然活力十足,他和年轻妻子杜星霖育有四个孩子,依然频繁带着他们外出旅行。就在8月1...