第一章:C语言概述

1.1 C语言的历史与发展

C语言是一种广泛使用的计算机编程语言,由Dennis Ritchie在1972年发明。它以其简洁、高效和可移植性而闻名。C语言不仅是一种系统编程语言,还被用于嵌入式系统、操作系统、编译器开发等领域。

1.2 C语言的特点

  • 简洁性:C语言语法简单,易于学习和使用。
  • 高效性:C语言生成的代码执行效率高。
  • 可移植性:C语言编写的程序可以在不同的平台上运行。
  • 强大的功能:C语言提供了丰富的库函数,可以完成各种复杂任务。

第二章:C语言基础语法

2.1 基本数据类型

C语言支持多种基本数据类型,如整型、浮点型、字符型等。以下是几种常见的数据类型:

  • int:表示整数。
  • float:表示单精度浮点数。
  • double:表示双精度浮点数。
  • char:表示字符。

2.2 变量和常量

变量是存储在内存中的数据,可以随时更改。常量则是不可更改的数据。

#include <stdio.h>

int main() {
    int age = 20; // age 是一个整型变量,存储年龄值
    const float pi = 3.14159; // pi 是一个常量,存储圆周率

    printf("My age is %d.\n", age);
    printf("The value of pi is %f.\n", pi);

    return 0;
}

2.3 运算符

C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符等。

#include <stdio.h>

int main() {
    int a = 10, b = 5;
    int sum = a + b; // 算术运算符
    int is_equal = (a == b); // 关系运算符
    int is_greater = (a > b); // 关系运算符

    printf("The sum of a and b is %d.\n", sum);
    printf("Is a equal to b? %d\n", is_equal);
    printf("Is a greater than b? %d\n", is_greater);

    return 0;
}

第三章:流程控制

3.1 顺序结构

顺序结构是最基本的程序结构,按照语句书写的顺序依次执行。

3.2 选择结构

选择结构用于根据条件判断执行不同的代码块。

#include <stdio.h>

int main() {
    int num = 10;
    if (num > 0) {
        printf("The number is positive.\n");
    } else if (num < 0) {
        printf("The number is negative.\n");
    } else {
        printf("The number is zero.\n");
    }

    return 0;
}

3.3 循环结构

循环结构用于重复执行一段代码。

#include <stdio.h>

int main() {
    int i;
    for (i = 1; i <= 10; i++) {
        printf("%d\n", i);
    }

    return 0;
}

第四章:函数

4.1 函数的定义和调用

函数是C语言的基本组成部分,用于实现代码的模块化。

#include <stdio.h>

// 函数声明
void sayHello();

int main() {
    sayHello(); // 函数调用

    return 0;
}

// 函数定义
void sayHello() {
    printf("Hello, world!\n");
}

4.2 传值和传址

在C语言中,函数可以通过传值和传址的方式传递参数。

#include <stdio.h>

// 传值函数
void add(int a, int b) {
    printf("The sum is %d.\n", a + b);
}

// 传址函数
void addReference(int *a, int *b) {
    printf("The sum is %d.\n", *a + *b);
}

int main() {
    int x = 10, y = 20;
    add(x, y); // 传值
    addReference(&x, &y); // 传址

    return 0;
}

第五章:数组

5.1 数组的定义和初始化

数组是存储多个相同类型数据的一组元素。

#include <stdio.h>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    int i;

    for (i = 0; i < 5; i++) {
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }

    return 0;
}

5.2 二维数组

二维数组是数组的数组,可以用于表示表格或矩阵。

#include <stdio.h>

int main() {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int i, j;

    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3; j++) {
            printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
        }
    }

    return 0;
}

第六章:指针

6.1 指针的概念

指针是存储变量地址的变量,用于实现函数传址、动态内存分配等功能。

#include <stdio.h>

int main() {
    int a = 10;
    int *ptr = &a; // ptr 是一个指向整数的指针,存储变量 a 的地址

    printf("The value of a is %d.\n", a);
    printf("The address of a is %p.\n", (void *)ptr);
    printf("The value of *ptr is %d.\n", *ptr);

    return 0;
}

