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;
}
吉林大学967-高级语言程序设计-2012
猜你喜欢
转载自blog.csdn.net/qq_36109528/article/details/86231318
今日推荐
周排行