1. 程式人生 > >[C語言]數值轉換問題/迴文判斷/商品貨架管理

[C語言]數值轉換問題/迴文判斷/商品貨架管理

最近時間有點緊啊,看來部落格更新速度又要減慢了。

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

    現在感覺一天的時間好短,都不敢睡午覺了。