引言
C语言作为一门历史悠久的编程语言,其基础知识和技能对于深入学习计算机科学至关重要。本篇将详细介绍C语言编程挑战的第三部分实战练习题,旨在帮助读者深入理解C语言的核心概念,并提高编程技能。
第一题:计算两个整数的最大公约数(GCD)
题目描述:编写一个C语言程序,输入两个正整数,计算并输出它们的最大公约数。
解题思路:使用欧几里得算法来计算最大公约数。
#include <stdio.h>
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int num1, num2, result;
printf("请输入两个正整数:");
scanf("%d %d", &num1, &num2);
result = gcd(num1, num2);
printf("最大公约数为:%d\n", result);
return 0;
}
第二题:实现冒泡排序算法
题目描述:编写一个C语言程序,使用冒泡排序算法对一组整数进行排序。
解题思路:冒泡排序的基本思想是重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
#include <stdio.h>
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 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[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("排序后的数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
第三题:模拟银行账户管理系统
题目描述:编写一个C语言程序,模拟一个简单的银行账户管理系统。程序应允许用户创建账户、存款、取款和查看余额。
解题思路:定义一个账户结构体,包含账户信息和方法。
#include <stdio.h>
#define MAX_ACCOUNTS 100
typedef struct {
int accountNumber;
float balance;
} Account;
void createAccount(Account accounts[], int *count) {
if (*count >= MAX_ACCOUNTS) {
printf("账户数量已达上限。\n");
return;
}
printf("输入账户号:");
scanf("%d", &accounts[*count].accountNumber);
printf("输入初始余额:");
scanf("%f", &accounts[*count].balance);
(*count)++;
}
void deposit(Account accounts[], int count, int accountNumber, float amount) {
for (int i = 0; i < count; i++) {
if (accounts[i].accountNumber == accountNumber) {
accounts[i].balance += amount;
printf("存款成功,新余额:%f\n", accounts[i].balance);
return;
}
}
printf("账户不存在。\n");
}
void withdraw(Account accounts[], int count, int accountNumber, float amount) {
for (int i = 0; i < count; i++) {
if (accounts[i].accountNumber == accountNumber) {
if (accounts[i].balance >= amount) {
accounts[i].balance -= amount;
printf("取款成功,新余额:%f\n", accounts[i].balance);
return;
} else {
printf("余额不足。\n");
return;
}
}
}
printf("账户不存在。\n");
}
void checkBalance(Account accounts[], int count, int accountNumber) {
for (int i = 0; i < count; i++) {
if (accounts[i].accountNumber == accountNumber) {
printf("账户余额:%f\n", accounts[i].balance);
return;
}
}
printf("账户不存在。\n");
}
int main() {
Account accounts[MAX_ACCOUNTS];
int count = 0;
int choice, accountNumber;
float amount;
while (1) {
printf("1. 创建账户\n");
printf("2. 存款\n");
printf("3. 取款\n");
printf("4. 查看余额\n");
printf("5. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
createAccount(accounts, &count);
break;
case 2:
printf("输入账户号:");
scanf("%d", &accountNumber);
printf("输入存款金额:");
scanf("%f", &amount);
deposit(accounts, count, accountNumber, amount);
break;
case 3:
printf("输入账户号:");
scanf("%d", &accountNumber);
printf("输入取款金额:");
scanf("%f", &amount);
withdraw(accounts, count, accountNumber, amount);
break;
case 4:
printf("输入账户号:");
scanf("%d", &accountNumber);
checkBalance(accounts, count, accountNumber);
break;
case 5:
return 0;
default:
printf("无效选项。\n");
}
}
return 0;
}
结论
以上是C语言编程挑战第三部分的实战练习题详解。通过这些练习题,读者可以加深对C语言基础知识的理解,并提高编程实践能力。不断练习和挑战自己,将有助于在编程的道路上越走越远。
