2014年华为上机机试c语言题目和答案

自己code出来的,结果是正确的,但是其中还有很多的优化之处,还请各位大神多多指导。

代码打包: http://download.csdn.net/detail/sxlwzl/6259411


1.字符串过滤 stringFilter

去重过滤,例子:
"abcdabefe"-->"abcdef"


2.字符串压缩   stringZip
"aaaabbccccddeeeeef"-->"4a2b4c2d5ef"


3.表达式,100以内的正整数,加减运算
"4 + 7"-->"11"
"2 - 7"-->"-5"

"2 ++ 7"-->"0"  //注意:非法运算



ex1.h

/*
1.字符串过滤 stringFilter
去重过滤,例子:
"abcdabefe"-->"abcdef"
*/

#ifndef EX1_H_INCLUDED
#define EX1_H_INCLUDED

#define MAX_LENGTH 1000

int stringFilter(void);


#endif // EX1_H_INCLUDED

ex1.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ex2.h"

int stringFilter(void)
{
	char input[MAX_LENGTH];
	char *p_input = input;

	char ch;
	int size_input=0;

	char new_output[MAX_LENGTH];
	char *p_new = new_output;


	int j=0;
	int k=0;
	int eq = 0;

	while( (ch = getchar())!= '\n' )
	{
		input[size_input] = ch;
		size_input++;
	}
	input[size_input] = '\0';

	for(j=0; j < size_input; j++)
	{
		eq = 0;
		for(k=0; k<j;k++)
		{
			if(new_output[k] == input[j])
			{
				eq = 1;
				break;
			}
		}
		if (eq == 0)
		{
			*p_new = input[j];
			p_new++;
		}
	}
	*p_new = '\0';

	printf("input = %s\n", input);
	printf("output = %s\n", new_output);

	return 0;

}


ex2.h

/*
2.字符串压缩   stringZip
"aaaabbccccddeeeeef"-->"4a2b4c2d5ef"
*/

#ifndef EX2_H_INCLUDED
#define EX2_H_INCLUDED

#define MAX_LENGTH 1000

int stringZip(void);


#endif // EX2_H_INCLUDED

ex2.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ex2.h"

int stringZip(void)
{
	char input[MAX_LENGTH];
	char *p_input = input;

	char ch;
	int size_input=0;

	char new_output[MAX_LENGTH];
	char *p_new = new_output;

	int j=0;
	int k=0;
	int duplicate_flag = 0;

	while( (ch = getchar())!= '\n' )
	{
		input[size_input] = ch;
		size_input++;
	}
	input[size_input] = '\0';
	while(j<size_input)
	{
		new_output[j] = '\0';
		j++;
	}

	*p_new = input[0];
	for(j=1; j < size_input; j++)
	{
		if(input[j] == input[j-1])
		{
			duplicate_flag ++;
			if(duplicate_flag == 1)
				p_new++;
			*p_new = '0' + duplicate_flag + 1;
		}
		else
		{
			duplicate_flag = 0;
			p_new++;
			*p_new = input[j];
		}

	}
	p_new++;
	*p_new = '\0';

	//printf("strlen of new_output : %d\n", strlen(new_output));
	printf("%s\n", new_output);

	return 0;

}

ex3.h

/*
3.表达式,100以内的正整数,加减运算
"4 + 7"-->"11"
"2 - 7"-->"-5"
"2 ++ 7"-->"0"  //注意:非法运算
*/

#ifndef EX3_H_INCLUDED
#define EX3_H_INCLUDED

#define MAX_LENGTH 1000

int my_calc(void);


#endif // EX3_H_INCLUDED

ex3.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ex3.h"

int  my_calc(void)
{
	char input[MAX_LENGTH];
	char *p_input = input;
	int first_num=0;
	int second_num=0;
	int acture_size;
	char num_flag = 0;
	char func_flag = 0;
	char ch;
	int i=0;


	while( (ch = getchar())!= '\n' )
	{
		input[i] = ch;
		i++;
	}
	input[i] = '\0';
	//printf("i = %d\n",i);

	//printf("acture_input is : %s\n", input);
	while(i > 0)
	{
		i--;
		//printf("%d\t %c \n",*p_input, *p_input);
		if(*p_input >= '0' && *p_input <= '9')
		{
			num_flag = 1;
			if(func_flag == 0)
				first_num = first_num * 10  + (*p_input - '0');
			else
				second_num = second_num * 10  + (*p_input - '0');
		}
		else
			if(num_flag ==0)
			{
				printf("input error!\n");
				return 0;
			}
			else
				if(*p_input == '+')
				{
					if(func_flag == 0)
					{
						func_flag = 1;
					}
					else
					{
						printf("input error!\n");
						return 0;
					}
				}
				else if(*p_input == '-')
				{
					if(func_flag == 0)
					{
						func_flag = 2;
					}
					else
					{
						printf("input error!\n");
						return 0;
					}
				}
		p_input++;
		/*
		printf("first_num = %d\t", first_num);
		printf("second_num = %d\t", second_num);
		printf("num_flag = %d\t", num_flag);
		printf("func_flag = %d\n", func_flag);
		*/
	}


	if (func_flag == 1)
		printf("%d + %d = %d \n",first_num, second_num, first_num + second_num);
	else if (func_flag == 2)
		printf("%d - %d = %d \n",first_num, second_num, first_num - second_num);


	return 0;

}

main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "ex1.h"
#include "ex2.h"
#include "ex3.h"


int main()
{
    printf("Enter main()\n");
    char option;

	puts("\nex1:");
	puts("1.字符串过滤 stringFilter");
	puts("去重过滤,例子:");
	puts("\"abcdabefe\"-->\"abcdef\"");
	do
	{
		stringFilter();
		printf("if you want try anohter test, please input 'y' or input 'n'.\n");
		fflush(stdin);
		option = getchar();
		fflush(stdin);
	}while(option == 'y' || option == 'Y');


	puts("\nex2:");
	puts("2.字符串压缩   stringZip");
	puts("\"aaaabbccccddeeeeef\"-->\"4a2b4c2d5ef\"");
	do
	{
		stringZip();
		printf("if you want try anohter test, please input 'y' or input 'n'.\n");
		fflush(stdin);
		option = getchar();
		fflush(stdin);
	}while(option == 'y' || option == 'Y');


    puts("\nex3:");
    puts("3.表达式,100以内的正整数,加减运算");
    puts("\"4 + 7\"-->\"11\"");
    puts("\"2 - 7\"-->\"-5\"");
    puts("\"2 ++ 7\"-->\"0\"");
    do
	{
		my_calc();
		printf("if you want try anohter test, please input 'y' or input 'n'.\n");
		fflush(stdin);
		option = getchar();
		fflush(stdin);
	}while(option == 'y' || option == 'Y');

    return 0;
}




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值