【C语言第四次作业PPT学习教案】
在本次C语言的第四次作业中,我们面临的是两个编程问题,分别涉及到高精度整数处理和字符串扩展。
**问题1:删数问题**
这个问题要求我们输入一个大正整数S,以及一个整数N,目标是从S中删除N位数字,使得剩下的数字组成的新数S'尽可能小。关键在于如何有效地找到最优的删除策略。程序的运行时限为15秒,得分规则基于结果的准确性。
解决方案的核心在于将大整数S以字符串的形式存储,然后遍历这个字符串,寻找每一对相邻数字,如果当前数字大于其后一个数字,那么就删除当前数字。这个过程重复N次,直至删除了N位数字。代码中使用了两个嵌套的for循环来实现这一策略,外层循环控制总的删除次数,内层循环用于遍历字符串并执行删除操作。
```c
for (i=1; i<=m; i++) {/* 总共删 m 个数 */}
for (j=0; j<=n-1; j++) {/* 从头到尾扫描 */}
if (s[j]>s[j+1]) {/* 如果这个数比下一个数大那么这个数要删掉 */}
{/* 删除操作 */}
```
**问题2:扩展字符**
第二个问题是编写一个函数`expand(s1, s2)`,它能将字符串s1中的缩写符号替换为字符串s2中的等价完整字符。处理的字符包括大小写字母和数字,支持如a-d、a-z0-9等缩写形式。函数需要能处理包含空格的输入字符串,且在扩展过程中遵循ASCII码值的大小关系。
解决此问题的关键在于识别和处理'-'字符,当遇到'-'时,检查其前后字符的ASCII值,若后者大于前者,则需将两者间的所有字符插入到输出字符串中。对于特殊情况如'a-b-c',应当扩展为'abc',而'a-a'则保持不变。
```c
if (flag && c <= last_char) {/* 判断字符关系 */}
{/* 扩展操作 */}
```
在这两个问题中,都需要熟练运用字符串处理技巧和条件判断语句。对于问题1,理解删除策略并正确实现循环结构至关重要;而对于问题2,理解字符编码规则和字符串操作是解决问题的关键。在编写代码时,需要注意边界条件的处理,确保程序的健壮性。同时,为了满足评分标准,需要确保输出的结果完全符合题目要求。