zoukankan      html  css  js  c++  java
  • 这是我参加c语言比赛的机考试题,与大家分享下

    第一题:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define N 30
    
    /***********************************************
    *函数名称: fun
    *创建时间: 2010.12.5
    *作    者: huangliangming
    *描    述: 对一个字符串重新排列,字母排在前面,数字排在后面,并不改变原来字母之间以及数字之间的字符顺序。
    *参    数: char * s,int *m
    *返 回 值: chLetter(数组chLetter[]的首元素地址)
    *局部变量: char chLetter[N];
    *			char chNumber[N];
    *			int i,j,k;
    ************************************************/
    char * fun(char * s,int *m)				//参数m是通过调试才想到的
    {
    	char chLetter[N];	//用来存放字母
    	char chNumber[N];	//用来存放数字
    	int i,j,k;
    
    	i=0;	//初始化
    	j=0;	//j用来记录字母的个数
    	k=0;	//k用来记录数字的个数
    
    	for (i=0; i<N; i++)
    	{
    		if (s[i] >= 'A' && s[i] <= 'Z'			//将字母存入chLetter[]
    			|| s[i] >= 'a' && s[i] <= 'z')
    		{
    			chLetter[j]=s[i];
    			j++;
    		}
    		if (s[i] >= '0' && s[i] <='9')			//将数字存入chNumber[]
    		{
    			chNumber[k]=s[i];
    			k++;
    		}
    	}
    	chLetter[j]='\0';
    	chNumber[k]='\0';
    	*m=j+k;										//用来返回最后输入和输出时字符的个数
    	strcat(chLetter,chNumber);
    	return chLetter;
    }
    
    //主函数
    void main()
    {
    	char s[N];
    	int i;
    	int m;	
    	char *p;
    	p=NULL;
    	printf("请输入字符串(30字符以内):\n");
    	scanf("%s",s);
    	p=fun(s,&m);					//刚开始没定义出这个m来现限制指针p所指数组的长度就出现了后面两个字符乱码
    	for (i=0; i<m; i++)				//将返回的值复制给数组以待输出
    	{
    		s[i]=p[i];
    	}
    	
    	printf("结果为:");
    	for (i=0; i<m; i++)				//输出结果
    	{
    		printf("%c",s[i]);
    	}
    	printf("\n");
    }

    第二题:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define N 30	//s所指字符串的最大长度
    #define T 2		//t1和t2所指字符串的长度
    
    /***********************************************
    *函数名称: fun
    *创建时间: 2010.12.5
    *作    者: huangliangming
    *描    述: 将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串
    *参    数: char * s,char * t1, char * t2,int *m
    *返 回 值: w(数组w[]的首元素地址)
    *局部变量: char w[N];
    *			char temp[T];
    *			char t1temp[T];
    *			int i,j,k,l;
    ************************************************/
    char * fun(char * s,char * t1, char * t2,int *m)	//m的作用和第一题一样,没m最后两个字符会乱码(想寻求其他方法)		
    {
    	char w[N];				//用来存放处理后的字符串
    	char temp[T];		//用来存放从s所指字符串中截取的子串
    	char t1temp[T];		//用来存放t1所指字符串
    	int i,j,k,l;
    	//向t1temp中存入t1所指字符串
    	for (i=0; i<T;i++)
    	{
    		t1temp[i]=t1[i];
    	}
    	t1temp[T]='\0';
    	
    	//求m所指的值
    	for (i=0;i<N;i++)
    	{
    		if (s[i]=='\0')
    		{
    			*m=i;
    		}
    	}
    
    	//寻找相同时的最后一个字符的下标
    	for (i=0; i<N; i++)
    	{
    		l=0;
    		for (j=i; j<(i+T); j++,l++)	//截取长度为T的子串存到temp[]中
    		{
    			temp[l]=s[j];
    		}
    		temp[T]='\0';
    
    		if (strcmp(t1temp,temp) == 0)
    		{
    			k=i;		//k记录相同时的最后一个字符的下标
    		}
    	}
    
    	for (i=0; i<N; i++)	//赋值给w[]
    	{
    		j=0;
    		if (i>=k && i<(k+T))		//在找到的k点处开始换值
    		{
    			w[i]=t2[j];				//换值
    			j++;
    		}
    		else
    		{
    			w[i]=s[i];
    		}
    	}
    	
    	return w;
    }
    
    //主函数
    void main()
    {
    	char s[N];
    	char t1[T];
    	char t2[T];
    	int i;
    	int m;
    	char *p;
    
    	p=NULL;
    	printf("请输入字符串(20字符以内):");
    	scanf("%s",s);
    	printf("请输入将要被替换的子字符串(仅限两个字符):");
    	scanf("%s",t1);
    	printf("请输入将要用来替换的字字符串(仅限两个字符):");
    	scanf("%s",t2);
    	p=fun(s,t1,t2,&m);					
    	for (i=0; i<m; i++)				//将返回的值复制给数组以待输出
    	{
    		s[i]=p[i];
    	}
    	
    	printf("结果为:");
    	for (i=0; i<m; i++)				//输出结果
    	{
    		printf("%c",s[i]);
    	}
    	printf("\n");
    }

    第三题:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define N 30
    /***********************************************
    *函数名称: fun
    *创建时间: 2010.12.6
    *作    者: huangliangming
    *描    述: 将s所指的字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
    *参    数: char * s,int * m
    *返 回 值: return t,(t为指向数组的指针)
    *局部变量: char * t;
    *			char temp[N];
    *			int i,j=0;
    ************************************************/
    
    char * fun(char * s,int * m)
    {
    	char * t;
    	char temp[N];					//临时的数组,用来存放t所指的数组
    	int i,j=0;
    	
    	t=temp;
    	for (i=0; i<N; i++)
    	{
    		if (s[i]%2==0 )	
    		{
    			temp[j]=s[i];			//如果是偶数,赋值给t所指的数组
    			j++;	
    			if (s[i]=='\0')			//找到m的值先要找出输入了多少个字符
    			{
    				break;
    			}
    		}
    	}
    	*m=j;							//找到m的值即输出结果的长度
    	t[j]='\0';
    	return t;
    }
    
    //主函数
    void main()
    {
    	char s[N];
    	int i;
    	int m;	
    	char *p;
    
    	p=NULL;
    	printf("请输入字符串(30字符以内):\n");
    	scanf("%s",s);
    	p=fun(s,&m);					//刚开始没定义出这个m来现限制指针p所指数组的长度就出现了后面两个字符乱码
    	for (i=0; i<m; i++)				//将返回的值复制给数组以待输出
    	{
    		s[i]=p[i];
    	}
    	
    	printf("结果为:");
    	for (i=0; i<m; i++)				//输出结果
    	{
    		printf("%c",s[i]);
    	}
    	printf("\n");
    }

    如果有什么问题的话就讨论下吧

    作者:涵曦www.hanxi.cc
    出处:hanxi.cnblogs.com
    GitHub:github.com/hanxi
    Email:im.hanxi@gmail.com
    文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    《 Skynet 游戏服务器开发实战》

  • 相关阅读:
    Coursera机器学习week1 单元测试
    Coursera机器学习week1 笔记
    Apache服务器
    yum软件包安装
    linux察看安装包有那些
    虚拟上怎么挂载镜像
    netstat -altp
    MongoDB——》聚合查询(project、match、limit、skip、unwind、group、sort)
    jdk8流list转Map
    Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录(转)
  • 原文地址:https://www.cnblogs.com/hanxi/p/1913330.html
Copyright © 2011-2022 走看看