C语言字符型问题

一,这个程序段输出结果为什么是a?我觉得是A 。
char x='A';
x=(x>='A'&&x<='Z')?(x+32):x;
printf("%c\n",x);

因为我觉得那个条件表达式的计算,表达式1的结果是x=1,而x初值是 'A',那么表达式1的值就为零,就该计算表达式3的值作为整个条件表达式的值啊。

二,还有这一题,看不懂做不来。请大虾们讲解一下解题过程。

若变量以正确定义,在执行以下while语句时,输入字符A后,ch的值是
while(ch=getchar()=='A');
答案是0

三,请编写程序,输入一行数字字符(用回车结束),每个数字字符的前后都有空格。请编程,把这一行中的数字转换成一个整数。例如,输入
2 4 8 3 <CR>
则输出整数:2483

书后答案的参考程序段
while((ch=getchar())!='\n')
{ if(ch>='0'&&ch<='9')n=n*10+ch-'0';
}

这个n=n*10+ch-'0'是什么意思?是怎么转换成一个整数了

一、注意这个三目运算的用法,在这儿,条件表达式1的结果是“真”(x>='A'满足x='A'),x的值就是表达式2的值:x=x+32,所以,x='a'
二、注意运算符“==”和运算符“=”的优先级,前者的优先级高,在这道题里,还要注意while循环后没有语句。执行的结果是这样的:
当输入'A'时,getchar()函数返回'A',即是先进行getchar()=='A'的判断,此表达式为真,ch=1,while的条件满足,执行while后的语句,语句为空,进行下一个循环,输入A后,你输入的是回车键,那么getchar=='A'的值为假,ch=0,不满足while循环语句的条件,退出循环,所以最后ch的值为0.(注意循环执行了一次,你输入的是两个字符)。
三、 n的初始值为0,当你输入2时,ch-'0'的含义就是把字符2转换为整数2(字符2的ASCII码为50,字符0的ASCII码值为48)此时n=n*10+ch-'0'=2,输入4时,n=2*10+'4'-'0'=2*10+4=24....以下照着做。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-07-28
问题一、ASCII中,小写字母在大写字母之后,如a-z跟着就A-Z,现在x判断出来是(x>='A'&&x<='Z')为真,所以执行‘:’号左边的表达式x+32然后赋值给x,所以输出会变成大写A
问题二、先判断输入是否为‘A’如果为'A'则ch=1,否则=0,由于是循环,所以知道为0时才会跳出!所以在‘;’之后输出ch的话就是0
问题三、首先,n是用来进位用的,ch-‘0’是用来求出ch对应的整数,比如,ch是‘9’由于是字符型,所以ch真正的值是ASCII码值,只要减去‘0’的ASCII就可以得到9!因为‘0’~‘9’的ASCII是顺序排列的!现在解释一下n,n开始的时候是0,所以在运行n=n*10+ch-'0'实际上是n=ch-'0'的值,也就是字符串中数字的最高位!然后接着下一位处理的时候先要把前面一位的数字乘以10,然后再加!比如,9 8 7,先是9读取到,n=9,接着8读取到,就是n=9*10+8=98,最后7读取到得时候,就是n=98*10+7,就是最后的结果987!
第2个回答  2009-07-28
x=(x>='A'&&x<='Z')?(x+32):x;
计算时是使用A的asc码计算,A是65,a是97,所以输出的是a。

0就是true真,1是flase假,输入A跟‘A’相等,所以ch=true,也就等于0。

因为输入的数字是按照字符处理的,所以计算时也是按照字符处理,及字符的asc码,数字0的asc码是48,所以如果想把字符转换成我们想要的数字就要把每一个数都减去48,及-‘0’,所以ch-‘0’的目的就是把字符转换成数字,n*10就是升一位,你代个数试试就能明白,先是2,然后是24,248,2483,所以每次都乘10
第3个回答  2009-07-28
第一个问题要了解三目运算符 A?B:C 是怎样作用的
第三个问题要了解ASCII编码方式
第二个问题是运算符优先级的原因
第4个回答  2009-07-28
?操作符楼主不熟悉吧。。。
翻译下那语句就是
if=(x>='A'&&x<='Z')
{
x=x+32;
}
至于你所说的啥表达式1?3?不知道你说啥呢- -

----------------------------------------

为啥是0,我感觉是1, 判断getchar()=='A'后返回真,不就是1了嘛。。
。。。
循环第2次就是0啦,>.<,我真笨

