下列给定程序中,函数fun()的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun()函数之前给字符串输入ABCDeFGH,调用后字符串中的内容为 eABCDFGH。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include<stdio.h>/***************found************/fun(char *p){ char max, *

题目

下列给定程序中,函数fun()的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun()函数之前给字符串输入ABCDeFGH,调用后字符串中的内容为 eABCDFGH。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include<stdio.h>

/***************found************/

fun(char *p)

{ char max, *q;int i=0;

max=p[i];

while (p[i]!=0)

{if (max<p[i])

{

/***************found************/

p = q +i;max=p[i];

}

i++;

}

/***************found************/

while (q<p)

{*q=*(q-1);

q--;

}

p[0]=max;

}

main()

{ char str[80];

printf("Enter a string: "); gets(str);

printf("\nThe original string: ");

puts(str);

fun(str);

printf("\nThe string after moving: ");

puts(str); printf("\n\n");

}


相似考题
参考答案和解析
正确答案:(1)错误:fun(char*p) 正确:void fun(char*p) (2) 错误:p=q+i; 正确:q=p+i; (3) 错误:while(qp) 正确:while(q>p)
(1)错误:fun(char*p) 正确:void fun(char*p) (2) 错误:p=q+i; 正确:q=p+i; (3) 错误:while(qp) 正确:while(q>p) 解析:本题解答需要3个步骤:
(1) 找到字符串中ASCII码值最大的字符,并保存。
(2) 将该字符复制,并将该字符前面的字符串顺次后移。
(3) 将ASCII码值最大的字符赋给字符串的第1个字符。找到ASCII码值最大的字符可以通过定义一个字符max,该字符初始时等于字符串的第1个字符,若字符串的下一个字符大于max,则将下一个字符赋给max,如此循环到字符尾,即可得到 ASCII码值最大的字符,同时令指针q指向最大字符。之后对最大字符前面的子串顺次后移,可采用while语句实现。
此题需要熟练掌握和灵活应用C语言的字符与整型变量的关系以及字符串操作。
更多“下列给定程序中,函数fun()的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上 ”相关问题
  • 第1题:

    函数fun的功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一含新串放在t所指的数组中。

    例如,若s所指字符串中的内容为:“ABCDEFGl23456”,其中字符A的ASCII码值为奇数,因此应当删除:其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是:“246”。

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

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


    正确答案:
    解析:该程序功能是将字符串中除了下标为偶数、ASCII值也为偶数的字符外,其余的全都删除。解题过程利用if条件判断表达式选择符合条件的字符,然后将符合条件的字符放入指定的字符串。

  • 第2题:

    下列给定程序中函数fun的功能是:统计substr所指的字符串在str所指的字符串中出现的次数。 例如,若字符串为aaas lkaaas,子字符串为as;则应输出2。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件MODll.C中,不得增行或删行,也不得更改的程序的结构!


    正确答案:
    【参考答案】

    【考点分析】
    本题考查:for循环语句的格式,for循环语句使用最为灵活,其一般形式为:for(表达式1;表达式2;表达式3),注意表达式之间使用”;”相隔;if条件语句的格式,其中if关键字需要区别大小写,这里不能混淆使用。关键字是由C语言规定的具有特定意义的字符串,也称为保留字。用户定义的标识符不应与关键字相同,并且关键字应小写。
    【解题思路】
    先看循环条件for(i=0,str[i],i++),不难发现此处for循环语句的格式有误,其中表达式之间应以”;”相隔;同时很容易发现if条件语句处的关键字书写错误。

  • 第3题:

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

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

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

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

    试题程序:


    正确答案:


    【解析】先判断ASCⅡ码的奇偶。
    第一空:根据主函数“fun(str,len);”调用语句,其中len为字符串str的长度,用来控制循环。根据主函数中对应的调用语句,补全fun()函数定义,第一空填“fun(chars[],intn)”。
    第二空:“s[j++]=s[i];”语句中j的变量在使用前要对其取值进行初始化,因为数组下标是由0开始的,初始化值为0,所以第二空填“j-0”。
    第三空:新生成的字符串要加尾符标志,所以第三空填“s[j]=ˊ\0ˊ”。

  • 第4题:

    下列给定程序中,函数fun()的功能是将字符串s中位于偶数位置的字符或ASCII码为奇数的字符放入字符串t中(规定第一个字符放在第0位中)。

    例如:字符串中的数据为ADFESHDI,则输出应当是 AFESDI。

    请改正程序中的错误,使它能得到正确结果。

    注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <conio.h>

    include <stdio.h>

    include <string.h>

    define N 80

    /************found*************/

    void fun(char s,char t[])

    {

    int i,j=0;

    for(i=0;i<strlen(s);i++)

    /*********found*+************/

    if(i%2=0 || s[i]%2!=0)

    t[j++]=s[i];

    t[j]='\0';

    }

    main()

    {

    char s[N],t[N];

    clrscr();

    printf("\nPlease enter string s:");

    gets(s);

    fun(s,t);

    printf("\nThe result is:%s\n",t);

    }


    正确答案:(1)错误:void fun(char schar t[]) 正确:void fun(char *schar t[]) (2)错误:if(i%2=0||s[i]%2!=0) 正确:if(i%2=0 || s[i]%2!=0)
    (1)错误:void fun(char s,char t[]) 正确:void fun(char *s,char t[]) (2)错误:if(i%2=0||s[i]%2!=0) 正确:if(i%2=0 || s[i]%2!=0) 解析:错误1:由于本题中函数的功能是对字符串进行处理,而不是对单个字符进行处理,因此,函数的参数应为字符串指针。错误2:if语句中要用关系运算符,而不是赋值运算符。

  • 第5题:

    下列给定程序中,函数fun()的功能是:将str所指字符串中的字母转换为按字母序列的后续字母(Z转换A,z转换a),其他字符不变。

    请修改函数fun()中的错误,得出正确的结果。

    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

    试题程序:


    正确答案:

    (1)错误:while(*str!=ˊ@ˊ)
    正确:while(*str)或while(*str!=ˊ\0ˊ)或while(*str!=0)
    (2)错误:(*str++);
    正确:str++
    【解析】首先判断字母是否为小写字母,如果是小写字母则进行转换。
    第一个标识下“while(*str!=ˊ@ˊ)”语句原意是str不指向字符串尾就进入下面的循环,所以对于指针判断不为结束符的语句应该是循环为真,所以应为“while(*str)”或“while(*str!=ˊ\Oˊ)”或“while(*str!=0)”。
    第二个标识下“(*str)++;”是对字符内容加1,而原题是对字符位置加1,所以将其改为“str++;”。