以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序:includevoid f(char p以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序: #include <string.h> void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++ if(strcmp(p[i],p[j])<0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy

题目
以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序:includevoid f(char p

以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序: #include <string.h> void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++ if(strcmp(p[i],p[j])<0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t); } } main() {char p[][10]:{"abc","aabdfg","abbd","dcdbe","cd",);int i; f(p,5); printf("%d\n",strlen(p[0])); } 程序运行后的输出结果是( )。

A.6

B.4

C.5

D.3


相似考题
更多“以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序:#include<string.h>void f(char p ”相关问题
  • 第1题:

    有以下程序:includevoid f(char p[][10],int n)/* 字符串从小到大排序*/{char t[10];

    有以下程序: #include<string.h> void f(char p[][10],int n) /* 字符串从小到大排序 */ {char t[10];int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(p[i],p[j])>0{strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy([i],t);} } main() {char p[5][10]={"abc","aabdfg","abbd","dcdbe","cd"; f(p,5); printf("%d\n",strlen(p[0])); } 程序运行后的输出结果( )。

    A.2

    B.4

    C.6

    D.3


    正确答案:D
    解析:strcmp(str1,str2)是比较字符串str1和str2,若str1>str2,返回值为正数;f()函数的功能就是将字符串按照从小到大的顺序进行排列,需要注意的是比较的足字符串中每个字符的ASCII值的大小,所以元素p[0]是“abc”,它的长度为3。

  • 第2题:

    有以下程序:includevoid f(char*s,char*t){ char k;k=*s;*s=*t;*t=k;s++;t--;if(*s)f

    有以下程序: #include<string.h> void f(char*s,char*t) { char k; k=*s; *s=*t; *t=k; s++; t--; if(*s) f(s,t); } main( ) {char str[10]="abcdefg",*p; p=str+strlen(str)/2+1; f(p,p-2); printf(~%s\n",str); } 程序运行后的输出结果是 ______。

    A.abcdef

    B.gfedcba

    C.gbcdefa

    D.abedcfg


    正确答案:B
    解析:p=str+strlen(str)/2+1=str+4,f(p,p-2)的功能是将p[4]与p[2]互换,p[5]与p[1]互换,p[6]与p[0]互换,最后的结果为gfedcba。

  • 第3题:

    函数ReadDat()的功能是实现从文件IN35.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数$ortCharD(),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,捧序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT35.DAT中。

    例如,原文:dAe,BfC

    CCbbAA

    结果:fedCBA,

    bbCCAA

    原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

    注意:部分源程序已给出。

    请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

    试题程序:

    include<stdio.h>

    include<string.h>

    include<conio.h>

    char xx[50] [80];

    int maxline=0;

    int ReadDat(void);

    void WriteDat(void);

    void SortCharD()

    {

    }

    void main()

    {

    clrscr();

    if (ReadDat())

    {

    printf ("数据文件 IN35.DAT 不能打开!\n\007 ");

    return;

    }

    SortCharD();

    WriteDat();

    }

    int ReadDat(void)

    {

    FILE *fp;

    int i=0;

    char *p;

    if((fp=fopen("IN35.DAT","r"))==NULL)

    return 1;

    while (fgets(xx[i],80,fp)!=NULL)

    {

    p=strchr(xx[i],'\n');

    if (p) *p=0;

    i++;

    }

    maxline=i;

    fclose(fp);

    return 0;

    }

    void WriteDat()

    {

    FILE *fp;

    int i;

    clrscr();

    fp=fopen("OUT35.DAT","w");

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

    {

    printf ("%s\n",xx[i]);

    fprintf(fp,"%s\n',xx[i]);

    }

    fclose(fp);

    }


    正确答案:void SortCharD() { int ijkstr1; char ch; for (i=O;imaxline;i++) { str1=strlen(xx[i]); /*求各行的长度*/ for(j=0;jstr1-1;j++) /*对字符按从大到小的顺序进行排序*/ for(k=j+1;kstr1;k++) if (xx[i][j]xx[i][k]) { ch=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=ch; } } }
    void SortCharD() { int i,j,k,str1; char ch; for (i=O;imaxline;i++) { str1=strlen(xx[i]); /*求各行的长度*/ for(j=0;jstr1-1;j++) /*对字符按从大到小的顺序进行排序*/ for(k=j+1;kstr1;k++) if (xx[i][j]xx[i][k]) { ch=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=ch; } } } 解析:本题考查的知识点如下:
    (1) 循环结构的嵌套。
    (2) 字符的大小比较。
    (3) 字符排序。
    本题以行为单位对文章进行处理,首先要确定每一行中字符的个数。这个操作可使用字符串处理函数strlen(char*str)来完成。对字符从大到小排序依据的是字符的ASCII码,在C语言中,字符量可参与任何整型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。

  • 第4题:

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序:include inelude

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序:#include <stdio, h>#inelude <string, h>void f(char * p[ ] ,int n) char * t;int i,j; for(i=0;i<n-1;i++) for(j=i+1 ;j<n;j ++ ) if(strcmp(p[i], p[j])>0) { t =p[i];p[i] =p[j] ;p[j] =t;}}main( ){ char * p [5] = { "abe"." aabdfg"." abbd"," dcdbe"," cd" }; f(P,5 ); printf("% d\n", strlen(p[1]) );}程序运行后的输出结果是( )。

    A.2

    B.3

    C.60

    D.4


    正确答案:D
    解析:本题经过排序后,第二个字符串是"abbd",所以输出结果是4。

  • 第5题:

    有以下程序: include void f(char *s,char *t) {char k; k=*s; +s=*t;

    有以下程序: #include<string.h> void f(char *s,char *t) {char k; k=*s; +s=*t; *t=k; S++; t--; if(*s) f(s,t); } main() {char.str[10]="abcdefg",*p; p=str+strlen(str) /2+1; f(p,p-2); printf("%s\n",str); } 程序运行后的输出结果是 ______。

    A.abcdefg

    B.gfedcba

    C.gbcdefa

    D.abedcfg


    正确答案:B
    解析:本程序的作是将字符串str倒序。语句“p=str+strlen(str)/2+1;”用于将指针变量p指向e字符所在的存储单元,p-2指向了c字符所在的存储单元,在函数f中将这两个存储单元的内容交换,并使得f函数中指向c字符的指针变量s加1。指向c字符的指针变量t减1,然后继续将s和t指向的存储单元的内容进行交换,直到s指向的存储单元的内容为空为止。所以本题程序输出的结果是字符串“abcdefg”的倒序形式“gfedcba”。

  • 第6题:

    有以下程序:includevoid f(char p[][10],int n){char t[10];int i,j;for(i=0;i

    有以下程序: #include<string.h> void f(char p[][10],int n) {char t[10];int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(p[i],p[j])>0) {strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() {char p[5][10]={"abc","aabdfg","abbd","dedbe","cd"}; f(p,5); printf("%d\n",strlen(p[0]));} 程序运行后的输出结果是( )。

    A.2

    B.4

    C.6

    D.3


    正确答案:C
    解析:本题考核的是二维字符数组按行存放字符串、二维数组名作为函数的参数以及字符串的排序。主函数中定义了一个二维字符串数组p并按行赋值,调用f()函数,将字符串从小到大排序,strcmp()函数的功能是对两个字符串作向右逐个字符比较,直到出现不同的字符或遇到“\0”为止。如果全部字符都相同,则认为相等;若出现不同的字符.则以第一个不相同的字符的比较结果为准。由此可知最小的字符串是“aabdfg”,排序后存放在p[0]中,最后在主函数中输出p[0]的长度。

  • 第7题:

    以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。includevoid f(char p

    以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。 #include<string.h> void f(char p[][10],int n) { char t[20];int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(p[i],p[j]<0) {strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() { charp[][10]={“abc”,“aabdfg”,“abbd”,“dcdbe”,”cd”};int i; f(p,5);printf(“%d\n”,strlen(P[0])); } 程序运行后的输出结果是

    A.6

    B.4

    C.5

    D.3


    正确答案:C
    解析:函数stremp(字符串1,字符串2)作用是将“字符串1”和“字符串2”进行比较,如果“字符串1”>“字符串2”,返回一个大于0的整数值;如果“字符串1”“字符串2”,返回一个小于0的整数值;如果“字符串1”=“字符串2”,返回0。函数 strepy(字符串数组名,字符串,[整型表达式]),整型表达式的作用是将“字符串”的前“整型表达式”个字符存入到指定的“字符数组”中,若省略“整型表达式”,则将整个“字符串”存入“字符数组”中。函数f()的功能是利用选择法把一个具有n行的二维数组中按行存放的n个字符串由大到小排序。在主函数中定义了一个二维字符数组p并给它按行赋初值,然后调用f()函数,把它按行从大到小排列。字符串比较大小的标准是从第一个字符开始依次向右比较,遇到某一个字符大,该字符所在的字符串就是较大的字符串。由此可知最大的字符串为“dcdbe”,排序后存放在第一行,其首地址为P[0],在输出语句输出的P[0]指向的字符串长度是5。

  • 第8题:

    以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。includevoid f(char

    以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。#include <string. h>void f(char p[][10],int n){ chart[20];int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n; j++) if(strcmp(p[i],p[j]<0) {strcpy(t, p[i]); strcpy(p[i],p[j]);strcpy(p[j],t);}}main(){ char p[][10]={"abc", "aabdfg", "abbd", "dcdbe", "cd"}; int i; f(p,5); printf("%d\n", strlen(p[0]));} 程序运行后的输出结果是( )。

    A.6

    B.4

    C.5

    D.3


    正确答案:C
    解析:函数f()的功能是利用选择法把个具有n行的二维数组中按行存放的n个字符串由大到小排序。在主函数中定义了一个二维字符数组p并给它按行赋初值,然后调用f()函数,把它按行从大到小排列。字符串比较大小的标准是从第一个字符开始依次向右比较,遇到某一个字符大,该字符所在的字符串就是较大的字符串。由此可知最大的字符串为"dcdbe",排序后存放在第一行,其首地址为p[0],在输出语句输出的p[0]指向的字符串长度是5。所以4个选项中C正确。

  • 第9题:

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序:includevoidf(char*p[],in

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序: #include<string.h> voidf(char*p[],intn) { char*t;int i,j; for(i=0;i<n-1;i++) for (j=i+1;j<n;j++) if(strcmp(p[i],p[j])>0) { t=p[i]; p[i]=p[j]; p[j]=t; } } main() { char*p[5]={"abc"

    A.2

    B.3

    C.6

    D.4


    正确答案:D
    解析: 函数f的功能是将字符串数组中的每个字符串元素按照由小到大的顺序进行排列,调用f(p,5)后,字符串数组p变为{“aabdfg”,“abbd”,“abc”,“cd”,“dcdbe”},所以最后输出p[1]即"abbd"的长度应为4。

  • 第10题:

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序( )。

    #include<string.h>

    void f(char*p[],int n)

    { char*t;int i,j;

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

    for(j=i+1;j<n;j++)

    if(strcmp(p[i],p[j]>0){t=p[i];p[i]=p[j];p[j]

    =t;}

    }

    main

    { char *P[5]={"abe","aabdfg","abbd","dcd-

    be","cd"};

    f(p,5);

    printf("%d\n",strlen(p[1]));

    }

    程序运行后的输出结果是( )o

    A.2

    B.3

    C.6

    D.4


    正确答案:D
    函数voidf的功能是将字符指针数组*p[]中的每个字符串按照从小到大的顺序排序。在主函数main中,调用f(P,5)后,字符指针数组*p[5]中的字符串按照字典顺序从小到大排列为如下形式,即*p[5]={"aab-dfg","abbd","abc","cd","dcdbe"),因此P[1]="abdb",strlen(p[1])=4。

  • 第11题:

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序includevoid f(char*p[],in

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序 #include <string,h> void f(char *p[], int n) { char *t; int i,j; for(i=0; i<n-1; i++) for(j=i+1;j<n; j++) if(strcmp(p[i],p[j])>0) {t=p[i];p[i]=p[j]; p[j]=t;} } main() { char *p[5]={"abc","aabdfg","abbd","dcdbe","cd"}; f(p,5); printf("%d\n"。strlen(p[1])); } 程序运行后的输出结果是

    A.2

    B.3

    C.6

    D.4


    正确答案:D
    解析:本题所说的字典顺序是由f()函数中所调用的strcmp()函数对字符串大小的比较方法来决定的。strcmp()函数是依次对两个参数所指字符串对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符的ASCII码值的大小来决定整个字符串的大小。另外,根据f()函数中交换两个元素的条件strcmp(p[i],p[j]>0可以看出,当前面的元素大于后面的元素时,则交换两个元素,即从小到大排序。所以数组最终排序的结果是"aabdfg","abbd","abc","cd","dcdbe"。因此最终输出的p[1]的长度为4.应该选择D。

  • 第12题:

    有以下程序:include void f(char p[][10],int n)/* 字符串从小到大排序 */{ char t[1

    有以下程序: #include <string.h> void f(char p[][10],int n)/* 字符串从小到大排序 */ { char t[10]; int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(p[i],p[j])>0) { strcpy(t,p[i]); strcpy(p[i],p[j]); strcpy(p[j],t); } } main() {char p[5][10]={"abc","aabdog","abbd","dcdbe","cd"}; f(p,5); printf("%d\n",strlen(p[0])); } 程序运行后的输出结果是( )。

    A.2

    B.4

    C.6

    D.3


    正确答案:C
    解析:题目中已告知函数f()的作用是将字符串从小到大排序,因此主函数中调用完f(p,5);后,二维数组p中的内容为("aabdfg","abbd","abc","cd","dcdbc"}。输出的结果是strlen(p[0]),即p中第1个字符串的长度,所以结果是6。故本题应该选择C。

  • 第13题:

    下列给定程序中,函数fun()的功能是:利用插入排序法对字符串中的字符按从大到小的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。

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

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

    试题程序:

    include <string.h>

    include <stdio.h>

    define N 80

    void insert(char *aa)

    {

    int i,j,n; char ch;

    n=strlen(aa);

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

    {

    ch=aa[i];

    j=i-1;

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

    while((j>=0)||(ch>aa[j]))

    {

    aa[j+1]=aa[j];

    j--;

    }

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

    aa[j]=ch;

    }

    }

    main()

    {

    char a[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";

    int i;

    printf("The original string: %S\n",a);

    insert(a);

    printf("The string after sorting:%S\n\n",a);

    }


    正确答案:(1)错误:while((j>=0)||(ch>aa[j])) 正确:while((j>=0)&&(ch>aa[j])) (2) 错误:aa[j]=ch; 正确:aa[j+1]=ch;
    (1)错误:while((j>=0)||(ch>aa[j])) 正确:while((j>=0)&&(ch>aa[j])) (2) 错误:aa[j]=ch; 正确:aa[j+1]=ch; 解析:错误1:此处的两个条件要同时满足,是“与”的关系,而不是“或”的关系。错误2:对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之后再对前m项进行排序,如此循环直到数组全部元素完成排序。对前m项的子数列进行排序的方法是,将该子数列的末尾元素与前m-1项的元素相比较,由于前m-1项已经完成排序,可以找到某一位 置,使得将该末尾元素插入该位置之后,前m项仍然保持降序。这样循环后,就可以得到全部元素的排序。掌握了这个方法,这行的错误就很容易找出来了。

  • 第14题:

    下列给定程序中,函数fun()的功能是;利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。

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

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

    试题程序:

    include <String.h>

    include <stdio.h>

    define N 80

    void insert(char *aa)

    { iht i, j, n; char ch;

    n=strlen (aa);

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

    /**********************************/

    { c=aa[i];

    j=i-1;

    while ((j>=0) && (ch<aa [j] ))

    { aa [j+l]=aa[j];

    j--;

    }

    aa [j+l]=ch;

    }

    }

    main ( )

    { char a [N] = "QWERTYUIOPASDFGHJKIMNBVCXZ";

    int i;

    printf("The original string: %s\n",a);

    insert (a);

    printf("The string after sorting:

    %s\n\n", a);

    }


    正确答案:错误:c=aa[i] 正确:ch=aa[i];
    错误:c=aa[i] 正确:ch=aa[i]; 解析:对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之后再对前m项进行排序,如此循环直到数组全部元素完成排序。对前m项的子数列进行排序的方法是,将该子数列的末尾元素与前m-1项的元素相比较,由于前m-1项已经完成排序,可以找到某一位置,使得将该末尾元素插入该位置之后,前m项仍然保持升序。这样循环后,就可以得到全部元素的排序。

  • 第15题:

    函数ReadDat()的功能是实现从文件IN35.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数SortCharD(),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT35.DAT中。

    例如,原文:dAe,BfC

    CCbbAA

    结果:fedCBA,

    bbCCAA

    原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

    注意;部分源程序已给出。

    请勿改动主函数main()、读函数ReadDat()和写函数WrteDat()的内容。

    试题程序:

    include<Stdio.h>

    include<String.h>

    include<conio.h>

    char xx[50][80];

    int maxline=0;

    int ReadDat(void);

    void WriteDat(void);

    void SortCharD()

    {

    }

    void main()

    {

    Clrscr();

    if (ReadDat())

    {

    printf("数据文件 IN35.DAT不能打开!\n\007");

    return;

    }

    SortChar D();

    WriteDat();

    }

    int ReadDat(void)

    {

    FILE *fp;

    int i=0;

    Char*p;

    if((fp:fOpen("IN35.DAT","r"))==NULL)

    return 1;

    while (fgets(xX[i],80,fp)!=NULL)

    {

    p=strchr(xX[i],"\n");

    if (p) *p:0;

    i++;

    }

    maxline=i;

    fclose(fp);

    return 0;

    }

    void WriteDat()

    {

    FILE *fp;

    int i;

    Clrscr();

    fp:fopen("OUT35.DAT","w");

    for(i:0;i<maxline;i++)

    {

    printf("%s\",xx[i]);

    fprintf(fp,"%s\n",xx[i]);

    }

    fclose(fp);

    }


    正确答案:void SortCharD() { int i j k strl; char ch; for (i=0;i { strl=strlen (xx [i] ); /*求各行的长度*/ for (j=0; j for (k=j+l; k if (xx[i] [j] { ch=xx[i] [j]; xx[i] [j]=xx[i] [k]; xx[i] [k] =ch; } } }
    void SortCharD() { int i, j, k, strl; char ch; for (i=0;i { strl=strlen (xx [i] ); /*求各行的长度*/ for (j=0; j for (k=j+l; k if (xx[i] [j] { ch=xx[i] [j]; xx[i] [j]=xx[i] [k]; xx[i] [k] =ch; } } } 解析:本题考查的知识点如下:
    (1)循环结构的嵌套。
    (2)字符的大小比较。
    (3)字符排序。
    本题以行为单位对文章进行处理,首先要确定每一行中字符的个数。这个操作可使用字符串处理函数
    strlen(char*str)来完成。对字符从大到小排序依据的是字符的ASCII码,在C语言中,字符量可参与任何整
    型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。

  • 第16题:

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序: include void f(ch

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序: #include<string.h> void f(char *p[],int n) {char *t;int i,j; for(i=O;i<n-1;i++) for(j=i+1;j<n;j++) if strcmp(p[i],p[j])>0{t=p[i] p[i]=p[j]; p[j]=t; } } main() {char* p[5]=("abc","aabdfg","abbd","dcdbe","cd"}; f(p,5); printf("%d\n",strlen(p[1])); } 程序运行后的输出结果是 ______。

    A.2

    B.3

    C.6

    D.4


    正确答案:D
    解析:字符串比较函数“strcmp(char*s1,char*s2)”的比较规则是对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到到"\0"为止。如果全部相同,则认为相等:若出现不相同的字符,则以第一个不相同的字符的比较结果为准。当s1s2,返回值0;当s1=s2时,返回值二0:当s1>s2时,返回值>0。故本题经过排序后,得到第二个字符串是“abbd”,所以输出结果是4。

  • 第17题:

    函数ReadDat()的功能是实现从文件IN88.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数SortCharA(),该函数的功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中。最后调用函数WriteDat()把结果xx输出到文件OUT88.DAT中。

    例如,原文:dAe,BfC

    CCbbAA

    结果:ABCdef

    AACCbb

    原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

    注意:部分源程序已给出。

    请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

    试题程序:

    include<stdio.h>

    include<string.h>

    include<conio.h>

    char xx[50] [80];

    int maxline=0;

    int ReadDat(void);

    void WriteDat(void);

    void SortCharA ( )

    {

    }

    void main()

    {

    clrscr();

    if (ReadDat())

    {

    printf ("数据文件IN88.DAT不能打开! \n\007");

    return;

    }

    SortCharA();

    WriteDat();

    }

    int ReadDat(void)

    {

    FILE *fp;

    int i=0;

    char *p;

    if((fp=fopen("IN88.DAT","r"))==NULL)

    return 1;

    while(fgets(xx[i],80,fp) !=NULL)

    {

    p=strchr(xx[i],'\n');

    if (p) *p=0;

    i++;

    }

    maxline=i;

    fclose(fp);

    return 0;

    }

    void WriteDat()

    {

    FILE *fp;

    int i;

    clrscr();

    fp=fopen("OUT88.DAT","w");

    for(i=0;i {

    printf("%s\n",xx[i]);

    fprintf(fp,"%s\n",xx[i]);

    }

    fclose(fp);

    }


    正确答案:void SortCharA() { int ijkstrl; char ch; for (i=0; imaxline;i++) { strl=strlen(xx[i]); /*求该行的字符个数*/ for (j=0; jstrl-1; j++) /*对字符按从小到大的顺序进行排序*/ for (k=j+1; kstrl ;k++} if (xx[i] [j]>xx[i] [k]) { ch=xx[i] [j]; xx[i] [j]=xx[i] [k]; xx[i] [k] =ch; } } }
    void SortCharA() { int i,j,k,strl; char ch; for (i=0; imaxline;i++) { strl=strlen(xx[i]); /*求该行的字符个数*/ for (j=0; jstrl-1; j++) /*对字符按从小到大的顺序进行排序*/ for (k=j+1; kstrl ;k++} if (xx[i] [j]>xx[i] [k]) { ch=xx[i] [j]; xx[i] [j]=xx[i] [k]; xx[i] [k] =ch; } } } 解析:本题考查的知识点如下:
    (1)循环结构的嵌套。
    (2)字符的大小比较。
    (3)字符排序。
    本题以行为单位对文章进行处理,首先要确定每一行中字符的个数。这个操作可使用字符串处理函数strlen(char*str)来完成。对字符从小到大排序依据的是字符的ASCII码,在C语言中,字符量可参与任何整型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。

  • 第18题:

    函数ReadDat()的功能是实现从文件ENG95.IN中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryChar(),按给定的替代关系对数组xx中所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS95.DAT中。

    替代关系:f(p)=p*11 mod 256(p是数组xx中某一个字符的ASCCII,f(p)是计算后新字符的ASCII值),如果计算后f(p)的值小于等于32或f(p)对应的字符是大写字母,则该字符不变,否则将f(p)所对应的字符进行替代。

    注意;部分源程序已给出。

    原始数据文件的存放格式是每行的宽度均小于80个字符。

    请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

    试题程序:

    include<conio.h>

    include<stdio.h>

    include<string.h>

    include<ctype.h>

    unsigned char xx[50][80];

    int maxline=0;

    int ReadDat(void);

    void WriteDat(void);

    void encryChar()

    {

    }

    void main()

    {

    clrscr();

    if(ReadDat())

    {

    printf("数据文件ENG95. IN不能打开!\n\007");

    return;

    }

    encryChar();

    WriteDat();

    }

    int ReadDat(void)

    {

    FILE *fp;

    int i=0;

    unsigned char *p;

    if((fp=fopen("ENG95.IN","r"))==NULL)

    return 1;

    while(fgets(xx[i],80,fp)!=NULL)

    {

    p=strchr(xx[i],'\n');

    if(p) *p=0;

    i++;

    }

    maxline=i;

    fclose(fp);

    return 0;

    }

    void WriteDat()

    {

    FILE *fp;

    int i;

    fp= fopen("ps95.dat","w");

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

    {

    printf("%s\n",xx[i]);

    fprintf(fp,"%s\n",xx[i]);

    }

    fclose(fp);

    }


    正确答案:void encryChar() { int i; char *pf; for(i=0;imaxline;i++) { pf=xx[i]; /*指针pf指向该行第一个字符*/ while(*pf!=0) { if((*pf*11%256>='A'&& *pf*11%256='Z') || *pf*11%256=32) /*如果计算的值小于等于32或对应的字符是大写字母*/ { pf++; /则不做改变指向下一个字符*/ continue; /*退出本次循环*/ } *pf=*pf*11%256; /*否则用新字符取代原有字符*/ pf++; /*指向下一个字符*/ } } }
    void encryChar() { int i; char *pf; for(i=0;imaxline;i++) { pf=xx[i]; /*指针pf指向该行第一个字符*/ while(*pf!=0) { if((*pf*11%256>='A'&& *pf*11%256='Z') || *pf*11%256=32) /*如果计算的值小于等于32或对应的字符是大写字母*/ { pf++; /则不做改变,指向下一个字符*/ continue; /*退出本次循环*/ } *pf=*pf*11%256; /*否则用新字符取代原有字符*/ pf++; /*指向下一个字符*/ } } } 解析:本题考查的知识点如下;
    (1)字符对应的ASCII码。
    (2)判断结构中多个条件的“或”运算。
    (3)退出一次循环。
    (4)二维数组的访问。
    本题中,将数据存放在一个二维数组中,可以定义一个指向数组每一行的指针。初始时,指针指向该行的第一个元素,随着地址增加,指针指向后面的元素。在C语言中,字符可参与任何整数运算。实际上,是字符的ASCII码参与了运算。所以可以直接用字符代入f(p)的关系式中求出替换字符。若f(p)对应的字符是大写字母或f(p)≤32,则该字符不变。只有当字符大于等于A小于等于Z时,才是大写字母,所以这两个条件之间用“与”运算。而字符是大写字母与f(p)≤32两条件满足一个即可,所以这两个条件之间用“或”运算。若字符不变,则可不必计算替换字符,使用continue跳出本次循环,进入下一次循环的条件判断中。因为这里不是直接退出循环结构,所以不能使用break语句。

  • 第19题:

    有以下程序,其中函数f的功能是将多个字符串按字典顺序排序( )。 #include<string.h> void f(char*p[],int n) { char*t;int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(p[i],p[j]>0){t=p[i];p[i]=p[j];p[j] =t;} } main { char *P[5]={"abe","aabdfg","abbd","dcd- be","cd"}; f(p,5); printf("%d\n",strlen(p[1])); } 程序运行后的输出结果是( )o

    A.2

    B.3

    C.6

    D.4


    正确答案:B
    函数voidf的功能是将字符指针数组*p[]中的每个字符串按照从小到大的顺序排序。在主函数main中,调用f(P,5)后,字符指针数组*p[5]中的字符串按照字典顺序从小到大排列为如下形式,即*p[5]={"aab-dfg","abbd","abc","cd","dcdbe"),因此P[1]="abdb",strlen(p[1])=4。

  • 第20题:

    函数ReadDat()的功能是实现从文件ENG4.1N中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,结果仍存入数组xx对应的位置上,最后调用函数WriteDat()把结果xx输出到之件PS4.DAT中。

    替代关系:f(p)=p*11 mod 256(p是数组xx中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)的值小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。

    注意:部分源程序已给出。

    原始数据文件存放的格式是:每行的宽度均小于80个字符。

    请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

    试题程序:

    include <stdio.h>

    include <string.h>

    include <conio.h>

    include <ctype.h>

    unsigned char xx[50] [80];

    int maxline = 0;/* 文章的总行数 */

    int ReadDat(void);

    void WriteDat(void);

    void encryptChar()

    {

    }

    main()

    {

    clrscr();

    if(ReadDat())

    {

    printf("数据文件ENG4.IN不能打开! \n\007");

    return;

    }

    encryptChar();

    WriteDat ( );

    }

    int ReadDat (void)

    {

    FILE *fp;

    int i = 0;

    unsigned char *p;

    if((fp = fopen("ENG4.IN", "r")) ==NULL) return 1;

    while(fgets(xx[i], 80, fp) !=NULL)

    {

    p = strchr(xx[i], '\n');

    if(p) *p = 0;

    i++;

    }

    maxline = i;

    fclose(fp);

    return 0;

    }

    void WriteDat(void)

    {

    FILE *fp;

    int i;

    fp = fopen("PS4.DAT", "w");

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

    {

    printf("%s\n", xx[i]);

    fprintf(fp, "%s\n", xx[i]);

    }

    fclose(fp);

    }


    正确答案:void encryptChar() { int i; char *pf; for(i=0; imaxline; i++) { Pf=xx[i]; /*指针pf指向各行的首地址*/ while(*pf!=0) { if(*pf*11%256>130 || *pf*11%256=32) /*如果计算后的值小于等于32或大于130*/ /*则该字符不变*/ else *pf=*pf*11%256; /*否则将所对应的字符进行替代*/ pf++; /*指针pf指向下一个字符*/ } } }
    void encryptChar() { int i; char *pf; for(i=0; imaxline; i++) { Pf=xx[i]; /*指针pf指向各行的首地址*/ while(*pf!=0) { if(*pf*11%256>130 || *pf*11%256=32) /*如果计算后的值小于等于32或大于130*/ /*则该字符不变*/ else *pf=*pf*11%256; /*否则将所对应的字符进行替代*/ pf++; /*指针pf指向下一个字符*/ } } } 解析:本题主要考查用指针变量来控制字符数组,由于要对已有二维字符数组的所有元素逐个处理,因此,需要定义一个字符指针变量来控制原二维数组的各行,当前行如果确定下来,用指针的移动就可以依次扫描该行的所有字符元素,每得到一个字符就对它进行条件判断。根据题意,条件用“if(*pf*11%256>130||*pf*11%256=32)”语句来实现,如果该字符不满足上述条件,就用一个新的字符来替代,新的字符是当前的字符乘以11的结果再去与256求余数。处理完毕后,指针去取下一个字符。如果该字符满足所给条件,将不做任何操作,指针直接下移,去取下一个字符,对下一个字符进行处理。

  • 第21题:

    有以下程序: include include void f(char * s,char*t){char k; k=*s;*s=*

    有以下程序: #include <stdio.h>#include <string.h>void f(char * s,char*t){ char k; k=*s; *s=*t; *t=k; s++; t--; if( * s) f(s,t);}main( ){ char str[10] :"abedefg", * p; p = str + strlen(str)/2+1; f(p,p -2); printf( "% s \n" ,str);程序运行后的输出结果是( )。

    A.abcdefg

    B.gfedcba

    C.gbcdefa

    D.abedcfg


    正确答案:B
    解析:本程序的作用是将字符串str倒序。语句p=str+strlen(str)/2+1;将指针变量p指向字符'e'所在的存储单元,P-2指向字符,'c'所在的存储单元,在函数f中将这两个存储单元的内容交换,然后将f函数中指向字符'e'的指针变量s加1,指向字符'c'的指针变量t减1,继续将s和t指向的存储单元的内容进行交换,直到s指向的存储单元的内容为空为止。所以本题程序输出的结果是字符串"abcdefe”的倒序形式"gfedcba"。

  • 第22题:

    以下程序中函数f( )的功能是将n个字符串按由大到小的顺序进行排序。 include void f

    以下程序中函数f( )的功能是将n个字符串按由大到小的顺序进行排序。 #include<string.h> void f(char p[ ][10],int n) { char t[20]; int i,j; for(i =O;i <n-1 ;i ++ ) for(j =i + 1 ;j < n;j ++ ) if(strcmp(p [i] ,p[j] ) <0) { strcpy(t,p[i]);strcpy(p[i] ,p[j] );strcpy(p[j] ,t); } } main ( ) { char p [ ] [ 10 ] = { "abc","aabdfg","abbd","dcdbe", "cd" }; int i; f(p,5); printf("%d\n",strlen(p[O] ) ); } 程序运行后的输出结果是

    A.6

    B.4

    C.5

    D.3


    正确答案:C
    解析:对字符串比较的方法是依次对两字符串对应位置上的字符两两比较,当出现第一对不相同的字符时,即由这两个字符(ASCII码值)决定所在串的大小。

  • 第23题:

    以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。 include void f(char

    以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。 #include <string.h> void f(char p[][10], int n) { char t[20]; int i,j; for(i=0;i<n-1;i++) for(j=i+l;j<n;j++) if(strcmp (p[i],p[j])<0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() { char p[][lO]-{"abc","aabdfg","abbd","dcdbe","cd"};int i; f(p,5); printf("%dkn",strlen(p[0])); } 程序运{亍后的输出结果是

    A.6

    B.4

    C.5

    D.3


    正确答案:C
    解析:函数strcmp(字符串1,字符串2)作用是将”字符串1”和”字符串2”进行比较,如果“字符串1”》”字符串2”,返回一个大于0的整数值;如果“字符串1”“字符串2”,返回一个小于0的整数值;如果”字符串1”=“字符串2”,返回0。函数strcpy(字符串数组名,字符串,[整型表达式])的作用是将“字符串”的前“整型表达式”个字符有入到指定的“字符数组”中,若省略“整型表达式”,则将整个“字符串”存入,字符数组”中.函数f()的功能是利用选择法把一个具有n行的二维数组中按行存放的n个字符串由大到小排序。在主函数中定义了一个二维字符数组p并给它按行赋初值,然后调用f()函数;把它按行从大到小排列。字符串比较大小的标准是从第一个字符开始依次向右比较,遇到某一个字符大,该字符所在的字符串就是较大的字符串。由此可知最大的字符串为“dcdbe”,排序后存放在第一行,其首地址为P[0],在输出语句输出的p[0]指向的字符串长度是5。所以4个选项中C正确。