1. 简单的“Hello, World!”程序

  • 简介:这是每一个编程入门者必写的第一个程序。
  • 代码
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

2. 计算两个数的和

  • 简介:通过接收用户输入的两个数,并计算它们的和,学习基础的输入输出操作。
  • 代码
#include <stdio.h>

int main() {
    int a, b, sum;
    printf("Enter two numbers: ");
    scanf("%d %d", &a, &b);
    sum = a + b;
    printf("The sum of %d and %d is %d.\n", a, b, sum);
    return 0;
}

3. 程序判断质数

  • 简介:通过编写程序判断一个数是否为质数,了解质数的定义以及如何使用循环。
  • 代码
#include <stdio.h>
#include <stdbool.h>

int main() {
    int num;
    bool isPrime = true;

    printf("Enter a number: ");
    scanf("%d", &num);

    for (int i = 2; i < num; i++) {
        if (num % i == 0) {
            isPrime = false;
            break;
        }
    }

    if (isPrime) {
        printf("%d is a prime number.\n", num);
    } else {
        printf("%d is not a prime number.\n", num);
    }

    return 0;
}

4. 判断闰年

  • 简介:编写一个程序来判断给定的年份是否是闰年,巩固对条件语句的使用。
  • 代码
#include <stdio.h>

int main() {
    int year;
    printf("Enter a year: ");
    scanf("%d", &year);

    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        printf("%d is a leap year.\n", year);
    } else {
        printf("%d is not a leap year.\n", year);
    }

    return 0;
}

5. 使用函数计算两个数的最大公约数

  • 简介:通过定义一个函数来计算两个数的最大公约数,学习如何创建和使用函数。
  • 代码
#include <stdio.h>

int gcd(int a, int b) {
    if (b == 0) {
        return a;
    }
    return gcd(b, a % b);
}

int main() {
    int x, y;
    printf("Enter two numbers: ");
    scanf("%d %d", &x, &y);
    printf("The GCD of %d and %d is %d.\n", x, y, gcd(x, y));
    return 0;
}

6. 使用指针交换两个变量的值

  • 简介:学习如何使用指针交换两个变量的值,深入理解指针的概念。
  • 代码
#include <stdio.h>

void swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main() {
    int a = 5, b = 10;
    printf("Before swap: a = %d, b = %d\n", a, b);
    swap(&a, &b);
    printf("After swap: a = %d, b = %d\n", a, b);
    return 0;
}

7. 程序输出斐波那契数列的前N项

  • 简介:使用循环输出斐波那契数列的前N项,巩固对循环语句的掌握。
  • 代码
#include <stdio.h>

int main() {
    int n, i, first = 0, second = 1, next;
    printf("Enter the number of terms: ");
    scanf("%d", &n);

    printf("Fibonacci Series: ");
    for (i = 0; i < n; i++) {
        if (i <= 1) {
            next = i;
        } else {
            next = first + second;
            first = second;
            second = next;
        }
        printf("%d ", next);
    }

    return 0;
}

8. 使用递归计算阶乘

  • 简介:通过递归的方式计算一个数的阶乘,深入学习递归的概念和实现方式。
  • 代码
#include <stdio.h>

int factorial(int n) {
    if (n == 0)
        return 1;
    else
        return n * factorial(n - 1);
}

int main() {
    int n;
    printf("Enter a positive integer: ");
    scanf("%d", &n);

    printf("Factorial of %d = %d\n", n, factorial(n));
    return 0;
}

9. 检查一个字符串是否是回文

  • 简介:通过编写程序检查一个字符串是否是回文,学习字符串处理和反转操作。
  • 代码
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool isPalindrome(char str[]) {
    int length = strlen(str);
    for (int i = 0; i < length / 2; i++) {
        if (str[i] != str[length - 1 - i])
            return false;
    }
    return true;
}

int main() {
    char str[100];
    printf("Enter a string: ");
    scanf("%s", str);

    if (isPalindrome(str))
        printf("%s is a palindrome.\n", str);
    else
        printf("%s is not a palindrome.\n", str);

    return 0;
}

10. 计算数组中的平均值

  • 简介:编写一个程序来计算数组中所有元素的平均值,巩固数组的使用和循环。
  • 代码
#include <stdio.h>

