1. 题目一:冒泡排序算法实现
问题描述:编写一个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;
}
2. 题目二:字符串反转
问题描述:编写一个C语言程序,实现一个函数,该函数接受一个字符串作为参数,并返回其反转后的字符串。
解答:
#include <stdio.h>
#include <string.h>
char* reverseString(char* str) {
int len = strlen(str);
char* reversed = (char*)malloc(len + 1);
for (int i = 0; i < len; i++) {
reversed[i] = str[len - i - 1];
}
reversed[len] = '\0';
return reversed;
}
int main() {
char str[] = "Hello, World!";
printf("Original string: %s\n", str);
char* reversed = reverseString(str);
printf("Reversed string: %s\n", reversed);
free(reversed);
return 0;
}
3. 题目三:查找最大和最小元素
问题描述:编写一个C语言程序,实现一个函数,该函数接受一个整数数组和一个整数表示数组的大小,然后返回数组中的最大和最小元素。
解答:
#include <stdio.h>
void findMinMax(int arr[], int n, int *min, int *max) {
*min = arr[0];
*max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] < *min) {
*min = arr[i];
}
if (arr[i] > *max) {
*max = arr[i];
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
int min, max;
findMinMax(arr, n, &min, &max);
printf("Minimum element: %d\n", min);
printf("Maximum element: %d\n", max);
return 0;
}
4. 题目四:递归计算阶乘
问题描述:编写一个C语言程序,使用递归函数计算一个非负整数的阶乘。
解答:
#include <stdio.h>
int factorial(int n) {
if (n <= 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int number = 5;
printf("Factorial of %d is %d\n", number, factorial(number));
return 0;
}
5. 题目五:判断一个数是否为素数
问题描述:编写一个C语言程序,实现一个函数,该函数判断一个整数是否为素数。
解答:
#include <stdio.h>
#include <stdbool.h>
bool isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int num = 29;
if (isPrime(num)) {
printf("%d is a prime number\n", num);
} else {
printf("%d is not a prime number\n", num);
}
return 0;
}
6. 题目六:二分查找算法实现
问题描述:编写一个C语言程序,实现二分查找算法在一个已排序的整数数组中查找一个元素。
解答:
#include <stdio.h>
int binarySearch(int arr[], int l, int r, int x) {
while (l <= r) {
int m = l + (r - l) / 2;
if (arr[m] == x) {
return m;
}
if (arr[m] < x) {
l = m + 1;
} else {
r = m - 1;
}
}
return -1;
}
int main() {
int arr[] = {2, 3, 4, 10, 40};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 10;
int result = binarySearch(arr, 0, n - 1, x);
if (result == -1) {
printf("Element is not present in array");
} else {
printf("Element is present at index %d", result);
}
return 0;
}
7. 题目七:计算两个矩阵的乘积
问题描述:编写一个C语言程序,实现一个函数,该函数计算两个矩阵的乘积。
解答:
#include <stdio.h>
void multiplyMatrices(int a[][3], int b[][3], int result[][3], int aRows, int aCols, int bCols) {
for (int i = 0; i < aRows; i++) {
for (int j = 0; j < bCols; j++) {
result[i][j] = 0;
for (int k = 0; k < aCols; k++) {
result[i][j] += a[i][k] * b[k][j];
}
}
}
}
int main() {
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int b[3][3] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
int result[3][3];
multiplyMatrices(a, b, result, 3, 3, 3);
printf("Resultant Matrix:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
8. 题目八:实现链表反转
问题描述:编写一个C语言程序,实现一个链表反转的功能。
解答:
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
void reverseList(struct Node** head_ref) {
struct Node* prev = NULL;
struct Node* current = *head_ref;
struct Node* next = NULL;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
*head_ref = prev;
}
void printList(struct Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
struct Node* second = (struct Node*)malloc(sizeof(struct Node));
struct Node* third = (struct Node*)malloc(sizeof(struct Node));
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
printf("Original list: ");
printList(head);
reverseList(&head);
printf("Reversed list: ");
printList(head);
return 0;
}
9. 题目九:实现递归查找数组中的元素
问题描述:编写一个C语言程序,实现一个递归函数,该函数在一个整数数组中查找一个元素的位置。
解答:
#include <stdio.h>
int recursiveSearch(int arr[], int l, int r, int x) {
if (r >= l) {
int m = l + (r - l) / 2;
if (arr[m] == x) {
return m;
}
if (arr[m] > x) {
return recursiveSearch(arr, l, m - 1, x);
}
return recursiveSearch(arr, m + 1, r, x);
}
return -1;
}
int main() {
int arr[] = {2, 3, 4, 10, 40};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 10;
int result = recursiveSearch(arr, 0, n - 1, x);
if (result == -1) {
printf("Element is not present in array");
} else {
printf("Element is present at index %d", result);
}
return 0;
}
