C语言作为一种历史悠久且功能强大的编程语言,至今仍被广泛应用于操作系统、嵌入式系统、游戏开发等领域。学习C语言,实战案例是不可或缺的一部分。以下是一些适合初学者和进阶者的实战案例,帮助你从实践中掌握C语言编程。
1. 控制台应用程序
1.1 简单计算器
案例描述:编写一个简单的计算器程序,能够实现加、减、乘、除四种基本运算。
实现步骤:
- 使用
#include <stdio.h>引入标准输入输出库。 - 定义两个变量用于存储用户输入的两个数字。
- 通过
printf函数提示用户输入数字。 - 使用
scanf函数读取用户输入的数字。 - 根据用户选择的运算符进行相应的计算。
- 输出计算结果。
代码示例:
#include <stdio.h>
int main() {
float num1, num2, result;
char operator;
printf("Enter an operator (+, -, *, /): ");
scanf("%c", &operator);
printf("Enter two operands: ");
scanf("%f %f", &num1, &num2);
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("Error! Division by zero.\n");
break;
default:
printf("Error! Invalid operator.\n");
return 1;
}
printf("The result is: %f", result);
return 0;
}
1.2 字符串处理
案例描述:编写一个程序,实现字符串的拷贝、连接、查找等功能。
实现步骤:
- 使用
#include <string.h>引入字符串处理库。 - 定义两个字符串变量用于存储用户输入的字符串。
- 通过
printf函数提示用户输入字符串。 - 使用
scanf函数读取用户输入的字符串。 - 使用
strcpy、strcat、strstr等函数实现字符串的拷贝、连接、查找等功能。
代码示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100], result[200];
printf("Enter first string: ");
scanf("%s", str1);
printf("Enter second string: ");
scanf("%s", str2);
strcpy(result, str1);
strcat(result, str2);
printf("Concatenated string: %s\n", result);
char *pos = strstr(str1, str2);
if (pos != NULL)
printf("Substring found at position: %ld\n", pos - str1);
else
printf("Substring not found.\n");
return 0;
}
2. 嵌入式系统开发
2.1 简单LED控制
案例描述:使用C语言编写一个程序,控制LED灯的亮灭。
实现步骤:
- 使用
#include <wiringPi.h>引入树莓派GPIO控制库。 - 初始化GPIO引脚。
- 通过
digitalWrite函数控制LED灯的亮灭。
代码示例:
#include <wiringPi.h>
int main() {
if (wiringPiSetup() == -1)
return 1;
pinMode(0, OUTPUT);
while (1) {
digitalWrite(0, HIGH);
delay(1000);
digitalWrite(0, LOW);
delay(1000);
}
return 0;
}
2.2 温湿度传感器读取
案例描述:使用C语言编写一个程序,读取DHT11温湿度传感器的数据。
实现步骤:
- 使用
#include <dht.h>引入DHT11传感器库。 - 初始化GPIO引脚。
- 使用
dht_read函数读取温湿度数据。
代码示例:
#include <dht.h>
int main() {
dht DHT;
int pin = 7;
if (dht_init(pin) == 0) {
int chk = DHT.read22(pin);
switch (chk) {
case DHTLIB_OK:
printf("Humidity (%.1f) & Temperature (%.1f) is OK\n", DHT.humidity, DHT.temperature);
break;
case DHTLIB_ERROR_CHECKSUM:
printf("Checksum error\n");
break;
case DHTLIB_ERROR_TIMEOUT:
printf("Time out error\n");
break;
default:
printf("Unknown error\n");
break;
}
}
return 0;
}
3. 游戏开发
3.1 简单贪吃蛇游戏
案例描述:使用C语言编写一个简单的贪吃蛇游戏。
实现步骤:
- 使用
#include <ncurses.h>引入图形界面库。 - 初始化游戏界面。
- 使用键盘输入控制蛇的移动。
- 检测蛇是否吃到食物或撞到墙壁。
- 结束游戏并显示分数。
代码示例:
#include <ncurses.h>
int main() {
initscr();
cbreak();
noecho();
curs_set(0);
int x, y, food_x, food_y, score = 0;
int tailX[100], tailY[100];
int nTail = 0;
char key;
x = 10;
y = 10;
food_x = (rand() % (COLS - 2)) + 1;
food_y = (rand() % (LINES - 2)) + 1;
while (1) {
afterید 1000;
key = getch();
if (key == 'q')
break;
if (key == KEY_LEFT) {
x--;
}
else if (key == KEY_RIGHT) {
x++;
}
else if (key == KEY_UP) {
y--;
}
else if (key == KEY_DOWN) {
y++;
}
if (x >= COLS || x < 0 || y >= LINES || y < 0) {
break;
}
if (x == food_x && y == food_y) {
score += 10;
food_x = (rand() % (COLS - 2)) + 1;
food_y = (rand() % (LINES - 2)) + 1;
nTail++;
}
for (int i = 0; i < nTail; i++) {
tailX[i] = tailX[i + 1];
tailY[i] = tailY[i + 1];
}
tailX[nTail] = x;
tailY[nTail] = y;
for (int i = 0; i < nTail; i++) {
if (tailX[i] == x && tailY[i] == y) {
break;
}
}
clear();
mvprintw(0, 0, "Score: %d", score);
mvprintw(food_y, food_x, "*");
for (int i = 0; i < nTail; i++) {
mvprintw(tailY[i], tailX[i], "#");
}
mvprintw(y, x, "@");
refresh();
}
endwin();
return 0;
}
通过以上实战案例,你可以逐步掌握C语言编程。在学习过程中,建议多动手实践,积累经验,提高编程能力。祝你学习顺利!
