问什么这个C语言程序输出的是 0,0 ,不是 0,1 ?

作者&投稿:滑征 (若有异议请与网页底部的电邮联系)
C语言程序,为什么输出0?不应该是1吗?~

不对,小数和整数在计算机中的二进制表示法不一样的,系统只是提供了转换的功能而已,使用printf输出的时候,是不会自己转换的,而是强制使用指定格式输出
比如说这个程序,最后a中存储的值(double类型)是1.000000,这个值,前16位(二进制)肯定是0,所以使用%d格式的时候,它不会判断对应的变量是什么类型,就直接把它的前16位以整数的形式输出,所以输出的结果必然是0
所以使用%d并不能使输出结果转换为对应的整数,请改用%.0f输出(因为你的变量a是double型),就可以输出1

第一句有问题,scanf你是无法读取到EOF的,End Of File,在电脑的术语缩写通常为 EOF,在作业系统决定资料源无更多的资料可读取。
for循环也有问题,判断循环结束用i>=0,会一直为真,循环无法结束。当然你的代码里面有跳出break,但这种写法比较奇特。
看你的程序,应该是把二进制转换成十进制的数,代码不全,不好给你查错。

1、&&是逻辑运算符,所以k的结果只能是0,1。
2、同理<是逻辑运算符,n=b<a 结果也只能是0或1。因为a=1,b=2 b<a不满足,所以n=0。
3、&&是逻辑运算符,计算是从左到右,因为&&运算的性质,只要有一方是0,结果就是0,所以算出n=0时,k结果已经确定是0,逻辑判断已经完成,c语言不会继续执行m=a<b。
所以m仍然是初始化的值0。

#include<stdio.h>
void main(){
int a=1,b=2,m=0,n=1,k,h;
h=b<a; //结果h=0; 若h=a<b;则h=1
k=(n=b<a)&&(m=a<b);//在这里n参加运算,m并不参加运算
printf("%d,%d,%d\n",k,n,h);
}

结果 0 0 0

因为k=(n=b<a)不成立,所以m=a<b根本没执行,自然m保持原值

n=b<a 得n=0因为&&有零为零后面的就不运算了故m值不变

k=(n=b<a)&&(m=a<b)中,&&左边为0,结果一定为0,C系统就不计算右边的(m=a<b),所以m仍为0。如果改为k=(m=a<b)&&=(n=b<a),k,m就会结果为0,1了。

int是整型,2个字节,float是浮点型占用4个字节,所以,如果,用浮点输出,变量i的前两个字节是0,所以,输出是0,强制转换可以改变数据的存储类型。


c语言源程序的扩展名是什么
c语言源程序的扩展名是:“.c”。由C语言构成的指令序列称为C源程序,源程序文件的后缀为“.c”。注:在绝大多数的操作系统里,C源代码文件的后缀的大小写无所谓,如“index.C”和“index.c”指的是同一个文件;但老练的程序员通常使用小写。对于计算机语言来说,其源代码文件的命名会有一个特定...

什么是C语言
详情请查看视频回答

C语言是种什么语言
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型...

