第一章:C语言概述
1.1 C语言的历史与发展
C语言是一种广泛使用的计算机编程语言,由Dennis Ritchie在1972年发明。它以其简洁、高效和可移植性而闻名。C语言不仅是一种系统编程语言,还被用于嵌入式系统、操作系统、编译器开发等领域。
1.2 C语言的特点
- 简洁性:C语言语法简单,易于学习和使用。
- 高效性:C语言生成的代码执行效率高。
- 可移植性:C语言编写的程序可以在不同的平台上运行。
- 强大的功能:C语言提供了丰富的库函数,可以完成各种复杂任务。
第二章:C语言基础语法
2.1 基本数据类型
C语言支持多种基本数据类型,如整型、浮点型、字符型等。以下是几种常见的数据类型:
int:表示整数。float:表示单精度浮点数。double:表示双精度浮点数。char:表示字符。
2.2 变量和常量
变量是存储在内存中的数据,可以随时更改。常量则是不可更改的数据。
#include <stdio.h>
int main() {
int age = 20; // age 是一个整型变量,存储年龄值
const float pi = 3.14159; // pi 是一个常量,存储圆周率
printf("My age is %d.\n", age);
printf("The value of pi is %f.\n", pi);
return 0;
}
2.3 运算符
C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符等。
#include <stdio.h>
int main() {
int a = 10, b = 5;
int sum = a + b; // 算术运算符
int is_equal = (a == b); // 关系运算符
int is_greater = (a > b); // 关系运算符
printf("The sum of a and b is %d.\n", sum);
printf("Is a equal to b? %d\n", is_equal);
printf("Is a greater than b? %d\n", is_greater);
return 0;
}
第三章:流程控制
3.1 顺序结构
顺序结构是最基本的程序结构,按照语句书写的顺序依次执行。
3.2 选择结构
选择结构用于根据条件判断执行不同的代码块。
#include <stdio.h>
int main() {
int num = 10;
if (num > 0) {
printf("The number is positive.\n");
} else if (num < 0) {
printf("The number is negative.\n");
} else {
printf("The number is zero.\n");
}
return 0;
}
3.3 循环结构
循环结构用于重复执行一段代码。
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
printf("%d\n", i);
}
return 0;
}
第四章:函数
4.1 函数的定义和调用
函数是C语言的基本组成部分,用于实现代码的模块化。
#include <stdio.h>
// 函数声明
void sayHello();
int main() {
sayHello(); // 函数调用
return 0;
}
// 函数定义
void sayHello() {
printf("Hello, world!\n");
}
4.2 传值和传址
在C语言中,函数可以通过传值和传址的方式传递参数。
#include <stdio.h>
// 传值函数
void add(int a, int b) {
printf("The sum is %d.\n", a + b);
}
// 传址函数
void addReference(int *a, int *b) {
printf("The sum is %d.\n", *a + *b);
}
int main() {
int x = 10, y = 20;
add(x, y); // 传值
addReference(&x, &y); // 传址
return 0;
}
第五章:数组
5.1 数组的定义和初始化
数组是存储多个相同类型数据的一组元素。
#include <stdio.h>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
int i;
for (i = 0; i < 5; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
return 0;
}
5.2 二维数组
二维数组是数组的数组,可以用于表示表格或矩阵。
#include <stdio.h>
int main() {
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
}
}
return 0;
}
第六章:指针
6.1 指针的概念
指针是存储变量地址的变量,用于实现函数传址、动态内存分配等功能。
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a; // ptr 是一个指向整数的指针,存储变量 a 的地址
printf("The value of a is %d.\n", a);
printf("The address of a is %p.\n", (void *)ptr);
printf("The value of *ptr is %d.\n", *ptr);
return 0;
}
6.2 指针运算
指针可以进行算术运算,如加、减、自增、自减等。
#include <stdio.h>
int main() {
int array[5] = {1, 2, 3, 4, 5};
int *ptr = array;
printf("The value of *ptr is %d.\n", *ptr); // 输出数组第一个元素的值
printf("The value of *(ptr + 1) is %d.\n", *(ptr + 1)); // 输出数组第二个元素的值
return 0;
}
第七章:结构体
7.1 结构体的定义
结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。
#include <stdio.h>
// 定义一个学生结构体
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student student1;
strcpy(student1.name, "Alice");
student1.age = 20;
student1.score = 90.5;
printf("Name: %s\n", student1.name);
printf("Age: %d\n", student1.age);
printf("Score: %.1f\n", student1.score);
return 0;
}
7.2 结构体数组
结构体数组可以存储多个结构体实例。
#include <stdio.h>
// 定义一个学生结构体
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student students[3];
int i;
strcpy(students[0].name, "Alice");
students[0].age = 20;
students[0].score = 90.5;
strcpy(students[1].name, "Bob");
students[1].age = 21;
students[1].score = 85.0;
strcpy(students[2].name, "Charlie");
students[2].age = 22;
students[2].score = 95.0;
for (i = 0; i < 3; i++) {
printf("Name: %s\n", students[i].name);
printf("Age: %d\n", students[i].age);
printf("Score: %.1f\n", students[i].score);
}
return 0;
}
第八章:文件操作
8.1 文件的基本概念
文件是存储在磁盘上的数据集合,C语言提供了丰富的文件操作函数。
8.2 文件读写
#include <stdio.h>
int main() {
FILE *fp;
char filename[] = "example.txt";
char buffer[100];
// 打开文件
fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error opening file.\n");
return 1;
}
// 读取文件内容
while (fgets(buffer, sizeof(buffer), fp)) {
printf("%s", buffer);
}
// 关闭文件
fclose(fp);
return 0;
}
第九章:动态内存分配
9.1 动态内存分配的概念
动态内存分配是指程序在运行时根据需要分配内存。
9.2 使用malloc和free函数
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(sizeof(int));
if (ptr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
*ptr = 10;
printf("The value of *ptr is %d.\n", *ptr);
free(ptr); // 释放内存
return 0;
}
第十章:C语言进阶
10.1 预处理器
预处理器是C语言的一部分,用于处理源代码中的宏定义、条件编译等。
10.2 位操作
位操作是C语言提供的特殊操作,用于对二进制位进行操作。
#include <stdio.h>
int main() {
int a = 5; // 0000 0101
int b = 3; // 0000 0011
// 与操作
int and = a & b; // 0000 0001
printf("The result of & is %d.\n", and);
// 或操作
int or = a | b; // 0000 0111
printf("The result of | is %d.\n", or);
// 异或操作
int xor = a ^ b; // 0000 0100
printf("The result of ^ is %d.\n", xor);
// 取反操作
int not = ~a; // 1111 1010
printf("The result of ~ is %d.\n", not);
return 0;
}
10.3 C语言库函数
C语言提供了丰富的库函数,用于完成各种任务,如字符串处理、数学计算、文件操作等。
总结
C语言是一种功能强大、应用广泛的编程语言。通过学习C语言,您可以掌握编程的基本概念和技巧,为学习其他编程语言打下坚实的基础。本资料汇总了C语言入门到精通的学习资料,希望对您的学习有所帮助。
