[C语言]数值转换问题/回文判断/商品货架管理

版权声明:ASorb 2017-2018 个人博客地址:https://www.orbpi.cn/ 本文CSDN地址: https://blog.csdn.net/qq_42304721/article/details/83411151

最近时间有点紧啊,看来博客更新速度又要减慢了。

使用下面代码前,需要引入基本算法。另外数据结构的基本算法已经更新,新增了“队列”的基本算法。
基本算法地址:https://www.orbpi.cn/article/shujujiegoujibensuanfaluru.html

C语言实现数值转换

  1. 问题描述
    将十进制数N和其它d进制数的转换是计算机实现计算的基本问题,其解决方案很多,其中最简单方法基于下列原理:即除d取余法。例如:(1348)10=(2504)8
    基本要求:对于键盘输入的任意一个非负的十进制整数,打印输出与其等值的八进制数。
  2. 代码

    /*
    **实验题二
    **数制转换
    **ASORB&201810
    */
    #include"DataH.h"
    int main(){
    	SqStack S[3];
    	SElemType e;
    	int num,n;
    	for (int i = 0; i < 3;i++)
    	InitStack(&S[i]);		//初始化栈
    	printf("输入数值:");
    	scanf("%d", &n);
    	num = n;
    	while (num){
    		Push(&S[0], num % 2);
    		num /= 2;
    	}
    	num = n;
    	while (num){
    		Push(&S[1], num % 8);
    		num /= 8;
    	}
    	num = n;
    	while (num){
    		Push(&S[2], num % 16);
    		num /= 16;
    	}
    	printf("结果:\n");
    	printf("0b");
    	while (!StackEmpty(S[0])){
    		Pop(&S[0], &e);
    		printf("%d", e);
    	}
    	printf("\n0o");
    	while (!StackEmpty(S[1])){
    		Pop(&S[1], &e);
    		printf("%d", e);
    	}
    	printf("\n0x");
    	while (!StackEmpty(S[2])){
    		Pop(&S[2], &e);
    		switch (e){
    		case 10:printf("A"); break;
    		case 11:printf("B"); break;
    		case 12:printf("C"); break;
    		case 13:printf("D"); break;
    		case 14:printf("E"); break;
    		case 15:printf("F"); break;
    		default:printf("%d", e);
    		}
    	}
    	for (int i = 0; i < 3;i++)
    	DestroyStack(&S[i]);		//销毁栈
    	fflush(stdin);
    	getchar();		//防退
    	return 0;
    }
  3. 效果图

C语言实现回文判断

  1. 问题描述
    试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2 中都不含字符‘&’,且序列2 是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。
  2. 代码

    /*
    **实验题二
    **回文判断
    **ASORB&201810
    */
    #include"DataH.h"
    int main(){
    	SqStack S;
    	SElemType e, e1;
    	int sw = 0;
    	InitStack(&S);		//初始化
    	printf("输入回文序列:");
    	while ((e = getchar()) != '@'&&e != '\n') {
    		if (e == '&'){
    			sw = 1;
    			continue;
    		}
    		if (sw == 0)
    			Push(&S, e);
    		else{
    			if (StackEmpty(S)){
    				sw = 0; break;
    			}
    			Pop(&S, &e1);
    			if (e != e1) {
    				sw = 0; break;
    			}
    		}
    	}
    	if (sw&&StackEmpty(S))
    		printf("该字符串是回文序列!\n");
    	else
    		printf("该字符串不是回文序列!\n");
    	DestroyStack(&S);		//销毁
    	fflush(stdin);
    	getchar();
    	return 0;
    }
  3. 效果图

C语言实现商品货架管理

  1. 问题描述
    商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。 上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。
    基本要求:
      针对一种特定商品,实现上述管理过程。
    提示:
    用栈模拟货架和周转空间。
  2. 代码

    /*
    **实验题二
    **商品货架管理
    **ASORB&201810
    */
    #include"DataH.h"
    Status PushEnd(SqStack *S, SElemType e){//栈低插入元素
    	if (StackEmpty(*S)){//栈空时直接入栈
    		*(S->base) = e;
    		S->top = S->base + 1;
    	}
    	else{//非空,则后移
    		if (S->top - S->base >= S->stacksize){
    			//栈满,追加空间
    			S->base = (SElemType*)realloc(S->base, sizeof(SElemType)*(S->stacksize + STACKINCREMENT));
    			if (!S->base)exit(OVERFLOW);
    			S->top = S->base + S->stacksize;
    			S->stacksize += STACKINCREMENT;
    		}
    		for (SElemType *p = S->top; p > S->base; p--)
    			*p = *(p - 1);
    		*(S->base) = e;
    		S->top++;
    	}
    	return OK;
    }
    void AddSh(SqStack *S){
    	SElemType e;
    	printf("输入商品编号:");
    	scanf("%d", &e.id);
    	printf("输入商品名称:");
    	fflush(stdin);
    	scanf("%s", e.name);
    	PushEnd(S, e);
    }
    void ViewSh(SqStack S){
    	SElemType e;
    	while (!StackEmpty(S)){
    		Pop(&S, &e);
    		printf("商品编号:%d\t商品名称:%s\n", e.id, e.name);
    	}
    	printf("\n\n\n回车键返回.....");
    	fflush(stdin);
    	getchar();
    }
    int main(){
    	int sw;
    	SqStack S;
    	InitStack(&S);		//初始化
    	while (1){
    		printf("当前商品保有量:%d", StackLength(S));
    		printf("\n\n\n\n\t[1].添加商品\t[2].查看货架\n\t[3].退出");
    		printf("\n\n\n----------------\n选择:");
    		scanf("%d", &sw);
    		if (sw == 3)break;
    		else if (sw == 1)AddSh(&S);
    		else if (sw == 2)ViewSh(S);
    		system("cls");
    	}
    	DestroyStack(&S);		//销毁
    	return 0;
    }
  3. 效果图

    END

    现在感觉一天的时间好短,都不敢睡午觉了。

最后更新时间:2018-10-18 19:22:03 
本文仅代表个人观点,转载请注明出处!
文章地址:https://www.orbpi.cn/article/cyuyanshuzhizhuanhuanwentihuiwenpanduanshangpinhuojiaguanli.html

猜你喜欢

转载自blog.csdn.net/qq_42304721/article/details/83411151