c语言程序改错,求解答

以下程序的功能是求两个非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;
}
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7649910
  • 除此之外, 这篇博客: C/C++ 字符串一文全解中的   总的来说,二维数组的方式可以任意修改数据,但存储空间会大一点。一维指针方式存储空间最小,但数据是只读的,会报warning但不影响运行。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •   (如果数据需要多次修改,那么要使用二维数组,因为二维指针的数据修改,被覆盖的数据仍在静态存储区,并没有被覆盖,只是指针位置修改了,而二维数组是真正的原数据被覆盖了,存储空间并不会有所增加。)