如何用c语言编写这个程序?
include "stdio.h"define N n define KG (N-i)define XH (i*2+1)define SC (j%2)?('*'):('&')void main() { int i,j,n;scanf("%d",&n);for ( i=0;i<N;i++ ) { for ( j=0;j<KG;j++ ) printf(" ");for ( j=0;j<XH;j++ ) printf("%c",SC);printf("...

c语言的计算机编程是什么?
处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%~20%。因此,C语言可以编写系统软件。

c语言是用什么编写的
c语言是用什么编写的?让我们一起了解一下吧!C语言本身是一种编程规范、标准,而编译器把根据这个规范写出来的语句、表达式、函数等转变成为可执行文件,可以编写c语言的编译器有:1、Vim:Vim是一个功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件,普遍被推崇为...

请问下面这个实例用C语言程序怎样编程
grade = 'C';break;case 6:grade = 'D';break;default:grade = 'E';break;} printf("成绩等级为:%c\\n", grade);return 0;} 在程序中,先定义了一个整型变量 score 和一个字符型变量 grade,用来分别存储输入的成绩和计算出的等级。然后,使用 scanf 函数从键盘上读入成绩,使用除法运算将...

C语言,这个程序是什么功能?怎么改错。纯小白
看起来是矩阵的转置 把int [i][j];这句改一下,然后加一句,最终是这样的 int i, j;for(i = 0; i < 3; i ++)完整的代码就是 include <stdio.h>void main(){ int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, b[4][3]; int i, j;\/\/这里...

c语言 这个程序ps[i]是什么,这个程序怎样执行的
首先char *ps,声明了ps是一个char型的指针;char st[20],声明了一个20个字符的char型数组,数组首地址为st;ps = st; 将ps指向st,所以其实y也可以用ps表示st数组,及ps[1]就是st[1]。scanf ... 输入了一个字符串,存在了ps[20]中(其实也是st[20]);ps[i] != '\\0' 判断...

求教C语言 大佬分析一下这个程序
include <stdio.h> \/\/函数声明 int f(int x);main(){ int n=1,m;\/ 调用函数f三次,将最后一次调用的返回值赋给m,第2,第3次调用分别用前次调用的返回值作为实参再调用f。第一次,f(1),返回1*2,等于2,第二次,f(2),返回2*2,等于4,第三次,f(4),返回4*2,等于8,最后...

顺平县17678632784: 这个最简单的c语言程序为什么输出结果是0呢? -
暨堵眼氨: 因为你定义的main主函数为空,无返回值,而你的代码返回值是0. 可以在main()前面加个int ,或者去掉return 0

顺平县17678632784: 这个C语言程序为什么会输出 0 -
暨堵眼氨: c的值为1.5,如果对应%f输出,则输出1.5,对应%d输出,则按整型数输出.但c是按浮点型存储的,即1.5 = 0.75 * 2,存储时,只存储尾码0.75(二进制为0.11)和阶码1(二进制为1)即可,占8个字节,按int型输出时,只取前4个字节.double浮点数占8字节,64位,int数占4字节,32位.double浮点数从高到低位分别存储符号位(1位)、指数部分(11位)和小数部分(52位)1.5的浮点存储格式为: 0 000 0000 0001 011(后面49个0) 符号位(0表示正数) 指数部分(1) 小数部分(0.75) 按整型数输出时,取低32位(全0):即输出0.

顺平县17678632784: 看这个C语言程序.为什么输出的都是0 -
暨堵眼氨: 第一句有问题,scanf你是无法读取到EOF的,End Of File,在电脑的术语缩写通常为 EOF,在作业系统决定资料源无更多的资料可读取. for循环也有问题,判断循环结束用i>=0,会一直为真,循环无法结束.当然你的代码里面有跳出break,但这种写法比较奇特. 看你的程序,应该是把二进制转换成十进制的数,代码不全,不好给你查错.

顺平县17678632784: 问什么这个C语言程序输出的是 0,0 ,不是 0,1 ? -
暨堵眼氨: 1、&&是逻辑运算符,所以k的结果只能是0,1.2、同理<是逻辑运算符,n=b<a 结果也只能是0或1.因为a=1,b=2 b<a不满足,所以n=0.3、&&是逻辑运算符,计算是从左到右,因为&&运算的性质,只要有一方是0,结果就是0,所以算出n=0时,k结果已经确定是0,逻辑判断已经完成,c语言不会继续执行m=a<b.所以m仍然是初始化的值0.

顺平县17678632784: c语言程序题,不知道为什么,输出的结果永远是0……求解. -
暨堵眼氨: #include <stdio.h> int sdk(int m, int n) { int i = 0; int sum = 0; for (i = m; i < n; i++) { sum += i; } return sum;//<==================== } //定义求和函数 int main() { int i = 0; int m, n = 0; int sum = 0; printf("输入m和n\n"); do { scanf("%d %d", ...

顺平县17678632784: 简单的C语言程序,为什么输出始终是0啊? -
暨堵眼氨: 见程序中的注释.#includemain(){int n,i,a,b,c;double s; while(scanf("%d",&n)!=0) //这里没判断n的值,改为while(scanf("%d",&n)!=0 && n!=0) { a=0; b=0; c=0; for(i=1;i

顺平县17678632784: C语言 帮我看一下这个程序为什么结果总是输出0 -
暨堵眼氨: 你term没初值,C语言默认是0,也就是说,你的term=term*2,始终得到的term还是0; sum也是0,因此结果始终是0; 你在long sum=0语句前面加上一句 term=1;结果就对了;

顺平县17678632784: C语言 以下程序输出“0”的原理 -
暨堵眼氨: 输出没错呀,printf原本就是从右向左计算,i++的时候,先输出0,然后i变为1,再到++i,i为2然后再输出,不就是20

顺平县17678632784: C语言输入的分数为什么输出是0 -
暨堵眼氨: 应该是字符类型的问题,如果用变量储存,应该用float或者double型储存,你应该用的int或者long存的吧 如果直接写分数,应该把其中一个数写成小数,比如1/2 写成 1.0/2 或者 1/2.0 ,这样是精确到1位有效数字,如果是1.00/2就是2位,依次类推

顺平县17678632784: c语言,这个计算圆周长,面积的程序,为什么输出结果总是0 -
暨堵眼氨: scanf 函数格式错误,导致赋值失败; 改为:scanf("%f",&d);

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网