【问题标题】:finding output to a simple but tricky program [closed]找到一个简单但棘手的程序的输出[关闭]
【发布时间】:2020-01-22 11:57:14
【问题描述】:
 #include<stdio.h>
 int main()
 {
   float a=5,b=2;
   int c,d;
   c=a%b;
   d=a/2;
   printf("%d\n",d);
   return 0;
 }

【问题讨论】:

  • 你能说一下你的问题是什么吗?
  • 你要这个程序的输出吗?
  • 简单但棘手?
  • bc 是干什么用的?您只是在打印d,即a/2
  • 输出为 2 为 5.0/2.0= 2.5,被截断为 2。

标签: c output expression implicit-conversion


【解决方案1】:

程序不正确,因为没有为浮点数定义运算符 %。

来自 C 标准(6.5.5 乘法运算符)

2 每个操作数都应具有算术类型。 的操作数 % 运算符应为整数类型。

至于这个说法

d=a/2;

然后从具有浮点类型a /2 的表达式转换为具有类型int 的左侧操作数的类型。所以d 的值将等于2

也许你的意思是类似于下面这个程序的程序

#include <stdio.h>

int main(void) 
{
    int a = 5, b = 2;
    int c, d;

    c = a % b;
    d = a / b;

    printf( "d = %d, c = %d\n", d, c );

    return 0;
}

在这种情况下,程序输出是

d = 2, c = 1

您可以使用在标题&lt;stdlib.h&gt; 中声明的标准函数div,而不是两个变量cd 以及带有运算符/% 的两个表达式。例如

#include <stdio.h>
#include <stdlib.h>

int main(void) 
{
    int a = 5, b = 2;

    div_t result = div( a, b );

    printf( "quotient = %d, remainder = %d\n", result.quot, result.rem );

    return 0;
}

程序输出是

quotient = 2, remainder = 1

【讨论】:

  • 弗拉德,这是否意味着操作数被转换为 int 类型?
  • @PaulOgilvie 不,不会有转化。
  • 不,他们不会。它们会生成编译器错误消息。
猜你喜欢
  • 2021-05-23
  • 2013-08-26
  • 1970-01-01
  • 2022-06-15
  • 2017-01-03
  • 1970-01-01
  • 2018-08-18
  • 2015-02-25
  • 1970-01-01
相关资源
最近更新 更多