一、C语言基础

1.1 数据类型与变量

  • 知识点:整型、浮点型、字符型等数据类型,变量的声明与初始化。
  • 例题:编写一个C语言程序,声明一个整型变量age,并初始化为25。
#include <stdio.h>

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

1.2 运算符与表达式

  • 知识点:算术运算符、关系运算符、逻辑运算符等,表达式的优先级与结合性。
  • 例题:编写一个C语言程序,计算表达式2 + 3 * 4 / 2 - 1的值。
#include <stdio.h>

int main() {
    int result = 2 + 3 * 4 / 2 - 1;
    printf("结果:%d\n", result);
    return 0;
}

1.3 控制结构

  • 知识点:顺序结构、选择结构(if语句、switch语句)、循环结构(for循环、while循环、do-while循环)。
  • 例题:编写一个C语言程序,使用for循环打印1到10的整数。
#include <stdio.h>

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

二、函数与程序结构

2.1 函数定义与调用

  • 知识点:函数的声明、定义、调用,参数传递,函数的嵌套与递归。
  • 例题:编写一个C语言程序,定义一个函数sum,用于计算两个整数的和,并在主函数中调用该函数。
#include <stdio.h>

int sum(int a, int b) {
    return a + b;
}

int main() {
    int a = 10, b = 20;
    printf("和:%d\n", sum(a, b));
    return 0;
}

2.2 数组与字符串

  • 知识点:一维数组、二维数组、字符串的定义与操作,数组元素的初始化与访问。
  • 例题:编写一个C语言程序,定义一个一维整型数组arr,并初始化为{1, 2, 3, 4, 5},然后使用for循环打印数组元素。
#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int length = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < length; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

三、指针与内存管理

3.1 指针基础

  • 知识点:指针的定义与声明,指针的运算,指针与数组、字符串的关系。
  • 例题:编写一个C语言程序,定义一个整型变量num,并使用指针访问该变量的值。
#include <stdio.h>

int main() {
    int num = 10;
    int *ptr = &num;
    printf("num的值:%d\n", *ptr);
    return 0;
}

3.2 内存管理

  • 知识点:动态内存分配与释放,malloc、calloc、realloc函数的使用。
  • 例题:编写一个C语言程序,使用malloc函数动态分配一个整型数组,并初始化为{1, 2, 3, 4, 5},然后使用free函数释放内存。
#include <stdio.h>
#include <stdlib.h>

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

四、文件操作

4.1 文件概念

  • 知识点:文件的打开、关闭、读写操作,文件指针、文件流的定义。
  • 例题:编写一个C语言程序,使用fopen函数打开一个文本文件,并使用fgets函数读取文件内容。
#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "r");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), fp)) {
        printf("%s", buffer);
    }
    fclose(fp);
    return 0;
}

4.2 文件读写

  • 知识点:fread、fwrite函数的使用,文件指针的定位。
  • 例题:编写一个C语言程序,使用fread函数读取一个二进制文件,并使用fwrite函数将读取的数据写入另一个文件。
#include <stdio.h>

int main() {
    FILE *fp1 = fopen("example.bin", "rb");
    FILE *fp2 = fopen("example_copy.bin", "wb");
    if (fp1 == NULL || fp2 == NULL) {
        printf("文件打开失败\n");
        return 1;
    }
    char buffer[100];
    while (fread(buffer, sizeof(char), sizeof(buffer), fp1)) {
        fwrite(buffer, sizeof(char), sizeof(buffer), fp2);
    }
    fclose(fp1);
    fclose(fp2);
    return 0;
}

五、综合应用

5.1 排序算法

  • 知识点:冒泡排序、选择排序、插入排序等基本排序算法的实现。
  • 例题:编写一个C语言程序,使用冒泡排序算法对一组整数进行排序。
#include <stdio.h>

void bubbleSort(int arr[], int length) {
    for (int i = 0; i < length - 1; i++) {
        for (int j = 0; j < length - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int arr[] = {5, 2, 8, 3, 1};
    int length = sizeof(arr) / sizeof(arr[0]);
    bubbleSort(arr, length);
    for (int i = 0; i < length; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

5.2 链表操作

  • 知识点:链表的定义、创建、插入、删除等基本操作。
  • 例题:编写一个C语言程序,创建一个单向链表,并实现链表的插入和删除操作。
#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));
    if (newNode == NULL) {
        printf("内存分配失败\n");
        return NULL;
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

void insertNode(Node **head, int data) {
    Node *newNode = createNode(data);
    if (newNode == NULL) {
        return;
    }
    if (*head == NULL) {
        *head = newNode;
    } else {
        Node *current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}

void deleteNode(Node **head, int data) {
    if (*head == NULL) {
        return;
    }
    if ((*head)->data == data) {
        Node *temp = *head;
        *head = (*head)->next;
        free(temp);
        return;
    }
    Node *current = *head;
    while (current->next != NULL && current->next->data != data) {
        current = current->next;
    }
    if (current->next != NULL) {
        Node *temp = current->next;
        current->next = temp->next;
        free(temp);
    }
}

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

int main() {
    Node *head = NULL;
    insertNode(&head, 1);
    insertNode(&head, 2);
    insertNode(&head, 3);
    printList(head);
    deleteNode(&head, 2);
    printList(head);
    return 0;
}

通过以上题库的练习,相信你能够轻松应对C语言程序设计专升本的考试。祝你考试顺利!