·初学者问一个C语言的问题。

作者&投稿:褚玲 (若有异议请与网页底部的电邮联系)
一个c语言初学者问个问题~

#include
float(float
f)
//调用函数在main函数前就不用申明,如果在main函数后就要申明
{
float
c;
c=5.0/9*(f-32);
return(c);
}
void
main()
{
float
c,F
;
printf("请输入一个华氏温度:
");
scanf("%f",&f);
c=float(F);
printf("摄氏温度为:
");
printf(".2%f
",c);//.2是格式控制符
}

试下*s-*p

s和p是两个指针.p跟c一样指向数组第一个地址,&c[5]是提取c[5]的地址,其实就等到(c+5),所以s-p输出应该是5

简单地说,一个float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位.这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)。
1、符号位。最高位也就是第31位表示这个实数是正数还是负数,为0表示正数或0,为1表示负数.
2、阶码。第30位到第23位这8个二进制位表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和即所谓阶码.
规格化的二进制实数的指数只能在-127----+127之间,所以,一个float型数的最大值在+2^127即+3.4*10^38,最小值在-2^127即-3.4*10^38.
3、尾数。其他最低的23位即第22位到第0位表示该实数转化为规格化的二进制实数后小数点以后的其余各位即所谓尾数.

例如,将十进制178.125表示成机器内的32个字节的二进制形式.

第一步:将128.125表示成二进制数:(178.125)(十进制数)=(10110010.001)(二进制形式);
第二步:将二进制形式的浮点实数转化为规格化的形式:(小数点向左移动7个二进制位可以得到)
10110010.001=1.0110010001*2^7 因而产生了以下三项:
符号位:该数为正数,故第31位为0,占一个二进制位.
阶码:指数为7,故其阶码为127+7=134=(10000110)(二进制),占从第30到第23共8个二进制位.
尾数为小数点后的部分, 即0110010001.因为尾数共23个二进制位,在后面补13个0,即01100100010000000000000
所以,178.125在内存中的实际表示方式为:
0 10000110 01100100010000000000000

再如,将-0.15625表示成机器内的32个字节的形式.
第一步:将-0.15625表示成二进制形式: (-0.15625)(十进制数)=(-0.00101)(二进制形式);
第二步:将二进制形式的浮点数转化为规格化的形式:(小数点向右移动3个二进制位可以得到)
-0.00101=-1.01*2^(-3) 同样,产生了三项:
符号位:该数为负数,故第31位为1,占一个二进制位;
阶码:指数为-3,故其阶码为127+(-3)=124=01111100,占从第30到第23共8个二进制位;
尾数为小数点后的01,当然后面要补21个0;
所以,-0.15625在内存中的实际表示形式为:
1 01111100 01000000000000000000000

可以通过以下的C程序验证之:

#include<stdio.h>

printfFloatBit(float f) /*功能:从高位到低位依次输出f的32个二进制位*/
{ int i,j;
unsigned int byte=0;
char ch,*p;
p=(char *)(&f); /*将f的地址以char形式赋予p*/
printf("%20.7f: ",f);

for(i=sizeof(float)-1;i>=0;i--) /*每循环一次将f从高到低产生一个字节*/
{
ch=*(p+i);
byte=ch;

for(j=1;j<=8;j++) /*每循环一次将一个字节从高到低产生一个二进制位*/
{ if(byte>=128) printf("1");
else printf("0");
byte<<=1;
byte&=255; /*只保留最低8位,将左移后可能产生的进位舍去*/
}
}

printf("\n");
}

main()
{ float f1=178.125;
float f2=-0.15625;
clrscr();

printfFloatBit(f1);
printfFloatBit(f2);

system("pause");
}

也没有发现问题。
但是我发现如果输出时用%5.2f的格式就可以正确的输出。
也可以把float改为double,这时输入也没有问题。

楼猪
不好意思 我找了很久都没找到
分数给我吧~~~

具体为啥也不清楚 char name[10] 以前我是这样改的 指针的问题吧


C语言编程问题,初学者,麻烦简单些,谢谢(*°∀°)=3?
include "stdio.h"int main(){ int sex,height;float weight,bzweight;\/\/输入体重和标准体重 printf("输入性别(0-男性,1-女性):");scanf("%d",&sex);printf("输入身高(cm):");scanf("%d",&height);printf("输入体重(kg):");scanf("%f",&weight);if(sex==0)bzweight=(height-...

关于初学C语言初学者的一个问题
3.2e3就是3.2x10^3,确实是3200 123.45e-2就是123.45x10^-2,就是1.2345,

c语言基础代码(初学者必备)
主函数是C程序的入口点。在上面的程序中,我们定义了一个名为“main”的函数。这个函数是程序的起点,它包含了程序的主要代码。在这个函数中,我们使用了printf()函数来输出“Hello,World!”。如何编译和运行C语言程序?要编译和运行C语言程序,您需要一个C语言编译器。C语言编译器是一种软件,用于将C...

c语言初学者 提问
字符型常量所表示的值是字符型变量所能包含的值。我们可以用ASCII表达式来表示一个字符型常量,或者用单引号内加反斜杠表示转义字符。'A', '\\x2f', '\\013';其中:\\x表示后面的字符是十六进制数,\\0表示后面的字符是八进制数。注意:在Turbo C 2.0中,字符型常量表示数的范围是-128到127,除非...

C语言初学者,几个简单问题,求解释!
先说1 while(x<15) y++,x+=++y;这里中间的是逗号,代表y++,x+=++y;是一个语句,由于优先关系,所以先++y,然后是y++,然后是x=x+y,这样的话,一次循环以后,x=2,y=2,然后每次循环后,y都会加2,x加上上一次的y+2,这样,第二次,x=6,y=4,第三次,x=12,y=6,第四次,x=20...

编程初学者的问题 c语言
s->top的意思是s指向的结构中的top变量,这是个变量名

一个关于C语言的问题,求教!!
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“...

C语言初学问题
include "stdio.h"int main(void){ int i , k;printf("输入任何整数:");scanf("%d", &i);printf("i = %d\\n",i);scanf("%d",&k);printf("k = %d\\n",k);return 0;} 楼主之前在scanf("%d",&k);这里少加了& 这是个地址指向符,是一定要加的,表示将终端输入的输入至k的...

c语言编程怎样入门
1、首先我们下载一款适合C语言的编译器,今天为大家讲解的C语言编译器为CodeBlocks,该编译器没有太过复杂,很符合初学者,简单上手快。2、首先双击打开编译器,进入登录选择界面,我们选择添加一个新项目。3、然后进入选择界面,优先选择“Console application”,然后双击进入下一个界面。4、进入之后便是...

C语言初学者问题
include <stdio.h> int main(){ int a,b,s;scanf("%d,%d",&a,&b);a=a;b=b;s=a+b;printf("a=%d\\n,b=%d\\n,c=%d\\n",a,b,s);return 0;}

建德市17276231263: C语言新手问大佬们个问题 -
藩妹洛沃: 等待输入n呢……且,scanf("%f",&d);应该为scanf("%lf",&d);.不过这并不影响你提的问题.

建德市17276231263: C语言初学者的提问 -
藩妹洛沃: c语言自带函数可以在帮助中查找用法,因为用法有很多. 自定义函数的用法如下: 返回值类型 函数名 (函数参数) { 函数内容 } 比如你说的判断素数的函数该这样写 bool isprime(int x) { int i; for (i=2;i{ if (x mod i==0) return FALSE; } return TRUE; } 在主函数中调用该函数,如果返回TRUE就是素数,否则是合数.下面的网站上有c语言的一些教程,可以去看下.

建德市17276231263: 初学C语言问题求解... -
藩妹洛沃: c语言中有位操作,但没有位类型,假设有位类型,我们取名叫bit,那么bit这种类型的长度就是1,那么你说1位能表示多少个数呢?如果你是初学者可能会说10个数:0~9,但是计算机是使用二进制计数的,也就是说计算机只认识0和1,所以,...

建德市17276231263: 一道初学者级别的C语言题. -
藩妹洛沃: #include "stdio.h" void main() {int year,month,date; int day=0; //表示第几天 int i; int tag=0; //表示是闰年还是平年 printf("请输入年月日\n");scanf("%d %d %d",&year,&month,&date); //输入年月日if((year%4==0&&year%100!=0)...

建德市17276231263: 关于C语言初学者的疑惑 -
藩妹洛沃: 再C中规定 输入函数标准格式为scanf(格式符,变量地址) 其中的格式符只能输入规定的格式符号如:%f、%d.... 如果其中掺杂了其他字符 我们在输入的时候就要按照格式符后面出现的字符原样输入后才能给变量地址正确的赋值. 对于第二个问题来说: 你再两个%d加了个逗号后 正确的输入格式为常量1 逗号“,”常量2 才能得到正确结果 而你输入的是:常量1 空格 常量2 虽然貌似如入正确 但是你输入的常量所付给变量a的值为12 而变量b所得到的是个不确定的值 所以产生了接下来的结果啦

建德市17276231263: 一个c语言初学者的问题 -
藩妹洛沃: if(y=0)=====>if(y==0) 两个=号

建德市17276231263: 一个C语言的基础问题VeryEasy!我只是一个对C语言还没入门
藩妹洛沃: 上面的几位讲得都没有错呢,不过我想,因为你是初学者,他们这样说,你可能还不是很清楚,所以我想讲得更详细一点,希望我的表达能力可以做到. 在c语言里,整型...

建德市17276231263: 你好,我是个C语言的初学者,有几道题目想问你下,希望你帮我看看,谢谢!麻烦你了 -
藩妹洛沃: #include #include int prime(int n) {int m,i=2,t;t=(int)sqrt(n);/*A 这个条件仅仅只是节省时间用到;因为一个素数从2开始除,如果除到它本身的开方还没有整除的数出现说明它是素数*/for(;i<=t;i++)if(n%i==0)//若此条件成立说明n不是素...

建德市17276231263: C语言初学者提问 -
藩妹洛沃: 你看错了一个是data一个是date~是不一样的~~可以连在一块写,但是这样在有些情况下会出错,以后你用到就知道~一般情况可以这样写~计算机里的数是用二进制表示的,最左边的这一位一般用来表示这个数是...

建德市17276231263: 请大神帮忙解答一个初学者接触的C语言问题 -
藩妹洛沃: 用数组存储,建立一个100个元素的数组 int a[100]={0};0表示未出列,1表示已出列 用2重循环,外层循环98次,代表出列98个人.里层循环3次,代表1-2-3的报数 每次里层循环结束找到一个人,如果这个数组元素是0,则置1;如果是1,则找他...

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