以下程序的功能是求两个非0整数相除的商和余数。程序有5处错误(包括warning警告性错误),试找出它们并加以修改,请上机验证修改结果。
#include
int main()
{
int x,y,r1,r2;
scanf("%d%d",x,y);
if(x=0 || y=0)
printf("input error\n");
else
{
if(x>y)
r1=x/y;
r2=x%y;
else
r1=y/x;
r2=y%x;
}
printf("商=%d,余数=%d\n",r1,r2);
}
程序有以下错误:
1、scanf 函数应该使用地址运算符 & 获取变量 x 和 y 的值。
2、if 语句中的条件表达式应该使用相等运算符 == 而不是赋值运算符 =。
3、if 语句中的条件表达式缺少括号,应该将其括起来。
4、if 语句和 else 语句中的代码缺少花括号,应该加上花括号。
5、当 x 和 y 中有一个为 0 时,应该输出错误提示并退出程序。
6、如果 x 大于 y,应该用 y 来除 x,否则用 x 来除 y。
修改的代码:
#include <stdio.h>
int main()
{
int x, y, r1, r2;
scanf("%d%d", &x, &y);
if (x == 0 || y == 0) {
printf("input error\n");
return 1; // 退出程序
} else {
if (x > y) {
r1 = x / y;
r2 = x % y;
} else {
r1 = y / x;
r2 = y % x;
}
}
printf("商=%d,余数=%d\n", r1, r2);
return 0;
}
测试结果:
10 3
商=3,余数=1
3 10
商=3,余数=1
0 5
input error
参考如下;
#include<stdio.h>
int main()
{
int x,y,r1,r2;
scanf("%d%d", &x, &y);
if(x==0 || y==0)
printf("input error\n");
else
{
if(x>y)
{
r1=x/y;
r2=x%y;
}
else
{
r1=y/x;
r2=y%x;
}
printf("商=%d,余数=%d\n",r1,r2);
}
return 0;
}
(如果数据需要多次修改,那么要使用二维数组,因为二维指针的数据修改,被覆盖的数据仍在静态存储区,并没有被覆盖,只是指针位置修改了,而二维数组是真正的原数据被覆盖了,存储空间并不会有所增加。)