int main() {
    int n, sum = 0, avg;
    printf("Enter the number of elements: ");
    scanf("%d", &n);

    int arr[n];

    printf("Enter %d integers:\n", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    for (int i = 0; i < n; i++) {
        sum += arr[i];
    }

    avg = sum / n;
    printf("The average is %d\n", avg);

    return 0;
}

11. 使用指针交换两个数组的元素

  • 简介:通过使用指针来交换两个数组的元素,学习指针在数组操作中的应用。
  • 代码
#include <stdio.h>

void swapArrays(int *arr1, int *arr2, int n) {
    int temp[n];
    for (int i = 0; i < n; i++) {
        temp[i] = arr1[i];
        arr1[i] = arr2[i];
        arr2[i] = temp[i];
    }
}

int main() {
    int arr1[] = {1, 2, 3, 4, 5};
    int arr2[] = {10, 20, 30, 40, 50};
    int n = sizeof(arr1) / sizeof(arr1[0]);

    printf("Array 1 before swap: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr1[i]);
    }
    printf("\nArray 2 before swap: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr2[i]);
    }

    swapArrays(arr1, arr2, n);

    printf("\nArray 1 after swap: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr1[i]);
    }
    printf("\nArray 2 after swap: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr2[i]);
    }

    return 0;
}

12. 计算一个矩阵的转置

  • 简介:通过编写程序计算矩阵的转置,巩固矩阵操作的知识。
  • 代码
#include <stdio.h>

void transpose(int row, int col, int mat[row][col]) {
    int transposed[COL][ROW];

    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            transposed[j][i] = mat[i][j];
        }
    }

    printf("Transposed matrix:\n");
    for (int i = 0; i < col; i++) {
        for (int j = 0; j < row; j++) {
            printf("%d ", transposed[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int ROW = 2;
    int COL = 3;
    int mat[ROW][COL] = {
        {1, 2, 3},
        {4, 5, 6}
    };

    transpose(ROW, COL, mat);

    return 0;
}

13. 程序模拟蛇梯游戏

  • 简介:编写一个简单的蛇梯游戏,使用数组模拟游戏的进程,了解游戏编程的基本原理。
  • 代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM_SQUARES 10

void printBoard(int board[]) {
    printf("Snake Ladder Board:\n");
    for (int i = 0; i < NUM_SQUARES; i++) {
        if (board[i] != 0)
            printf("Square %d: %d\n", i + 1, board[i]);
        else
            printf("Square %d: \n", i + 1);
    }
}

void rollDice(int board[]) {
    int die1 = rand() % 6 + 1;
    int die2 = rand() % 6 + 1;
    int total = die1 + die2;

    printf("Dice rolled: %d + %d = %d\n", die1, die2, total);
    int square = board[0] + total;

    if (square <= NUM_SQUARES) {
        board[0] = square;
        printBoard(board);
    } else {
        printf("You have landed on the last square. Game Over!\n");
    }
}

int main() {
    srand(time(NULL));

    int board[NUM_SQUARES] = {0};

    int playAgain;
    do {
        printBoard(board);
        rollDice(board);
        printf("Play again? (0 for No, 1 for Yes): ");
        scanf("%d", &playAgain);
    } while (playAgain == 1);

    return 0;
}

14. 计算一个字符串中单词的数量

  • 简介:通过编写程序计算一个字符串中单词的数量,了解字符串处理技巧。
  • 代码
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>

int countWords(char str[]) {
    int count = 0;
    bool wordStarted = false;

    for (int i = 0; str[i] != '\0'; i++) {
        if (isalpha(str[i])) {
            if (!wordStarted) {
                wordStarted = true;
                count++;
            }
        } else {
            wordStarted = false;
        }
    }

    return count;
}

int main() {
    char str[100];
    printf("Enter a string: ");
    scanf("%[^\n]%*c", str);

    int wordCount = countWords(str);
    printf("The string has %d words.\n", wordCount);
    return 0;
}

15. 编写一个程序来模拟一个简单的银行账户系统

  • 简介:创建一个简单的银行账户系统,学习如何处理文件和结构化数据。
  • 代码
#include <stdio.h>

struct Account {
    int accountNumber;
    char name[50];
    double balance;
};

void createAccount(struct Account accounts[], int *size) {
    accounts[*size].accountNumber = *size + 1;
    printf("Enter account holder's name: ");
    scanf("%s", accounts[*size].name);
    accounts[*size].balance = 0.0;
    (*size)++;
}

void deposit(struct Account accounts[], int size) {
    int accountNumber;
    double amount;
    printf("Enter account number to deposit into: ");
    scanf("%d", &accountNumber);

    for (int i = 0; i < size; i++) {
        if (accounts[i].accountNumber == accountNumber) {
            printf("Enter amount to deposit: ");
            scanf("%lf", &amount);
            accounts[i].balance += amount;
            printf("Deposit successful. New balance is $%.2lf\n", accounts[i].balance);
            return;
        }
    }
    printf("Account not found.\n");
}

void withdraw(struct Account accounts[], int size) {
    int accountNumber;
    double amount;
    printf("Enter account number to withdraw from: ");
    scanf("%d", &accountNumber);

    for (int i = 0; i < size; i++) {
        if (accounts[i].accountNumber == accountNumber) {
            printf("Enter amount to withdraw: ");
            scanf("%lf", &amount);

            if (amount <= accounts[i].balance) {
                accounts[i].balance -= amount;
                printf("Withdrawal successful. New balance is $%.2lf\n", accounts[i].balance);
                return;
            } else {
                printf("Insufficient balance.\n");
                return;
            }
        }
    }
    printf("Account not found.\n");
}

int main() {
    int size = 0;
    struct Account accounts[10];

    createAccount(accounts, &size);
    deposit(accounts, size);
    withdraw(accounts, size);

    return 0;
}

16. 实现一个简单的密码管理系统

  • 简介:编写一个密码管理系统,使用哈希表存储用户名和密码,了解数据结构的应用。
  • 代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_USERS 100

typedef struct User {
    char username[50];
    char password[50];
    struct User *next;
} User;

User *head = NULL;

void addUser() {
    User *newUser = (User *)malloc(sizeof(User));
    if (newUser == NULL) {
        printf("Error allocating memory.\n");
        return;
    }

    printf("Enter username: ");
    scanf("%s", newUser->username);

    printf("Enter password: ");
    scanf("%s", newUser->password);

    newUser->next = head;
    head = newUser;
}

void deleteUser() {
    char username[50];
    printf("Enter username to delete: ");
    scanf("%s", username);

    User *temp = head;
    User *prev = NULL;

    while (temp != NULL && strcmp(temp->username, username) != 0) {
        prev = temp;
        temp = temp->next;
    }

    if (temp == NULL) {
        printf("User not found.\n");
        return;
    }

    if (prev == NULL) {
        head = temp->next;
    } else {
        prev->next = temp->next;
    }

    free(temp);
    printf("User deleted.\n");
}

void printUsers() {
    User *temp = head;
    printf("Users:\n");
    while (temp != NULL) {
        printf("Username: %s\n", temp->username);
        temp = temp->next;
    }
}

int main() {
    int choice;
    do {
        printf("1. Add User\n");
        printf("2. Delete User\n");
        printf("3. Print Users\n");
        printf("4. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addUser();
                break;
            case 2:
                deleteUser();
                break;
            case 3:
                printUsers();
                break;
            case 4:
                printf("Exiting program.\n");
                break;
            default:
                printf("Invalid choice. Please try again.\n");
        }
    } while (choice != 4);

    return 0;
}

17. 实现一个简单的学生信息管理系统

  • 简介:编写一个学生信息管理系统,学习如何使用结构体数组处理数据。
  • 代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100

typedef struct Student {
    char name[50];
    int age;
    float gpa;
} Student;

Student students[MAX_STUDENTS];
int studentCount = 0;

void addStudent() {
    if (studentCount >= MAX_STUDENTS) {
        printf("Maximum number of students reached.\n");
        return;
    }

    Student newStudent;
    printf("Enter student name: ");
    scanf("%s", newStudent.name);

    printf("Enter student age: ");
    scanf("%d", &newStudent.age);

    printf("Enter student GPA: ");
    scanf("%f", &newStudent.gpa);

    students[studentCount++] = newStudent;
    printf("Student added successfully.\n");
}

void listStudents() {
    printf("Students:\n");
    for (int i = 0; i < studentCount; i++) {
        printf("Name: %s, Age: %d, GPA: %.2f\n", students[i].name, students[i].age, students[i].gpa);
    }
}

int main() {
    int choice;
    do {
        printf("1. Add Student\n");
        printf("2. List Students\n");
        printf("3. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addStudent();
                break;
            case 2:
                listStudents();
                break;
            case 3:
                printf("Exiting program.\n");
                break;
            default:
                printf("Invalid choice. Please try again.\n");
        }
    } while (choice != 3);

    return 0;
}

18. 编写一个程序,模拟在图书馆借阅和归还图书的过程

  • 简介:创建一个简单的图书馆系统,了解如何使用链表和结构体数组管理图书和借阅信息。