Skip to content

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推荐

  1. VS Code:轻量级,插件丰富
  2. Dev-C++:Windows平台经典选择
  3. Code::Blocks:跨平台IDE
  4. 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      # Windows

2. 基本语法与数据类型

程序结构

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语言将为你的编程生涯打下坚实的基础。