引言

C语言作为一种历史悠久且功能强大的编程语言,被广泛应用于系统编程、嵌入式系统、游戏开发等领域。学习C语言不仅可以提高编程技能,还能锻炼逻辑思维和解决问题的能力。本文将介绍一些C语言编程的实战案例,帮助读者轻松学习并享受编程的乐趣。

一、C语言基础知识

在开始实战案例之前,我们需要掌握一些C语言的基础知识,包括:

  • 数据类型:整型、浮点型、字符型等。
  • 变量和常量:变量的声明、初始化和赋值。
  • 运算符:算术运算符、关系运算符、逻辑运算符等。
  • 控制结构:if语句、switch语句、循环语句等。
  • 函数:函数的定义、声明和调用。
  • 数组:数组的声明、初始化和操作。
  • 字符串:字符串的声明、初始化和操作。

二、实战案例

以下是一些C语言编程的实战案例,帮助读者轻松学习:

1. 简单计算器

使用C语言编写一个简单的计算器,实现加、减、乘、除操作。

#include <stdio.h>

int main() {
    char operator;
    double firstNumber, secondNumber;

    printf("Enter an operator (+, -, *, /): ");
    scanf("%c", &operator);

    printf("Enter two operands: ");
    scanf("%lf %lf", &firstNumber, &secondNumber);

    switch (operator) {
        case '+':
            printf("%.1lf + %.1lf = %.1lf", firstNumber, secondNumber, firstNumber + secondNumber);
            break;
        case '-':
            printf("%.1lf - %.1lf = %.1lf", firstNumber, secondNumber, firstNumber - secondNumber);
            break;
        case '*':
            printf("%.1lf * %.1lf = %.1lf", firstNumber, secondNumber, firstNumber * secondNumber);
            break;
        case '/':
            if (secondNumber != 0.0)
                printf("%.1lf / %.1lf = %.1lf", firstNumber, secondNumber, firstNumber / secondNumber);
            else
                printf("Error! Division by zero.");
            break;
        default:
            printf("Error! Invalid operator.");
    }

    return 0;
}

2. 通讯录管理

使用C语言编写一个简单的通讯录管理系统,实现添加、删除、修改和查询联系人信息。

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

#define MAX_CONTACTS 100
#define NAME_LENGTH 50

typedef struct {
    char name[NAME_LENGTH];
    char phone[20];
} Contact;

Contact contacts[MAX_CONTACTS];
int contactCount = 0;

void addContact() {
    if (contactCount >= MAX_CONTACTS) {
        printf("Error! Contact list is full.\n");
        return;
    }

    printf("Enter name: ");
    scanf("%s", contacts[contactCount].name);

    printf("Enter phone number: ");
    scanf("%s", contacts[contactCount].phone);

    contactCount++;
}

void deleteContact() {
    char nameToDelete[NAME_LENGTH];

    printf("Enter name to delete: ");
    scanf("%s", nameToDelete);

    for (int i = 0; i < contactCount; i++) {
        if (strcmp(contacts[i].name, nameToDelete) == 0) {
            for (int j = i; j < contactCount - 1; j++) {
                contacts[j] = contacts[j + 1];
            }
            contactCount--;
            printf("Contact deleted successfully.\n");
            return;
        }
    }

    printf("Error! Contact not found.\n");
}

void displayContacts() {
    for (int i = 0; i < contactCount; i++) {
        printf("Name: %s, Phone: %s\n", contacts[i].name, contacts[i].phone);
    }
}

int main() {
    int choice;

    while (1) {
        printf("\n1. Add Contact\n");
        printf("2. Delete Contact\n");
        printf("3. Display Contacts\n");
        printf("4. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addContact();
                break;
            case 2:
                deleteContact();
                break;
            case 3:
                displayContacts();
                break;
            case 4:
                exit(0);
            default:
                printf("Error! Invalid choice.\n");
        }
    }

    return 0;
}

3. 万年历

使用C语言编写一个简单的万年历程序,根据输入的年份和月份显示该月的日历。

#include <stdio.h>

int daysInMonth(int month, int year) {
    switch (month) {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            return 31;
        case 4: case 6: case 9: case 11:
            return 30;
        case 2:
            if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
                return 29;
            else
                return 28;
        default:
            return 0;
    }
}

int main() {
    int year, month, day, dayOfWeek;

    printf("Enter year: ");
    scanf("%d", &year);

    printf("Enter month (1-12): ");
    scanf("%d", &month);

    dayOfWeek = (year + year / 4 - year / 100 + year / 400 + (13 * (month + 1)) / 5 + day) % 7;
    dayOfWeek = (dayOfWeek + 5) % 7; // Convert to 0=Sunday, 1=Monday, ..., 6=Saturday

    printf("\nSun Mon Tue Wed Thu Fri Sat\n");

    for (int i = 0; i < dayOfWeek; i++)
        printf("    ");

    for (int i = 1; i <= daysInMonth(month, year); i++) {
        printf("%3d ", i);
        if ((i + dayOfWeek) % 7 == 0)
            printf("\n");
    }

    printf("\n");

    return 0;
}

三、总结

通过以上实战案例,我们可以看到C语言编程的乐趣和实用性。这些案例可以帮助读者巩固C语言基础知识,提高编程技能,并为以后的学习和工作打下坚实的基础。希望读者在编程的道路上越走越远,享受编程带来的乐趣。