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

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

时间:2022-11-18 07:00:23浏览次数:46  
标签:专项 int C语言 char 字符串 xx printf fun 程序设计

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;
}
参考程序

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

标签:专项,int,C语言,char,字符串,xx,printf,fun,程序设计
From: https://www.cnblogs.com/cs-whut/p/16900836.html

相关文章

  • C语言交通查询系统
    C语言交通查询系统数据结构实验周任务书1.设计目的:数据结构实验周课程设计旨在培养学生运用数据结构的相关知识和理论解决计算机建模的能力,具备良好的数据结构建模的思想......
  • C语言运动会分数统计程序
    C语言运动会分数统计程序运动会分数统计程序的设计(2人)运动会分数统计任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1…......
  • LeetCode刷题(6)【栈】有效的括号(C语言)
    有效的括号20.有效的括号-力扣(LeetCode)(leetcode-cn.com)​思路:是左括号,就入栈,是右括号,就与栈顶的左括号判断是否匹配,如果匹配,继续,不匹配就终止。从第79行开始,前面都是......
  • 【C++】如果你准备学习C++,并且有C语言的基础,我希望你能简单的过一遍知识点。
    相关视频——黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili(1-83)我的小站——半生瓜のblog我知道这个视频早已经被很多人学习并且记录​笔记,......
  • LeetCode刷题(8)【栈&队列】用栈实现队列(C语言)
    用栈实现队列232.用栈实现队列-力扣(LeetCode)(leetcode-cn.com)类似题目——用队列实现栈​​LeetCode刷题(7)【栈&队列】用队列实现栈(C语言)_半生瓜のblog-CSDN博客​......
  • 【树】之二叉树(C语言)(含图解)
    树&二叉树​​树​​​​树的概念及结构​​​​树的概念​​​​树的要求​​​​树的表示​​​​现实应用​​​​二叉树​​​​概念​​​​特殊的二叉树​​​​注意......
  • LeetCode刷题(9)【树】前序&深度&平衡(C语言)
    ​二叉树的前序遍历144.二叉树的前序遍历-力扣(LeetCode)(leetcode-cn.com)本题中,对于C++或者Java等语言,返回的是它们的数据结构库里面的数据结构,而C语言没有,这也就是如果......
  • C语言文件操作
    相关视频——C语言精华——C语言文件操作,文件打开、关闭、读取、定位如何操作?为你逐一讲解文件操作标准库函数_哔哩哔哩(゜-゜)つロ干杯~-bilibili我的小站——半生瓜のbl......
  • C语言实现学生成绩管理系统
    相关视频——https://www.bilibili.com/video/BV13z4y117qC?p=8我的小站——半生瓜のblog​代码​实现#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<conio.......
  • LeetCode刷题(1)【链表】【反转链表】(C语言)
    我的小站——半生瓜のblog(doraemon2.xyz)题目链接——206.反转链表-力扣(LeetCode)(leetcode-cn.com)反转链表思路一:反转指针。本质上就是调转指针的方向。首先我们......