单选题有以下函数: int fun(char *ps) {char *p;p=ps;if(*ps==NULL)return 0;while(*++p);return(p-ps); } 该函数的功能是(  )。A 计算字符串的长度B 实现字符串的赋值C 将字符串逆序存放D 计算字符串所占字节数

题目
单选题
有以下函数: int fun(char *ps) {  char *p;  p=ps;  if(*ps==NULL)return 0;  while(*++p);  return(p-ps); } 该函数的功能是(  )。
A

计算字符串的长度

B

实现字符串的赋值

C

将字符串逆序存放

D

计算字符串所占字节数


相似考题
更多“有以下函数: int fun(char *ps) {  char *p;  p=ps;  if(*ps==NULL)re”相关问题
  • 第1题:

    有以下程序 main() {char s[]={"aeiou"},*ps; ps=s; printf("%c\n",*ps+4); } 程序运行后输出的结果是______。

    A.a

    B.e

    C.u

    D.元素s[4]的地址


    正确答案:B
    解析:此题中先定义一个指针变量ps,并将s的首地址赋给此指针变量,*ps+4相当于先从指针变量ps指向的地址中取出相应数据“a”后,对此数据加4,a的ASCⅡ码为32,32+4=36,对应于字符e,所以答案选B。

  • 第2题:

    有以下程序:includevoid fun(char**p){++P;printf("%s\n",*p);}main()char*a[]={"Morn

    有以下程序: #include<stdio.h> void fun(char**p) { ++P;printf("%s\n",*p);} main() char*a[]={"Morning","Afternoon","Evening","Night"}; fun(A); } 程序的运行结果是( )。

    A.Afternoon

    B.fternoon

    C.Morning

    D.oring


    正确答案:A

  • 第3题:

    请编写一个函数int stringLen(char*ps),该函数能计算出字符串ps的长度,函数返回值就是字符串的长度(不包括字符串结束标识号'\0')。本题要求:用指针方式及循环来实现该函数。

    注意;部分源程序已存在考生文件夹下的文件PROC6,cpp中。

    请勿修改主函数和其他函数中的任何内容,仅在函数stringLen()的花括号中填写若干语句。

    文件PROC6.cpp的内容如下:

    //PROC6.cpp

    include<iostream>

    using namespace std;

    int stringLen(char *);

    int main()

    {

    char str[100],*p;

    cout<<"Input your string please!\n";

    cin>>str;

    p=str;

    cout<<"The lenth of your string is "<<stringLen(p)<<end1;

    return 0;

    }

    int stringLen(char *ps)

    {

    // * * * * *

    }


    正确答案:

  • 第4题:

    若有以下定义,则不能代表字符。的表达式是______。 char s[20]="programming",*ps=s;

    A.ps+2

    B.s[2]

    C.ps[2]

    D.ps+=2,*ps


    正确答案:A
    解析:ps是指针变量,ps+2是地址值,表示s[2]的地址,并不能代表s[2]的值‘o’;选项B、C、D均能代表s[2]的值‘o’。

  • 第5题:

    以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址,例如,str所指字符串为Hello!,c中的字符为e,则函数返回字符串ello!的首地址。若str所指字符串为空或不包含c中的字符,则函数返回NULL,请填空。char *fun(char *str,char c){ int n=0; char *p=str; if(p!=NULL) while(p[n]!=c&&p[n]!=’\0’) n++; if(p[n]==’\0’) return NULL; return();}


    正确答案:p+n
    在本题中,函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址。
    在本题的程序中,fun函数带有两个形参,其中一个是指针str,它指向字符串的首地址,另一个是字符变量c。程序首先定义了一个整型变量n,从程序中可知,它是字符串str中参数c相对于首地址的偏移量,然后定义了一个指针变量p,指向字符串str的首地址,然后执行条件语句,如果字符串不为空,则执行循环语句,循环结束的条件是要么字符串结束,要么找到形参c中对应的字符。根据循环结束的条件我们可以判断,其非死循环,循环结束后,从程序中可以看出,判断循环结束的原因是否因为字符串结束而结束的,如果是,说明没找到形参c中对应的字符,返回NULL。
    如果不是,则说明是因为找到了形参c中对应的字符而结束循环的。根据题目要求,需要返回以形参c中字符开头的后续字符串的首地址,而这时以形参c中字符开头的后续字符串的首地址为p+n。

  • 第6题:

    以下程序的输出结果是()。includeint fun (char*s){char *p=s;while (*p!='\0,) p++

    以下程序的输出结果是( )。 #include<iostream.h> int fun (char*s) { char *p=s; while (*p!='\0,) p++: return (p-s): } void main() { cout<<fun (" ABCDEF ")<<endl: }

    A.3

    B.6

    C.8

    D.0


    正确答案:B

  • 第7题:

    Void GetMemory2(char **p, int num){*p = (char *)malloc(num);}void

    Test(void){char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello"); printf(str); }请问

    运行Test 函数会有什么样的结果?


    正确答案:
     

  • 第8题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    [说明1]

    函数void fun(char*w,char x,int*n)用来在w数组中插入x,w数组中的数已按由小到大顺序存放,n指存储单元中存放数组中数据的个数,插入后数组中的数仍有序。

    [C函数1]

    void fun(char*W,char x,int*n)

    { int i,P;

    p=0;

    w[*n]=x;

    while(x>w[p]) (1) ;

    for(i=*n,i>p;i--)w[i]=(2);

    w[p]=x;

    ++*n;

    }

    [说明2]

    函数void revstr(char*s)将字符串s逆置。例如:字符串“abcde”,经过逆置后变为“edcba”。

    [C函数2]

    void revstr(char*s)

    { char*p,c;

    if(s==NULL)return;

    p=(3); /*p指向字符串s的最后一个有效字符*/

    while(s<p){ /*交换并移动指针*/

    C=*s;

    (4)=*p;

    (5)=c;

    }

    }


    正确答案:(1) p++ (2) w[i-1] (3) s+strlen(s)-1 (4) *s++或*(s++) (5) *p-或*(p--)
    (1) p++ (2) w[i-1] (3) s+strlen(s)-1 (4) *s++或*(s++) (5) *p-或*(p--) 解析:函数1的fun()中的while循环是为了找到x的插入位置,因此(1)填“p++”,for循环是移动数组中的元素,因此(2)填“w[i-1]”。
    对于函数2,设字符串的长度为n,则该函数的思想为将*(s+j)与*(s+n-1+i)对换,i=0....n/2。采用指针来实现,s为起始地址,p定位为最后一个字符的位置,所以空(3)应填“s+strlen(s)-1”;采用*s与*p交换后为s++与P--。即空(4)填“*s++”或“*(s++)”,空(5)填“*p-”或“*(p--)”。

  • 第9题:

    下面的程序各自独立,请问执行下面的四个TestMemory 函数各有什么样的结果?

    ①void GetMemory(char * p)

    {

    p = (char * )malloc(100);

    }

    void TestMemory (void)

    {

    char *str = NULL;

    GetMemory (str);

    strcpy(str, "hello world");

    prinff(str);

    }

    ② char * GetMemory (void)

    {

    char p[ ] = "hello world";

    return p;

    }

    void TestMemory (void)

    {

    char * str = NULL;

    str = GetMemory( );

    printf(str);

    }

    ③void GetMemory(char * * p, int num)

    {

    * p = (char * )malloc(num);

    }

    void TestMemory (void)

    {

    char * str = NULL;

    GetMemory(&str, 100);

    strcpy( str, "hello" );

    printf(sir);

    }

    ④void TestMemory (void)

    {

    char *str = (char * )malloe(100);

    strepy (str, "hello" );

    free ( str );

    if(str ! = NULL)

    {

    strepy( str, "world" );

    printf(str);

    }

    }


    正确答案:程序1程序崩溃。因为GetMemory并不能传递动态内存TestMemory函数中的str一直都是 NULL。strcpy(str “hello world”);将使程序崩溃。 程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针该指针的地址不是 NULL但其原来的内容已经被清除新内容不可知。 程序3能够输出hello但是会发生内存泄漏。 程序4篡改动态内存区的内容后果难以预料非常危险。因为free(str);之后str成为野指针if(str!=NULL)语句不起作用。
    程序1程序崩溃。因为GetMemory并不能传递动态内存,TestMemory函数中的str一直都是 NULL。strcpy(str, “hello world”);将使程序崩溃。 程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原来的内容已经被清除,新内容不可知。 程序3能够输出hello,但是会发生内存泄漏。 程序4篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!=NULL)语句不起作用。

  • 第10题:

    下列程序中,正确的为______。

    A.main() { int *pb=&b; float 1>=15.25; print f("%d\n" ,*pb); }

    B.amin() { int a,*pa; a=10; *pa=a; prinffC%d",*pa); }

    C.main() { char s[20]; char *ps=&s; scanf("%s",*p); printf("%s",*p); }

    D.main() { char str[10]; int *ps=str[0]; str="abcdefg"; printf("%s",*p); }


    正确答案:B

  • 第11题:

    以下程序运行后的输出结果是( ) main() { char s[]="1234", *ps; for(ps=s;ps<s+3;ps++)printf("%c",ps); printf("\n"); }

    A.123

    B.112123

    C.1234

    D.乱码


    正确答案:D

  • 第12题:

    单选题
    有以下程序:#include main(){ char s[10] = verygood, *ps = s; ps += 4; ps = nice; puts(s);}程序的运行结果是(  )。
    A

    nice

    B

    verynice

    C

    nicegood

    D

    verygood


    正确答案: A
    解析:
    通过赋值运算使一个字符指针指向一个字符串常量:char*ps;ps="nice";这种形式只是将字符串"nice"首地址赋给指针,而不是将指针原本指向的单元元素改变成"nice"。程序执行过程为:定义字符数组并且初始化为"verygood"常量,定义指针ps使其指向数组,使ps指向数组第5个元素,使指针指向字符串"nice",这并不影响s数组任何元素值,故输出字符串s为"verygood"。答案选择D选项。

  • 第13题:

    有以下结构体说明、变量定义和赋值语句 struct STD { char name[10]; int age; char sex; }s[5],*ps; ps=&s[0]; 则以下scanf函数调用语句中错误引用结构体变量成员的是______。

    A.scanf("%s",s[0].name);

    B.scanf("%d",&s[0].age);

    C.scanf("%c",&(ps->sex));

    D.scanf("%d",ps->age);


    正确答案:D
    解析:要给结构体成员输入数据,在scanf语句中需要使用结构体成员的地址。函数scanf是C语言的标准输入函数,其作用是在终端设备上输入数据,而且要求输入项必须是某个存储地址。选项A中是引用结构体数组s的第0个元素s[0]的name成员,name是包含10个元素的数组,数组名就表示数组的地址,也就代表s[0].name的地址,所以选项A是正确的。选项B显然也是正确的,选项C是先用指针变量引用结构体的成员sex后取它的地址,也是正确的。选项D用指针变量引用结构体的成员sex后没有再继续取其地址,所以是错误的。

  • 第14题:

    有以下程序 main( ) { char str[ ]="xyz",*ps=str; while(*ps) ps++; for(ps--;ps-str>=0;ps--) puts(ps);} 执行后输出结果是

    A.yz xyz

    B.z yz

    C.z yz xyz

    D.x xy xyz


    正确答案:C

  • 第15题:

    若指针ps已正确定义,要使ps指向能够存储8个字符的动态存储单元,以下不正确的语句是( )

    A.ps=(char*)malloc(8);

    B.ps=(char *)malloc(sizeof(char)* 8);

    C.ps=(char*)calloc(8,sizeof(char))

    D.ps=8*(char*)malloc(sizeof(char))


    正确答案:D

  • 第16题:

    有以下程序 include void fun(char **p) { ++p; printf("%s\n",*p);

    有以下程序 #include <stdio.h> void fun(char **p) { ++p; printf("%s\n",*p); } main() { char *a[]={"Moming","Afternoon","Evening","Night"}; fun(a); } 程序的运行结果是

    A.Afternoon

    B.fternoon

    C.Morning

    D.orning


    正确答案:A
    解析:本题主函数中定义了一个指针数组a,可以将它看成一个以字符指针为元素的一维数组。和—般的一维数组名能赋给同类型指针变量一样,该字符指针数组也可以赋给指向字符指针的指针(即字符型二级指针),所以数组名a可以用作函数fun()的实参。

  • 第17题:

    void setmemory(char **p, int num)

    { *p=(char *) malloc(num);}

    void test(void)

    { char *str=NULL;

    getmemory(&str,100);

    strcpy(str,"hello");

    printf(str);

    }

    运行test函数有什么结果?( )


    正确答案:
     

  • 第18题:

    有以下程序: main() { char str[]="xyz", *ps=str; while(*ps) ps++; for(ps--;ps-str>=O;ps--) puts(ps); } 执行后的输出结果是( )。

    A.yz xyz

    B.z yz

    C.z yz xyz

    D.x xy xyz


    正确答案:C
    解析:执行while循环,使指针变量ps指向字符串“xyz”的字符串结束标志,然后执行for循环,先执行ps--,使ps指向字符‘z’,故puts(ps)输出结果为z;再次执行ps--,使ps指向字符‘y’,故puts(ps)输出结果为yz;再次执行ps--,使ps指向字符‘x’,故puts(ps)输出结果为xyz,退出循环。所以,C选项为所选。

  • 第19题:

    有以下程序main(){ char str[]="xyz",*ps=str; while(*ps) ps++; for(ps--; ps-str>=0; ps--) puts(ps);} 程序的运行结果是A.yz B.z C.z D.x xyz yz yz xy xyz xyz


    正确答案:B
    本题主要考查循环结构和字符串的存储结构。在C语言中,为了方便确定字符串的长度,编译系统在字符串后增加了一个结束标识‘\0’,即ASCII码的0。
    在程序中,首先定义了一个字符型数组str,并赋初值,然后定义一个同类型的指针变量ps,并使ps指向字符数组str。
    在while循环中,循环结束的条件是*ps的值为0,由于循环开始前,指针变量ps是指向数组的第一个元素,即*ps等价于str[0],值为x,其ASCII码值不为0,循环继续,使ps指向数组的第二个元素,很明显,结果不为0,第三个元素也不为0,而第四个元素才为0,循环结束,此时ps指向数组中的结束标识符。
    在for循环中,首先将指针变量ps做自减运算,即使指针变量ps执行数组的最后一个元素值,即第三个元素z,然后用输出函数puts输出,该输出函数的功能是输出字符串或字符数组到终端上,一次只能输出一个字符串,输出时,遇到字符串结束标志符结束,并自动换行。
    第一次for循环时,由于ps指向z,输出的结果为z,换行。
    第二次for循环时,由于ps指向y,那么输出的结果为yz,换行。
    第二次for循环时,由于ps指向x,那么输出的结果为xyz,换行。
    因此,本题的正确答案是B。

     

  • 第20题:

    若有以下程序: #include 〈iostream〉 using namespace std; class sample { private: int i; public: void setvalue(int m) { i=m; } void fun(int m) { i+=m; } void disp() { cout〈〈i〈〈end1; } }; int main() { sample *ps; ps=new sample; ps->setvalue(20); ps->fun(5); ps->disp(); return 0; } 程序运行后,输出的结果是( )。

    A.15

    B.20

    C.25

    D.30


    正确答案:C
    解析:本题考核对象指针的应用。程序首先定义了一个类sample,其中包含一个私有成员i和3个公有成员函数。函数setvalue()的功能是给私有成员i赋值,函数fun()的功能是将私有成员i的值增加m,函数disp的功能是输出变量i的值。在主函数中,先定义了类sample的一个耐象指针ps,并申请了一块内存空间。执行语句ps->setvalue(20);后,类中i的值为20,执行语句“ps->fun(5);”后,类中i的值为25。所以程序最后输出25。

  • 第21题:

    若有以下定义: char s[20]="programming",*ps=s; 则不能代表字符o的表达式是_______。

    A.ps+2

    B.s[2]

    C.ps[2]

    D.ps+=2,*ps


    正确答案:A
    解析:ps+2就是s[2]的地址,即存放字符o的地址,所以A是错误的。

  • 第22题:

    有以下程序: include void fun(char(*p)[6]) { int i; for(i=0;i<4;i++)printf("%c&

    有以下程序: #include void fun(char(*p)[6]) { int i; for(i=0;i<4;i++)printf("%c",p[i][i]); printf("\n"); } main( ) { char s[6][6]={"ABCDE","abcde","12345","FGHIJ","fghij","54321"}; fun(s); } 程序的运行结果是( )。

    A.Aa1F

    B.Ab3I

    C.ABCD

    D.fghij


    答案:B
    解析:函数fun的功能是输出s[i][i],二维数组的对角线元素,所以程序会输出s[0][0]、s[1][1]、s[2][2]、s[3][3],即Ab3I。

  • 第23题:

    单选题
    以下使指针指向一个字符串的选项错误的是(  )。
    A

    char str[]=string; char * ps; *ps= str;

    B

    char str[]=string; char *ps; ps= str;

    C

    char str[]=strinh,* ps=str;

    D

    char * ps; ps=str; ps=strinh;


    正确答案: C
    解析:
    A项中定义了指针ps后,*ps表示指针ps指向地址的内容,而不是地址,*ps=str无法将str的首地址赋给一个常量,语法错误。答案选择A选项。

  • 第24题:

    单选题
    有以下函数: int fun(char *ps) {  char *p;  p=ps;  if(*ps==NULL)return 0;  while(*++p);  return(p-ps); } 该函数的功能是(  )。
    A

    计算字符串的长度

    B

    实现字符串的赋值

    C

    将字符串逆序存放

    D

    计算字符串所占字节数


    正确答案: C
    解析:
    在fun函数中定义了字符指针P,首先把形参ps(相当于字符串的首地址)赋值给指针P,再通过while循环移动p指针,当p指针指向的存储单元的内容为0时,退出while循环,返回此时p地址和ps地址差值,即字符串的长度。答案选择A选项。