齐齐哈尔大学C语言题库:程序改错与字符串连接实践

版权申诉
0 下载量 110 浏览量 更新于2024-07-07 收藏 92KB PDF 举报
本资源是一份关于齐齐哈尔大学C语言题库的部分题目,主要涉及两个程序改错练习。第一个题目是关于在一维整型数组中找出最大数及其下标的程序。原程序中有四处错误,分别是: 1. 函数声明错误:`intfun` 应改为 `floatfun`,因为题目要求返回的是最大数,而函数名与返回类型不匹配。 2. 变量初始化错误:在 `fun` 函数中,应将 `int c` 初始化为 `*a`,而不是 `max=*a`,因为 `max` 是用于保存最大值的,而非循环变量。 3. 输入错误:在 `main` 函数中,两次调用 `scanf` 时都对同一个数组元素 `a[i]` 进行读取,应分别读取,正确格式应为 `scanf("%d", &a[i])`。 4. 返回值未赋值:在主函数中,第一次调用 `fun` 后没有正确更新 `max` 的值。 第二个题目是关于连接两个字符串的 `fun` 函数。程序中存在的错误包括: 1. `scat` 函数内部,两次循环条件判断语句错误地检查了 `s1` 和 `s2` 的结束标志,应只检查其中一个字符串的结束标志。 2. 字符串连接操作应该逐个字符复制,而不是同时交换 `s1[i]` 和 `s2[j]` 的值。 3. 结束字符串添加错误:在连接完成后,`s2` 的末尾应添加空字符 `\0`。 修复这些错误后的程序如下: 对于第一个题目: ```c float fun(int *a, int *p, int n) { float max = *a; for (int c = a + 1; c < a + n; c++) { if (*c > max) { max = *c; *p = c - a; } } return max; } main() { int a[10], i, max, p = 0; printf("please enter 10 integers:\n"); for (i = 0; i < N; i++) { scanf("%d", &a[i]); } max = fun(a, &p, N); printf("max=%f, position=%d", max, p); } ``` 对于第二个题目: ```c #include <stdio.h> main() { char s1[80], s2[80]; void strcat(s1[], s2[]); gets(s1); gets(s2); strcat(s1, s2); puts(s1); } void strcat(char s1[], char s2[]) { int i = 0, j = 0; while (s1[i] != '\0') i++; while (s2[j] != '\0') { s1[i++] = s2[j++]; } s1[i] = '\0'; } ``` 这两个修复后的程序可以正确执行各自的任务。通过学习并改正这些错误,可以帮助理解C语言的基本语法、数据结构处理以及函数的正确调用等关键知识点。