问几个基础问题,大家都会。帮忙

summerYe 2010-04-03 09:56:34
1.在C语言中,合法的字符常量是()
A '\084' B'x\ab'C'123' D"\0"//能够提供个解释吗?

2.设有:int a = 1,b=2,c=3,d=4,m=2,n=2;则执行(m = a>b)&&(n= c>d)后m,n的值分别为( )//是否为0,2?主要是想问执行了m=a>b后错误就不执行n=c>d了?

3.运行如下程序段的结果是()
char a[8],b[]="hello";
a= b;
printf("%s",a);
我猜测是(编译出错),是不是因为数组初始化的时候必须在定义的时候就初始化?或者还有其他原因比如把常量区的值赋给字符数组也是不行的对不对?

4.以下程序段运行结果是()
char str[]="ab\n\012"";
printf("%d\n",strlen(str));//后面的八进制怎么算?
...全文
93 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy330206 2010-04-03
  • 打赏
  • 举报
回复
貌似第一题没有答案的
c是不是少了个\
jbz001 2010-04-03
  • 打赏
  • 举报
回复
第一个题居然看走眼了
huanmie_09 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 summerye 的回复:]
第一题答案说是B,还有最后一题答案说是5 不过我在编译器上运行通不国.........
不过我似乎不应该相信答案.....
[/Quote]
第一题你可以看看c语言程序设计_现代方法里7.3.1转义序列那一小节。
至于第四个,你可以在自己的机器上跑一下,直接看运行结果
liuxingjin 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 huanmie_09 的回复:]
1题:
A '\084'为八进制转义序列,不能出现大于等于8的字符
B'x\ab'为十六进制转义字符,但x和\都不属于十六进制
C'123'
D"\0"双引号为字符串常量
[/Quote]

同意
summerYe 2010-04-03
  • 打赏
  • 举报
回复
第一题答案说是B,还有最后一题答案说是5 不过我在编译器上运行通不国.........
不过我似乎不应该相信答案.....
cy330206 2010-04-03
  • 打赏
  • 举报
回复
字符常量是用单括号括起来的一个字符。

有两种表示方法:
一种是用该字符的图形符号,如'b' ,'y','*'。
另外还可以用字符的ASCII码表示,即用反斜符(\)开头,后跟字符的ASCII码,这种方法也称为转义序列表示法,具体方法是:有两种形式:

一种是用字符的八进制ASCII码,表示为:\ddd这里,ddd是八进制值。

另一种使用字符的十六进制ASCII码值,表示为 \xhh 这里hh是两位十六进制值。
huanmie_09 2010-04-03
  • 打赏
  • 举报
回复
1题:
A '\084'为八进制转义序列,不能出现大于等于8的字符
B'x\ab'为十六进制转义字符,但x和\都不属于十六进制
C'123'
D"\0"双引号为字符串常量
lovesi3344 2010-04-03
  • 打赏
  • 举报
回复
第一题选D
'' 单引号内只能有一个字符 所以ABC都错
“”双引号内的字符串编译器会自动为它加上空字符\0 所以D双引号内不止一个字符,所以D正确

[Quote=引用 5 楼 summerye 的回复:]
各位帮忙把第一题解释下,答不对也可以接点小分.....
[/Quote]
summerYe 2010-04-03
  • 打赏
  • 举报
回复
因为第一题答案是B。这题我完全不会...
summerYe 2010-04-03
  • 打赏
  • 举报
回复
各位帮忙把第一题解释下,答不对也可以接点小分.....
cy330206 2010-04-03
  • 打赏
  • 举报
回复
我讲错了,二楼有一个地方也讲错了,,关于第三个问题,a应该是指针常量
cy330206 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huanmie_09 的回复:]
1、选c
2、m=0,n=2;(m = a>b)&&(n= c>d)注意关系运算符的短路运算特性,当a>b为假,所以m=0, &&左边的表达式为假,右边的表达式将不进行运算,整个表达式为假.
3、a=b这里错了,a是常量指针,给字符串赋值用strcpy(a,b);
4、\n和\0是都是转义字符,\n表示回车符,\0表示字符串结束符,strlen函数统计字符串的……
[/Quote]

up
我讲讲第三个为什么错,使用数组名字的时候就退化成了常量指针,常量是不可以当做左值的
huanmie_09 2010-04-03
  • 打赏
  • 举报
回复
1、选c
2、m=0,n=2;(m = a>b)&&(n= c>d)注意关系运算符的短路运算特性,当a>b为假,所以m=0, &&左边的表达式为假,右边的表达式将不进行运算,整个表达式为假.
3、a=b这里错了,a是常量指针,给字符串赋值用strcpy(a,b);
4、\n和\0是都是转义字符,\n表示回车符,\0表示字符串结束符,strlen函数统计字符串的长度是以\0字符最为结束符的.所以结果应该为4.

jbz001 2010-04-03
  • 打赏
  • 举报
回复
第一个:D。前三个都是非法的字符。

第二个:应该为0.(m = a>b)的值为0,(n= c>d)的值也为0。好像后面的不再执行了。

第三个:好像没有什么错误。你的话有点绕。

第四个:应该输出4。str是个字符串,哪来的八进制!到'\0'的时候就截止了,后面的就不算了。

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