高级语言讲义2012软专(仅高级语言部分)

本文介绍了四个编程练习:将十进制数转换为八进制、处理正分数并排序、判断字符集合成员以及将前缀表达式转换为后缀表达式。
摘要由CSDN通过智能技术生成

1.编一个程序,输入一个十进制败,输出与之等价的八进制数。

#include <stdio.h>

void tentoeight(){
	int n;
	scanf("%d",&n);
	int A[40];
	int num=0;
	while(n!=0){
		A[num++]=n%8;
		n/=8;
	}
	for(int i=num-1;i>=0;i--)
	printf("%d",A[i]);
}

int main(){
	tentoeight();
}

2.用两个正整敷来精确表示个正真分数,其中,一个表示分子,另一个表示分母,例如,(3,9)表示九分之三,编一个程序,输入100个这样表示的分数,要求:

(1)把所有的分数都化为简分数

(2)把化简后的分数按从小到大的顺序输出

#include <stdio.h>

typedef struct frac {
	int up,down;
} frac;

int gcd(int a,int b) {
	if(b==0)
		return a;
	else
		return gcd(b,a%b);
}

void sort(struct frac list[],int n) {
	for(int i=0; i<n-1; i++)
		for(int j=0; j<n-i-1; j++)
			if(1.0*list[j].up/list[j].down>1.0*list[j+1].up/list[j+1].down) {
				frac temp=list[j];
				list[j]=list[j+1];
				list[j+1]=temp;
			}
}

void getfra() {
	frac list[100];
	for(int i=0; i<100; i++)
		scanf("%d %d",&list[i].up,&list[i].down);
	for(int i=0; i<100; i++) {
		int flag=gcd(list[i].up,list[i].down);
		list[i].up/=flag;
		list[i].down/=flag;
	}
	sort(list,100);
	for(int i=0; i<100; i++)
		printf("(%d %d)",list[i].up,list[i].down);
}

3.编个程序,判断输入的字符审是否属于集合

a^{n}b^{m}c^{i}d^{k}|m,n>0,m>=0,i>=0,k>0

属于,输出Y,不属于,输出N

例如:abbbdd,aaccd,abbcd,aaadddd是集合中的元素

#include <stdio.h>

void istrue() {
	char str[100];
	scanf("%s",str);
	int na=0,nb=0,nc=0,nd=0;
	int i=0;
	while(str[i]!='\0') {
		if(str[i]=='a')
			na++;
		else if(str[i]=='b')
			nb++;
		else if(str[i]=='c')
			nc++;
		else if(str[i]=='d')
			nd++;
		i++;
	}
	if(na>0&&nb>=0&&nc>=0&&nd>0)
		printf("Y");
	else
		printf("N");
}

4.前缀表达式和后缀表达式的文法分别为:

前缀表达式 E->*(E,E)|+(E,E)|a

后缀表达式E->(E,E)*|(E,E)+|a

编一个程序,输入一个前缀表达式,输出一个与之等价的后缀表达式,假设输入的前缀表达式没有语法错误(记)

#include <stdio.h>

void intoput() {
	char s[50];
	char stack[30];
	scanf("%s",s);
	int top=-1,i=0;
	while(s[i]!='\0') {
		if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')
			stack[++top]=s[i];
		else if(s[i]==')') {
			printf(")");
			printf("%c",stack[top--]);
		} else
			printf("%c",s[i]);
		i++;
	}
}
  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值