案例一:Hello World
案例简介
“Hello World” 是所有编程语言的入门经典案例,通过编写一个简单的程序输出 “Hello, World!“,可以帮助初学者了解 C 语言的基本结构和编译运行过程。
案例代码
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
案例解析
在这个案例中,我们首先包含了标准输入输出库 stdio.h,然后在 main 函数中,使用 printf 函数输出 “Hello, World!” 字符串。
案例二:变量声明与赋值
案例简介
学习编程,首先要了解变量。本案例将演示如何在 C 语言中声明和赋值变量。
案例代码
#include <stdio.h>
int main() {
int a = 10; // 声明并初始化整型变量 a
float b = 3.14; // 声明并初始化浮点型变量 b
char c = 'A'; // 声明并初始化字符型变量 c
return 0;
}
案例解析
在这个案例中,我们声明了三个变量 a、b 和 c,并分别赋值为整数 10、浮点数 3.14 和字符 ‘A’。
案例三:运算符
案例简介
C 语言中的运算符是实现各种运算的基石。本案例将介绍 C 语言中常用的运算符及其用法。
案例代码
#include <stdio.h>
int main() {
int a = 5, b = 3;
printf("a + b = %d\n", a + b); // 加法
printf("a - b = %d\n", a - b); // 减法
printf("a * b = %d\n", a * b); // 乘法
printf("a / b = %d\n", a / b); // 除法
printf("a % b = %d\n", a % b); // 求余
return 0;
}
案例解析
在这个案例中,我们使用了加法、减法、乘法、除法和求余运算符,分别计算两个整数的运算结果。
案例四:控制结构
案例简介
控制结构是编程中的核心概念,它决定了程序的执行流程。本案例将介绍 C 语言中的 if、else 和 switch 语句。
案例代码
#include <stdio.h>
int main() {
int age = 20;
if (age > 18) {
printf("成年了\n");
} else {
printf("未成年\n");
}
int grade = 85;
switch (grade / 10) {
case 10:
case 9:
printf("优秀\n");
break;
case 8:
printf("良好\n");
break;
default:
printf("及格\n");
}
return 0;
}
案例解析
在这个案例中,我们使用 if 语句判断年龄是否大于 18,使用 switch 语句根据成绩的十位数判断成绩等级。
案例五:循环结构
案例简介
循环结构是程序设计中常用的控制结构,用于重复执行一段代码。本案例将介绍 C 语言中的 for、while 和 do-while 循环。
案例代码
#include <stdio.h>
int main() {
// for 循环
for (int i = 1; i <= 5; i++) {
printf("%d ", i);
}
printf("\n");
// while 循环
int j = 1;
while (j <= 5) {
printf("%d ", j);
j++;
}
printf("\n");
// do-while 循环
int k = 1;
do {
printf("%d ", k);
k++;
} while (k <= 5);
printf("\n");
return 0;
}
案例解析
在这个案例中,我们分别使用了 for、while 和 do-while 循环来输出 1 到 5 的数字。
案例六:数组
案例简介
数组是 C 语言中常用的数据结构,用于存储多个相同类型的元素。本案例将介绍如何声明、初始化和遍历数组。
案例代码
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
案例解析
在这个案例中,我们声明了一个整型数组 arr,并初始化为 1、2、3、4、5。然后,我们使用 for 循环遍历数组并输出每个元素的值。
案例七:指针
案例简介
指针是 C 语言中的核心概念,它用于存储变量的内存地址。本案例将介绍如何声明、赋值和操作指针。
案例代码
#include <stdio.h>
int main() {
int a = 10;
int *p = &a; // 声明并初始化指针 p
printf("a = %d, &a = %p, *p = %d\n", a, (void*)&a, *p);
return 0;
}
案例解析
在这个案例中,我们声明了一个整型变量 a 和一个整型指针 p。我们使用 & 运算符获取 a 的地址,并将其赋值给指针 p。然后,我们使用 * 运算符获取指针 p 指向的地址中的值。
案例八:函数
案例简介
函数是 C 语言中的核心概念,它允许我们将代码划分为多个可重用的部分。本案例将介绍如何声明、定义和调用函数。
案例代码
#include <stdio.h>
// 声明函数
int add(int x, int y);
// 定义函数
int add(int x, int y) {
return x + y;
}
int main() {
int a = 10, b = 20;
printf("a + b = %d\n", add(a, b));
return 0;
}
案例解析
在这个案例中,我们声明了一个名为 add 的函数,它接受两个整数参数并返回它们的和。然后在 main 函数中,我们调用 add 函数并输出结果。
案例九:结构体
案例简介
结构体是 C 语言中用于组织相关数据的自定义数据类型。本案例将介绍如何声明、定义和操作结构体。
案例代码
#include <stdio.h>
// 声明结构体
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student stu1;
strcpy(stu1.name, "张三");
stu1.age = 20;
stu1.score = 90.5;
printf("姓名:%s,年龄:%d,成绩:%f\n", stu1.name, stu1.age, stu1.score);
return 0;
}
案例解析
在这个案例中,我们声明了一个名为 Student 的结构体,它包含姓名、年龄和成绩三个成员。然后在 main 函数中,我们声明了一个 Student 类型的变量 stu1,并使用 strcpy、age 和 score 成员分别赋值。
案例十:文件操作
案例简介
文件操作是 C 语言中常用的功能,用于处理磁盘上的文件。本案例将介绍如何使用 C 语言打开、读取、写入和关闭文件。
案例代码
#include <stdio.h>
int main() {
FILE *fp;
char buffer[100];
// 打开文件
fp = fopen("example.txt", "r");
if (fp == NULL) {
perror("打开文件失败");
return 1;
}
// 读取文件
while (fgets(buffer, sizeof(buffer), fp)) {
printf("%s", buffer);
}
// 关闭文件
fclose(fp);
return 0;
}
案例解析
在这个案例中,我们使用 fopen 函数打开名为 “example.txt” 的文件,并使用 fgets 函数逐行读取文件内容。最后,我们使用 fclose 函数关闭文件。
案例十一:动态内存分配
案例简介
动态内存分配是 C 语言中常用的功能,用于在运行时分配内存。本案例将介绍如何使用 malloc、calloc 和 realloc 函数进行动态内存分配。
案例代码
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p;
int num = 5;
// 动态分配内存
p = (int *)malloc(num * sizeof(int));
if (p == NULL) {
perror("内存分配失败");
return 1;
}
// 初始化数组
for (int i = 0; i < num; i++) {
p[i] = i;
}
// 输出数组元素
for (int i = 0; i < num; i++) {
printf("%d ", p[i]);
}
printf("\n");
// 释放内存
free(p);
return 0;
}
案例解析
在这个案例中,我们使用 malloc 函数动态分配了一个整型数组,并使用 for 循环初始化数组元素。最后,我们使用 free 函数释放了动态分配的内存。
案例十二:字符串处理
案例简介
字符串处理是 C 语言中常用的功能,用于操作字符串。本案例将介绍如何使用 C 语言中的字符串处理函数。
案例代码
#include <stdio.h>
#include <string.h>
int main() {
char str1[100] = "Hello";
char str2[100] = "World";
char result[200];
// 字符串连接
strcpy(result, str1);
strcat(result, str2);
printf("连接后的字符串:%s\n", result);
// 字符串比较
if (strcmp(str1, str2) == 0) {
printf("字符串相等\n");
} else {
printf("字符串不相等\n");
}
// 字符串查找
int index = strchr(str1, 'l') - str1;
printf("字符 'l' 在字符串中的位置:%d\n", index);
return 0;
}
案例解析
在这个案例中,我们使用 strcpy、strcat、strcmp 和 strchr 函数进行字符串操作,包括连接、比较、查找和替换等。
案例十三:排序算法
案例简介
排序算法是编程中常用的算法之一,用于将一组数据按照特定顺序排列。本案例将介绍 C 语言中常用的排序算法,如冒泡排序、选择排序和插入排序。
案例代码
#include <stdio.h>
// 冒泡排序
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 选择排序
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int min_index = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min_index]) {
min_index = j;
}
}
int temp = arr[min_index];
arr[min_index] = arr[i];
arr[i] = temp;
}
}
// 插入排序
void insertionSort(int arr[], int n) {
int i, j, key;
for (i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
// 冒泡排序
bubbleSort(arr, n);
printf("冒泡排序结果:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 选择排序
selectionSort(arr, n);
printf("选择排序结果:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 插入排序
insertionSort(arr, n);
printf("插入排序结果:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
案例解析
在这个案例中,我们分别实现了冒泡排序、选择排序和插入排序算法,并对一个整数数组进行排序。
案例十四:递归算法
案例简介
递归算法是一种常用的算法思想,它通过重复调用自身来解决子问题。本案例将介绍 C 语言中常用的递归算法,如阶乘、斐波那契数列等。
案例代码
#include <stdio.h>
// 阶乘
int factorial(int n) {
if (n == 0)
return 1;
return n * factorial(n - 1);
}
// 斐波那契数列
int fibonacci(int n) {
if (n <= 1)
return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int n = 5;
printf("n = %d 的阶乘:%d\n", n, factorial(n));
printf("斐波那契数列的第 %d 项:%d\n", n, fibonacci(n));
return 0;
}
案例解析
在这个案例中,我们分别实现了阶乘和斐波那契数列的递归算法,并输出结果。
案例十五:指针与数组
案例简介
指针与数组是 C 语言中密切相关的概念,它们共同构成了 C 语言中的数组操作。本案例将介绍如何使用指针操作数组。
案例代码
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
// 使用指针访问数组元素
for (int i = 0; i < 5; i++) {
printf("%d ", *(p + i));
}
printf("\n");
// 使用指针修改数组元素
*p = 10;
printf("修改后的数组:%d %d %d %d %d\n", arr[0], arr[1], arr[2], arr[3], arr[4]);
return 0;
}
案例解析
在这个案例中,我们使用指针 p 直接访问和修改数组 arr 的元素。
案例十六:函数指针
案例简介
函数指针是 C 语言中的一种特殊指针,它指向函数的地址。本案例将介绍如何声明、定义和调用函数指针。
案例代码
#include <stdio.h>
// 声明函数
int add(int x, int y) {
return x + y;
}
// 声明函数指针
int (*funPtr)(int, int);
int main() {
// 定义函数指针
funPtr = add;
// 调用函数指针
int result = (*funPtr)(10, 20);
printf("result = %d\n", result);
return 0;
}
案例解析
在这个案例中,我们声明了一个名为 funPtr 的函数指针,并将其指向 add 函数。然后,我们使用函数指针调用 add 函数并输出结果。
案例十七:结构体指针
案例简介
结构体指针是 C 语言中的一种特殊指针,它指向结构体变量。本案例将介绍如何声明、定义和操作结构体指针。
案例代码
#include <stdio.h>
// 声明结构体
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student stu1;
struct Student *p = &stu1;
// 使用结构体指针访问和修改结构体成员
strcpy(p->name, "张三");
p->age = 20;
p->score = 90.5;
printf("姓名:%s,年龄:%d,成绩:%f\n", p->name, p->age, p->score);
return 0;
}
案例解析
在这个案例中,我们声明了一个名为 Student
