C语言实践作业:游戏与字符处理系统
ps:都是我编的,主要可以熟悉各种循环,但是拿去做考试题也不是不行,各位老师要是拿去出题的话,能不能告诉我下,让我有点成就感啊!!!!(要是出题的话我就把源码删掉!!!不用感谢我!)
题目描述
请实现一个具有多功能的C语言程序,包含以下功能模块:
- 石头剪刀布游戏
- 成绩计算系统
- 字母转换器
- 高级字母转换器
具体要求
1. 主菜单设计
- 创建一个循环菜单系统,允许用户选择不同的功能
- 提供清晰的菜单选项和退出机制
- 对无效输入进行适当的错误处理
2. 石头剪刀布游戏
实现一个具有以下特性的游戏:
- 游戏最多进行5轮
- 跟踪并显示获胜次数和胜率
- 实现以下功能:
- 用户可以选择石头(0)、剪刀(1)、布(2)
- 电脑随机生成选择
- 正确判断胜负
- 允许提前退出(输入9)
- 显示最终游戏统计信息
3. 成绩计算系统
开发一个成绩处理程序:
- 接收5门课程的成绩输入
- 要求:
- 验证输入成绩是否在0-100范围内
- 计算总分
- 计算平均分
- 清晰展示计算结果
4. 基础字母转换器
创建一个字符转换程序:
- 功能要求:
- 接收单个字符输入
- 如果是小写字母,向后移动4位并转换为大写
- 如果是大写字母,向后移动4位并转换为小写
- 非字母字符保持不变
- 实现字母循环(例如:‘z’后接’a’)
5. 高级字母转换器
在基础转换器的基础上添加动画效果:
-
增加以下特性:
- 显示用户输入的字符
- 等待1秒
- 使用退格符(\b)清除显示的字符
- 在相同位置显示转换后的结果
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <windows.h>void guessWinner(void);
void calculateGrades(void);
void convertLetter(void);
void advancedConvertLetter(void);int main() {while(1){int choice;printf("1.猜拳游戏\n");printf("2.成绩计算\n"); printf("3.基础字母转换\n");printf("4.进阶字母转换\n"); printf("0.退出\n");printf("请输入您的选择:\n");scanf("%d", &choice);switch(choice){case 1:guessWinner();break;case 2:calculateGrades();break;case 3:convertLetter();break;case 4:advancedConvertLetter();break;case 0:exit(0);default:printf("输入有误!请重新输入!\n"); }}return 0;
}void guessWinner()
{int player;int computer;int rounds = 0; // 当前轮数int wins = 0; // 获胜次数float winRate; // 胜率printf("\n游戏说明:\n");printf("在游戏过程中,输入9可以随时退出游戏\n");printf("0 - 石头\n1 - 剪刀\n2 - 布\n9 - 退出游戏\n\n");while(rounds < 5) // 只玩5轮{printf("第 %d 轮游戏(共5轮):\n", rounds + 1);printf("0 - 石头\n1 - 剪刀\n2 - 布\n9 - 退出\n");printf("请输入你的选择: \n");scanf("%d", &player);if(player == 9) {printf("\n您选择退出游戏。\n");break; // 跳出游戏循环}if (player < 0 || player > 2) {printf("无效的选择!\n");continue; // 无效输入不计入轮数} computer = rand() % 3;printf("你选了: \n");if(player == 0) printf("石头\n");if(player == 1) printf("剪刀\n");if(player == 2) printf("布\n");printf("计算机选了: \n");if(computer == 0) printf("石头\n");if(computer == 1) printf("剪刀\n");if(computer == 2) printf("布\n");if(player == computer){printf("平局!\n");}else if((player == 0 && computer == 1) || (player == 1 && computer == 2) || (player == 2 && computer == 0)){printf("恭喜!你赢了!\n");wins++; // 记录获胜次数}else{printf("对不起!你输了!\n");}rounds++; // 增加轮数if(rounds < 5){printf("\n按 Enter 键继续...");getchar(); getchar();system("cls");}} // 计算并显示最终胜率if(rounds >= 1){winRate = (float)wins / rounds * 100;printf("\n=== 游戏结束 ===\n");printf("总共进行了5轮游戏\n");printf("你赢了 %d 轮\n", wins);printf("最终胜率: %.1f%%\n", winRate);printf("\n按 Enter 键返回主菜单...");getchar(); getchar();system("cls");}else{printf("游戏结束!因为未完成任何一局游戏,无法统计胜率。\n"); // 更清晰的提示信息printf("\n按 Enter 键返回主菜单...");getchar(); getchar();system("cls");}}void calculateGrades()
{int i;int scores[5]; // 存储五门课程成绩int score;int total = 0; // 总分float average; // 平均分printf("\n=== 成绩计算 ===\n");printf("请输入五门课程的成绩(整数):\n");for(i = 0; i < 5;i++){do {printf("请输入第 %d 科分数: ", i + 1);scanf("%d", &score);if(score >= 0 && score <= 100) {scores[i] = score;break; // 如果分数有效,跳出do-while循环} else {printf("成绩必须在0-100之间,请重新输入第 %d 门课程的成绩: ", i + 1);}} while(1);total += scores[i];}average = (float)total / 5;printf("\n=== 计算结果 ===\n");printf("总分为:%d",total);printf("平均分为:%lf",average);printf("\n按 Enter 键返回主菜单...");getchar();getchar();system("cls");
}void convertLetter(void)
{char input, result;printf("\n=== 字母转换 ===\n");printf("请输入一个字符: ");getchar(); // 清除缓冲区scanf("%c", &input);if (islower(input)) { // 如果是小写字母result = ((input - 'a' + 4) % 26) + 'A'; // 循环后移4位并转大写printf("转换结果: %c\n", result);}else if (isupper(input)) { // 如果是大写字母result = ((input - 'A' + 4) % 26) + 'a'; // 循环后移4位并转小写printf("转换结果: %c\n", result);}else { // 其他字符不转换printf("输入的不是字母,保持不变: %c\n", input);}printf("\n按 Enter 键返回主菜单...");getchar();getchar();system("cls");
}void advancedConvertLetter()
{char input, result;printf("\n=== 进阶字母转换 ===\n");printf("请输入一个字符: ");getchar(); // 清除缓冲区scanf("%c", &input);// 在输入位置显示输入的字符printf("%c", input);// 等待1秒Sleep(1000);// 回到字符位置printf("\b");// 清除之前输入的字符(用空格覆盖)printf(" ");// 再次回到字符位置printf("\b");// 计算结果if (islower(input)) {result = ((input - 'a' + 4) % 26) + 'A';}else if (isupper(input)) {result = ((input - 'A' + 4) % 26) + 'a';}else {result = input;}// 在相同位置显示结果printf("%c", result);printf("\n\n按 Enter 键返回主菜单...");getchar();getchar();system("cls");
}