引言
C语言作为一门历史悠久且应用广泛的编程语言,在兰州大学的计算机科学与技术等相关专业中是一门重要的基础课程。通过完成C语言程序设计作业,学生不仅能够巩固课堂所学知识,还能提升实际编程能力。本文将针对兰州大学C语言程序设计作业,提供一系列实战挑战,帮助学生掌握编程技能。
实战挑战一:基础算法实现
挑战描述
实现以下基础算法,并分析其时间复杂度和空间复杂度:
- 冒泡排序
- 快速排序
- 插入排序
- 选择排序
挑战步骤
冒泡排序
#include <stdio.h>
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("Sorted array: \n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
快速排序
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return (i + 1);
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
实战挑战二:文件操作
挑战描述
编写一个C语言程序,实现以下文件操作:
- 创建一个名为
data.txt的文件。 - 向文件中写入10个整数。
- 读取文件内容,并输出到控制台。
挑战步骤
创建和写入文件
#include <stdio.h>
int main() {
FILE *fp;
int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
fp = fopen("data.txt", "w");
if (fp == NULL) {
printf("Error opening file!\n");
return -1;
}
for (int i = 0; i < 10; i++) {
fprintf(fp, "%d\n", numbers[i]);
}
fclose(fp);
return 0;
}
读取文件
#include <stdio.h>
int main() {
FILE *fp;
int number;
fp = fopen("data.txt", "r");
if (fp == NULL) {
printf("Error opening file!\n");
return -1;
}
while (fscanf(fp, "%d", &number) != EOF) {
printf("%d\n", number);
}
fclose(fp);
return 0;
}
实战挑战三:动态内存分配
挑战描述
编写一个C语言程序,实现以下动态内存分配任务:
- 动态分配一个整数数组,长度为用户输入。
- 用户输入数组元素,并存储在动态分配的数组中。
- 输出数组元素。
- 释放动态分配的内存。
挑战步骤
动态分配内存
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n, i;
printf("Enter number of elements: ");
scanf("%d", &n);
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("Memory not allocated.\n");
exit(0);
}
printf("Enter %d elements:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("Elements of array are: \n");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr);
return 0;
}
总结
通过以上实战挑战,兰州大学的学生可以全面提升自己的C语言编程能力。在实际编程过程中,不断练习和总结是提高编程技能的关键。希望这些挑战能够帮助同学们在C语言的学习道路上取得更好的成绩。
