编程,这个看似高深莫测的领域,其实离我们并不遥远。郑莉的《C语言程序设计》第五版电子书,就像一位亲切的导师,用通俗易懂的语言,带你轻松踏入编程的世界。
第一章:C语言简介
1.1 C语言的历史与发展
C语言诞生于1972年,由美国贝尔实验室的Dennis Ritchie设计。它是现代编程语言的基础,对后来的编程语言产生了深远的影响。C语言简洁、高效,具有很强的可移植性,被广泛应用于操作系统、编译器、嵌入式系统等领域。
1.2 C语言的特点
- 简洁明了:C语言语法简单,易于学习。
- 高效:C语言编译后的程序运行速度快,占用内存小。
- 可移植性:C语言编写的程序可以在不同的操作系统和硬件平台上运行。
- 强大的功能:C语言提供了丰富的库函数,可以方便地实现各种功能。
第二章:C语言基础
2.1 数据类型
C语言中的数据类型包括整型、浮点型、字符型等。每种数据类型都有其特定的范围和用途。
int a = 10; // 整型
float b = 3.14; // 浮点型
char c = 'A'; // 字符型
2.2 变量和常量
变量是程序中可以改变的量,而常量则是程序运行过程中不变的量。
int age = 16; // 变量
const float PI = 3.14159; // 常量
2.3 运算符
C语言中的运算符包括算术运算符、关系运算符、逻辑运算符等。
int a = 5, b = 3;
int sum = a + b; // 算术运算符
int is_equal = (a == b); // 关系运算符
int is_greater = (a > b); // 关系运算符
int result = (is_equal && is_greater); // 逻辑运算符
第三章:控制结构
3.1 顺序结构
顺序结构是程序中最基本的执行顺序,按照代码的编写顺序依次执行。
3.2 选择结构
选择结构根据条件判断,执行不同的代码块。
if (a > b) {
// 当a大于b时执行的代码
} else {
// 当a不大于b时执行的代码
}
3.3 循环结构
循环结构用于重复执行一段代码,直到满足某个条件。
for (int i = 0; i < 10; i++) {
// 循环体
}
第四章:函数
4.1 函数的定义与调用
函数是C语言中实现代码复用的关键。通过定义函数,可以将一段代码封装起来,供其他部分调用。
void printMessage() {
printf("Hello, World!");
}
int main() {
printMessage(); // 调用函数
return 0;
}
4.2 函数参数与返回值
函数可以通过参数接收外部传入的数据,并通过返回值将结果返回给调用者。
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 4); // 调用函数并接收返回值
printf("Result: %d\n", result);
return 0;
}
第五章:指针
5.1 指针的概念
指针是C语言中用于存储变量地址的数据类型。通过指针,可以实现对内存的直接操作。
5.2 指针与数组
指针可以用来访问数组元素,实现数组的各种操作。
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 将数组首地址赋值给指针
printf("%d\n", *ptr); // 输出数组第一个元素
5.3 指针与函数
指针可以传递给函数,实现函数对变量的修改。
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
swap(&x, &y); // 交换x和y的值
printf("x = %d, y = %d\n", x, y);
return 0;
}
第六章:结构体与联合体
6.1 结构体
结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。
struct Student {
char name[50];
int age;
float score;
};
struct Student stu1;
strcpy(stu1.name, "张三");
stu1.age = 16;
stu1.score = 90.5;
6.2 联合体
联合体是一种特殊的数据类型,可以存储多个不同类型的数据,但同一时间只能存储其中一个。
union Data {
int i;
float f;
char c[20];
};
union Data u;
u.i = 10;
printf("联合体中的整型变量:%d\n", u.i);
第七章:文件操作
7.1 文件的概念
文件是存储在计算机中的数据集合,可以是程序代码、文本、图片等。
7.2 文件操作函数
C语言提供了丰富的文件操作函数,可以实现对文件的读写、创建、删除等操作。
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "w"); // 打开文件
if (fp == NULL) {
printf("打开文件失败\n");
return 1;
}
fprintf(fp, "Hello, World!"); // 写入文件
fclose(fp); // 关闭文件
return 0;
}
第八章:动态内存分配
8.1 动态内存分配的概念
动态内存分配是指在程序运行过程中,根据需要动态地申请和释放内存空间。
8.2 动态内存分配函数
C语言提供了malloc、calloc、realloc和free等函数,用于实现动态内存分配。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p = (int *)malloc(10 * sizeof(int)); // 动态分配内存
if (p == NULL) {
printf("内存分配失败\n");
return 1;
}
// 使用动态分配的内存
free(p); // 释放内存
return 0;
}
第九章:C语言编程实例
9.1 计算器程序
#include <stdio.h>
int main() {
char operator;
double num1, num2, result;
printf("请输入操作数和运算符:");
scanf("%lf %lf %c", &num1, &num2, &operator);
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
printf("除数不能为0\n");
return 1;
}
break;
default:
printf("无效的运算符\n");
return 1;
}
printf("结果是:%lf\n", result);
return 0;
}
9.2 文件复制程序
#include <stdio.h>
int main() {
FILE *fp1, *fp2;
char ch;
fp1 = fopen("source.txt", "r");
if (fp1 == NULL) {
printf("打开源文件失败\n");
return 1;
}
fp2 = fopen("destination.txt", "w");
if (fp2 == NULL) {
printf("打开目标文件失败\n");
fclose(fp1);
return 1;
}
while ((ch = fgetc(fp1)) != EOF) {
fputc(ch, fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
总结
通过学习郑莉的《C语言程序设计》第五版电子书,相信你已经对C语言有了初步的了解。编程是一个充满挑战和乐趣的过程,希望你能继续努力,不断探索编程世界的奥秘。
