计算机二级

下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。例如:a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAADf。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include <stdio.h>include <strinq.h>void fun(char *p,char *q,char *c){int k=

题目

下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。

例如:a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAADf。

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

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

试题程序:

include <stdio.h>

include <strinq.h>

void fun(char *p,char *q,char *c)

{int k=0;

while(*p || *q)

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

{ if (*p<=*q)

c[k]=*q;

else c[k]:*p;

if(*p) p++;

if(*q)q++;

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

k++

}

}

main()

{char a[10]="fshADfg",b[10]="sdAEdi",

c[80]={'\0');

fun(a,b,c);

printf("The string a:");puts(a);

printf("The string b:");puts(b);

printf("The result:");puts(c);

}

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

请补充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ˊ”。

第2题:

函数Rdata实现从文件in.dat中读取一篇英文文章存入到字符串数组string中,请编写函数CharLeft,其功能是:以行为单位把字符串中的所有字符的ASCII值左移4位,如果左移后,其字符的ASCII值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字符ASCII值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组string中,最后调用函数Wdata,把结果string输出到文件out.dat中。 原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。注意:部分源程序已经给出。 请勿改动主函数main、读数据函数Rdata和输出数据函数Wdata的内容。


正确答案:
【审题关键句】以行为单位把字符串中的所有字符的ASCII值左移4位,如果左移后,其字符的ASCII值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字符ASCII值,得到新的字符仍存入原字符串对应的位置上。
【解题思路】
①首先定义整型循环变量i、j和表示字符串长度的变量str,以及字符局部变量ch。
②在第一层for循环语句中,循环变量i从0开始,依次递增直到其值等于maxline,在循环体中,首先对字符串string[i]利用库函数strlen求其长度,把此值赋给变量str。在第二层for循环语句中,循环变量j开始0,依次递增直到其值等于str,把字符string[i][j]的ASCII值左移4位后所得到字符赋给变量ch,再用if语句判断ch的值是否大于32并且小于等于100,如果成立,则把ch的值与string[i][j]的值相加,所得的新值保存在string[i][j]中。
【参考答案】

第3题:

函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组XX中,请编制函数StrCharJR,其函数的功能是t以该文章中的行为单位把字符串中的所有字符的二进制ASCII值右移4位,高位补0,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的值仍存入原字符串对应的位置上,之后把已处理的结果仍按行重新存入数组XX中。最后 main函数调用函数WriteOat把结果XX输出到文件out.dat中。 例如: ”z”对应的ASCII值为7AH,二进制值为01111010,右移4位后为00000111,加上原来”2”的ASCII值01111010得到10000001结果。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格,并也按字符处理。 注意:部分源程序存放在test.C文件中。 请勿改动主函数main、读函数ReadDat和输出函数WriteDat的内容。


正确答案:
【审题关键句】字符的ASCII值右移4位二进制位,高位补0后加原字符的ASCII值。
【解题思路】
①定义两个循环变量i、j和一个无符号字符变量tmp。
②在第一个for循环语句中,循环变量i从0开始,依次递增直到其值等于文章最大行数maxline。在第二个for循环中,从每行第1个字符开始,依次递增直到其值等于该行字符串的最大长度,然后在循环体中指定每次循环时,将第i行第i个位置上的字符的ASCII值的二进制数右移4位,然后将所得的值再加上原字符的ASCII码值。
【参考答案】

第4题:

函数RData实现从文件in.dat中读取一篇英文文章存入到字符串数组original中,请编写函数StrCharMove,其函数的功能是:以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组0riginal中,最后调用函数 WData,把结果0riginal输出到文件out.dat中。 原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。注意:部分程序已经给出。 请勿改动主函数main、读数据函数RData和输出数据函数WData的内容。


正确答案:
【审题关键句】以行为单位把所有字符的ASCII值右移4位,后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符。
【解题思路】
①首先定义循环变量i、i和表示字符串长度的整型变量strl。
②在第一层for循环中,循环变量i从0开始,依次递增直到其值等于或大于maxline,在循环体中,首先用函数strlen(original[i])计算字符串original[i]的长度,把这个值赋给整型变量strl。在第二层fbr循环中,循环变量j从0开始,依次递增直到其值等于或大于strl,利用表达式0riginal[i][j]+=original[i][j]>>4实现对字符original[i][j]的ASCII码值右移4位后所得到值与原字符original[i][j]的ASCII码值相加,仍存入原字符串对应的位置上的功能。
【参考答案】

第5题:

下列给定程序中函数fun的功能是:逐个比较P.q所指两个字符串对应位置上的字符,并把ASCIl值大或相等的字符依次存放到C所指的数组中,形成一个新的字符串。

例如,若主函数中a字符串为“aBCDeFgH”,b字符串为“Abed”,则C中的字符串应为“aBcdeFgH”。请改正程序中的错误,使它能得出正确的结果。

注意:部分源程序在文件MODll.C中,不得增行或删行,也不得更改程序的结构!


正确答案:
(1)intk=0;(2)whffe(+pll+q)【考点分析】本题考查:变量初始化,需根据题意确定变量含义,然后对其进行初始化操作;while循环语句。【解题思路】(1)变量k存放数组c的下标,因此应初始化为0。(2)while循环语句的循环条件是判断两个字符串是否到达结尾。

第6题:

给定程序MODll.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

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


正确答案:(1)char*fun(char*schar*t)(2)ss++; (3)tt++;
(1)char*fun(char*s,char*t)(2)ss++; (3)tt++; 解析:本题中函数的功能是比较两个字符串,将长的那个字符串的首地址作为函数值返回。解题思路是对调试过程中产生的错误提示进行跟踪,也就是题干中给出的错误标识符号下的语句。

第7题:

函数ReadDat实现从文件in.dat中读取一篇英文文章存入到无符号字符串数组xx中,请编制函数StrCharJL,其函数的功能是:以行为单位把字符串中的所有字符的ASCII值左移4位二进制位,低位补0,如果左移后,其值小于等于32或大于l00,则原字符保持不变,留在原字符串对应的位置上,否则就把左移后的值再加上原字符的ASCII值,得到新的值仍存入原字符串对应的位置上,之后把已处理的字符串仍按行重新存入无符号字符串数组xx中。最后main函数调用函数 WriteDat把结果xx输出到文件out.dat中。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序存放在test.c文件中。 请勿改动主函数main、读函数ReadDat和输出函数WriteDat的内容。


正确答案:
【审题关键句】字符的ASCII值左移4位二进制位,低位补0,新值小于等于32或大于100,则原字符保持不变;否则等于左移后的值再加上原字符的ASCII值。
【解题思路】
①定义无符号字符局部变量tmp和循环整型变量i、j。
②在第一层for循环中,循环变量i从0开始,依次递增直到其值等于或大于maxline,实现对文章每行字符串的处理。在第二层for循环中,循环变量j从0开始,依次递增直到其值等于strlen(xx[i]),在循环体中,对字符xx[i][j]的ASCII码值左移4位后所得的值保存到变量tmp,再利用if条件语句判断,如果tmp的值大于32且小于等于100,则把tmp的值与xx[i][j]的值相加之和赋给xx[i][j]。
【参考答案】

第8题:

下列给定程序中,函数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语言的字符与整型变量的关系以及字符串操作。

第9题:

使用VC6打开考生文件夹下的工程RevPrroj7。此工程包含一个源程序文件 RevMain7.cpp。在该文件中,函数fun()的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII码值大或相等的字符依次存放到c数组中,形成一个新的字符串。例如:若a中的字符串为aBCDeFgH,b中的字符串为ABcd,则c中的字符串为 aBcdeFgH。

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

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

源程序文件RevMain7.cpp中的程序清单如下:

//RevMain7.cpp

include<iostream>

include<string>

using namespace std;

void fun(char *p,char *q,char *c)

{

int k=1;

while(*p!=*q)

{

if(*p<*q)

c[k]=*q;

else

c[k]=*p;

if(*p)

p++;

if(*q)

q++;

}

}

int main()

{

char a[10]="aBCDeFgH",b[10]="ABcd",c[80]={'\0'};

fun(a,b,c);

cout<<"The string a is "<<a<<'\n';

cout<<"The string b is "<<b<<'\n';

cout<<"The string c is "<<c<<endl;

return 0;

}


正确答案: