C语言作为一种历史悠久且功能强大的编程语言,至今仍被广泛应用于操作系统、嵌入式系统、游戏开发等领域。掌握C语言不仅能够帮助你理解计算机的工作原理,还能提升你的编程思维。本文将通过50个实用实例,带你领略C语言的魅力与技巧。
实例1:变量与数据类型
#include <stdio.h>
int main() {
int num = 10;
float fnum = 3.14f;
char letter = 'A';
printf("整数:%d\n", num);
printf("浮点数:%f\n", fnum);
printf("字符:%c\n", letter);
return 0;
}
在这个实例中,我们学习了如何声明和使用不同数据类型的变量。
实例2:运算符
#include <stdio.h>
int main() {
int a = 5, b = 3;
printf("加法:%d\n", a + b);
printf("减法:%d\n", a - b);
printf("乘法:%d\n", a * b);
printf("除法:%d\n", a / b);
return 0;
}
这个实例展示了C语言中的基本运算符及其用法。
实例3:条件语句
#include <stdio.h>
int main() {
int num = 10;
if (num > 0) {
printf("数字是正数\n");
} else if (num < 0) {
printf("数字是负数\n");
} else {
printf("数字是0\n");
}
return 0;
}
这个实例介绍了C语言中的条件语句,用于根据条件执行不同的代码块。
实例4:循环语句
#include <stdio.h>
int main() {
int i;
for (i = 0; i < 5; i++) {
printf("循环中的数字:%d\n", i);
}
return 0;
}
这个实例展示了C语言中的for循环,用于重复执行一段代码。
实例5:函数
#include <stdio.h>
void sayHello() {
printf("Hello, World!\n");
}
int main() {
sayHello();
return 0;
}
这个实例介绍了C语言中的函数,它允许我们将代码封装成可重用的模块。
实例6:指针
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a;
printf("a的值:%d\n", a);
printf("ptr指向的值:%d\n", *ptr);
return 0;
}
这个实例展示了C语言中的指针,它允许我们直接访问内存地址。
实例7:结构体
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Student;
int main() {
Student stu1;
stu1.id = 1;
strcpy(stu1.name, "张三");
printf("学生ID:%d\n", stu1.id);
printf("学生姓名:%s\n", stu1.name);
return 0;
}
这个实例介绍了C语言中的结构体,它允许我们将多个数据类型组合成一个单一的复合数据类型。
实例8:数组
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("数组元素:%d\n", arr[i]);
}
return 0;
}
这个实例展示了C语言中的数组,它允许我们存储一系列相同类型的元素。
实例9:字符串处理
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[50] = "World";
strcat(str1, str2);
printf("合并后的字符串:%s\n", str1);
return 0;
}
这个实例介绍了C语言中的字符串处理函数,如strcat用于合并字符串。
实例10:文件操作
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
fprintf(fp, "Hello, World!\n");
fclose(fp);
return 0;
}
这个实例展示了C语言中的文件操作,如打开、写入和关闭文件。
实例11:动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = (int *)malloc(5 * sizeof(int));
if (arr == NULL) {
printf("内存分配失败\n");
return 1;
}
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < 5; i++) {
printf("数组元素:%d\n", arr[i]);
}
free(arr);
return 0;
}
这个实例介绍了C语言中的动态内存分配,它允许我们在程序运行时分配内存。
实例12:结构体数组
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Student;
int main() {
Student stu[3] = {
{1, "张三"},
{2, "李四"},
{3, "王五"}
};
for (int i = 0; i < 3; i++) {
printf("学生ID:%d, 学生姓名:%s\n", stu[i].id, stu[i].name);
}
return 0;
}
这个实例展示了C语言中的结构体数组,它允许我们存储多个结构体元素。
实例13:指针数组
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptrArr[5];
for (int i = 0; i < 5; i++) {
ptrArr[i] = &arr[i];
}
for (int i = 0; i < 5; i++) {
printf("数组元素:%d\n", *ptrArr[i]);
}
return 0;
}
这个实例介绍了C语言中的指针数组,它允许我们存储多个指针元素。
实例14:函数指针
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*ptrFunc)(int, int) = add;
printf("函数指针调用的结果:%d\n", ptrFunc(3, 4));
return 0;
}
这个实例展示了C语言中的函数指针,它允许我们将函数作为参数传递。
实例15:递归函数
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n = 5;
printf("阶乘结果:%d\n", factorial(n));
return 0;
}
这个实例介绍了C语言中的递归函数,它允许函数在执行过程中调用自身。
实例16:结构体指针
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Student;
int main() {
Student stu1 = {1, "张三"};
Student *ptrStu = &stu1;
printf("学生ID:%d, 学生姓名:%s\n", ptrStu->id, ptrStu->name);
return 0;
}
这个实例介绍了C语言中的结构体指针,它允许我们通过指针访问结构体成员。
实例17:枚举类型
#include <stdio.h>
typedef enum {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
} Weekday;
int main() {
Weekday today = TUESDAY;
printf("今天是:%d\n", today);
return 0;
}
这个实例介绍了C语言中的枚举类型,它允许我们定义一组命名的整型常量。
实例18:位运算
#include <stdio.h>
int main() {
int a = 5; // 0101
int b = 3; // 0011
printf("按位与:%d\n", a & b); // 0001
printf("按位或:%d\n", a | b); // 0111
printf("按位异或:%d\n", a ^ b); // 0100
printf("按位取反:%d\n", ~a); // 1010
return 0;
}
这个实例展示了C语言中的位运算,它允许我们对整数进行位操作。
实例19:宏定义
#include <stdio.h>
#define PI 3.14159
int main() {
printf("圆周率:%f\n", PI);
return 0;
}
这个实例介绍了C语言中的宏定义,它允许我们定义一个占位符,在编译时替换成指定的值。
实例20:预处理指令
#include <stdio.h>
#if defined(__GNUC__)
#define COMPILER "GCC"
#elif defined(__clang__)
#define COMPILER "Clang"
#else
#define COMPILER "Unknown"
#endif
int main() {
printf("编译器:%s\n", COMPILER);
return 0;
}
这个实例展示了C语言中的预处理指令,它允许我们在编译前进行条件编译。
实例21:函数重载
#include <stdio.h>
void print(int n) {
printf("整数:%d\n", n);
}
void print(double n) {
printf("浮点数:%f\n", n);
}
int main() {
print(10);
print(3.14);
return 0;
}
这个实例介绍了C语言中的函数重载,它允许我们定义多个同名函数,但参数类型或数量不同。
实例22:默认参数
#include <stdio.h>
void printName(char *name, int count) {
if (count <= 0) {
count = 10;
}
for (int i = 0; i < count; i++) {
printf("%s\n", name);
}
}
int main() {
printName("张三", 5);
printName("李四");
return 0;
}
这个实例介绍了C语言中的默认参数,它允许我们在函数定义中为参数指定默认值。
实例23:可变参数
#include <stdio.h>
void printNumbers(int count, ...) {
va_list args;
va_start(args, count);
for (int i = 0; i < count; i++) {
printf("%d ", va_arg(args, int));
}
va_end(args);
printf("\n");
}
int main() {
printNumbers(3, 1, 2, 3);
return 0;
}
这个实例介绍了C语言中的可变参数,它允许函数接受任意数量的参数。
实例24:静态变量
#include <stdio.h>
void printCount() {
static int count = 0;
count++;
printf("调用次数:%d\n", count);
}
int main() {
printCount();
printCount();
printCount();
return 0;
}
这个实例介绍了C语言中的静态变量,它允许函数在调用之间保持变量值。
实例25:全局变量
#include <stdio.h>
int globalVar = 10;
void printGlobalVar() {
printf("全局变量:%d\n", globalVar);
}
int main() {
printGlobalVar();
return 0;
}
这个实例介绍了C语言中的全局变量,它允许函数在程序中任何地方访问该变量。
实例26:局部变量
#include <stdio.h>
void printLocalVar() {
int localVar = 5;
printf("局部变量:%d\n", localVar);
}
int main() {
printLocalVar();
// printf("局部变量:%d\n", localVar); // 错误:局部变量无法在函数外部访问
return 0;
}
这个实例介绍了C语言中的局部变量,它允许函数在函数内部访问该变量。
实例27:作用域
#include <stdio.h>
int globalVar = 10;
void printVar() {
int localVar = 5;
printf("局部变量:%d\n", localVar);
printf("全局变量:%d\n", globalVar);
}
int main() {
printVar();
// printf("局部变量:%d\n", localVar); // 错误:局部变量无法在函数外部访问
printf("全局变量:%d\n", globalVar);
return 0;
}
这个实例介绍了C语言中的作用域,它允许我们定义不同作用域的变量。
实例28:数组的初始化
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("数组元素:%d\n", arr[i]);
}
return 0;
}
这个实例展示了C语言中数组的初始化方法。
实例29:二维数组
#include <stdio.h>
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("二维数组元素:%d\n", arr[i][j]);
}
}
return 0;
}
这个实例展示了C语言中二维数组的定义和初始化方法。
实例30:字符串数组
#include <stdio.h>
int main() {
char *arr[] = {"Hello", "World", "C"};
for (int i = 0; i < 3; i++) {
printf("字符串数组元素:%s\n", arr[i]);
}
return 0;
}
这个实例展示了C语言中字符串数组的定义和初始化方法。
实例31:动态二维数组
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 3;
int cols = 3;
int **arr = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
arr[i] = (int *)malloc(cols * sizeof(int));
for (int j = 0; j < cols; j++) {
arr[i][j] = i * cols + j + 1;
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("动态二维数组元素:%d\n", arr[i][j]);
}
}
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
这个实例展示了C语言中动态二维数组的定义和初始化方法。
实例32:字符串连接
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[50] = "World";
char result[100];
strcpy(result, str1);
strcat(result, str2);
printf("连接后的字符串:%s\n", result);
return 0;
}
这个实例展示了C语言中字符串连接的方法。
实例33:字符串拷贝
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[50];
strcpy(str2, str1);
printf("拷贝后的字符串:%s\n", str2);
return 0;
}
这个实例展示了C语言中字符串拷贝的方法。
实例34:字符串比较
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[50] = "World";
int result = strcmp(str1, str2);
if (result == 0) {
printf("字符串相等\n");
} else if (result < 0) {
printf("str1小于str2\n");
} else {
printf("str1大于str2\n");
}
return 0;
}
这个实例展示了C语言中字符串比较的方法。
实例35:字符串查找
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello, World!";
char str2[50] = "World";
int result = strstr(str1, str2);
if (result != NULL) {
printf("找到字符串:%s\n", str2);
} else {
printf("未找到字符串\n");
}
return 0;
}
这个实例展示了C语言中字符串查找的方法。
实例36:字符串替换
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello, World!";
char str2[50] = "World";
char str3[50] = "C";
char result[100];
strcpy(result, str1);
char *pos = strstr(result, str2);
if (pos != NULL) {
int len = strlen(str2);
memmove(pos + strlen(str3), pos + len, strlen(pos) - len + 1);
memcpy(pos, str3, strlen(str3));
}
printf("替换后的字符串:%s\n", result);
return 0;
}
