第一章:C语言简介

1.1 C语言的历史

C语言是由美国贝尔实验室的Dennis Ritchie于1972年发明的。它的设计初衷是为了在Unix操作系统上开发系统软件。由于其简洁、高效、可移植性强等优点,C语言迅速成为全球最受欢迎的编程语言之一。

1.2 C语言的特点

  • 简洁明了:C语言语法简洁,易于理解。
  • 高效性:C语言编写的程序执行效率高。
  • 可移植性:C语言编写的程序可以在多种操作系统上运行。
  • 强大的功能:C语言提供了丰富的库函数和工具,可以完成各种复杂任务。

第二章:C语言基础

2.1 数据类型

C语言提供了多种数据类型,如整型、浮点型、字符型等。

#include <stdio.h>

int main() {
    int age = 25;
    float height = 1.75f;
    char name = '张';
    printf("年龄:%d\n", age);
    printf("身高:%f\n", height);
    printf("姓名:%c\n", name);
    return 0;
}

2.2 变量与常量

变量是存储数据的地方,常量是固定不变的值。

#include <stdio.h>

int main() {
    int num = 10;
    const float PI = 3.14159f;
    printf("数字:%d\n", num);
    printf("圆周率:%f\n", PI);
    return 0;
}

2.3 运算符

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

#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);
    printf("关系运算:%d\n", a > b);
    return 0;
}

第三章:控制流

3.1 条件语句

条件语句用于根据条件判断执行不同的代码块。

#include <stdio.h>

int main() {
    int age = 18;
    if (age >= 18) {
        printf("已成年\n");
    } else {
        printf("未成年\n");
    }
    return 0;
}

3.2 循环语句

循环语句用于重复执行一段代码。

#include <stdio.h>

int main() {
    int i;
    for (i = 1; i <= 5; i++) {
        printf("循环:%d\n", i);
    }
    return 0;
}

第四章:函数

4.1 函数定义

函数是C语言中的基本组成部分,用于封装代码块。

#include <stdio.h>

void sayHello() {
    printf("你好,世界!\n");
}

int main() {
    sayHello();
    return 0;
}

4.2 函数调用

函数调用是指使用函数名和参数来执行函数内的代码。

#include <stdio.h>

void sayHello() {
    printf("你好,世界!\n");
}

int main() {
    sayHello();
    return 0;
}

第五章:指针

5.1 指针的概念

指针是存储变量地址的变量,是C语言中强大的特性之一。

#include <stdio.h>

int main() {
    int age = 18;
    int *ptr = &age;
    printf("年龄:%d\n", *ptr);
    return 0;
}

5.2 指针与数组

指针可以与数组一起使用,实现数组元素的遍历等操作。

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr;
    for (int i = 0; i < 5; i++) {
        printf("数组元素:%d\n", *(ptr + i));
    }
    return 0;
}

第六章:结构体与联合体

6.1 结构体

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

#include <stdio.h>

typedef struct {
    char name[50];
    int age;
    float height;
} Person;

int main() {
    Person person;
    strcpy(person.name, "张三");
    person.age = 25;
    person.height = 1.75f;
    printf("姓名:%s\n", person.name);
    printf("年龄:%d\n", person.age);
    printf("身高:%f\n", person.height);
    return 0;
}

6.2 联合体

联合体是一种特殊的数据类型,可以存储多个不同类型的数据,但同一时间只能存储其中一个。

#include <stdio.h>

typedef union {
    int i;
    float f;
    char c[10];
} UnionType;

int main() {
    UnionType ut;
    ut.i = 10;
    printf("整型:%d\n", ut.i);
    ut.f = 3.14f;
    printf("浮点型:%f\n", ut.f);
    strcpy(ut.c, "联合体");
    printf("字符型:%s\n", ut.c);
    return 0;
}

第七章:文件操作

7.1 文件概念

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

7.2 文件打开与关闭

#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "w");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return -1;
    }
    fprintf(fp, "这是一个示例文件\n");
    fclose(fp);
    return 0;
}

7.3 文件读写

#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "r");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return -1;
    }
    char ch;
    while ((ch = fgetc(fp)) != EOF) {
        putchar(ch);
    }
    fclose(fp);
    return 0;
}

第八章:动态内存分配

8.1 动态内存分配概念

动态内存分配是C语言中的一项重要特性,用于在运行时分配内存。

8.2 使用malloc函数

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

int main() {
    int *arr = (int *)malloc(10 * sizeof(int));
    if (arr == NULL) {
        printf("内存分配失败\n");
        return -1;
    }
    for (int i = 0; i < 10; i++) {
        arr[i] = i;
    }
    for (int i = 0; i < 10; i++) {
        printf("数组元素:%d\n", arr[i]);
    }
    free(arr);
    return 0;
}

第九章:网络编程

9.1 网络编程概念

网络编程是指使用C语言编写网络应用程序的过程。

9.2 套接字编程

套接字编程是网络编程中的核心技术,用于实现网络通信。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

int main() {
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1) {
        printf("创建套接字失败\n");
        return -1;
    }
    struct sockaddr_in servaddr;
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(8080);
    servaddr.sin_addr.s_addr = INADDR_ANY;
    if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
        printf("绑定失败\n");
        return -1;
    }
    listen(sockfd, 10);
    int connfd;
    while ((connfd = accept(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))) != -1) {
        char buffer[1024];
        read(connfd, buffer, sizeof(buffer));
        printf("客户端:%s\n", buffer);
        write(connfd, "HTTP/1.1 200 OK\r\n\r\n", 25);
        close(connfd);
    }
    close(sockfd);
    return 0;
}

第十章:C语言高级特性

10.1 指针与函数

指针可以与函数一起使用,实现函数指针和回调函数等特性。

#include <stdio.h>

void add(int a, int b) {
    printf("加法:%d + %d = %d\n", a, b, a + b);
}

void callFunction(void (*func)(int, int), int a, int b) {
    func(a, b);
}

int main() {
    callFunction(add, 3, 4);
    return 0;
}

10.2 预处理器

预处理器是C语言中的一个重要特性,用于在编译前处理源代码。

#include <stdio.h>

#define MAX_SIZE 10

int main() {
    int arr[MAX_SIZE];
    for (int i = 0; i < MAX_SIZE; i++) {
        arr[i] = i;
    }
    for (int i = 0; i < MAX_SIZE; i++) {
        printf("数组元素:%d\n", arr[i]);
    }
    return 0;
}

第十一章:C语言资源推荐

11.1 教程网站

11.2 书籍推荐

  • 《C程序设计语言》:作者:Brian W. Kernighan 和 Dennis M. Ritchie
  • 《C和指针》:作者:Stephen Prata
  • 《C陷阱与缺陷》:作者:Andrew Koenig

11.3 视频教程

总结

通过以上章节,我们学习了C语言的基础知识、控制流、函数、指针、结构体与联合体、文件操作、动态内存分配、网络编程、C语言高级特性等内容。希望这些内容能够帮助您入门C语言编程,并在进阶过程中不断取得进步。

最后,祝愿您在C语言编程的道路上越走越远,成为一位优秀的程序员!