吉林大学967-高级语言程序设计-2012

2012-1
//编写一个程序,输入一个十进制数,输出与之等价的八进制数
//例如:输入 12 输出 15
//		输入 24 输出 30
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int trans(int n, int m) {
	int re = 0, sum = 0;
	int i;
	for (i = 0;; i++) {
		re = n%m;
		sum = sum + re*pow(10, i);
		if (n == 0) {
			return sum;
		}
		n = n / m;
	}
	return -1;
}
int main() {
	int n, m,q;
	int trans_num;
	scanf("%d%d",&n,&m);
	trans_num = trans(n,m);
	printf("十进制数:%d,对应的%d进制数:%d",n,m,trans_num);
	system("pause");
	return 0;
}


2012-2
//用两个正整数来精确的表示一个正真分数,其中,一个表示分子,
//另一个表示分母。例如,(3,9)表示九分之三。编写一个程序,
//输入100个这样表示的分数,要求:
//(1)把所有的分数 都化为减分数
//(2)把化简后的分数按从大到小的顺序输出
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 5
int gcd(int a, int b) {
	if (b == 0)
		return a;
	else
		return gcd(b, a%b);
}
int main() {
	int a[N], b[N];
	int i,j;
	int g,ta,tb;
	for (i = 0; i < N; i++)
	{
		scanf("%d/%d", &a[i], &b[i]);
	}
	//约分
	for (i = 0; i < N; i++) {
		if (a[i] % b[i] == 0) {
			a[i] = b[i] = a[i] / b[i];
		}
		else {
			g = gcd(a[i], b[i]);
			a[i] /= g;
			b[i] /= g;
		}
	}
	//排序
	for (i = 0; i < N; i++) {
		for (j = 0; j < N - i; j++) {
			ta = a[i];
			tb = b[i];
			if ((ta*1.0) / (tb*1.0)>(a[i + 1] * 1.0) / (b[i + 1] * 1.0)) {
				a[i] = a[i+1];
				b[i] = b[i+1];
				a[i + 1] = ta;
				b[i + 1] = tb;
			}
		}
	}
	//输出
	for (i = 0; i < N; i++) {
		printf("%d/%d  ",a[i],b[i]);
	}
	system("pause");
	return 0;
}


2012-3
//编写一个程序,判断输入的字符串是否属于集合
//{a b c d ,n>0,m>=0,l>=0,k>=0}
//属于,输出‘Y’,不属于,输出‘N’
//例如:abbbdd  aaccd abbcd aaadddd是集合中的元素
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define N 10
int main()
{
	int i, j;
	char str[8] = { 'a','b','c','d','0','0','0','0' };
	char ch[N],s;
	int count = 0;
	gets_s(ch);
	for (i = 0; i < N;i++) {
		s = ch[i];
		for (j = 0; j < 8; j++) {
			if (s == str[j]) {
				count++;
			}
		}
	}
	if (count == strlen(ch))
		printf("YES");
	else
		printf("NO");
	system("pause");
	return 0;
}


2012-4
//前缀表达式和后缀表达式的写法分别为:
//前缀表达式  E->*(E,E)|+(E,E)|a
//后缀表达式  E->(E,E)*|(E,E)+|a
//编写一个程序,输入一个前缀表达式,输出与之等价的后缀表达式
//假定输入的前缀表达式没有语法错误。
//例如:  输入  +(*(a,+(a,a)),a)    -*+345
//        输出  ((a,(a,a)+)*,a)
#include<stdio.h>
#include<stdlib.h>
#include<cctype>
#include<string.h>
//顺序栈的实现
#define StackSize 100
typedef char DataType;
typedef struct
{
	DataType data[StackSize];
	int top;
}SeqStack;

//置栈空
void InitStack(SeqStack *S)
{
	S->top = -1;
}
//判断空
int StackEmpty(SeqStack *S)
{
	return S->top == -1;
}
//判断满
int StackFull(SeqStack *S)
{
	return S->top == StackSize - 1;
}
//进栈
int Push(SeqStack *S, DataType x)
{
	if (StackFull(S))
	{
		return 0;
	}
	S->data[++S->top] = x;
	return 1;
}
//退栈
int Pop(SeqStack *S, DataType *x)
{
	if (StackEmpty(S))
	{
		return 0;
	}
	*x = S->data[S->top--];
	return 1;
}
//取栈顶元素
DataType StackTop(SeqStack *S)
{
	if (StackEmpty(S))
	{
		return 0;
	}
	return S->data[S->top];
}
//优先级判断
int priority(DataType ch)
{
	if (ch == '(')
		return -1;
	else if (ch == '*' || ch == '/')
		return 1;
	else if (ch == '+' || ch == '-')
		return 0;
	return -2;
}
//前缀表达式转后缀表达式
void InFixtoPostFix(DataType *InFix, DataType *PostFix, int len)
{
	int i = 0;
	int j = 0;
	SeqStack S;
	InitStack(&S);
	DataType x;
	while (InFix != '\0')
	{
		switch (InFix[i])
		{
		case'(':
			Push(&S, InFix[i]);
			break;
		case')':
			while (StackTop(&S) != '(')
			{
				PostFix[j] = StackTop(&S);
				Pop(&S, &x);
				j++;
			}
			Pop(&S, &x);
			break;
		default:
			if (isalpha(InFix[i]) || isalnum(InFix[i]))
			{
				PostFix[j] = InFix[i];
				j++;
			}
			else
			{
				while (!StackEmpty(&S) && (priority(StackTop(&S)) >= priority(InFix[i])))
				{
					PostFix[j] = StackTop(&S);
					Pop(&S, &x);
					j++;
				}
				Push(&S, InFix[i]);
				break;
			}
		}
		i++;
	}
	while (!StackEmpty(&S))
	{
		PostFix[j] = StackTop(&S);
		Pop(&S, &x);
		j++;
	}
	PostFix[j] = '\0';
}
//main
int main()
{
	DataType InFix[51];
	scanf("%s", InFix);
	int len = sizeof(InFix) / sizeof(*InFix);
	char PostFix[51 + 1];
	InFixtoPostFix(InFix, PostFix, len);
	printf("InFix expression: %s\n", InFix);
	printf("PostFix expression :%s\n", PostFix);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36109528/article/details/86231318