I am a teacher!

导航

计算机等级考试二级C语言程序设计专项训练题——程序设计题(四)

31、请编写函数void fun(char xx[]),函数的功能是:将字符串数组xx中下标为奇数的字符按其ASCII值从大到小的顺序进行排序。

例如:源字符串为:abcdefgh,则处理后字符串为:ahcfedgb。 

#include <stdio.h>
#include <string.h>
void fun(char xx[])
{
}
int main()
{
   char xx[81];
   printf("Enter a string : ");
   gets(xx);
   printf("The original string is : ");
   puts(xx);
   fun(xx);
   printf("The string after modified : ");
   puts(xx);
   return 0;
}
void fun(char xx[])
{
    int i,j,k;
    char ch;
    i=strlen(xx);
    for(j=1;j<i-2;j=j+2)
       for(k=j+2;k<i;k=k+2)
          if (xx[j]<xx[k])
          {
                ch=xx[j]; xx[j]=xx[k];xx[k]=ch;
          }
}
参考程序

32、请编写函数void fun(char xx[]),其功能是:从字符串xx中间一分为二,左边部分按字符的ASCII值降序排序,右边部分按字符的ASCII值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。

例如:若源字符串为:abcdhgfe,则处理后字符串为:dcbaefgh。 若源字符串为:123498765,则处理后字符串为:432195678。 

#include <stdio.h>
#include <string.h>
void fun(char xx[])
{
}
int main()
{
   char xx[81];
   printf("Enter a string : ");
   gets(xx);
   printf("The original string is : ");
   puts(xx);
   fun(xx);
   printf("The string after modified : ");
   puts(xx);
   return 0;
}
void fun(char xx[])
{
    int i,j,k,half;
    char ch;
    i=strlen(xx);
    half=i/2;
    for(j=0;j<half-1;j++)
     for(k=j+1;k<half;k++)
       if(xx[j]<xx[k])
       {
           ch=xx[j];xx[j]=xx[k];xx[k]=ch;
       }
    if (i%2) half++;
    for (j=half;j<i-1;j++)
      for (k=j+1;k<i;k++)
        if (xx[j]>xx[k])
        {
            ch=xx[j];xx[j]=xx[k];xx[k]=ch;
        }
}
参考程序

33、请编写函数void fun(char xx[]),其功能是:从字符串xx中间一分为二,左边部分按字符的ASCII值降序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。

例如:若源字符串为:abcdhgfe,则处理后字符串为:hgfedcba。 若源字符串为:123498765,则处理后字符串为:876594321。

#include <stdio.h>
#include <string.h>
void fun(char xx[])
{
}
int main()
{
   char xx[81];
   printf("Enter a string : ");
   gets(xx);
   printf("The original string is : ");
   puts(xx);
   fun(xx);
   printf("The string after modified : ");
   puts(xx);
   return 0;
}
void fun(char xx[])
{
    int i,j,k,half;
    char ch;
    i=strlen(xx);
    half=i/2;
    for(j=0;j<half-1;j++)
     for(k=j+1;k<half;k++)
       if(xx[j]<xx[k])
       {
           ch=xx[j];xx[j]=xx[k];xx[k]=ch;
       }
    for (j=half-1,k=i-1;j>=0;j--,k--)
    {
         ch=xx[j]; xx[j]=xx[k]; xx[k]=ch;
    }
}
参考程序

34、编写一个函数fun(char *str,char *substr),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。

例如,若字符串str为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",则函数返回值是6。

#include <stdio.h>
#include <string.h>
int fun(char *str,char *substr)
{
}
int main()
{
  char str[81], substr[3] ;
  int n ;
  printf("输入原字符串:") ;
  gets(str) ;
  printf("输入子字符串:") ;
  gets(substr) ;
  n=fun(str, substr) ;
  printf("n=%d\n", n) ;
  return 0;
}
int fun(char *str,char *substr)
{
    int  n=0;
    char  *p , *r;
    while (*str)
    {
        p=str;
        r=substr;
        while(*r)
           if (*r==*p) {r++;  p++; }
           else  break;
        if (*r=='\0') n++;
        str++;
    }
    return  n;
}
参考程序1
int fun(char *str,char *substr)
{
    int i,cnt=0;
    for(i=0;str[i]!='\0';i++)
      if(str[i]==*substr && str[i+1]==*(substr+1)) cnt++;
    return cnt;
}
参考程序2

35、请编写函数void fun(char xx[]),函数的功能是:将字符串数组xx中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号,将标点符号均转换为空格)仍重新存入字符串数组xx中。 

例如:源字符串为:I am a student,则处理后字符串为:student a am I。

特别说明:若源字符串末尾有一个标点,则转换后的字符串开头有一个空格。

#include <stdio.h>
#include <string.h>
void fun(char xx[])
{
}
int main()
{
   char xx[81];
   printf("Enter a string : ");
   gets(xx);
   printf("The original string is : ");
   puts(xx);
   fun(xx);
   printf("The string after modified : ");
   puts(xx);
   return 0;
}
void fun(char xx[])
{
    int len,i,j,k,s;
    char str[81];
    len=strlen(xx);
    s=k=0;
    for (i=len-1;i>=0;i--) // 从当前字符串尾部开始向前倒序循环,实现单词倒排
    {
        if((xx[i]>='A' && xx[i]<='Z')|| (xx[i]>='a' && xx[i]<='z'))
            k++;           // 如果当前字符是字母a~z或A~Z,则k加1
        else     // 否则将长度为k的单词顺序存入到字符串数组str中
        {
            for(j=1;j<=k;j++)
                str[s++]=xx[i+j];
             k=0;  // 将k值清0,以方便下一个单词的长度计数
        }
        if(!((xx[i]>='A' && xx[i]<='Z')|| (xx[i]>='a' && xx[i]<='z')))
           str[s++]=' '; // 如果当前字符不是字母a~z或A~Z,则以空格代之存入到字符串数组str中
      }
     for(j=1;j<=k;j++) // 此时的k值为当前字符串中第一个单词的长度,但在上一个for循环中没能存入到字符串数组str中,所以在这里将其存入到str中
        str[s++]=xx[i+j];
     str[s]='\0';
     strcpy(xx,str);   // 将倒排好的当前字符串重新存回到xx中
}
参考程序1
void fun(char xx[])
{
   int i,len;
   char str[81]={0};
   len=strlen(xx);
   for (i=len-1;i>=0;i--)
      if(!((xx[i]>='A' && xx[i]<='Z')|| (xx[i]>='a' && xx[i]<='z')))
      {
          strcat(str,xx+i+1);
          strcat(str," ");
          xx[i]='\0';
      }
   strcat(str,xx);
   strcpy(xx,str);
}
参考程序2

posted on 2022-11-18 06:51  aTeacher  阅读(200)  评论(0编辑  收藏  举报