当前位置: 首页 > news >正文

C语言的综合案例

C语言综合案例

在本章中,我们将通过几个综合案例,应用前面章节中学习到的C语言知识,深入理解和掌握C语言的实际应用。这些案例涵盖了不同的难点和应用场景,旨在帮助你巩固所学知识,并提升解决实际问题的能力。每个案例都包含详细的代码示例、完整的注释以及详细的解释,确保你能够全面理解每个程序的工作原理。


1 计算器程序

本案例将实现一个功能齐全的命令行计算器,支持基本的算术运算(加、减、乘、除)以及更复杂的运算,如取余和幂运算。计算器将具备用户友好的界面,能够连续进行多次计算,直到用户选择退出。

程序需求
  1. 基本功能:

    • 加法 (+)
    • 减法 (-)
    • 乘法 (*)
    • 除法 (/)
    • 取余 (%)
    • 幂运算 (^)
  2. 用户界面:

    • 显示可用的操作符
    • 提示用户输入操作符和操作数
    • 显示计算结果
    • 提供退出选项
  3. 错误处理:

    • 处理除以零错误
    • 处理无效的操作符输入
    • 处理输入格式错误
程序代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#ifdef _WIN32#include <io.h>      // 包含 _setmode 和 _fileno#include <fcntl.h>   // 包含 _O_U8TEXT
#endif// 函数声明
double add(double a, double b);
double subtract(double a, double b);
double multiply(double a, double b);
double divide(double a, double b);
int modulo(int a, int b);
double power_func(double a, double b);
void displayMenu();int main() {// 在Windows上设置控制台为UTF-8编码#ifdef _WIN32// 将标准输出设置为UTF-8模式if (_setmode(_fileno(stdout), _O_U8TEXT) == -1) {perror("设置标准输出为UTF-8失败");return 1;}#endif// 设置区域,支持宽字符setlocale(LC_ALL, "");char operator;double num1, num2, result;int int_num1, int_num2, mod_result;int choice = 1;// 使用宽字符输出中文标题wprintf(L"===== 简易计算器 =====\n");while(choice) {displayMenu();wprintf(L"请输入操作符: ");scanf(" %c", &operator); // 注意在%c前加空格,跳过前面的换行符// 判断操作符并执行相应的操作switch(operator) {case '+':wprintf(L"请输入两个数(空格分隔): ");if(scanf("%lf %lf", &num1, &num2) != 2) {wprintf(L"输入格式错误,请输入两个数。\n");// 清空输入缓冲区while(getchar() != '\n');break;}result = add(num1, num2);wprintf(L"结果: %.2lf + %.2lf = %.2lf\n\n", num1, num2, result);break;case '-':wprintf(L"请输入两个数(空格分隔): ");if(scanf("%lf %lf", &num1, &num2) != 2) {wprintf(L"输入格式错误,请输入两个数。\n");while(getchar() != '\n');break;}result = subtract(num1, num2);wprintf(L"结果: %.2lf - %.2lf = %.2lf\n\n", num1, num2, result);break;case '*':wprintf(L"请输入两个数(空格分隔): ");if(scanf("%lf %lf", &num1, &num2) != 2) {wprintf(L"输入格式错误,请输入两个数。\n");while(getchar() != '\n');break;}result = multiply(num1, num2);wprintf(L"结果: %.2lf * %.2lf = %.2lf\n\n", num1, num2, result);break;case '/':wprintf(L"请输入两个数(空格分隔): ");if(scanf("%lf %lf", &num1, &num2) != 2) {wprintf(L"输入格式错误,请输入两个数。\n");while(getchar() != '\n');break;}if(num2 == 0) {wprintf(L"错误: 除数不能为零。\n\n");break;}result = divide(num1, num2);wprintf(L"结果: %.2lf / %.2lf = %.2lf\n\n", num1, num2, result);break;case '%':wprintf(L"请输入两个整数(空格分隔): ");if(scanf("%d %d", &int_num1, &int_num2) != 2) {wprintf(L"输入格式错误,请输入两个整数。\n");while(getchar() != '\n');break;}if(int_num2 == 0) {wprintf(L"错误: 除数不能为零。\n\n");break;}mod_result = modulo(int_num1, int_num2);wprintf(L"结果: %d %% %d = %d\n\n", int_num1, int_num2, mod_result);break;case '^':wprintf(L"请输入底数和指数(空格分隔): ");if(scanf("%lf %lf", &num1, &num2) != 2) {wprintf(L"输入格式错误,请输入两个数。\n");while(getchar() != '\n');break;}result = power_func(num1, num2);wprintf(L"结果: %.2lf ^ %.2lf = %.2lf\n\n", num1, num2, result);break;case 'q':case 'Q':wprintf(L"退出计算器。\n");choice = 0;break;default:wprintf(L"无效的操作符,请重新输入。\n\n");}}// 使用宽字符输出中文关闭信息wprintf(L"===== 计算器已关闭 =====\n");return 0;
}// 加法函数
double add(double a, double b) {return a + b;
}// 减法函数
double subtract(double a, double b) {return a - b;
}// 乘法函数
double multiply(double a, double b) {return a * b;
}// 除法函数
double divide(double a, double b) {return a / b;
}// 取余函数
int modulo(int a, int b) {return a % b;
}// 幂运算函数
double power_func(double a, double b) {return pow(a, b);
}// 显示操作菜单
void displayMenu() {wprintf(L"请选择操作:\n");wprintf(L"  + : 加法\n");wprintf(L"  - : 减法\n");wprintf(L"  * : 乘法\n");wprintf(L"  / : 除法\n");wprintf(L"  %% : 取余\n");wprintf(L"  ^ : 幂运算\n");wprintf(L"  Q : 退出\n");
}
程序说明
  1. 函数定义
    • 加法、减法、乘法、除法、取余、幂运算:分别定义了对应的函数,简化主程序中的操作。
    • displayMenu:用于显示操作菜单,提示用户选择操作。
  2. 主函数
    • 使用一个while循环,持续接受用户输入,直到用户选择退出(输入Qq)。
    • 通过switch语句,根据用户输入的操作符执行相应的计算。
    • 对每种操作,首先提示用户输入操作数,并进行输入格式和合法性检查。
    • 特别注意处理除以零和数组越界等错误,确保程序的健壮性。
    • 每次操作后,输出计算结果,并提供下一步操作的机会。
  3. 错误处理
    • 使用perror函数输出文件操作错误(在本例中未涉及文件操作,但保留以备扩展)。
    • 检查用户输入是否符合预期格式,避免因输入错误导致程序异常。
  4. 用户体验
    • 提供清晰的操作菜单,帮助用户理解可用的操作符。
    • 支持连续计算,用户可以在一次运行中进行多次计算,直到选择退出。
