首页 > 试题广场 >

下面程序执行后输出结果为( ...

[单选题]
下面程序执行后输出结果为()
#include <stdio.h>
int main() { 
    int i, j, m=6,n=4,  *p=&n, *q=&m;
    i=p==&m;
    j=(-*p)/(*q)+7;
    printf("i=%d,j=%d\n", i,j);
    return 0;
}
  • 编译错误
  • i=0,j=7
  • i=0,j=0
  • 其他几项都不对
i=p==&m;
从后结合,先计算 p==&m,p 显然是n,前后两者不相等,返回结果为了false,即是0,所以i=0;
j=(-*p)/(*q)+7;
j=(-n)/m+7,先计算除法,(-n)/m=0 , j=0+7=7;
所以 i 等于0,j 等于7。
发表于 2019-08-16 18:42:10 回复(1)
重点在:j=(-*p)/(*q)+7;
所以j= -4/6 + 7;(-*p)/(*q)必须要转浮点数才能正确计算,否则先取整再计算,-4/6 取整为0,j=0+7=7
要先7-4/6再取整,需要前面的转浮点,
如果:j=((static_cast<double>(-*p))) / (*q)+ 7,则计算7-0.6...   最后取整为6,j=6

发表于 2021-02-04 23:35:51 回复(1)
心里想的是对的
发表于 2021-06-29 21:51:46 回复(0)
没想到,还是太年轻。
发表于 2022-06-10 10:50:54 回复(0)
这段C代码的主要目的是对一些变量进行操作并打印结果。让我们一步一步地分析这段代码: int i, j, m=6,n=4, *p=&n, *q=&m; 在这一行中,声明了四个整数变量:i、j、m、n,并初始化了m和n分别为6和4。 还声明了两个指针变量p和q,分别指向n和m的地址。 i=p==&m; 在这一行中,将i的值设置为表达式p==&m的结果。这个表达式检查指针p是否指向变量m的地址。 如果p指向m的地址,i将被赋值为1,否则为0。 j=(-*p)/(*q)+7; 在这一行中,计算了表达式(-*p)/(*q)+7的值,然后将结果赋给变量j。 首先,-*p表示取指针p所指向的变量n的负值,即-4。 然后,*q表示取指针q所指向的变量m的值,即6。 接着,计算(-4)/6,这将得到0(注意,这是整数除法)。 最后,将结果0与7相加,得到7,将其赋给j。 printf("i=%d,j=%d\n", i,j); 使用printf函数打印变量i和j的值。 总结: i的值将是0,因为p不等于&m。 j的值将是7,因为表达式(-*p)/(*q)+7计算结果为7。 因此,最终的输出将是:i=0, j=7。
发表于 2023-09-20 20:17:32 回复(0)
忽略了优先级,先算除
发表于 2022-04-21 16:36:12 回复(0)
i=p==&amp;m,p的值为&amp;n不等于&amp;m,故i=0;j=-*p/*q + 7=-4/6 + 7=7,故j=7
编辑于 2019-01-17 08:09:07 回复(0)
第4行: 三个运算符 = 、==、& 优先级:& 大于 == 大于 =
i = (p==(&m)); i=0;
第5行: () 大于 *(指针运算取值) 等于 - (负号) 大于 + 大于 =
j=-4/6+7
负数余上正数 只用考虑 被余数 的 正负情况,若被余数为- 将 被余数的负号提取出来,两个整数进行运算,最后再加上提取出来的符号。
-4 /6 === -(4/6) === 0
发表于 2023-10-16 21:31:56 回复(0)
*p=&n什么意思?先对n取地址?然后赋值给p,然后*再取地址?
发表于 2022-11-14 10:12:29 回复(1)
<p>运算顺序</p>
发表于 2020-07-10 08:56:59 回复(0)
-*p  居然是可以的,我以为是错的,记下了😓
发表于 2020-06-05 09:52:24 回复(1)