有关C语言的几道题,求答案及解释

1.若变量已正确定义,在执行以下while语句时,输出字符A后,ch的值是__.while(ch=getchar()=='A');2.库函数strcpy用以复制字符串。若... 1.若变量已正确定义,在执行以下while语句时,输出字符A后,ch的值是__.
while(ch=getchar()=='A');
2.库函数strcpy用以复制字符串。若有定义和语句:
char str1[]="string",str2[8],*str3,*str4="string";
则以下对库函数strcpy的运用错误的是
A)strcpy(str1,"HELLO1"); B)strcpy(str2,"HELLO2");
C)strcpy(str3,"HELLO3"); D)strcpy(str4,"HELLO");
3.以下程序运行后的输出结果是__
#include<stdio.h>
#include<string.h>
main()
{char s[20]="goodgood!",*sp=s; sp=sp+2; sp="to"; puts(s);}
还是补充一下吧,书上的答案是0,D,goodgood! 最后一个现在明白了,这前两个就晕乎了的……
展开
 我来答
我是凡河
2009-08-21 · 超过19用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:63.4万
展开全部
1、题目倒数第二句改为“输入字符A后”的话,ch的值是'A',getchar()是从标准输入流读取一个字符,并返回这个字符,赋值给了ch,所以ch的值就是你输入的那个字符,你输入A,它的值就是A
2、暂时还不是很明白,C和D都能在win-tc下编译通过,值都存在变量str3,和str4里面,可以通过printf("%s",strX);看,但是没有字符串没有存在指针指向的地址,不懂,指针还待学习……
3、输出为goodgood;
*sp = s表示把s数组的首地址赋予指针sp,
sp = sp + 2让指针sp往前移两个位置,也就是它现在指向了s[2],原来是指向s[0]
sp = “to”我想是把“to”赋予sp,因为sp本身也是个变量,原来存储的是s数组的地址,现在变成了“to”,如果你在后面加上
printf("%s",sp);
你会发现输出的是to,
puts(s)就是输出字符串s;
可以明显发现,后面几条语句根本没有对数组S进行操作,所以输出结果就是s初始化的值
*******************************************************************************
目前的认识就这些了
wuqianhu12
2009-08-21 · TA获得超过634个赞
知道答主
回答量:92
采纳率:0%
帮助的人:136万
展开全部
1 int ch = true(1),
while(ch=getchar()=='A');
等价于while(getchar() == 'A')
ch = 1;
2 选C 原因是在用strcpy的时候要确保有足够的空间去存储要赋值的内容,明显str3它只是一个定义了一个指针,并没有指向具体的内存,因此无法赋值,其它三个在定义的时候就初始化了,指向了具体的内存;

3 goodgood!
原因是在指针指向的时候它的起始地址(也就是s)并没有改变,只是指向它的指针sp发生了变化,sp先是指向了第三个字符o,后来给让它指向了to,所以最后sp指向的内容为to,而puts(s)还是原来的内容goodgood!
还有不懂的继续交流~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b173602
2009-08-21 · TA获得超过1680个赞
知道小有建树答主
回答量:1466
采纳率:0%
帮助的人:825万
展开全部
1.若变量已正确定义,在执行以下while语句时,输出字符A后,ch的值是__.
while(ch=getchar()=='A');//是不是输入字符A后啊 值应该是65,就是A的ASCII码,我估计你这ch是整型变量
2.库函数strcpy用以复制字符串。若有定义和语句:
char str1[]="string",str2[8],*str3,*str4="string";
则以下对库函数strcpy的运用错误的是
A)strcpy(str1,"HELLO1"); B)strcpy(str2,"HELLO2");
C)strcpy(str3,"HELLO3"); D)strcpy(str4,"HELLO");//选C,因为犯了指针未初始化就使用并且存储在只读域中,无法写入的错误
3.以下程序运行后的输出结果是__
#include<stdio.h>
#include<string.h>
main()
{char s[20]="goodgood!",*sp=s; sp=sp+2; sp="to"; puts(s);} //输出是:"goodgood"
运行一下就知道了,s字符串没有改变的原因四sp="to";是对指针sp指示位置的改变,不是改变其内容,所以输出结果不变

PS:第一道题5楼正解...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
OldOracle
2009-08-21 · TA获得超过247个赞
知道答主
回答量:77
采纳率:0%
帮助的人:0
展开全部
1: 0, 赋值操作的优先级低于==,所以退出while时==表达式值为0,并且这个0被赋值给ch

2: D 这个string存储在只读区域,无法对其执行写操作,否则抛出异常

3: goodgood,两条赋值语句都是在改变sp指针的值,对s无影响

补充:
2: 当然C也是错的,应该选C,D...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
storm7477
2009-08-21 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:109万
展开全部
1:回车. 它是基于行缓冲,是一个字符接一个字符的读 2:C.因为这个指针可以指向任何位置,可能导致系统崩溃 3:goodgood!. sp是指针,无论它指向哪,s数组不变,故原样输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式