C++程序设计:字符串排序与整数计算实战

需积分: 10 2 下载量 59 浏览量 更新于2024-07-24 收藏 748KB DOC 举报
在提供的C++程序改错文档中,包含了两个练习题,旨在帮助学习者提高程序设计能力,特别是字符串处理和排序算法的理解。以下是每个题目及其关键知识点的详细解析: 1. 题目1 (满分10.0分) - 题号:353 **功能:字符串降序排列(除去首尾字符)** ```cpp #include<stdio.h> #include<ctype.h> #include<conio.h> // 定义函数 fun(),用于实现字符串内部的降序排列 void fun(char* s, int num); // 主函数 main() void main() { char s[10]; printf("输入7个字符的字符串:"); gets(s); // 注意:gets()已不再安全,推荐使用fgets()或getline()替换 fun(s, 7); // 调用排序函数 printf("\n%s", s); // 输出排序后的字符串 // 函数wwjt() 用于测试示例,不在题目要求范围内 } // 实现排序函数 void fun(char* s, int num) { int i, j; char t; for (i = 1; i < num - 1; i++) // 遍历中间字符 for (j = i + 1; j < num - 1; j++) if (s[i] < s[j]) // 比较字符,如果前一个字符小于后一个字符 { t = s[i]; // 临时存储较小字符 s[i] = s[j]; // 将较大字符放到前面 s[j] = t; // 将临时存储的较小字符放到后面 } } // wwjt() 函数,这里主要用于提供测试数据,与题目无关,略去解析 ``` 2. 题目2 (满分10.0分) - 题号:310 **功能:计算并输出给定整数n的阶乘** 这部分代码没有直接给出,但我们可以推断它应该是要求编写一个计算阶乘的函数。阶乘是一个数的所有小于及等于它的正整数的积,例如5! = 5 * 4 * 3 * 2 * 1。 假设有一个名为`factorial`的函数,其结构可能如下: ```cpp int factorial(int n) { if (n == 0 || n == 1) // 0和1的阶乘定义为1 return 1; else return n * factorial(n - 1); // 递归调用,计算n-1的阶乘然后乘以n } ``` 主函数中会调用这个函数,输出计算结果。由于具体代码未提供,这部分只能根据题目描述进行猜测。 总结来说,这份文档包含C++编程中的两个实践题,涉及到字符串排序和整数阶乘的计算。通过解决这些问题,学习者可以加深对C++语言基本操作的理解,尤其是字符串处理的函数如`strcmp()`、`strlen()`以及循环控制和条件语句的运用。同时,也展示了递归算法在阶乘计算中的应用。