【程序改错】 功能:以下程序把两个数按由大到小的顺序输出来. #include stdio.h /****=*****ERROR*===* void swap(int *p1*p2) int p; p=*p1;*p1=*p2;*p2=p;
时间: 2023-07-23 22:31:13 浏览: 47
【程序改错】
功能:以下程序把两个数按由大到小的顺序输出来.
1. 缺少了头文件的尖括号 "<>"。
2. swap函数的参数中,指针类型的声明缺少了逗号。
3. swap函数中,变量p没有声明类型。
4. swap函数中,变量p的赋值语句缺少了分号。
5. swap函数中,指针变量*p1和*p2所指向的值应该互换。
改正后的程序如下:
```c
#include <stdio.h>
void swap(int *p1, int *p2);
int main(void) {
int a, b;
scanf("%d%d", &a, &b);
if (a < b) {
swap(&a, &b);
}
printf("%d %d\n", a, b);
return 0;
}
void swap(int *p1, int *p2) {
int p = *p1;
*p1 = *p2;
*p2 = p;
}
```
相关问题
【程序改错】 功能:以下程序把两个数按由大到小的顺序输出来. # include " stdio . h " /*********** ERROR ***********/ void swap ( int *p1,*p2 int p ; p =*p1;*p1=*p2;*p2= p ; main () int a , b ,* p ,* q ; printf (" input a , b :'"); /*********** ERROR ***********/ Scanf (''% d % d '', a , b ); p =& a ; q =& b ; if ( a < b ) swap ( p , q ); printf ('' a =% d , b =% d \ n '", a , b ); /*********** ERROR ***********/ printf ('' max =% d , min =% d \ n '', p , q );
以下是修改后的程序,请仔细核对:
```c
#include <stdio.h>
void swap(int *p1, int *p2);
int main() {
int a, b, *p, *q;
printf("input a, b:");
scanf("%d %d", &a, &b);
p = &a;
q = &b;
if (a < b) {
swap(p, q);
}
printf("a = %d, b = %d\n", a, b);
printf("max = %d, min = %d\n", *p, *q);
return 0;
}
void swap(int *p1, int *p2) {
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
```
我修改了三处错误:
1. 在函数 `swap` 的第一行中,在第二个参数 `p2` 后添加了逗号。
2. 在 `scanf` 函数调用时,将格式字符串改为 `"%d %d"`,并将变量 `a` 和 `b` 的地址传递给它。
3. 在 `printf` 函数调用时,将变量 `p` 和 `q` 改为 `*p` 和 `*q`,以输出它们所指向的值。
注意,这个程序仍存在一个潜在问题,就是如果输入的两个数相等,它将不会输出任何信息。如果你需要处理这种情况,可以在程序中添加一个判断。
改错题 下列程序功能是:从键盘输入一个字符串,统计其中大写字母个数m和小写字母个数n,并输出m,n中的较大者。 程序如下: #include "stdio. h" #include "string. h int main() { char s[80]; int i,k,m=0,n=0; gets(s); i=1 ; /*$ERROR1$*/ k=strlen(s); while(i<=k) /*$ERROR2$*/ {
有两处错误:
1. 在程序开头需要包含头文件 `stdlib.h`,因为后面使用了 `gets` 函数。
2. 在 `while` 循环中,循环条件应该是 `i < k`,因为字符串的下标是从 0 开始的。
修改后的程序如下:
```
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int main() {
char s[80];
int i, k, m = 0, n = 0;
gets(s);
k = strlen(s);
for (i = 0; i < k; i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
n++;
} else if (s[i] >= 'A' && s[i] <= 'Z') {
m++;
}
}
printf("%d\n", m > n ? m : n);
return 0;
}
```