南开大学网络技术上机真题100:递归与字符计数详解

5星 · 超过95%的资源 需积分: 10 11 下载量 159 浏览量 更新于2024-08-02 3 收藏 1.71MB DOC 举报
南开大学网络技术上机真题100包含两道编程练习题,旨在考察学生的编程基础和理解能力。第一题是关于递归实现阶乘函数`fun`,第二题则是检测并统计字符串中的大写和小写字母个数。 1. **递归阶乘函数**: 函数`fun`被要求计算一个整数`n`的阶乘。根据题目描述,递归实现阶乘的关键在于处理递归的基本情况(终止条件)和递归调用。填空1中,正确判断n是否大于1或者小于1是确定递归调用的基础,应该使用逻辑运算符`||`,表示"或"关系,即`if(n > 1 || n < 1)`。填空2中,递归的逻辑是将当前的n与n-1相乘,因此是`n * fun(n - 1)`。填空3是终止条件,当n等于1时,阶乘的结果为1,所以填写`1`。 ```c long fun(int n) { if (n > 1 || n < 1) // 填空1:处理递归 return n * fun(n - 1); // 填空2:递归调用 else return 1; // 填空3:终止条件 } ``` 2. **统计字符串中的字母**: 第二个题目要求修改一个函数,该函数接收一个字符串`s`作为参数,同时有两个整型变量`a`和`b`,分别用于计数大写和小写字母。题目中的错误集中在字符判断部分,需要确保只增加对应计数器的值,而不是修改字符本身。修改后的代码片段如下: ```c void fun(char *s, int *a, int *b) // 函数签名不变 { while (*s) // 遍历字符串 { if (*s >= 'A' && *s <= 'Z') // 原来的错误:检查大写,不包括小写 (*a)++; else if (*s >= 'a' && *s <= 'z') // 添加条件:检查小写 (*b)++; s++; // 移动指针到下一个字符 } } ``` 在主函数`main()`中,只需调用`fun`函数并传递字符串和初始计数器即可。 通过这两道题目,学生可以巩固递归算法的掌握以及字符处理和数组操作的基本技巧。上机测试中,学生需要理解并运用这些概念来解决实际问题。