C++编程题目与解答:大写字母计数、递归求和与链表插入

需积分: 0 2 下载量 141 浏览量 更新于2025-01-09 收藏 359KB DOC 举报
"电大开放教育C++复习资料,包括编程题及解答,涉及字符串处理、递归函数计算、链表操作等核心知识点。" 在C++编程中,掌握基础的数据结构和算法是至关重要的。这份复习资料涵盖了三个关键的编程题目,分别涉及到字符串处理、递归函数以及链表的操作,这些都是C++编程中常见的主题。 1. 字符串处理:题目要求编写一个名为`CalcCapital`的函数,用于统计给定字符串中大写字母的数量。函数接受一个字符指针`str`作为参数,返回值是大写字母的个数。实现的关键在于遍历字符串,检查每个字符是否在大写字母的ASCII范围内,然后通过累加计数。这里的解决方案使用了条件判断和循环遍历,确保了对所有字符的正确处理,同时考虑到了空指针的情况。 ```cpp int CalcCapital(char* str) { if (str == NULL) return 0; int num_of_Capital = 0; for (int i = 0; str[i] != 0x0; i++) { if (str[i] >= 'A' && str[i] <= 'Z') num_of_Capital++; } return num_of_Capital; } ``` 2. 递归函数计算:题目要求编写一个递归函数`sum`来计算特定的序列和。给定一个正整数`n`,该函数计算1 - 1/2 + 1/3 - ... - (1/n) * (-1)^n的值。这里采用了递归策略,即`sum(n) = sum(n-1) - (1/n) * (-1)^n`,直到n为1时返回1,这是递归的基本结束条件。 ```cpp float sum(int n) { if (n == 1) return 1; else return sum(n - 1) - (1.0 / n) * (-1) * n; } ``` 3. 链表操作:题目要求在一个已按数值降序排列的链表中插入一个新节点,保持链表的有序性。函数`InsNode`接收链表头节点`head`和新值`newValue`,返回插入新节点后的链表头节点。插入操作需要遍历链表找到合适的位置,如果链表为空或者新值大于当前链表最大值,新节点应被插入到链表头部;否则,需要找到比新值小的节点,将其后插入新节点。 ```cpp struct Node { int value; Node* next; }; Node* insNode(Node* head, int newValue) { Node* newNode = new Node(); if (!newNode) return NULL; // 申请内存失败 newNode->value = newValue; newNode->next = NULL; if (head == NULL || head->value <= newValue) { newNode->next = head; return newNode; } Node* current = head; while (current->next != NULL && current->next->value > newValue) { current = current->next; } newNode->next = current->next; current->next = newNode; return head; } ``` 这些题目旨在测试和提升C++程序员的基本技能,包括对字符串的处理能力、理解和使用递归解决问题的能力,以及对动态数据结构如链表的操作技巧。通过这样的练习,可以加深对C++语言特性和编程思维方式的理解,为实际项目开发打下坚实的基础。