C语言作为一门历史悠久且广泛使用的编程语言,一直是学习编程的入门首选。它以其简洁、高效、灵活的特性,被广泛应用于系统软件、嵌入式系统、操作系统等领域。本文将从C语言的基础语法讲起,通过经典案例解析,帮助读者轻松掌握C语言编程。

第一部分:C语言基础语法

1. 数据类型

C语言中的数据类型分为基本数据类型和复杂数据类型。基本数据类型包括整型(int)、浮点型(float)、字符型(char)等。复杂数据类型包括数组、结构体、联合体等。

#include <stdio.h>

int main() {
    int i = 10;
    float f = 3.14;
    char c = 'A';
    printf("整型:%d\n", i);
    printf("浮点型:%f\n", f);
    printf("字符型:%c\n", c);
    return 0;
}

2. 变量和常量

变量是内存中用于存储数据的容器,常量是程序运行过程中值不变的量。

#include <stdio.h>

int main() {
    int a = 10;
    const int b = 20; // 常量
    printf("变量a:%d\n", a);
    printf("常量b:%d\n", b);
    return 0;
}

3. 运算符

C语言中的运算符包括算术运算符、关系运算符、逻辑运算符等。

#include <stdio.h>

int main() {
    int a = 10, b = 5;
    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);
    printf("逻辑运算:%d\n", a && b);
    return 0;
}

第二部分:C语言高级特性

1. 函数

函数是C语言的核心组成部分,用于封装代码块,提高代码复用性。

#include <stdio.h>

void myFunction() {
    printf("这是一个函数\n");
}

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

2. 指针

指针是C语言的精髓,用于存储变量的地址。

#include <stdio.h>

int main() {
    int a = 10;
    int *ptr = &a; // ptr指向a的地址
    printf("变量a的值:%d\n", a);
    printf("指针ptr指向的地址:%p\n", (void *)ptr);
    printf("指针ptr指向的值:%d\n", *ptr);
    return 0;
}

3. 结构体

结构体是用于组织相关数据的容器,可以包含不同数据类型的成员。

#include <stdio.h>

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

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

第三部分:经典案例解析

1. 计算器

以下是一个简单的计算器程序,可以计算加、减、乘、除运算。

#include <stdio.h>

int main() {
    char operator;
    double first, second;

    printf("请输入运算符 (+, -, *, /): ");
    scanf("%c", &operator);

    printf("请输入两个操作数: ");
    scanf("%lf %lf", &first, &second);

    switch (operator) {
        case '+':
            printf("%.1lf + %.1lf = %.1lf", first, second, first + second);
            break;
        case '-':
            printf("%.1lf - %.1lf = %.1lf", first, second, first - second);
            break;
        case '*':
            printf("%.1lf * %.1lf = %.1lf", first, second, first * second);
            break;
        case '/':
            if (second != 0.0)
                printf("%.1lf / %.1lf = %.1lf", first, second, first / second);
            else
                printf("除数不能为0");
            break;
        default:
            printf("无效的运算符");
    }

    return 0;
}

2. 链表

以下是一个简单的单向链表程序,用于插入和删除节点。

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

typedef struct Node {
    int data;
    struct Node* next;
} Node;

Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

void insertNode(Node** head, int data) {
    Node* newNode = createNode(data);
    newNode->next = *head;
    *head = newNode;
}

void deleteNode(Node** head, int data) {
    Node* temp = *head, *prev = NULL;

    if (temp != NULL && temp->data == data) {
        *head = temp->next;
        free(temp);
        return;
    }

    while (temp != NULL && temp->data != data) {
        prev = temp;
        temp = temp->next;
    }

    if (temp == NULL) return;

    prev->next = temp->next;
    free(temp);
}

void displayList(Node* node) {
    while (node != NULL) {
        printf("%d ", node->data);
        node = node->next;
    }
    printf("\n");
}

int main() {
    Node* head = NULL;

    insertNode(&head, 2);
    insertNode(&head, 3);
    insertNode(&head, 4);
    insertNode(&head, 5);

    printf("链表中的元素: ");
    displayList(head);

    deleteNode(&head, 3);
    printf("删除元素3后的链表: ");
    displayList(head);

    return 0;
}

通过以上经典案例的学习,相信你已经对C语言有了更深入的了解。在接下来的学习中,请多加练习,不断提高自己的编程能力。祝你学习愉快!