国二c语言程序的改错题,例如 第1题 #include <conio.h> #include <stdio.h> /********found********/ IsPrime(int n); { int i, m; m = 1; /********found********/ for (i=2; i<n; i++) if !(n%i) { m = 0; break; } return(m); } main() { int j, k; printf("\nplease enter an integer number between 2 and 10000:"); scanf("%d", &k); printf("\n\nThe prime factor(s) of %d is(are):", k); for (j=2; j<k; j++) if ((!(k%j)) && (IsPrime(j))) printf(" %4d,", j); printf("\n"); } 根据提供的信息,我们可以针对每个题目进行详细的错误分析与改正建议。 ### 第1题 #### 错误分析 1. **函数声明格式不正确**:在 C 语言中,如果一个函数要在其他函数(如 `main` 函数)之前被调用,那么必须先对这个函数进行声明。本例中的函数 `IsPrime` 的声明格式有误。 2. **语法错误**:`if !(n%i)` 这里的 `!` 应该放在括号外面,正确的写法应该是 `if (!(n%i))`。 #### 改正建议 1. **修正函数声明**:将 `IsPrime(intn);` 修改为 `int IsPrime(int n);`。 2. **修正 if 语句**:将 `if !(n%i)` 修改为 `if (!(n%i))`。 #### 正确代码 ```c #include <conio.h> #include <stdio.h> int IsPrime(int n); // 正确的函数声明 int IsPrime(int n) { // 函数定义 int i, m; m = 1; for (i = 2; i < n; i++) { if (!(n % i)) { // 修正 if 语句 m = 0; break; } } return m; } int main() { int j, k; printf("\nplease enter an integer number between 2 and 10000:"); scanf("%d", &k); printf("\n\nThe prime factor(s) of %d is(are):", k); for (j = 2; j <= k; j++) { // 修正循环条件 if (!(k % j) && IsPrime(j)) printf(" %4d,", j); } printf("\n"); return 0; } ``` ### 第2题 #### 错误分析 1. **指针比较问题**:`while(*p != *q)` 这个条件无法保证两个字符串的不同。 2. **数组越界风险**:没有确保 `c` 数组不会越界。 #### 改正建议 1. **修改 while 循环条件**:使用 `*p` 和 `*q` 的 ASCII 值进行比较。 2. **添加长度检查**:确保 `c` 数组不会越界。 #### 正确代码 ```c #include <stdio.h> #include <string.h> void fun(char *p, char *q, char *c) { int k = 0; // 修正初始值 while (*p || *q) { // 修改 while 循环条件 if (*p < *q) { c[k++] = *q++; } else { c[k++] = *p++; } if (*p == '\0') { while (*q) c[k++] = *q++; } if (*q == '\0') { while (*p) c[k++] = *p++; } } c[k] = '\0'; // 添加终止符 } int main() { char a[10] = "aBCDeFgH", b[10] = "ABcd", c[80] = {'\0'}; fun(a, b, c); printf("The string a: %s\n", a); printf("The string b: %s\n", b); printf("The result: %s\n", c); return 0; } ``` ### 第3题 #### 错误分析 1. **数组越界**:`s[j]` 可能访问数组越界。 2. **字符串终止符设置错误**:`s[j] = "\0";` 这里赋值方式不对。 #### 改正建议 1. **修正 for 循环**:确保不会越界。 2. **修正字符串终止**:使用 `s[j] = '\0';` 赋值。 #### 正确代码 ```c #include <stdio.h> #include <conio.h> void fun(char *s) { int i, j = 0; for (i = 0, j = 0; s[i] != '\0'; i++) { if (s[i] >= '0' && s[i] <= '9') { // 修正条件判断 s[j++] = s[i]; } } s[j] = '\0'; // 修正字符串终止 } int main() { char item[80]; printf("\nEnter a string: "); gets(item); printf("\nThe string is: %s\n", item); fun(item); printf("\nThe string of changing is: %s\n", item); return 0; } ``` ### 第4题 #### 错误分析 1. **参数类型声明问题**:`void fun(char *s, int a, int b)` 参数 `a` 和 `b` 应作为引用传递。 2. **指针越界风险**:没有确保 `s` 不会越界。 #### 改正建议 1. **修改参数类型**:使用指针或引用传递 `a` 和 `b`。 2. **添加长度检查**:确保 `s` 不会越界。 #### 正确代码 ```c #include <conio.h> #include <stdio.h> void fun(char *s, int *a, int *b) { // 使用指针传递 a 和 b while (*s) { if (*s >= 'A' && *s <= 'Z') { (*a)++; } if (*s >= 'a' && *s <= 'z') { (*b)++; } s++; } } int main() { char s[100]; int upper = 0, lower = 0; printf("\nPlease enter a string: "); gets(s); fun(s, &upper, &lower); printf("\nupper=%d lower=%d\n", upper, lower); return 0; } ``` ### 第5题 #### 错误分析 1. **数组越界**:在 `for` 循环中,可能使数组越界。 2. **函数返回值问题**:`fun` 函数的返回值类型未指定。 #### 改正建议 1. **修正 for 循环**:避免数组越界。 2. **指定返回值类型**:显式声明 `fun` 函数的返回值类型。 #### 正确代码 ```c #include <stdio.h> #define N 20 int fun(int *a, int n, int x) { // 指定返回值类型 int p = 0, i; a[n] = x; while (x != a[p]) { p = p + 1; } if (p == n) { return -1; } else { for (i = p; i < n - 1; i++) { // 修正循环条件 a[i] = a[i + 1]; } return n - 1; } } int main() { int w[N] = {-3, 0, 1, 5, 7, 99, 10, 15, 30, 90}, x, n, i; n = 10; printf("The original data:\n"); for (i = 0; i < n; i++) { printf("%5d", w[i]); } printf("\nInput x (to delete): "); scanf("%d", &x); printf("Delete: %d\n", x); n = fun(w, n, x); if (n == -1) { printf("***Not found***\n"); } else { printf("New length: %d\n", n); } return 0; } ``` 以上是对每个题目的详细分析与改进建议。通过这些改进,可以确保代码的正确性和稳定性。
#include <conio.h>
#include <stdio.h>
/********found********/
IsPrime(int n);
{
int i, m;
m = 1;
/********found********/
for (i=2; i<n; i++)
if !(n%i)
{
m = 0;
break;
}
return(m);
}
main()
{
int j, k;
printf("\nplease enter an integer number between 2 and 10000:");
scanf("%d", &k);
printf("\n\nThe prime factor(s) of %d is(are):", k);
for (j=2; j<k; j++)
if ((!(k%j)) && (IsPrime(j)))
printf(" %4d,", j);
printf("\n");
}
第2题
#include <stdio.h>
#include <string.h>
void fun(char *p, char *q, char *c)
{
/********found********/
int k = 1;
/********found********/
while (*p != *q)
{
if (*p < *q)
c[k] = *q;
else
c[k] = *p;
if (*p)
p++;
if (*q)
q++;
k++;
}
}
main()
{
char a[10] = "aBCDeFgH", b[10] = "ABcd", c[80] = {'\0'};
fun(a, b, c);
printf("The string a:");
puts(a);
printf("The string b:");
剩余115页未读,继续阅读
- mx53212013-01-14这种题目非常常见,答案可能不是很标准。给出的答案只能参考,建议不要照搬答案
- 学不会的白羊梦2014-12-21很有帮助,谢谢分享!
- 粉丝: 0
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 以下是 YOLO(You Only Look Once)学习的详细课程.docx
- 小白的Python入门教程部分章节源码.zip
- 基于smart-socket实现的轻量级http服务器
- 将 HTML 转换为 Markdown.zip
- 以下是关于 OpenCV 开发的详细资源分类.docx
- 《妙问启扉彰技巧,巧驭节奏揽真情》林昱潼.docx
- 基于OpenCV,在这里我也使用了深度学习来检测对象识别
- 处理中文文本的 Python 库.zip
- 编辑器 类似word或wps用于文字排版相关功能的控件 可用于电子病历编辑器等文本处理场景 HCView代码遵循BSD协议
- 基于协程的 Python 并发库.zip