示例运行
===== 简易计算器 =====
请选择操作:+ : 加法- : 减法* : 乘法/ : 除法% : 取余^ : 幂运算Q : 退出
请输入操作符: +请输入两个数(空格分隔): 10 20
结果: 10.00 + 20.00 = 30.00请选择操作:+ : 加法- : 减法* : 乘法/ : 除法% : 取余^ : 幂运算Q : 退出
请输入操作符: /请输入两个数(空格分隔): 15 3
结果: 15.00 / 3.00 = 5.00请选择操作:+ : 加法- : 减法* : 乘法/ : 除法% : 取余^ : 幂运算Q : 退出
请输入操作符: %请输入两个整数(空格分隔): 10 3
结果: 10 % 3 = 1请选择操作:+ : 加法- : 减法* : 乘法/ : 除法% : 取余^ : 幂运算Q : 退出
请输入操作符: Q
退出计算器。
===== 计算器已关闭 =====

2 文件统计工具

本案例将实现一个文件统计工具,能够统计指定文本文件中的行数、单词数和字符数。该工具将模仿Unix/Linux中的wc命令,提供命令行界面,允许用户输入文件路径,并输出统计结果。

程序需求
  1. 功能:

    • 统计文件中的行数
    • 统计文件中的单词数
    • 统计文件中的字符数
  2. 用户界面:

    • 提示用户输入文件路径
    • 显示统计结果
  3. 错误处理:

    • 文件不存在或无法打开
    • 处理大文件时的效率问题
程序代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <locale.h>
#include <string.h> // 添加了字符串处理函数头文件#ifdef _WIN32#include <io.h>      // 包含 _setmode 和 _fileno#include <fcntl.h>   // 包含 _O_U8TEXT
#endif// 函数声明
http://www.dtcms.com/a/317366.html

相关文章:

  • HIVE 窗口函数处理重复数据
  • WebStorm转VSCode:高效迁移指南
  • 用NAS如何远程访问:详细教程与实用技巧
  • 关于C语言连续强制类型转换,有符号数据位移,以及温度传感器int16有符号数据重组处理问题
  • C++之vector类的代码及其逻辑详解 (下)
  • SELinux加固Linux安全2
  • 【数据结构初阶】--排序(四):归并排序
  • 软考软件设计师考点总结
  • [linux] Linux系统中断机制详解及用户空间中断使用方法
  • Linux部署tp5.1,nginx服务器不管访问那个方法,一直访问index/index问题解决方法
  • 阶段二:1-信息技术概述
  • helm下载tiller失败
  • 【数字图像处理系列笔记】Ch04:灰度变换与空间域图像增强(2)
  • 蚊子咬人问题何时休:深度学习引领智能灭蚊新时代
  • qt窗口--02
  • 无人设备遥控器之跳频技术篇
  • 鹧鸪云:光伏电站的“智慧中枢”,精准调控逆变器
  • 使用 Helm 在 Kubernetes 中安装 Milvus
  • 企业知识库:RAG技术实现流程总览(一)
  • 【motion】标签体系设计与检索 1:HumanML3D 和 KIT Motion-Language(KITML)
  • 河南萌新联赛2025第(四)场【补题】
  • 键帽(dp)
  • 分布式光伏气象站:安装与维护
  • 【运维进阶】DHCP服务配置和DNS域名解析
  • 最长公共子序列-动态规划
  • 如何在linux中使用Makefile构建一个C++工程?
  • 中科米堆CASAIM机加工件来料尺寸自动化三维测量方案
  • 第十八天:C++进制之间的转换
  • 机器学习算法篇(六)贝叶斯算法
  • 基于php的个人健康管理系统设计与实现/vue/php开发