一个选择题 大家帮帮忙吧 谢谢

下属对C语言字符数组的描述中错误的是()
A 字符数组可以存放字符串
B 字符数组的字符串可以整体输入输出
C 可以再赋值语句中通过赋值运算符“=”对字符数组整体赋值
D 不可以用关系运算符对字符数组中字符串进行比较

楼主给俺看完啊,不然俺白辛苦了。

搞错了没?这基础都这么好…… 选择C。c语言里数组是不可以用“=”整体付值的。
字符串是一串连续的内存,在很多性子和数组都很像,但字符串有他的特别的地方,那就是可以使用字符串函数。b选项可以用gets和puts解释。d选项:字符在内存里里是ascll码存储的,因此可以比的。至于细节还有点说头,详情请看我自己总结的点字符串的东西,还不是很全,但一般情况够用了。但有一点,字符串函数是认得\0,这个串结束标志的。

字符串处理函数:
字符串函数可分为:字符串输出(puts),输入(gets),合并(stract),拷贝(strcpy),比较(strcmp),转换,复制,搜索(strchr)
注意:这一章例题中的字符串可用指针代替。

1 字符串输出函数puts:
格式:puts(字符数组名);
功能:把字符数组中的字符串输出到显示器。

例:
#include <stdio.h>

main()
{
char a[]="made in china\r\nis well";
puts(a);
}
注意:puts()函数可以使用转义字符;
puts完全可以由printf函数取代,当要求按格式输出时通常用printf ;
puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为:
puts(s);
其中s为字符串变量(字符串数组名或字符串指针)。
puts()函数的作用与语printf("%s\n", s)相同。
例4:
main()
{
char s[20], *f; /*定义字符串数组和指针变量*/
strcpy(s, "Hello! Turbo C2.0"); /*字符串数组变量赋值*/
f="Thank you"; /*字符串指针变量赋值*/
puts(s);
puts(f);
}

2 字符串输入函gets:
格式:gets(字符数组名);
功能:从标准输入设备键盘上输入一个字符串;该函数得到一个函数值为该字符数组的首地址;
例:
#include <stdio.h>

main()
{
char a[15];

printf("in put a string:\r\n");
gets(a);
puts(a);
}
注意:gets函数不以输入中的“空格”为结束标志,这与scanf函数不同;
gets()函数
gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符
不属于这个字符串。其调用格式为:
gets(s);
其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)
函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,
空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符
串直到回车为止。
例5
main()
{
char s[20], *f;
printf("What's your name?\n");
gets(s); /*等待输入字符串直到回车结束*/
puts(s); /*将输入的字符串输出*/
puts("How old are you?");
gets(f);
puts(f);
}

3 字符串连接函数strcat:
格式:strcat(字符数组名1, 字符数组名2);
功能:把字符数组2里字符串连接到字符数组1里字符串的后边并删除字符串1的串结束标志’\0’;返回值为数组1的首地址,因此数组1要有足够的长度;
例:
#include <stdio.h>
#include <string.h>

main()
{
static char a[]="my name is ";
char b[15];

printf("in put your name\r\n");
gets(b);

strcat(a, b);
puts(a);
}

4 字符串拷贝函数strcpy:
格式:strcpy(字符数组名1, 字符数组名2);
功能:把字符数组2中的字符串拷贝到字符数组1中;字符数名2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。
例:
#include <stdio.h>
#include <string.h>

main()
{
char a[20];
char b[]="made in china";
strcpy(a, b);

puts(a);
}
注意:要求字符数组1要有足够的长度。

5 字符串比较函数:

注意:1、逐字对比判断字符的ASCII码值大小。
2、比较到某个字符判断出大小时立即结束。输出非零。
3、字符串相同时输出零

strcmp:
格式:strcmp(字符数组名1, 字符数组名2);
功能:按照ASCII码的顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
字符串1=字符串2,返回值=0;
字符串1>字符串2,返回值>0;
字符串1<字符串2,返回值<0;
本函数可以比较两个字符串常量,或比较数组和字符串常量。
例:
#include <stdio.h>
#include <string.h>

main()
{
int k;
char a[20];
char b[]="i love china";

printf("in put s string\r\n");
gets(a);
k=strcmp(a, b);

if(k==0)
printf("a=b\r\n");
if(k>0)
printf("a>b\r\n");
if(k<0)
printf("a<b\r\n");

}
注意:不是比较字符串长度,而是比较ASCII码的大小,可用于姓名字母排序。

strncmp:
格式:strncmp(字符数组名1,字符数组名2,int length);
功能:比较字符串1和字符串2的前length个字符;
字符串1=字符串2,返回值=0;
字符串1>字符串2,返回值>0;
字符串1<字符串2,返回值<0;
例:
#include <stdio.h>
#include <string.h>

main()
{
int k;
char *a="I love china";
char *b="I am happy";

k=strncmp(a, b, 6);
if(k>0)
printf("the string b is greater than string a\r\n");
if(k<0)
printf("the string b is less than string a\r\n");
if(k==0)
printf"(" the string b is equal string a\r\n ")
}

strncmpi:
格式:strncmp(字符数组名1,字符数组名2,int length);
功能:比较字符串1和字符串2的前length个字符,不区分大小写;
例:

6 测字符串长度函数strlen:
格式:strlen(字符数组名);
功能:测字符串的实际长度(不含串结束标志’\0’,但转义字符算一个字符),并作为函数的返回值;
例:
#include <stdio.h>
#include <string.h>

main()
{
int k;
char a[]="i love china";
k=strlen(a);

printf("the length of string is:%d\r\n", k);
}

注意;字符串不能用==或者!= 的只能用函数。

7 字符搜索函数strchr:
格式:strchr(字符数组名,待找的字符);
功能:查找字符串中首次出现字符的位置,并返回出现字符位置的指针,若字符不存在则返回NULL;

例:
#include <stdio.h>
#include <string.h>

main()
{
char a[30];
char *p, c='n';

strcpy(a, "I love china");
p=strchr(a, c);

if(p)
printf("the character %c is at position %d\r\n", c, p-a);
else
printf("the character is not found:\r\n");
}

注意:倒数第三句的(p-a)用法。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-08
下属对C语言字符数组的描述中错误的是(C)
A 字符数组可以存放字符串
B 字符数组的字符串可以整体输入输出
C 可以再赋值语句中通过赋值运算符“=”对字符数组整体赋值
D 不可以用关系运算符对字符数组中字符串进行比较
第2个回答  2010-10-08
选c。
必须用循环逐个复制数组中的元素。

A选项不解释了。
B选项是错的。即便是print函数之类的。其内部也是进行循环输出的。对字符串的操作,本质上是没有整体操作的。到汇编级别一定使用循环实现的。
D选项是正确的。两个字符串的比较需要用函数strcmp,或者自己用循环实现。没有char * = char*的形式。
第3个回答  2010-10-08
选A
楼主崩溃了。。。。
相似回答