帮忙看看这个c语言输入输出错哪了,输出结果怎么是0?

这个C语言程序的输出结果为什么为0,1?
main()
{ int a=-1,b=1,k;
if((++a<0)&&!(b--<=0))
printf("%d,%d\n",a,b);
else printf("%d,%
这个C语言程序的输出结果为什么为0,1?
main()
{ int a=-1,b=1,k;
if((++a<0)&&!(b--<=0))
printf("%d,%d\n",a,b);
else printf("%d,%d\n",a,b);
}
当执行if语句时,先计算++a,使a的值加1,a的值变为0.再计算++a<0,由于a的值为0,也就是计算0<0,这个不等式不成立,其值为0.而对于是&&运算符,只要有一个运算量为0其值就为0,不再计算表达式b--<=0,所以b的值不变.因为if的表达式的值为0,所以计算机执行else后面的printf语句,输出a的值为0,b的值为1.
&#034;=&#034;是给变量赋值
如:a=&#034;b&#034;;表示把字母&#034;b&#034;赋给变量a
&#034;==&#034;是判断两边是否相等,是条件运算。
如:if(a==&#034;b&#034;)
不可以,你只能在输出实际数据前做一个零的输出
这位朋友今后编程一定要记着 c语言是一种强类型的语言 也就是说c语言编程中如果类型不匹配的话 很可能会出现数据错误 以后一定要养成好习惯哦
你忽略了你数据中的类...
答: 有人知道密乐玛游轮(Mirimar Boat Cruise)有没有从龙柏考拉园返程到市里的行程
答: 如果你理解能力强考数据库,其中比如关系数据库之类的需要去领悟
如果你记忆能力强考网络,各种各样的名词,背下来就得分。
还有官方指定的教材要有,上机最好做一做南开...
答: 新年好!首先,你必须了解计算机的组成和结构以及操作系统的运作原理,这是基础
如果你想学习开发多线程、WINDOWS应用、动态链接库、WINDOWS组件的话,建议...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415c语言大神帮给看到程序-大神帮我看看这个C语言程序错在哪里
c语言大神帮给看到程序
来自:着墨点碎色
&&&&& 投稿日期:
c语言大神帮给看到程序
那就是说 isprime(x)=x 还是 只将x的值给isprime括号里的x....;Enter integer number: &%d&quot....?
若要是题中,&x);if(isprime(x))printf(&quot..,但是返回后要输出x的值....;%d is prime&#92....)}isprime(int a){.......;n&....??.)return 0,x);elseprintf(...;)..??......,x的值是a的值int isprime(int)......if(...,还是原来输入进来x的值..;scanf(&main(){printf(&return 1;}实参将值赋给形参,返回值是0或1,也就是真或假....,就是指isprime(x)为0或1么?..?
还有就是返回值0或1??
你可以把a看作是x复制过去的。是独立的、函数中不存在x。3,如果是return a的话 需要看函数中是否对a做了复制运算,如果没有,那么就返回a的值,这个值等于x、“isprime(x)=x” 在这里是没有意义的,编译会报错。&x=isprime(x)&才表示将x放入函数中经过运算后得到的值赋给x,形参中没有用到指针1、x的值是原来的值。2,此时x值才会变,c语言中函数传递有按引用传递和按值传递,所以是按值传递,不会改变原来x的值
就是指isprime(x)为0或1。a只是x的一个“复制品”,复制品的改变不影响本体的改变,这里的x叫做实参。而函数isprime的“函数头”为int isprime(int a),这里的a叫形参。这个函数的调用时,x的值还是不变,这个可以先不了解),是先将实参x的值复制给形参a,接着保存当前程序执行的位置(当然还有别的参数,直到遇到return语句,就将return的值带回到之前保存下来的位置继续执行在你当前形式的函数调用中,只是将x的值传递给了isprime函数中的参数a。x的值是永远不变的,就算a修改了。返回值是0或者1的意思是函数执行的结果是0或者1,你的理解是正确的。函数调用:isprime(x),然后跳转到函数体中开始执行
1,首先x是原来输入进来的x的值,a只是函数的形参,当函数调用后,申请的a这个形参变量就会释放。2,可以这么认为返回值是0或1,就是指调用isprime(x)会得到0或者1;3,函数return过来的值只是复制过来的值,如果x是函数中定义的局部变量不能这么”isprime(x)=x“赋值的少年,你要好好补补了,问的问题都好奇怪,可能我说的你也不明白,但我尽力了,^_^
是原来的x的值,形参只是将X的值复制了一份,对原来的没有影响,ispime(x)函数值为0或者1.,return x的话也是isprime函数的返回值,跟主函数里面的x没有关系
C语言大神出来看看。帮忙写个程序:
#include &stdio.h&void main(){int i,n,s=1;scanf(&%...
求一个c语言大神,就是看到c语言程序就能读懂,帮我读几个程序,跪谢了:
#include &stdio.h& #include &stdlib.h& //输入一个数字计算它...
求大神帮我看一下我c语言的程序哪里出现问题了:
1)在头文件上方加上以下语句: #define _CRT_SECURE_NO_WARNINGS //...
求大神帮忙,帮我编一个C语言程序:
#include &stdio.h& #include &stdlib.h& #include &t...
求c语言大神 帮忙做程序:
term 精度 eps 值 你可以另给。 这里 设为 1E-06 #include #include...
C语言程序出错了,哪位大神能帮看下:
写了两次函数。 #include&stdio.h&float fun(int m,int n){ f...
有个C语言程序看不懂了,求大神详解:
i= 0 chi[0] 是 &#039;6&#039; 满足 ch[0]&=&#039;0&#039; && ch[0]&=&#039;9&#039; 执行s=...
C语言 大神帮忙看看这个程序问题在哪?新手 请详解:
#include &stdio.h&double fun(double e){int i = 0;d...
C语言的作业、求程序猿大神!:
#include &stdio.h& int A[8]={1,1,2,6,24,120,720,50...
一道C语言程序题,求大神帮忙!!!:
*2*4*6*8* 这个程序的意思是将a[i],i为偶数的字符换成*表示
*2*4*6*8* 这个程序的意思是将a[i],i为偶数的字符换成*表示
下载文件:判别C语言源代码作业是否部分拷贝.cpp|这是我以前写的,没用到什么复杂算法,看一下符合你...
#include &stdio.h& double calculate_charges(double...
用易语言打开 然后编译就好了
递归方式N的阶乘: Private Function fnJC(n As Integer) As I...
#include&cstdio&int main(){scanf(&%d&,&n);fo...
如果是注释一行就用 // 如果是一个段落 /*这里是内容 */
这个不是多难。。
1. #include &stdio.h& void main() { scanf(&...C语言中的printf用%d输出float类型数据出现或以%f输出int型数据的结果为什么是0
*******************************float类型%d输出**************************************
& & & float
如果用printf("%d",a);输出的是0。&
但float型用%d输出是否一定是0呢,答案肯定不都是0;
& & & 为什么 7.5
用%d输出的是0?分析如下:
首先来了解下printf的输出格式,int 和 long int 都是32位的,用%d输出;float 、double都是%f输出,但
float 是32位的,double 是64位的,所以在参数传递的时候C语言统一将 float 类型数值传换为 double
类型再传入 printf 函数。如果是32位整型则输出格式为%lld。
& & & 下面来讲一下
&float a=7.5
printf("%d",a)输出为0的情况:
%d只输出低32位的数据,并将这些32位二进制以十进制数输出,编译器首先将
7.5从float类型转换为double类型,7.5在内存中的存放方式是0x40f00000,转换成double类型在内存中的数据就是这个0x401e,这个内存数据可以很明显看出低32位全是0,而%d则只能截取到低32位,所以这个以%d输出7.5的数值当然是
0了。如大家不相信可以用%lld
输出看看,这个%lld就很读到低64位数据,读出的结果就是0x401e,在屏幕上看到一个很大的十进制数。
如果我一定要输出7.5在内存中的存放方法怎么办呢?
可以用printf("%d",*(int
*)&a);这里做了一下处理,不是直接把a传进来,把a所在地址里的内容处理了一下,不管a是什么类型,只对地址进行操作,利用(int
*)&a,将a所在地址中的内容0x40f00000直接当成 int 类型传给printf,int
的类型数据不会再转成double类型了,所以输出正常,这个只是针对浮点型数据只占低32位,如果输出64位还得用%lld格式控制输出。
如果用printf("%d",(int)a),输出行不行,这个强制类型转换只针对a的数据类型进行转换,7.5转换 int
类型是7,而上面的*(int
*)&a,是对内存中的实际存储数据进行操作,蔽开数据类型这一层面,只将这个数据0x40f00000直接转成int类型输出。而(int)a,要先看a的类型,C语言会根据所要数据类型,对内存存储的数据进行改变,以便可以用int类型正确解析内存数据。
如果用printf("%d",(float)a),输出什么,输出的是0,这个只是将a的float类型还转成float类型,还是自动转成doube类型,传给printf函数。
为什么float非要转成double类型呢,因为printf格式控制浮点型输出只有%f,所以统一按doube类型输出,不像整型有32位的%d或%ld,64位的有%lld,这就将32位整型和64位整型用不同的格式控制分开了,而%f则没有,所以printf输出的浮点数其实是统一遍历了64位内存,如果float传入printf没有进行转换,那么printf输出高32位数据将不可预知,printf输出结果也就不正确了,因此传入printf的浮点数都会被编译器隐含转成double类型。
***********************int类型%f格式输出************************************
& & & 如果定义了int
a=0x40f00000;用printf("%f",a)输出的结果是多少呢?
答案是0,至少我们看的屏幕上显示的是0.000000,实际值可不是0啊,只是我们显示的精度只能有15位小数,而实际的数据可能很小很小,0.0000....000几百个0后会有几个有效数据,我们分析一下。
首先C语言把a传进printf,因为a是整型,所以不会自动转成double型数据,直接将0x40f00000传进printf,而%f寻的是64位内存,也就是把0xf00000这个内存中的数据当成浮点型输出来,那浮点型的数据是多少呢,又是怎么存储的呢?
64位浮点数的存放方式:
& & & 63位
& & 62~52位 &
& & & 1个符号位
&11个阶数 & &
从0xf00000来看
1)符号位是0,表示正
& & 2)阶数是0,表示-1023 + 1023 =
0,用指数表示:1.#*2^-1023,‘#’是代表尾数。
3)尾数就是,0x00
4)浮点二进制表示
&2#1.0000*2^(-1023),-1023次方可想而知有多小。
这就是为什么我们的int型数据用%f输出是0.000000的原因。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。为什么很多 C 开源库函数返回 0 代表执行成功? - 知乎114被浏览16096分享邀请回答int err;
err = foo();
类似这样,if判断的含义就是“如果有错误”。在这种代码风格下,没有错误时自然返回0。81 条评论分享收藏感谢收起381 条评论分享收藏感谢收起查看更多回答

我要回帖

更多关于 c语言二进制输出 的文章

 

随机推荐