2020级DSP第一次作业

这篇博客记录了作者在学习数据结构和程序设计时的作业,包括字符串扩展、整数表达式计算、浮点数到科学计数法的转换、超长整数减法以及全排列问题的解决方法。通过实例解析了每个问题的思路和解决方案。
摘要由CSDN通过智能技术生成

写在前面

转专业之后正式要开始学习数据结构和程序设计了,就把这里当成一个笔记本,写一写平时的作业,顺便让自己加深印象。

1. 扩展

从键盘输入包含扩展符’-'的字符串,将其扩展为等价的完整字符,例如将a-d扩展为abcd,并输出扩展后的字符串。

要求:只处理[a-z]、[A-Z]、[0-9]范围内的字符扩展,当且仅当后面的类型和前面相等时,且前一个字符小于后一个字符时,才进行扩展。

思路:输入一行字符串,把它们全部读入到一个数组中存储起来,然后把数组输出,输出的同时判断是否有符号“-”,有的话再判断前一个字符和后一个字符,如果可以扩展,则输出新的扩展的字符(例如:a-d输出bc)。

#include <stdio.h>
#include <string.h> 
int getType(char ch) //判断对应的类型 
{
   
	if(ch>='A'&&ch<='Z')
	{
   
		return 1;					//大写字母 
	}
	else if(ch>='a'&&ch<='z')
	{
   
		return 2;					//小写字母 
	}
	else if(ch>='0'&&ch<='9')
	{
   
		return 3;					//数字 
	}
}
int main()
{
   
	char str[5000]={
   '0'};
	scanf("%s",str); 				//输入字符串 
	int i=0,j=strlen(str)-1;
	for(i=0;i<=j;i++)
	{
   
		printf("%c",str[i]);
		if(str[i+1]=='-')
		{
   
			if(getType(str[i])==getType(str[i+2])&&str[i]<str[i+2])  //判断是否需要处理字符串 
			{
   
				str[i]++;
				while(str[i]<str[i+2])
				{
   
					printf("%c",str[i]++); 					       //输出字母		 
				}
				i++;											   //出循环起点往后移一位 
			}
		}
	}
	printf("\n");
	return 0;
} 

2.计算

从标准输入中读入一个整数算术运算表达式,如5 + 12 / 2 / 2 = 。计算表达式结果,并输出。

要求:表达式运算符只有计算符号表达式末尾的’=’字符表示表达式输入结束,表达式中可能会出现空格;表达式中不含圆括号,不会出现错误的表达式;出现除号/时,以整数相除进行运算,结果仍为整数,例如:5/3结果应为1。

思路:我们可以建立两个栈,一个用来装数字,另一个用来装运算符号,当存进去的运算符号为“*”或者“/”时,对数字的栈顶上的两个数进行相应的计算,计算完成后再将结果存入栈中,并且把两个栈的栈顶都向下移一位,最后只剩下“+”“-”,重复上面的操作即可。

#include <stdio.h>
#include <string.h>
#define N 100000
long long stack[N];
int cal[N];
int tops=-1,topc=-1;			//数字的栈顶和符号的栈顶 
char s[N]; 
int getop(char c)				//获取运算符号类型 
{
   
	if(c=='*')return 1;
	else if(c=='/')return 2;
	else if(c=='+')return 3;
	else return 4;
}
int isNum(char c)      			//判断是否为数字 
{
   
	if(c>='0'&&c<='9')return 1;
	return 0;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值