编写函数模板 void change(T &i,T &j),能够实现整型数据、实型和字符串的交换,并编写测试的主函数。

题目

编写函数模板 void change(T &i,T &j),能够实现整型数据、实型和字符串的交换,并编写测试的主函数。


相似考题
参考答案和解析
正确答案:
#include<iostream.h>template<classT>voidchange(T&i,T&j){Ttemp;temp=i;i=j;j=temp;}voidmain(){inta,b;doublec,d;cout<<"输入两个整数啊a,b:";cin>>a>>b;change(a,b);cout<<"\n交换后为a,b:"<<a<<""<<b;cout<<"\n输入两个实数c,d:";cin>>c>>d;change(c,d);cout<<"\n交换后为c,d:"<<c<<""<<d;cin.get();char*s1="",*s2="";cout<<"\n输入一个字符串s1:";charstr1[20],str2[20];s1=str1;s2=str2;cin.getline(s1,20);cout<<"\n输入二个字符串s2:";cin.getline(s2,20);change(s1,s2);cout<<"\n交换后为s1,s2:"<<s1<<""<<s2<<endl;}
更多“编写函数模板 void change(T &amp;i,T &amp;j),能够实现整型数据、实型和字符串的交换,并编写测试 ”相关问题
  • 第1题:

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

    有以下程序,其中函数的功能是将多个字符串按字典顺序排序: # 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
    解析:strcmp(s1,s2)是比较两个字符串的大小,s1>s2时值为正数,s1s2时值为负数,s1=s2时值为0。调用 f(p,5)函数的功能是将存储字符串的数组p中的字符串从小到大进行排列。最后的排列结果为:p[5]={"aabdfg","abbd", "abc","cd","dcdbe"},最后要求输出的是"abbd"的长度。

  • 第2题:

    编写算法,实现下面函数的功能。函数void insert(char*s,char*t,int pos)将字符串t插入到字符串s中,插入位置为pos。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)


    参考答案:本题是字符串的插入问题,要求在字符串s的pos位置,插入字符串t。首先应查找字符串s的pos位置,将第pos个字符到字符串s尾的子串向后移动字符串t的长度,然后将字符串t复制到字符串s的第pos位置后。
      对插入位置pos要验证其合法性,小于1或大于串s的长度均为非法,因题目假设给字符串s的空间足够大,故对插入不必判溢出。
      [算法描述]
      void insert(char *s,char *t,int pos)
      //将字符串t插入字符串s的第pos个位置。
      {int i=1,x=0; char *p=s,*q=t; //p,q分别为字符串s和t的工作指针
      if(pos<1) {cout<<“pos参数位置非法”<  while(*p!=’\0’&&i  //若pos小于串s长度,则查到pos位置时,i=pos。
      if(*p == '/0') { cout<  else //查找字符串的尾
      while(*p!= '/0') {p++; i++;} //查到尾时,i为字符‘\0’的下标,p也指向‘\0’。
      while(*q!= '\0') {q++; x++; } //查找字符串t的长度x,循环结束时q指向'\0'。
      for(j=i;j>=pos ;j--){*(p+x)=*p; p--;}//串s的pos后的子串右移,空出串t的位置。
      q--; //指针q回退到串t的最后一个字符
      for(j=1;j<=x;j++) *p--=*q--; //将t串插入到s的pos位置上
      [算法讨论] 串s的结束标记('\0')也后移了,而串t的结尾标记不应插入到s中。

  • 第3题:

    请补充函数fun(),该函数的功能是:把字符串str中的字符按字符的ASCⅡ码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。

    例如,如果输入“cdefgh”,则输出为“hgfedc”。

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

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

    试题程序:

    include <stdio.h>

    define N 80

    void fun (char s [], int n)

    {

    int i, j;

    char ch;

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

    for(j=【 】;j<n;j++)

    if (s[i]<s [j])

    {

    ch=s [j];

    【 】;

    s [i] =ch;

    }

    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);

    }


    正确答案:I s[j]=s[i]
    I s[j]=s[i] 解析:第一空:本题采用选择法进行排序。选择法的算法思路是:如果有n个数则从头到倒数的第2个数一个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序 (即交换)。理解了选择法的思路,则此空就非常简单了,应该填i。第二空:借助第三个变量交换两数的方法,非常重要也非常基础,必须要求掌握。

  • 第4题:

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

    【说明】

    函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。

    【函数】

    void QuickSort( int A[ ],int s,int t)

    { int i=s,j=t+1,temp;

    int x=A[s];

    do{

    do i ++ ;while (1);

    do j -- ;while(A[j]>x);

    if(i<j){temp=A[i];(2);(3);}

    }while(i<j);

    A[a] =A[j];A[j] =x;

    if(s<i-1) (4);

    if(j+1<t) (5);

    }


    正确答案:(1)A[i]x (2)A[i]=A[j] 3)A[j]=temp (4)QuickSort(Asj-1) (5)QuickSort(Aj+1t);
    (1)A[i]x (2)A[i]=A[j] 3)A[j]=temp (4)QuickSort(A,s,j-1) (5)QuickSort(A,j+1,t); 解析:快速排序的思想是:任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。快速排序是对冒泡排序的一种改进方法,算法中元素的比较和交换是从两端向中间进行的,排序码较大的元素一次就能够交换到后面单元,排序码较小的记录一次就能够交换到前面单元,记录每次移动的距离较远,因而总的比较和移动次数较少。

  • 第5题:

    请补充main函数,该函数的功能是:把一维数组中的元素逆置。结果仍然保存在原数组中。

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

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

    试题程序:

    include <stdio.h>

    define N 10

    main ( )

    {

    int i, j, t;

    int bb[N];

    clrscr ();

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

    bb[i]=i;

    printf("\n*** original list ***\n");

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

    printf ("%4d",bb [i] );

    for(【 】; j<=i;【 】)

    {

    t=bb [j ];

    bb [j ] =bb [i];

    bb[i]=t;

    }

    printf("\n****** new list ******\n");

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

    printf ("%4d",bb [i] );

    }


    正确答案:j=0--I j++i-
    j=0,--I j++,i-, 解析:第一空:逆置一维数组元素的思路是,将第一个元素与最后一个元素对调,将第二个元素与倒数第二个元素对调,依此类推,直到中间的元素。所以第一次执行循环时,第一个元素的下标为0,最后一个元素的下标为N-1,而此时i等于N,故要将i减1。第二空:每执行一次循环,顺方向元素向后移动一个,反方向元素向前移动一个,故下标j要加1,下标i要减1。

  • 第6题:

    请补充函数fun(),该函数的功能是:按行统计N×N维矩阵元素中的最大值(均为整数),并把这些值按从小到大的顺序保存在数组b中。矩阵的维数在主函数中输入,并赋予随机数。

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

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

    试题程序:

    include<stdio.h>

    include<conio.h>

    include<stdlib.h>

    define N 20

    void fun(【 】)

    {

    int i j;

    int t;

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

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

    if(【 】)

    b[i]=a[i][j];

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

    {

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

    if(【 】)

    {

    t=b[i];

    b[i]=b[j];

    b[j]=t;

    }

    }

    }

    main()

    {

    int a[N][N];

    int b[N];

    int n;

    int i,j;

    clrscr();

    printf("*****Input the dimension of array N*****\n");

    scanf("%d",&n);

    printf("*****The array *****\n");

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

    {

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

    {

    a[i][j]=rand()%20;

    while(a[i][j]==0)

    a[i][j]=rand()%30;

    printf("%4d",a[i][j]);

    }

    printf(”\n\n”);

    }

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

    b[i]=0;

    fun(a,b,n);

    printf("***** THE RESULT *****\n");

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

    printf(“%d”,b[i]);

    }


    正确答案:int a[][N]int b[]int n b[i]a[i][j] b[i]b[j]
    int a[][N],int b[],int n b[i]a[i][j] b[i]b[j] 解析:第一空:根据主函数main()调用函数fun()的格式,可以知道函数fun()有3个参数,第一个参数是N×N整型二维数组,第二个参数是整型—维数组,第三个参数是整型变量。第二空:数组元素b[i]保存第i行的最大值,通过循环将第i行的各元素与b[i]进行比较,如果大于b[i],则将这个数赋给b[i].第三空:通过for循环嵌套,将数组b中的数按从小到大的顺序排列,依次将各元素与所有元素进行比较,如果有一个元素比当前元素大,就借助第三个变量交换这两个元素,最终使第一个元素保存数组中最小的数,最后一个元素保存数组中最大的数。

  • 第7题:

    有以下程序 include include void fun(char s[][10],int n

    有以下程序 #include <stdio.h> #include <string.h> void fun(char s[][10],int n) { char t; int i j; for (i=0; i<n-1; i++) for 0--i+l; j<n; j++) /*比较字符串的首字符大小,并交换字符串的首字符*/ if(s[i][0] > s[j][0]) { t = s[i][0]; s[i][0] = s[j][0]; s[j][0] = t;} } main() { char ss[5][10]= {"bcc", "bbcc", "xy", "aaaacc", "aabcc" }; fun(ss, 5); printf("%s,%s\n", ss[0],ss[4]); } 程序的运行结果是

    A.xy, aaaacc

    B.aaaacc,xy

    C.xcc,aabcc

    D.acc,xabcc


    正确答案:D
    解析:在函数fun()中有一个两层嵌套的for循环,外循环变量i从0递增到n-2,内循环变量i从i+1循环递增到n-1,这是选择排序算法的标准结构。循环体中因为逆序条件为“s[i][0]> s[j][0]”,所以实现的是升序排序。由此可见,fun()函数实现的功能是对一个二维字符数组前n行的首字符进行升序排序。主函数中定义的二维数组初始化为{"bcc",”bbcc", "xy","aaaacc","aabcc"},通过fun()函数的排序后,结果将为acc","abcc","by", "baaacc","xabcc"}。故最终输出字符串ss[0]和ss[4]的结果为acc,xabcc,应该选择D。

  • 第8题:

    有以下程序,其中函数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。

  • 第9题:

    有以下程序 #include<stdio.h> #include<string.h> void fun(char s[][10],int n) { char t;int i,j; for(i=0;i<n-1;j++) for(j=i+1,j<n;j++) /*比较字符串的首字符大小,并交换字符串的首字符*/ if(s[0])>s[i][c]{t=s[i][o];s[i][o]=s[j][o];s [j][0]=t;} } main { char ss[5][10]="bcc","bbcc","xy","aaaacc"," aabcc"} fun(ss,5);printf("%s,%s",ss[0],ss[4]); } 程序运行结果是( )。

    A.xy,aaaacc

    B.aaaacc,xy

    C.xcc,aabcc

    D.acc,xabcc


    正确答案:D
    函数fun(chars[][10],intn)比较二维字符数组s[][10]的每个字符串的首字符大小,如果前一个字符串首字符大于后一个字符串的首字符,则交换这两个字符串的首字符。

  • 第10题:

    请补充函数fun(char *s),该函数的功能是把字符串中的内容逆置。

    例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容变为edcba。

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

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

    试题程序:

    $include<string.h>

    include<conio.h>

    include<stdio.h>

    define N 81

    void fun(char*s)

    {

    int i=0,t,n=strlen(s);

    for(;【 】;i++)

    {

    t=*(s+i);

    【 】;

    【 】;

    }

    }

    main()

    {

    char a[N];

    clrscr();

    printf("Enter a string:");

    gets(a);

    printf("The original string is:");

    puts(a);

    fun(a);

    printf("\n");

    printf("The string after modified:");

    puts(a);

    }


    正确答案:in/2或s+is+n-1-i或in-1-I *(s+i)=*(s+n-1-i) *(s+n-1-i)=t
    in/2或s+is+n-1-i或in-1-I *(s+i)=*(s+n-1-i) *(s+n-1-i)=t 解析:第一空:将字符串的内容逆置,实际上就是将第一个字符和最后一个字符交换,再将第二个字符与倒数第二个字符交换,依此类推,直到中间的字符为止。所以,长度为n的字符串需要交换的次数为n/2。还可以这样理解,交换时始终保持顺数的字符在倒数的字符前面。第二空:顺数第i个字符为*(s+i),倒数第i个字符为*(s+n-1-i)。第三空:掌握利用第三个变量进行变量交换的方法。本题中,第三个变量为t。

  • 第11题:

    以下程序中函数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码值)决定所在串的大小。

  • 第12题:

    根据下面函数原型编写一个函数,求出并返回由字符指针a所指向的字符串中包含的字符’a’和’A’的总个数。int void fun(char* a);

  • 第13题:

    请编写函数fun(),其功能是:将s所指字符串中下标为奇数的字符删除,串中剩余字符形成的新串放在t所指数组中。

    例如,当s所指字符串中的内容为siegAHdied,则在t所指数组中的内容应是seAde。

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

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

    试题程序:

    include<conio.h>

    include<stdio.h>

    include<string.h>

    void fun(char*S,char t[])

    {

    }

    main()

    {

    char s[100],t[100];

    clrscr();

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

    scanf("%S",S);

    fun(S,t);

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

    }


    正确答案:void fun (char *Schar t[]) { int ij=0k=strlen(s); /*k为字符串的长度*/ for(i=0;ik;i=i+2) /*将s所指字符串中下标为偶数的字符存入t所指字符串中*/ t[j++]=s[i]; t[j]='\0'; /*在字符串最后加上结束标志*/ }
    void fun (char *S,char t[]) { int i,j=0,k=strlen(s); /*k为字符串的长度*/ for(i=0;ik;i=i+2) /*将s所指字符串中下标为偶数的字符存入t所指字符串中*/ t[j++]=s[i]; t[j]='\0'; /*在字符串最后加上结束标志*/ } 解析:本题使用了一种i永远是偶数的循环方法,即for(i=0;ik;i=i+2),因为开始时i的值为0,当i+2循环时,此值永远是偶数。

  • 第14题:

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

    【说明】

    设串s和串t采用顺序存储结构,编写函数实现串s和串t的比较操作,要求比较结果包括大于、小于和等于3种情况。

    【函数】

    int StrCompare(SStrType s, SStrType t)

    {

    int n=s.length, m=(1), i,j,tag;

    i=0; j=0;

    while((2))

    {

    if((3))

    {

    i++;

    j++;

    }

    else if(s.str[i]>t.str[j])

    {

    tag=1;

    return tag;

    }

    else

    {

    tag=-1;

    return tag;

    }

    }

    if(n==m)

    tag=0;

    else if((4))

    tag=1;

    else if(n<m)

    tag=-1;

    (5);

    }


    正确答案:(1)t.length (2)in&&jm (3)s.str[i]==t.str[j] (4)n>m (5)retrun tag
    (1)t.length (2)in&&jm (3)s.str[i]==t.str[j] (4)n>m (5)retrun tag 解析:本题考查用C语言程序实现对串的操作。
    题目要求对顺序存储的串s和串t进行比较,且比较结果可能是大于、小于和等于3种情况。对串的操作是考试中容易出现的内容,串是指由任意个字符构成的有限序列。要判断两个串的大小是通过串中元素的比较来实现的。
    第(1)空是对刚声明的变量进行赋初值操作,前面的n中存放了串s的长度,而对于串t的长度在程序中一直没求过,而是用m来表示,那么此空是将串t的长度存放到变量m中。因此,此空答案为t.length。
    第(2)空是循环的判断条件,从程序不难看出此循环的作用是实现对串s和串t的比较,在进行比较串时,需要对串中逐个元素进行比较,只要串中还有元素,比较就需继续,而判断串中是否还有元素是通过串的长度来实现的。两个串中元素的长度分别存放在变量n和变量m中,因此,此空答案为in&&jm。
    第(3)空是条件判断语句的条件,如果这个条件成立,则两个串中的元素都往后移动一个,再结合下面的程序,不难看出此条件的作用是判断当前两个元素是否相等,如果相等,则执行下面语句。因此,此空答案为s.str[i]==t.str[j]。
    第(4)空也是条件判断语句的条件,题目要求比较结果可能是大于、小于和等于三种情况,程序中已经考虑了其中小于和等于的情况,那么此空应该是考虑大于的情况,因此,此空答案为n>m。
    第(5)空在程序的最后,题目中要求函数能返回运算的结果,而根据程序的内容,我们知道结果存放在变量tag中,因此,此空答案为return tag。

  • 第15题:

    假定输入的字符串中只包含字母和*号。请编写函数 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以后的所有*号保留下来。

  • 第16题:

    函数f_str(char *str,char del)的功能是;将非申字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。例如,若str的值为“66981636666257”,del的值为“6”,调用此函数后,将输出3个子字符串,分别为“981”、“3”和“257”。请将函数f_str中(6)~(8)空缺处的内容填写完整。

    [函数]

    void f_str(char *str,char del)

    { int i,j,len;

    len = strlen(str);

    i = 0;

    while (i<len) {

    while ( (6) )

    i++; /* 忽略连续的标志字符 */

    /* 寻找从srt[i]开始直到标志字符出现的一个子字符串 */

    j = i+1;

    while (str[j] !=del && str[j] !='\0')

    j++;

    (7)="\0"; /* 给找到的字符序列置字符串结束标志 */

    printf (" %s\t", & str [i]);

    (8);

    }

    }


    正确答案:函数f_str(char*strchar del)的功能是:将非空字符串str以分割标志字符为界线分割成若干个子字符串并输出。由函数说明和C代码可知该函数对给定的字符串进行从左至右的扫描找出不包含标志字符(变量del的值)的子字符串。在该函数C代码中变量i的初值为0len表示字符串的长度。当 ilen时进入循环体。如果当前字符(即str[i]的值)是标志字符则不做处理继续扫描以处理标志字符连成一串的情况。因此(6)空缺处所填写的内容是“str[i]==del”或其等价形式。 当退出第2个while循环时当前字符str[i]不是标志字符此时从str[i]开始继续寻找直到标志字符出现的…个子字符串(变量i保持不变用j标记寻找的过程)给找到的字符序列置字符串结束标志以便于后面语句的输出。因此(7)空缺处所填写的内容是“str[j]”。 printf输出语句结束之后就要继续寻找后面不包含标志字符的子字符串。此时需要把数组指针i移至j的后面再继续扫描。因此(8)空缺处所填写的内容是“i=j+1”。
    函数f_str(char*str,char del)的功能是:将非空字符串str以分割标志字符为界线,分割成若干个子字符串并输出。由函数说明和C代码可知,该函数对给定的字符串进行从左至右的扫描,找出不包含标志字符(变量del的值)的子字符串。在该函数C代码中,变量i的初值为0,len表示字符串的长度。当 ilen时进入循环体。如果当前字符(即str[i]的值)是标志字符,则不做处理,继续扫描以处理标志字符连成一串的情况。因此(6)空缺处所填写的内容是“str[i]==del”或其等价形式。 当退出第2个while循环时,当前字符str[i]不是标志字符,此时从str[i]开始继续寻找,直到标志字符出现的…个子字符串(变量i保持不变,用j标记寻找的过程),给找到的字符序列置字符串结束标志,以便于后面语句的输出。因此(7)空缺处所填写的内容是“str[j]”。 printf输出语句结束之后,就要继续寻找后面不包含标志字符的子字符串。此时,需要把数组指针i移至j的后面,再继续扫描。因此(8)空缺处所填写的内容是“i=j+1”。

  • 第17题:

    请编写函数fun(),该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

    例如,若二维数组中的数据为:

    W WWW

    S S S S

    H H H H

    则字符串中的内容应是WSHWSHWSHWSH。

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

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

    试题程序:

    include<stdio.h>

    define M 3

    define N 4

    void fun(char (*s)[N],char *b)

    {

    }

    main()

    {

    char a[100],w[M][N]={{ 'W', 'W', 'W', 'W'},

    {'S', 'S', 'S', 'S'},{'H', 'H', 'H', 'H'}};

    int i,j;

    printf("The matrix:\n");

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

    { for(j=0;j<N;j++)

    printf("%3c",w[i][j]);

    printf("\n");

    }

    fun(w,a);

    printf("The A string:In");

    puts(a);

    printf("\n\n");

    }


    正确答案:void fun(char (*s) [N]char *b) { int i j k=0; for (i=0; iN; i++) /*按列的顺序依次放到一个字符串中*/ for (j=0; jM; j++) b [k++] =s [j] [i]; b[k]='\0'; }
    void fun(char (*s) [N],char *b) { int i, j, k=0; for (i=0; iN; i++) /*按列的顺序依次放到一个字符串中*/ for (j=0; jM; j++) b [k++] =s [j] [i]; b[k]='\0'; } 解析:看到程序后,我们很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。注意其中第1个循环条件为iN(即列),第2个循环的条件为JM(即行),这是因为在循环的嵌套中越在内层,循环变化就越快。另外,在编写程序中注意是s[j][i]而非s[i][j]。

  • 第18题:

    请编写函数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];。

  • 第19题:

    有以下程序,其中函数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。

  • 第20题:

    有以下程序,其中函数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。

  • 第21题:

    有以下程序,其中函数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。

  • 第22题:

    下列给定程序中,函数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语句中要用关系运算符,而不是赋值运算符。

  • 第23题:

    写出模板函数实现数值型数组元素值按从小到大排序的程序。

    include<iostream>

    using namespace std;

    template <class T>

    void sort(T b[],int n)

    {

    T temp;

    int i,j;

    T *a=new T[n];

    for (i=0;i<n;i++){a[i]=b[i];}

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

    {

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

    { if(a[i]>a[j])

    {temp=a[i];

    a[i]=a[j];

    a[j]=temp;

    }

    }

    }

    for(i=0;i<n;i++){cout<<a[i]<<" ";}

    cout<<endl;

    delete []a;

    }

    void main()

    {

    int i,n=6;

    int a[]={5,1,9,10,3,8};

    ____________;

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

    {cout<<a[i]<<" ";}

    cout<<endl;

    }


    正确答案:
    template<classT><int>(a,6)