C语言 输入两个整数,求出它们的商和余数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 输入两个整数,求出它们的商和余数相关的知识,希望对你有一定的参考价值。

参考技术A void main()

int m,n;

scanf("%d%d",&m,&n);

int q=m/n;

int r=m-q*n;

printf("%d %d",q,r);

参考技术B C语言 输入两个整数,求出它们的商和余数的意思是用C语言编写一个程序,从键盘输入两个整数num1和num2,计算并输出它们的商和余数。
一个可能的程序代码如下:
#include <stdio.h>int main(void) int num1, num2; //定义两个整数变量
scanf("%d%d", &num1, &num2); //从键盘输入两个整数
printf("商=%.2f\n", (float)num1 / num2); //输出商,保留两位小数
printf("余数=%d\n", num1 % num2); //输出余数
return 0;
参考技术C int main()

int a=0, b=0, c=0, d=0;
printf("type in two int a/b\n");
scanf("%d/%d", &a, &b);
c=a/b;
d=a%b;
printf("a/b=%d----%d\n", c,d);

return 0;

C中的除法,商和余数的大小符号如何确定

对于C中的除法,商和余数的大小、符号是如何确定的呢?在C89中,只规定了如果两个数为正整数,那么余数的符号为正,并且商的值是接近真实值的最大整数。比如5 / 2,那么商就是2,余数就是1。但是,C89里面对于被除数和除数里面,有负整数时,商的大小以及余数的符号没有做出明确的规定,而只是说这依赖于具体实现。在Windows下(是Intel汇编指令),看如下如下例子:

int main() {
    int a = -5;
    int b = a / 3;
}

接下来看汇编码:

; 1    : int main() {

    push    ebp
    mov    ebp, esp
    sub    esp, 8

; 2    :     int a = -5;

    mov    DWORD PTR _a$[ebp], -5            ; fffffffbH

; 3    :     int b = a / 3;

    mov    eax, DWORD PTR _a$[ebp]
    cdq
    mov    ecx, 3
    idiv    ecx  ;idiv执行有符号的除法,并且余数的符号和被除数一样
    mov    DWORD PTR _b$[ebp], eax

; 4    : }

汇编码中,最重要的就是idiv指令,这个指令运行后的结果是余数的符号会保持和被除数一样,同时,对于除法来说,余数的绝对值要小于除数的绝对值,这样,我们就可以确定商、余数的大小以及符号。对于上面的例子-5 / 3来说,商就是-1,余数就是-2。

有时,由于除法可以转换成加减法以及算数右移来执行,汇编码不会用到idiv指令(这可以看成是一种优化),但是结果不会有影响,比如看下面的-5 / 2的汇编指令,就没有用到idiv,但是结论和上面一样,商是-2,余数是-1:

; 1    : int main() {

    push    ebp
    mov    ebp, esp
    sub    esp, 8

; 2    :     int a = -5;

    mov    DWORD PTR _a$[ebp], -5            ; fffffffbH

; 3    :     int b = a / 2;

    mov    eax, DWORD PTR _a$[ebp]
    cdq
    sub    eax, edx
    sar    eax, 1  ;算数右移操作
    mov    DWORD PTR _b$[ebp], eax

; 4    :     
; 5    : }

上面的结论在Linux下(AT&T风格的汇编)同样成立,虽然汇编码和Intel汇编不一样。

 

另外,C89中规定,对于%取余运算符,只适用于整型

以上是关于C语言 输入两个整数,求出它们的商和余数的主要内容,如果未能解决你的问题,请参考以下文章

C语言 求大神改成正确的 题目是:输入两个整数num1和num2,计算并输出它们的和、差、积、商和余数

C语言 求大神改成正确的 题目是:输入两个整数num1和num2,计算并输出它们的和、差、积、商和余数

求助:C语言大整数相除

用c语言设计一个计算两个整数的和、差、积、商、和余数的程序

C语言编程:输入两个正整数m和n,求它们的最大公约数。

C语言编程:输入两个正整数m和n,求它们的最大公约数。