----------------------------------------
n肯定是声名为int的。 int n=0;
ch-'0' 就是每次你写数字时候得到的对应int的值,比如你输入的2,char型它是等于50的,'0'对应的是48,当ch-'0'时候就是50-48,所以得出int的2。

while循环一直遇见回车退出循环,每次写数字就会更新n

-----------------------
3个问题合一起才20分啊。。囧

C语言字符型变量的问题
正确答案C,分析:A,绝对错误,c只能容纳一个 字符 ,'97'这是一种语法错误,没有这种 写法 B,错误,c只是一个 字符变量 ,不能容纳一个 字符串 指针 的地址 D,错误同B C,你可以理解为将 数值 97转换为ASCII对应为97的字符'a'然后赋值给c ...

怎么解决c语言字符输出的问题?
1.首先打开Microsoft Visual C++软件,单击“文件”菜单->“新建”,新建一个文件,文件名后缀为.c。2.新建好文件后,输入如下内容。3.然后我们在{ }之间输入函数的内容,我们先定义变量c1,变量的类型为char,字符型。4.然后,我们用printf语句进行输出。5.当内容输入好后,我们点击图中工具按钮,...

c语言编程时字符型数据全都变□了 怎么办?老师说是什么数组越界 我也...
想要输出字符3的话,应该是:printf("%c",'3');你说的情况或许与电脑的设置有关。以下是在Win7 , Dev C++环境下:

★C语言 关于字符型指针的赋值问题
A是正确的,字符串在内存中并没有记录其大小,而只是记录其首地址。所以A是正确的。B的意思是将字符串首地址赋给数组,不正确。C的意思是将含有一个字符串指针的结构体或者含有一个字符串指针的数组赋值给字符串指针,不正确。D的意思是将含有一个字符串指针的结构体或者含有一个字符串指针的数组赋值...

在C语言中,关于字符型指针初始化char *p="hello world" 的问题
对于字符串常量,编译器都是默认按其大小分配内存存放字符串,并把地址首地址赋值指针变量。如:char *p="hello world";其实编译的时候等于:const char str[] = "hello world";char *p = str;只不过这个 str 数组名你没法直接拿来用而已。

C语言简单的字符串、字符处理问题求助
使用trie树保存每个字串,在叶子节点的释义字段处放出现次数。然后遍历树。B、使用STL,用映射表 map<string,int> word_num,来记录每个出现字串及出现次数,然后遍历。两种做法都能很大提高效率。第二题:int word[256];初始化为0;读入字符ch,word[ch]++;这样能记录所有出现的字符及出现次数 ...

C语言的字符为什么可以进行加减乘除运算?
首行答案:C语言的字符型可以进行数值运算是因为字符在计算机内部是通过ASCII码值来表示的,而ASCII码值是数值型的。详细解释:在C语言中,字符变量是用char数据类型声明的。每个字符在内存中都有一个对应的ASCII码值,这是一个整数值。例如,字符'A'的ASCII码值是65,字符'a'的ASCII码值是97。因此,...

C语言问题,为什么字符型不用加取地址符,而double型要加取地址符?_百度...
不用加取地址符的是字符串型,而字符串名的实质其实是这个字符数组首字符的指针比如一个字符串str[10]="hello",其数据如下排列:str[0]---'h'str[1]---'e'str[2]---'l'str[3]---'l'str[4]---'o'str[5]---'\\0'而我们向scanf传入的并不是单独某个字符,而是字符串名str 字符串...

c语言中的赋值问题,字符型变量,ch='123' ch='a+b' ch
'123'这个字符不存在。字符通常指的是ASCII表中的那些字符。一个字符占一个字节,对应的ASCII值的返回也就是0-255。其它的三个表达式都是合法的(但不合理)比如:ch = 'a' + 'b'实际上就是a,b两个对应的ASCII值相加后的值相加。 97 + 98。

为什么C语言字符类型和字符串类型不能相互转换?
字符型和字符串型的区别:1.字符串型是由一对双引号括起来的字符序列如"abc";2.字符常量使用单引号括起来;3.字符常量智能是单个字符,而字符串常量包含一个或者多个字符;4.字符常量赋予一个字符变量,但是不能将一个字符串常量赋予一个字符变量,在C语言中没有 相应的字符串变量,但是可以用一...

相似回答
大家正在搜