C语言基础入门:系统编程的基石
C语言是一门历史悠久但依然充满活力的编程语言,被誉为"系统级编程的基石"。它就像一把精巧的瑞士军刀,虽然看起来简单,但功能强大,能够应对各种复杂的编程挑战。
1. C语言概述与环境搭建
C语言的历史与特点
C语言由丹尼斯·里奇在1972年开发,最初用于重写UNIX操作系统。它具有以下特点:
- 高效性:直接操作内存,执行效率接近汇编语言
- 灵活性:提供底层操作能力,可以进行位操作和指针运算
- 可移植性:标准统一,可在不同平台上编译运行
- 简洁性:关键字少,语法简洁明了
开发环境配置
选择合适的开发工具是学习C语言的第一步:
编译器选择
bash
# GCC(GNU Compiler Collection)- Linux/macOS推荐
sudo apt install gcc # Ubuntu/Debian
brew install gcc # macOS
# MinGW - Windows推荐
# 从官网下载安装:http://www.mingw.org/
# Clang - 现代化编译器
sudo apt install clang # Ubuntu/Debian编辑器/IDE推荐
- VS Code:轻量级,插件丰富
- Dev-C++:Windows平台经典选择
- Code::Blocks:跨平台IDE
- Visual Studio:功能强大的商业IDE
第一个C程序:Hello World
c
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}编译和运行:
bash
# 编译
gcc hello.c -o hello
# 运行
./hello # Linux/macOS
hello.exe # Windows2. 基本语法与数据类型
程序结构
C程序的基本结构包括:
c
#include <头文件> // 包含标准库头文件
int main() { // 主函数,程序入口
语句; // 程序语句,以分号结尾
return 0; // 返回值,0表示正常结束
}注释
c
// 单行注释
/*
多行注释
可以跨越多行
*/
/**
* 文档注释
* 用于函数说明
*/数据类型
C语言提供多种基本数据类型:
基本整型
c
// 基本整型
int a = 10; // 通常为32位
short b = 20; // 通常为16位
long c = 30L; // 通常为32位或64位
long long d = 40LL; // 64位整型
// 无符号整型
unsigned int ui = 100;
unsigned short us = 200;
unsigned long ul = 300UL;字符型和布尔型
c
char ch = 'A'; // 字符型,8位
unsigned char uch = 255; // 无符号字符型
// C99标准引入布尔类型
#include <stdbool.h>
bool flag = true; // 布尔型浮点型
c
float f = 3.14f; // 单精度浮点数,32位
double d = 3.14159; // 双精度浮点数,64位
long double ld = 3.14159265L; // 长双精度浮点数类型大小与范围
c
#include <stdio.h>
#include <limits.h>
#include <float.h>
int main() {
printf("int大小: %zu字节\n", sizeof(int));
printf("int范围: %d 到 %d\n", INT_MIN, INT_MAX);
printf("float大小: %zu字节\n", sizeof(float));
printf("float精度: %d位\n", FLT_DIG);
return 0;
}变量与常量
变量声明与初始化
c
// 声明变量
int age;
float height;
char initial;
// 声明并初始化
int count = 0;
float price = 99.99f;
char grade = 'A';
// 同时声明多个变量
int x = 1, y = 2, z = 3;
// 全局变量(函数外部声明)
int global_var = 100;常量定义
c
// 1. 字面常量
const int MAX_SIZE = 100;
// 2. #define宏常量
#define PI 3.14159
#define MAX(a, b) ((a) > (b) ? (a) : (b))
// 3. 枚举常量
enum Color { RED, GREEN, BLUE };
enum Color favorite_color = RED;3. 运算符与表达式
算术运算符
c
#include <stdio.h>
int main() {
int a = 10, b = 3;
printf("加法: %d + %d = %d\n", a, b, a + b);
printf("减法: %d - %d = %d\n", a, b, a - b);
printf("乘法: %d * %d = %d\n", a, b, a * b);
printf("除法: %d / %d = %d\n", a, b, a / b);
printf("取余: %d %% %d = %d\n", a, b, a % b);
return 0;
}赋值运算符
c
int main() {
int a = 10;
a += 5; // 等价于 a = a + 5
a -= 3; // 等价于 a = a - 3
a *= 2; // 等价于 a = a * 2
a /= 4; // 等价于 a = a / 4
a %= 3; // 等价于 a = a % 3
return 0;
}关系运算符
c
int main() {
int x = 5, y = 10;
printf("x == y: %d\n", x == y); // 等于
printf("x != y: %d\n", x != y); // 不等于
printf("x < y: %d\n", x < y); // 小于
printf("x > y: %d\n", x > y); // 大于
printf("x <= y: %d\n", x <= y); // 小于等于
printf("x >= y: %d\n", x >= y); // 大于等于
return 0;
}逻辑运算符
c
int main() {
int a = 5, b = 10, c = 15;
// 逻辑与 &&
if (a > 0 && b > 0) {
printf("a和b都大于0\n");
}
// 逻辑或 ||
if (a > 10 || b > 10) {
printf("a或b至少有一个大于10\n");
}
// 逻辑非 !
if (!(a > b)) {
printf("a不大于b\n");
}
return 0;
}自增自减运算符
c
int main() {
int i = 5, j = 5;
// 前缀形式:先自增再使用
printf("++i = %d\n", ++i); // i先变成6,然后返回6
// 后缀形式:先使用再自增
printf("j++ = %d\n", j++); // 先返回5,然后j变成6
printf("i = %d, j = %d\n", i, j);
return 0;
}运算符优先级
c
int main() {
int a = 10, b = 5, c = 2;
// 乘法优先级高于加法
int result1 = a + b * c; // 10 + 5 * 2 = 20
// 使用括号改变优先级
int result2 = (a + b) * c; // (10 + 5) * 2 = 30
printf("result1 = %d, result2 = %d\n", result1, result2);
return 0;
}4. 流程控制
分支结构
if语句
c
#include <stdio.h>
int main() {
int score = 85;
// 单分支
if (score >= 60) {
printf("及格了!\n");
}
// 双分支
if (score >= 90) {
printf("优秀!\n");
} else {
printf("还需努力!\n");
}
// 多分支
if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
return 0;
}switch语句
c
int main() {
int grade = 2;
switch (grade) {
case 1:
printf("一年级\n");
break;
case 2:
printf("二年级\n");
break;
case 3:
printf("三年级\n");
break;
default:
printf("其他年级\n");
break;
}
return 0;
}循环结构
for循环
c
int main() {
// 基本for循环
for (int i = 0; i < 5; i++) {
printf("第%d次循环\n", i + 1);
}
// 嵌套循环打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d×%d=%d\t", j, i, i * j);
}
printf("\n");
}
return 0;
}while循环
c
int main() {
int i = 0;
// while循环
while (i < 5) {
printf("while循环第%d次\n", i + 1);
i++;
}
// do-while循环(至少执行一次)
int j = 0;
do {
printf("do-while循环第%d次\n", j + 1);
j++;
} while (j < 3);
return 0;
}循环控制
c
int main() {
// break - 跳出循环
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 当i等于5时跳出循环
}
printf("%d ", i);
}
printf("\n");
// continue - 跳过本次循环
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
printf("%d ", i);
}
printf("\n");
return 0;
}5. 实践练习
简单计算器
c
#include <stdio.h>
int main() {
double num1, num2, result;
char operator;
printf("请输入第一个数字: ");
scanf("%lf", &num1);
printf("请输入运算符 (+, -, *, /): ");
scanf(" %c", &operator);
printf("请输入第二个数字: ");
scanf("%lf", &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("错误:除数不能为零!\n");
return 1;
}
break;
default:
printf("错误:无效的运算符!\n");
return 1;
}
printf("结果: %.2f %c %.2f = %.2f\n", num1, operator, num2, result);
return 0;
}打印图形
c
#include <stdio.h>
int main() {
int n = 5;
// 打印直角三角形
printf("直角三角形:\n");
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
printf("* ");
}
printf("\n");
}
// 打印等腰三角形
printf("\n等腰三角形:\n");
for (int i = 1; i <= n; i++) {
// 打印空格
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
// 打印星号
for (int j = 1; j <= 2 * i - 1; j++) {
printf("*");
}
printf("\n");
}
return 0;
}猜数字游戏
c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int secret_number, guess, attempts = 0;
// 初始化随机数种子
srand(time(NULL));
secret_number = rand() % 100 + 1; // 生成1-100之间的随机数
printf("欢迎来到猜数字游戏!\n");
printf("我想了一个1到100之间的数字,你能猜到吗?\n\n");
do {
printf("请输入你的猜测: ");
scanf("%d", &guess);
attempts++;
if (guess < secret_number) {
printf("太小了!再试一次。\n");
} else if (guess > secret_number) {
printf("太大了!再试一次。\n");
} else {
printf("恭喜你!你用了 %d 次猜对了数字 %d!\n", attempts, secret_number);
}
} while (guess != secret_number);
return 0;
}总结
本章节介绍了C语言的基础知识:
- C语言的特点和开发环境搭建
- 基本语法结构和数据类型
- 各种运算符的使用
- 流程控制语句
- 简单的实践练习
掌握这些基础知识后,你已经可以编写简单的C程序了。在下一章节中,我们将学习C语言的核心特性,包括函数、数组、指针等更高级的概念。
记住,学习C语言最重要的是多动手实践。尝试修改示例代码,创建自己的程序,这样才能真正掌握这门强大的编程语言。C语言虽然相对底层,但它是理解计算机工作原理的重要工具,学好C语言将为你的编程生涯打下坚实的基础。