问答题规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串中尾部的*号不多于n个若多于n个,则删除多余的*号;若少于或等于n个,则不做任何操作,字符串中间和前面的*号不删除。例如,字符串中的内容为“****A*BC*DEF*G*******”,若n的值为4,删除后,字符串中的内容应;“****A*BC*DEF*G****”;若n的值为7,则字符串中的内容仍为“****A*BC*DEF*G*******”。n的值在:函数中输入。编写函数时,不得使用C语言提供的字符串函数。  注意:部分源

题目
问答题
规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串中尾部的*号不多于n个若多于n个,则删除多余的*号;若少于或等于n个,则不做任何操作,字符串中间和前面的*号不删除。例如,字符串中的内容为“****A*BC*DEF*G*******”,若n的值为4,删除后,字符串中的内容应;“****A*BC*DEF*G****”;若n的值为7,则字符串中的内容仍为“****A*BC*DEF*G*******”。n的值在:函数中输入。编写函数时,不得使用C语言提供的字符串函数。  注意:部分源程序给出如下。  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include void fun(char *a,int n){}main(){ char s[81]; int n; printf(Enter a string:); gets(s); printf(Enter n:); scanf(%d,&n); fun(s,n); printf(The string after deleted:); puts(s);}

相似考题
更多“规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串中尾部的*号不多于n个若多于n个,则删除多余的*”相关问题
  • 第1题:

    请编写函数fun(),该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<string. h>

    include<stdio, h>

    define N 80

    int fun (char *s)

    {

    }

    main ( )

    {

    char line [N];

    int num=0;

    printf ("Enter a string: \n ");

    gets (line);

    num=fun (line);

    printf ("The number of word is: %d\n\n ",

    num);

    }


    正确答案:int fun(char *s) { int i j=0; for (i=0;s [i]!='\0' ;i++) if(s[i] !=' '&&(s[i+l]==' '||s[i+1]=='\O')) /*如果一个字母的下一个字符为空格或者结束标记则表示一个单词结束*/ j++; return j; /*返回单词个数*/ }
    int fun(char *s) { int i, j=0; for (i=0;s [i]!='\0' ;i++) if(s[i] !=' '&&(s[i+l]==' '||s[i+1]=='\O')) /*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/ j++; return j; /*返回单词个数*/ } 解析:判断单词的个数,我们首先想到的是程序怎样识别是一个单词,也即循环语句中的fir(i=0;s[i]!="\0";i++),本题重点是if句中的条件表达方式。

  • 第2题:

    假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。

    例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。

    注意:部分源程序给出如下。

    请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。

    试题程序;

    include <stdio. h>

    include <conio. h>

    void fun (char *a)

    {

    }

    main()

    {

    char s[81];

    printf("Enter a string :\n");

    gets (s);

    fun (s);

    printf ("The string after deleted: \n");

    puts (s);

    }


    正确答案:void fun (char *a) { char*p=a; while(*P==‘+’) p++; /*指针p指向字符串第一个字母*/ for(;*p!=‘\0’;p++a++) *a=*p; /*从第—个字母开始其后的字符都放入指针a所指的字符串中*/ *a=‘\0’; /*在字符串最后加上结束标记符*/ }
    void fun (char *a) { char*p=a; while(*P==‘+’) p++; /*指针p指向字符串第一个字母*/ for(;*p!=‘\0’;p++,a++) *a=*p; /*从第—个字母开始,其后的字符都放入指针a所指的字符串中*/ *a=‘\0’; /*在字符串最后加上结束标记符*/ } 解析:在前面的改错题和编程题中,相关试题已经出现好多次了,我们在此提供另一种解答方法。
    #includestring.h>
    void fun (char *a)
    {char *p=a;
    while (*p==‘*’)p++;
    strcpy(a,p);
    }

  • 第3题:

    假定输人的字符串中只包含字母和*号。请编写函数proc,它的功能是:将字符串中 的前导*号全部删除,中间和后面的*号不删除。 例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容则 应当是a*bc*def*g****。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编 写的若干语句。 试题程序: include<stdio.h> include<conio.h> void proc(char*str) { } void main { char str[81]; printf("Enter a string:kn"); gets(str); proc(str); printf("The string after deleted:kn"); puts(str);}


    正确答案:
    void proc(char * str)
    {
    char*p=str;
    while(* p= =*)p++;//通过p的移动来达到使p指向第一个不是*号的字符
    for(;* p!=\0;p++,str++)//把从第一个不是*号的字符放到a中
    * str=* P:
    * str=\0;//最后用\0作为字符串结束标志
    }
    【解析】题目中要求将字符串中的前导*号全部删除,首先将指针P移动到第一个不是*的字符,将指针P之后的字符放入原来的字符串中,并为新的字符串添加结束符。

  • 第4题:

    假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:除了尾部的,:号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。

    例如,若字符串中的内容为****A*BC*DEF*G******,删除后,字符串中的内容应当是ABCDEFG******。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio. h>

    include<stdio. h>

    void fun(char *a, char *p)

    {

    }

    main ( )

    char s[81],*t;

    printf ("Enter a string: \n ");

    gets (s);

    t=s;

    while (*t)

    t++;

    t--; /*指针t指向字符串尾部* /

    while (*t== '*' )

    t--; /*指针t指向最后一个字母*/

    fun (s, t);

    printf ("The string after deleted: \n");

    puts (s);

    }


    正确答案:void fun(char *a char *p) { char *t=a; for (; t=p; t++) if(*t!='*') * (a++)=*t; /*将p以前所有不是*号的字符保留下来*/ for (;*t!='\0' ;t++) * (a++) =.t; / * 将p以后的所有*号保留下来*/ *a='\0'; / *在字符串最后加上结束标记位*/
    void fun(char *a, char *p) { char *t=a; for (; t=p; t++) if(*t!='*') * (a++)=*t; /*将p以前所有不是*号的字符保留下来*/ for (;*t!='\0' ;t++) * (a++) =.t; / * 将p以后的所有*号保留下来*/ *a='\0'; / *在字符串最后加上结束标记位*/ 解析:本题曾在历年上机考试及模拟试题中多次出现,一般用两个循环语句来实现。第1个循环的作用是将p以前所有不是*号的字符保留下来,即删除所有的*号。第2个循环的作用是将p以后的所有*号保留下来。

  • 第5题:

    请编写一个函数void fun(char*ss),其功能是:将字符串 ss中所有下标为偶数位置上的字母转化为大写(若该位置上不是字母,则不转换)。

    例如,若输入abc4Efg,则应输出AbC4EfG。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio. h>

    include<stdio. h>

    void fun ( char *ss)

    {

    }

    main ( )

    {

    char tt[51];

    clrscr ();

    printf("Please enter an character string

    within 50 characters:\n");

    gets (tt);

    printf ("\n\nAfter changing, the string\n

    %s", tt);

    fun (tt);

    printf("\nbecomes\n \%s",tt);

    }


    正确答案:void fun ( char *ss) {int i; for(i=0;ss[i]!='\0';i++) { if(i%2==0 && ss [i]>='a' && ss [i]='z') /*将ss所指字符串中所有下标为偶数位置的字母转换成大写*/ ss[i]==ss[i]-32;} /*大写字母比相应的小写字母的ASCII码值小32*/ }
    void fun ( char *ss) {int i; for(i=0;ss[i]!='\0';i++) { if(i%2==0 && ss [i]>='a' && ss [i]='z') /*将ss所指字符串中所有下标为偶数位置的字母转换成大写*/ ss[i]==ss[i]-32;} /*大写字母比相应的小写字母的ASCII码值小32*/ } 解析:从C语言的学习中我们知道,只要将小写字母减去32则转换成大写字母,将大写字母加上32则转成小写字母,该程序使用if语句实现该功能转换的。

  • 第6题:

    假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

    例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。

    注意:部分源程序在文件PROGl.C文件中。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:
    解析:该程序功能是将字符串尾部的“*”号全部删除,前面和中间的“*”号不删除。本题的解题过程首先确定由串尾开始的第一个非“*”位置,将由头开始到此位置的字符拷贝到字符串。

  • 第7题:

    以下函数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。

  • 第8题:

    请编写一个函数fun(),它的功能是将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。

    例如,若输入字符串“-1234”,则函数把它转换为整数值 -1234。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <stdio.h>

    include <string.h>

    long fun(char *p)

    {

    }

    main ( )

    {

    char s[6];

    long n;

    printf("Enter a string:\n");

    gets(s);

    n=fun(s);

    printf("%ld\n",n);

    }


    正确答案:long fun (char *p) { long n=0; int flag=1; if(*p=='-') /*负数时置flag为-1*/ {p++;flag=-1;} else if(*p=='+') /*正数时置flag为1*/ p++; while(*p!='\0') {n=n*10+*p-'0'; /*将字符串转成相应的整数*/ p++; } return n*flag; }
    long fun (char *p) { long n=0; int flag=1; if(*p=='-') /*负数时置flag为-1*/ {p++;flag=-1;} else if(*p=='+') /*正数时置flag为1*/ p++; while(*p!='\0') {n=n*10+*p-'0'; /*将字符串转成相应的整数*/ p++; } return n*flag; } 解析:if()的作用是判断它是正数还是负数。while()循环的作用是将字符串转成相应的整数。注意*p是一个字符如'9', '4',并不是一个数,要将其转成相应的数字必须令其减去'0'(不是'\0'),即*p-'0'就得到*p这个字符的相应数字。如'0'-'0'=0, '8'-'0'=8等。必须在程序的前面加#includestdlib.h>,函数atol()的作用是将字符串p转成长整型数,它是一个库函数。

  • 第9题:

    编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符为1,则输出3。

    注意:部分源程序在文件PROCl.C中。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填人你编写的若干语句。


    正确答案:
    intfun(char*ss,charc)inti=0;for(;*ss!=’\0‘;ss++)if(}ss==ci++/*求出*所指字符串中指定字符的个数*/returni;【考点分析】本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符串是否结束。【解题思路】从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不是‘\0’,判断语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。

  • 第10题:

    规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了字符串前导的。号之外,将串中其他*号全部删除。在编写函数时.不得使用C语言提供的字符串函数.


    正确答案:
    程序设计题解析:【考点分析】本题考查:指针型变最定义;wh丑e循环语句;语句条件表达式;字符串结束标识‘\0’。【解题思路】函数fun的功能:除了字符串前导的*号之外,将串中其他+号全部删除。【解答本题】(1)定义一个临时指针P,初始指向原串首地址;(2)利用循环语句把字符串前导*号拷贝到原串;(3)继续移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符‘、O’。【解题宝典】要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。

  • 第11题:

    规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:删除字符串中所有的*号。编写函 数时,不得使用c语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF * G*******删除*后字符串中的内容应当 是:ABCDEFG。 注意:部分源程序在文件PROGl.C中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:


    【考点分析】
    要删除字符串中所有*号需要用循环语句遍历字符串,用
    判断语句判断字符是否为*号,由此可以决定该程序应使用循
    环判断结构。
    【解题思路】

  • 第12题:

    问答题
    规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串中尾部的*号不多于n个若多于n个,则删除多余的*号;若少于或等于n个,则不做任何操作,字符串中间和前面的*号不删除。例如,字符串中的内容为“****A*BC*DEF*G*******”,若n的值为4,删除后,字符串中的内容应;“****A*BC*DEF*G****”;若n的值为7,则字符串中的内容仍为“****A*BC*DEF*G*******”。n的值在:函数中输入。编写函数时,不得使用C语言提供的字符串函数。  注意:部分源程序给出如下。  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include void fun(char *a,int n){}main(){ char s[81]; int n; printf(Enter a string:); gets(s); printf(Enter n:); scanf(%d,&n); fun(s,n); printf(The string after deleted:); puts(s);}

    正确答案:

    void fun(char *a,int n)
    {
    int i=0,k=0;
    char *p,*t;
    p=t=a;
    while(*t)
    t++;
    t--;
    while(*t=='*')
    {
    k++;
    t--;
    }
    if(k>n)
    {
    while(*p&&p<t+n+1)
    {
    a[i]=*p;
    i++;
    p++;
    }
    a[i]='\0';
    }
    }
    解析: 通过第一个while循环统计出字符串的有效长度,不包括最后的结束符;第二个while循环统计字符串尾部*号的个数,循环结束时,k值记录了原字符串结尾星号的数目,t指向字符串中最后一个不为星号的字符的下标。然后通过if语句比较尾部*号数是否多于n个,若大于则保留n个*号和其余字符,总共需要保留的字符数是t+n+1,1是指最后的结束符。

  • 第13题:

    假定输入的字符串中只包含字母和*号。请编写函数proc,它的功能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。

    例如,若字符串中的内容为****a*bc*def*g** **,删除后,字符串中的内容则应当是a*bc*def*g** **。

    注意:部分源程序给出如下。

    请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。

    试题程序:

    include<stdio.h=:{>

    include<conio.h>

    woid proc(char*st r)

    {

    }

    void main

    char str[81];

    printf("Enter a string:\n");

    gets(str);

    proc(str):

    printf("The string after deleted:\n");

    puts(str);}


    正确答案:

    void proc(char*str)

    {

    char*p=str

    while(*p=='*')p++;//通过P的移动来达

    到使P指向第一个不是*号的字符

    for(*p!='0 'p++str++)//把从第一个

    不是*号的字符放到a中 ‘

    *str=* P

    *str='0 '; //最后用'0'作为字符串结束标志

    }

    【解析】题目中要求将字符串中的前导*号全部删除首先将指针p移动到第一个不是*的字符,将指针P之后的字符放入原来的字符串中,并为新的字符串添加结束符。

  • 第14题:

    请补充函数fun(),该函数的功能是:把ASCII码为奇数的字符从字符串str中删除,结果仍然保存在字符串str中。字符串str从键盘输入,其长度作为参数传入函数fun()。

    例如,输入“abcdef”,输出“bdf”。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include <stdio.h>

    define N 80

    void fun(char s[],int n)

    {

    int i, j;

    j=0;

    for(i=0;【 】;i++)

    {

    if(【 】)

    s [j++]-s [i];

    }

    【 】;

    }

    main ( )

    {

    int i=0, strlen=0;

    char str [N];

    clrscr ();

    printf ("\nInput a string: \n");

    gets (str);

    while (str [i] !='\0')

    {

    strlen++;

    i++;

    }

    fun(str, strlen);

    printf("\n*** display string ***\n");

    puts (str);

    }


    正确答案:in s[i]%2=0 s[j]= '\0'
    in s[i]%2=0 s[j]= '\0' 解析:第一空:变量n为字符串的长度,所以字符数组的下标的取值范甲是从0到n-1。第二空:如果当前字符的ASCII码对2取余等于0,就说明这个字符的ASCII码为偶数,故不能删除,而是将它存于字符串s中。第三空:通过保留ASCII码为偶数的字符的力法,来实现删除ASCII码为奇数的字符的目的。处理结束后,还要在字符串s的最后加上结束标记符'\0'。

  • 第15题:

    假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的K度,形参h给出了字符串中前导*号的个数,形参e给出了字符山中最后*号的个数。在编写函数时,不得使用c语言提供的字符串函数。

    例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仪在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <stdio.h>

    include <conio.h>

    void fun (char *a;int n ,int h ,int e)

    {

    }

    main ( )

    {

    char s [81],*t,*f;

    int m=0,tn=0, fn=0;

    printf("Enter a string :\n");

    gets (s);

    t=f=s;

    while (*t)

    {t++;m++; } /*m为字符串的长度*/

    t--; /*指针t指身字符串尾部*/

    while (*t=='*')

    {t--; tn++; }

    /*指针t指向最后一个字母,tn统计尾部'*'的个数*/

    while (*f=='*' )

    {f++;fn++;}

    /*指针f指向第一个字母,tn统计导'*'的个数*/

    fun( s, m, fn, tn);

    printf ("The string after deleted: \n");

    puts (s);

    }


    正确答案:void fun (char *a int n int h int e) { int ij=0 for (i=h; in-e; i++) /*第一个字母和最后一个字母之间的字符全不删除*/ a[j++]=a[i]; a[j]='\0; /*在字符串最后加上结束标记*/ }
    void fun (char *a, int n ,int h , int e) { int i,j=0 for (i=h; in-e; i++) /*第一个字母和最后一个字母之间的字符全不删除*/ a[j++]=a[i]; a[j]='\0; /*在字符串最后加上结束标记*/ } 解析:注意循环变量i的初值(h)和终止值(n-e),由于h和e分别是a中的前导*和尾部*的个数,n是字符串的长度,所以从a[h])到a[n-e-1]之间的所有字符都要留下,而其他字符均删除。删除操作(即留下相应字符)现己由循环完成。
    本题技巧部分:
    void fun(char *a, int n, int h, int e )
    {a[n-e]='\0;
    strcpy(a,a+h);}
    另外,请注意,a(n-e]的作用是使最后一个字母后出现字符串结束符。木程序采用了strcpy()库函数。

  • 第16题:

    假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:使字符串中前部的*号不得多余n个;若多余n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

    例如,字符串中的内容为****A*BC*DEF*G*******,若 n的值为2,删除后,字符串中的内容则应当是 **A*BC*DEF*G*******;若n的值为4,则字符串中的内容仍为****A*BC*DEF*G******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。

    注意:部分源程序给出如下。

    请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。

    试题程序:

    include <stdio.h>

    include <conio.h>

    void fun (char Aa, int n)

    {

    }

    main ()

    { char s[81];int n;

    printf ("Enter a string : \n") ;gets (s);

    printf ("Enter n : "); scanf ("%d", &n);

    fun( s,n );

    printf("The string after deleted :\n");

    puts (s);

    }


    正确答案:void fun(char *aint n) { int i=0k=0; char *p*t; p=t=a; /*开始时p与t同时指向数组的首地址*/ while(*t==‘*’) /*用k来统计前部星号的个数*/ {k++; t++;} if(k>n) /*如果k大于n则佼p的前部保留n个星号其后的字符依次存入数组a中*/ {while(*P) {a[i]=*(p+ k-n); i++ p++; } a[i]=‘\0’; /*在字符串最后加上结束标志位*/ } }
    void fun(char *a,int n) { int i=0,k=0; char *p,*t; p=t=a; /*开始时,p与t同时指向数组的首地址*/ while(*t==‘*’) /*用k来统计前部星号的个数*/ {k++; t++;} if(k>n) /*如果k大于n,则佼p的前部保留n个星号,其后的字符依次存入数组a中*/ {while(*P) {a[i]=*(p+ k-n); i++ p++; } a[i]=‘\0’; /*在字符串最后加上结束标志位*/ } } 解析:while() 循环的作用是计算出前部星号的个数;if()的作用是判断星号个数是否多于n个,若是则只保留n个星号,即从字符串前部的倒数第n个星号开始,到最后一个字符都存入数组a中,最后记得在字符串最后加上结束标志位。

  • 第17题:

    请编写函数fun(),该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按J顷序合并组成一个新的字符串。

    例如,若字符串数组中的M个字符串为

    AAAA

    BBBBBBB

    CC

    则合并后的字符串内容应该是AAAABBBBBBBCC

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio. h>

    define M 3

    define N 20

    void fun (char a [M] [N], char *b)

    {

    }

    main ( )

    {

    char w [M] [N] ={"AAAA", "BBBBBBB", "CC"}, i;

    char a[100]={" "};

    printf ("The string: \n ");

    for (i=0; i<M; i++)

    puts (w[i]);

    printf (" \n ");

    fun (w, a);

    printf ("The A string: \n ");

    printf("%s ",a);

    printf("\n\n ");

    }


    正确答案:void fun (char a [M] [N] char *b) { int i j k=0; for (i=0; iM; i ++ ) /*将字符串数组中的M个字符串按顺序存入一个新的字符串*/ for(j=0;a[i] [j] !='\0';j++) b [k++]=a[i] [j]; b[k]='\0'; /*在字符串最后加上结束标志符*/ }
    void fun (char a [M] [N] ,char *b) { int i, j, k=0; for (i=0; iM; i ++ ) /*将字符串数组中的M个字符串,按顺序存入一个新的字符串*/ for(j=0;a[i] [j] !='\0';j++) b [k++]=a[i] [j]; b[k]='\0'; /*在字符串最后加上结束标志符*/ } 解析:本程序中for(i=0;iM;i++)循环的作用是用于对二维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是b[k++]=a[i][j];。

  • 第18题:

    假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号:若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

    例如,字符串中的内容为:******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为;*******A*BC*DEF*G****。n的值在主函数中输入。

    在编写函数时,不得使用C语言提供的字符串函数。

    注意:部分源程序在文件PROGl.C文件中。

    请勿改动主函数main和其他函数中的任何内容。仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:
    解析:该程序功能是根据字符串前导的“*”号个数进行相关操作。解题过程首先确定字符串尾,然后由串头开始对字符进行判断,同时对“*”字符进行统计,如果大于n,就进行截取。

  • 第19题:

    请编写一个函数voidfun(chara[],charb[],intn),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。

    例如,输入一个字符串:World,然后输入3。则调用该函数后的结果为:Word。

    注意:部分源程序在文件PROGl.C中。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:
    解析:(1)该程序功能是删除一个字符串中指定下标的字符。它的解题思路,可以分解为以下两步:逐个判断字符串中的下标是否满足条件,满足条件的就放到题目要求的新串,否则就不放。
    (2)从已给部分源程序的main主函数开始入手,核心函数“fun(str1,str2,n);”中的参数由题目可知,str1存放着原始字符串,str2存放删除了下标为n的字符的结果字符串,注意下标是从“0”开始的。

  • 第20题:

    请补充函数fun(),该函数的功能是:把字符下标能铍2或3整除的字符从字符串str中删除,把剩余的字符重新保存在字符串str中。字符串str从键盘输入,其长度作为参数传入函数fun()。

    例如,输入“abcdefghijk”,输出“bfh”。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include <stdio.h>

    define N 80

    void fun(char s[], int n)

    {

    int i, k;

    【 】;

    for(i=0; i<n; i++)

    {

    s[k++]=s[i];

    if(【 】)

    k--;

    }

    【 】;

    }

    main()

    {

    int i=0,strlen=0;

    char str[N];

    clrscr();

    printf("\nInput a string:\n");

    gets(str);

    while(str[i]!='\0')

    {

    strlen++;

    i++;

    }

    fun(str,strlen);

    printf('\n*** display string ***\n");

    puts(str);

    }


    正确答案:k=0 (i%2==0)||(i%3==0 s[k]='\0'
    k=0 (i%2==0)||(i%3==0 s[k]='\0' 解析:第一空;变量k声明时没有初始化,所以在使用前要对它初始化。因为k用作字符数组的下标,所以初始化为 0。第二空:如果当前字符的下标能被2或3整除,则不保存这个字符。第三空:将所有字符下标能被2或3整除的字符从字符串中删除后,在字符串的最后还要加上结束标记符'\0'。

  • 第21题:

    规定输入的字符串中只包含字母和。号。请编写函数fun,其功能是:将字符串尾部的。号全部删除,前面和中间的*号不动。


    正确答案:
    voidfun(char*a){while(*a!=’、0。)a++:a一一;/*指针a指向字符串的尾部*/while(}a==’*。)a一一;/·指针a指向最后一个字母*/*(a+1)=’、0’;/*在字符串最后加上结束标志符·/【考点分析】本题考查:删除字符串尾部*号;删除的主要思想是把不删除的字符保留起来。【解题思路】对于一个字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号‘、0’。具体操作为:首先找到字符串的结尾,然后从最后一个字符开始往前逐个判断是否为*号,直到找到非·号字符为止。最后在该字符后面加上结束符号’\0。

  • 第22题:

    请教:2016年计算机二级考试C++模拟试题简答题8答案

    假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能使:将字符串尾部的*号全部删除,前面和中间的*号不删除。


      void fun(char *a)

      {int i=0;

      char *p,*q;

      p=q=a;

      while(*p)

      p++;

      p--;

      while(*p==‘*’)

      p--;

      while(q<=p)

      {a=*q;

      i++;

      q++;}

      a=‘’;}

  • 第23题:

    假定输入的字符串中只包含字母和*号。请编写函数proc(),它的功能是:除了尾部的*号之外,将字符串中其他*号全部删除。形参P已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。 例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容应当是abcdefg****。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。 试题程序:


    正确答案:

    题目中要求除了尾部的*号之外,将字符串中其他*号全部删除。首先将所有不是*的字符放在字符串str中,然后将尾部的*接在字符的后面,最后为字符串str加上结束符。

  • 第24题:

    问答题
    请编写一个函数fun,它的功能是:将一个表示正整数的数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“1234”,则函数把它转换为整数值1234。函数fun中给出的语句仅供参考。  注意:部分源程序存在文件PROG1.C文件中。  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。/**********code.c**********/#include #include long fun(char *p){ int i,len;/* len为串长*/ long x=0; len=strlen(p); /*以下完成数字字符串转换为数字,注意字符’0’不是数字0*/   return x;}void main()  { char s[6]; long n; printf(Enter a tring:); gets(s); n = fun(s); printf(%ld,n);}

    正确答案:

    int flag=1;
    i=0;
    if(*p=='-')/*p表示负数,置flag值为-1*/
    {
    p++;
    i++;
    flag= -1;
    }
    else if(*p=='+')/*p表示正数,置flag值为1*/
    {
    p++;
    i++;
    }
    for(;i<len;i++)
    {
    x=x*10+*p-'0';/*将字符串转换成相应的整数*/
    p++;
    }
    x = x*flag;
    解析:
    if()语句的作用是判断该字符串应当为正数还是负数。注意:*p是一个字符(如'9'、'4'),并不是一个数,要将其转成相应的数字需令其减去'0' (不是'\0'),即*p-'0'就得到*p这个字符的相应数字,如'0'-'0'=0、'8'-'0'=8等。