6.2 指针运算

指针可以进行算术运算,如加、减、自增、自减等。

#include <stdio.h>

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    int *ptr = array;

    printf("The value of *ptr is %d.\n", *ptr); // 输出数组第一个元素的值
    printf("The value of *(ptr + 1) is %d.\n", *(ptr + 1)); // 输出数组第二个元素的值

    return 0;
}

第七章:结构体

7.1 结构体的定义

结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。

#include <stdio.h>

// 定义一个学生结构体
struct Student {
    char name[50];
    int age;
    float score;
};

int main() {
    struct Student student1;
    strcpy(student1.name, "Alice");
    student1.age = 20;
    student1.score = 90.5;

    printf("Name: %s\n", student1.name);
    printf("Age: %d\n", student1.age);
    printf("Score: %.1f\n", student1.score);

    return 0;
}

7.2 结构体数组

结构体数组可以存储多个结构体实例。

#include <stdio.h>

// 定义一个学生结构体
struct Student {
    char name[50];
    int age;
    float score;
};

int main() {
    struct Student students[3];
    int i;

    strcpy(students[0].name, "Alice");
    students[0].age = 20;
    students[0].score = 90.5;

    strcpy(students[1].name, "Bob");
    students[1].age = 21;
    students[1].score = 85.0;

    strcpy(students[2].name, "Charlie");
    students[2].age = 22;
    students[2].score = 95.0;

    for (i = 0; i < 3; i++) {
        printf("Name: %s\n", students[i].name);
        printf("Age: %d\n", students[i].age);
        printf("Score: %.1f\n", students[i].score);
    }

    return 0;
}

第八章:文件操作

8.1 文件的基本概念

文件是存储在磁盘上的数据集合,C语言提供了丰富的文件操作函数。

8.2 文件读写

#include <stdio.h>

int main() {
    FILE *fp;
    char filename[] = "example.txt";
    char buffer[100];

    // 打开文件
    fp = fopen(filename, "r");
    if (fp == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    // 读取文件内容
    while (fgets(buffer, sizeof(buffer), fp)) {
        printf("%s", buffer);
    }

    // 关闭文件
    fclose(fp);

    return 0;
}

第九章:动态内存分配

9.1 动态内存分配的概念

动态内存分配是指程序在运行时根据需要分配内存。

9.2 使用malloc和free函数

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = (int *)malloc(sizeof(int));
    if (ptr == NULL) {
        printf("Memory allocation failed.\n");
        return 1;
    }

    *ptr = 10;
    printf("The value of *ptr is %d.\n", *ptr);

    free(ptr); // 释放内存

    return 0;
}

第十章:C语言进阶

10.1 预处理器

预处理器是C语言的一部分,用于处理源代码中的宏定义、条件编译等。

10.2 位操作

位操作是C语言提供的特殊操作,用于对二进制位进行操作。

#include <stdio.h>

int main() {
    int a = 5; // 0000 0101
    int b = 3; // 0000 0011

    // 与操作
    int and = a & b; // 0000 0001
    printf("The result of & is %d.\n", and);

    // 或操作
    int or = a | b; // 0000 0111
    printf("The result of | is %d.\n", or);

    // 异或操作
    int xor = a ^ b; // 0000 0100
    printf("The result of ^ is %d.\n", xor);

    // 取反操作
    int not = ~a; // 1111 1010
    printf("The result of ~ is %d.\n", not);

    return 0;
}

10.3 C语言库函数

C语言提供了丰富的库函数,用于完成各种任务,如字符串处理、数学计算、文件操作等。

总结

C语言是一种功能强大、应用广泛的编程语言。通过学习C语言,您可以掌握编程的基本概念和技巧,为学习其他编程语言打下坚实的基础。本资料汇总了C语言入门到精通的学习资料,希望对您的学习有所帮助。