正文12pt、数字小标题14pt加粗、数字大标题16pt加粗、中文小标题18pt加粗、中文大标题20pt加粗、章标题24pt加粗;
C语言基础
一、为什么要使用 C语言?
C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。下面列举几个使用 C 的实例:
l 操作系统
l 语言编译器
l 汇编器
l 文本编辑器
l 打印机
l 网络驱动器
l 现代程序
l 数据库
l 语言解释器
l 实体工具
二、基础知识
实例
#include <stdio.h>
int main(){
/* 我的第一个 C 程序 */
printf("Hello, World! \n");
return 0;}
1.定义文件头#include <stdio.h>。
所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行。
2.int main()和void main()
int main()返回整形变量,void main()什么都不用返回,main是C的主程序。
3.大括号“{}”
它是程序块的分界符,也就是一段程序的开始和结束。比如:每个函数的开始,类的定义,结构的定义,枚举的定义,if,for,do,while,switch case等。
4.printf("输出格式类型",变量)
l printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
l printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。
l 格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。
l 作用:在c语言中产生格式化输出的函数(定义在 stdio.h 中),其向终端(显示器、控制台等)输出字符。
5. return 0; 语句用于表示退出程序。
6./* ... */ 用于注释说明。
三、程序结构
C 程序主要包括以下部分:
l 预处理器指令
l 函数
l 变量
l 语句 & 表达式
l 注释
四、基本语法
C 的令牌(Tokens)
C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。例如,下面的 C 语句包括五个令牌:
1.分号
在 C 程序中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。
例如,下面是两个不同的语句:
2. 注释
注释就像是 C 程序中的帮助文本,它们会被编译器忽略。它们以 /* 开始,以字符 */ 终止,如下所示:
3. 标识符
C语言标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C语言标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。因此,在 C 中,Manpower 和 manpower 是两个不同的标识符。下面列出几个有效的标识符:
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
4.关键字
auto |
else |
long |
switch |
break |
enum |
register |
typedef |
case |
extern |
return |
union |
char |
float |
short |
unsigned |
const |
for |
signed |
void |
continue |
goto |
sizeof |
volatile |
default |
if |
static |
while |
do |
int |
struct |
_Packed |
double |
5. 空格
只包含空格的行,被称为空白行,可能带有注释,C语言编译器会完全忽略它。
在C语言中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:
int age;
在这里,int 和 age 之间必须至少有一个空格字符(通常是一个空白符),这样编译器才能够区分它们。另一方面,在下面的语句中:
fruit = apples + oranges; // 获取水果的总数
fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。
五、数据类型
在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
1.数据类型
序号 |
类型与描述 |
1 |
基本类型:它们是算术类型,包括两种类型:整数类型和浮点类型。 |
2 |
枚举类型:它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。 |
3 |
void 类型:类型说明符 void 表明没有可用的值。 |
4 |
派生类型:它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。 |
2.整数类型
类型 |
存储大小 |
值范围 |
char |
1 字节 |
-128 到 127 或 0 到 255 |
unsigned char |
1 字节 |
0 到 255 |
signed char |
1 字节 |
-128 到 127 |
int |
2 或 4 字节 |
-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int |
2 或 4 字节 |
0 到 65,535 或 0 到 4,294,967,295 |
short |
2 字节 |
-32,768 到 32,767 |
unsigned short |
2 字节 |
0 到 65,535 |
long |
4 字节 |
-2,147,483,648 到 2,147,483,647 |
unsigned long |
4 字节 |
0 到 4,294,967,295 |
实例
#include <stdio.h>
#include <limits.h>
int main()
{
printf("int 存储大小 : %lu \n", sizeof(int));
return 0;
}
3. 浮点类型
类型 |
存储大小 |
值范围 |
精度 |
float |
4 字节 |
1.2E-38 到 3.4E+38 |
6 位小数 |
double |
8 字节 |
2.3E-308 到 1.7E+308 |
15 位小数 |
long double |
16 字节 |
3.4E-4932 到 1.1E+4932 |
19 位小数 |
实例
#include <stdio.h>
#include <float.h>
int main()
{
printf("float 存储最大字节数 : %lu \n", sizeof(float));
printf("float 最小值: %E\n", FLT_MIN );
printf("float 最大值: %E\n", FLT_MAX );
printf("精度值: %d\n", FLT_DIG );
return 0;
}
4. void 类型
序号 |
类型与描述 |
1 |
函数返回为空 例如 void exit (int status); |
2 |
函数参数为空 例如 int rand(void); |
3 |
指针指向 void 例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。 |
六、变量
变量其实只不过是程序可操作的存储区的名称。C语言中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C语言 是大小写敏感的。
类型 |
描述 |
char |
通常是一个八位字节(一个字节)。这是一个整数类型。 |
int |
对机器而言,整数的最自然的大小。 |
float |
单精度浮点值。 |
double |
双精度浮点值。 |
void |
表示类型的缺失。 |
1.变量定义
变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表。
实例
extern int d = 3, f = 5; // d 和 f 的声明, 这就是单纯的声明
int d = 3, f = 5; // 定义并初始化 d 和 f
byte z = 22; // 定义并初始化 z
char x = 'x'; // 变量 x 的值为 'x'
2. 变量声明
变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
变量的声明有两种情况:
l 一种是需要建立存储空间的。
例如:int a 在声明的时候就已经建立了存储空间。
l 另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。
例如:extern int a 其中变量 a 可以在别的文件中定义的。
l 除非有extern关键字,否则都是变量的定义。
实例
#include <stdio.h> // 变量声明
extern int a, b;
extern int c;
extern float f;
int main ()
{ /* 变量定义 */
int a, b;
int c;
float f;
/* 初始化 */
a = 10;
b = 20;
c = a + b;
printf("value of c : %d \n", c);
f = 70.0/3.0;
printf("value of f : %f \n", f);
return 0;
}
结果
value of c : 30
value of f : 23.333334
3. 左值(Lvalues)和右值(Rvalues)
C语言中有两种类型的表达式:
左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:
int g = 20;
但是下面这个就不是一个有效的语句,会生成编译时错误:
10 = 20;
七、常量
所谓常量,即在程序运行时,不会被修改的量。一般分为两种,一种是字面常量;另外一种是符号常量,即用一个标识符来表示常量,一般使用const来指明;
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
1. 整数常量
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。
212 /* 合法的 */
215u /* 合法的 */
0xFeeL /* 合法的 */
078 /* 非法的:8 不是八进制的数字 */
032UU /* 非法的:不能重复后缀 */
85 /* 十进制 */
0213 /* 八进制 */
0x4b /* 十六进制 */
30 /* 整数 */
30u /* 无符号整数 */
30l /* 长整数 */
30ul /* 无符号长整数 */
2. 浮点常量
浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。
当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。
3.14159 /* 合法的 */
314159E-5L /* 合法的 */
510E /* 非法的:不完整的指数 */
210f /* 非法的:没有小数或指数 */
.e55 /* 非法的:缺少整数或分数 */
3. 字符常量
字符常量是括在单引号中,例如,'x' 可以存储在 char 类型的简单变量中。
字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。
在 C语言 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。
转义序列 |
含义 |
\\ |
\ 字符 |
\' |
' 字符 |
\" |
" 字符 |
\? |
? 字符 |
\a |
警报铃声 |
\b |
退格键 |
\f |
换页符 |
\n |
换行符 |
\r |
回车 |
\t |
水平制表符 |
\v |
垂直制表符 |
\ooo |
一到三位的八进制数 |
\xhh . . . |
一个或多个数字的十六进制数 |
实例
#include <stdio.h>
int main()
{
printf("Hello\tWorld\n\n");
return 0;
}
4. 字符串常量
字符串字面值或常量是括在双引号 "" 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。您可以使用空格做分隔符,把一个很长的字符串常量进行分行。
实例
"hello, dear"
"hello, \
dear"
"hello, " "d" "ear"
5. 定义常量
在 C语言 中,有两种简单的定义常量的方式:
l 使用 #define 预处理器。
l 使用 const 关键字。
6. #define 预处理器
#define identifier value
实例
#include <stdio.h>
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main()
{
int area;
area = LENGTH * WIDTH;
printf("value of area : %d", area);
printf("%c", NEWLINE);
return 0;
}
结果:value of area : 50
7.const 关键字
const type variable = value;
实例
#include <stdio.h>
int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
printf("value of area : %d", area);
printf("%c", NEWLINE);
return 0;
}
结果:value of area : 50