C语言问题,c-'0'是什么意思
1.c-'0'是什么意思
2.int ndigit[10];是什么意思
3.if(c==' '||c=='\n'||c=='\t')的c==''中间要打空格吗
4.printf(",white space=%d,other=%d\n",nwhite,nother);为什么要加第一个,逗号
#include<stdio.h>
main()
{
int c,i,nwhite,nother;
int ndigit[10];
nwhite=nother=0;
for(i=0;i<10;++i)
ndigit[i]=0;
while((c=getchar())!=EOF)
if(c==' '||c=='\n'||c=='\t')
++nwhite'
else if(c>='0'&&c<='9')
++ndigit[c-'0'];
else
++nother;
printf("digits=");
for(i=o;i<10;++i)
printf("%d",ndigit[i]);
printf(",white space=%d,other=%d\n",nwhite,nother);
}
为什么要-‘0’啊,'0‘在这是等于0吗,那为什么要减,直接c不可以吗 展开
在ASCII编码中, 0~9 的编码是 0x30~0x39, 所以当c在‘0'~'9'的范围中时,c - '0' 就相当于计算c的实际数值,例如 c 是 '1', 则 c - '0' = 1, 把字符值转为数字值了
#include<stdio.h>
int main()
{
int a,b;
a=!0;b=!!0;
printf("a=%d,b=%d\n",a,b);return 0;
}
/*输出结果:a=1,b=0
*/扩展资料
0的ASCII码是30,就是先把30转变为与c一样的数据类型【30】,然后用c减去【30】
(1)+,—,*,/运算的两个数中有一个为float或double型,结果是double型,因为统一将所有float型数据都先转换为double型,然后进行运算。
(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double
型,然后进行运算,结果是double型。
(3)字符(char)型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。字符型可以直接与整型数据进行运算。如果字符型数据与实型数据进行运算,则将字符的ASCII代码转换为double型数据,然后进行运算。
参考资料:百度百科 - C语言
意思是:
字符‘0’对应的ASCII码是48,48对应的十六进制数就是0x30,通常我们在编程的时候,用字符转化为数字的时候经常要用到,比如要将‘8’转换为数字8,在语句中这样写就可以了,“ 8+‘0’”。这里的8就是数字。
字符‘0’和数字0的区别:
前者是字符常量,后者是整形常量,它们的含义和在计算机中的存储方式截然不同。但是字符常量可以像整数一样在程序中参与相关运算。
扩展资料
“0”和‘0’的区别。
首先“0”是字符串常量,字符串常量是由一对双引号括起的字符序列。
例如:“CHINA”,“I LOVE YOU”,“123”等都是合法的字符串常量。
‘0’是字符常量,字符串常量和字符常量是不同的量。
1、字符常量由单引号括起来;字符串常量由双引号括起来。
2、字符常量只能是单个字符;字符串常量则可以含一个或多个字符。
参考资料:百度百科——C语言
c语言'\0' 意思:
字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0" (ASCII码为0)。这是字符串结束的标志。
输出thanks的方法:
#include <stdio.h>
void main()
{
char a;
a=getchar();
if (a=='\0');
printf("thanks");
}
运行时输入:回车,就会显示thanks。
扩展资料
C语言的其他基本数据类型:
1、void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增)
2、char:字符型类型数据,属于整型数据的一种。(K&R时期引入)
3、int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R时期引入)
4、float:单精度浮点型数据,属于浮点数据的一种。(K&R时期引入)
5、double:双精度浮点型数据,属于浮点数据的一种。(K&R时期引入)
#include<stdio.h>
main()
{
int c,i,nwhite,nother;
int ndigit[10];//ndigit[10]用来存放相应的各个数字的次数,ndigit[0]存放0的次数,,,ndight[9]存放9的次数
nwhite=nother=0;
for(i=0;i<10;++i)
ndigit[i]=0;
while((c=getchar())!=EOF)
if(c==' '||c=='\n'||c=='\t')//中间必须打空格,就像'a'一样,中间是什么就写什么,'\n' '\t' ' '
++nwhite'
else if(c>='0'&&c<='9')
++ndigit[c-'0'];//这是ASCII码表示的,比如当检测到输入的数字是'0'时++ndigit[c-'0']即为++ndigit[0-0],当检测到输入的数字是'5'时++ndigit['5'-'0'=5]即为++ndigit[5]
else
++nother;
printf("digits=");
for(i=o;i<10;++i)
printf("%d",ndigit[i]);
printf(",white space=%d,other=%d\n",nwhite,nother);//这里的逗号是输出时为了分隔各个数字用的,也可以用空格取代,像这样的问题,你可以去掉逗号输出比较就可以自己解决;
}
希望可以帮到你!
谢谢你,请问
1。ndigit[1]是指数字1出现的个数,那么dnigit[10]就是数字0到9出现的个数吗
2。我用vc试了下,发现不打空格有error(1),打了就没有,为什么他们都说不需要打空格
3。输入的数字’5‘的时候是++ndigit['5'-'0'=5]为什么不能直接++ndigit[5]
4这个没有问题看懂了是跟前面分开用的
1,对,相应脚码对应相应数字出现次数!
2,这个道理很简单,因为他们错了!
3,这是代码简写啊,你想想,如果写++ndigit[0];++ndigit[1];.。。++ndigit[9]这会多麻烦啊,