C语言小作业:简单计算器与更强的字符倒计时

代码将计算器和倒计时集成在一起,用函数封装

计算器代码尝试了异常处理函数,判断除零错误。

相比个位数倒计时的实现,此代码实现了多位数倒计时(代码设置为十位数,理论上可以无限大),使用结构体和字符串拼接存储时间并打印。

源代码:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
int cal(); 
int show_word();

struct out {
	char line1[100]=" ";
	char line2[100]=" ";
	char line3[100]=" ";
	char line4[100]=" ";
	char line5[100]=" ";
	char line6[100]=" ";
	char line7[100]=" ";
}; 
//void line1(char a){
//	for (int i=0;i<6;i++) printf("%c",a);
//	printf("\n");
//}
//
//void line2(char a){
//	for (int i=0;i<6;i++) printf("%c\n",a);
//}
//
//void line3(char a){
//	for (int i=0;i<6;i++) printf("      %c\n",a);
//}
//void line4(char a){
//	for (int i=0;i<6;i++) printf("%c     %c\n",a,a);
//}


void print_num(int num,char a){
	int pri_num2[10];
	for (int i=0;i<10;i++) pri_num2[i]=-1;
	int cnt=0;
	for (int i=0;i<10;i++){
		pri_num2[i]=num%10;
		num=num/10;
		cnt++;
		if (num<10){
			pri_num2[i+1]=num;//每一位存储进数组 最前面的是最大位 
			
			cnt++;
			break;
		}
	} 
	int pri_num[10];
	for (int i=0;i<10;i++) pri_num[i]=-1;
	
	
	for (int i=0;i<cnt;i++) {
		pri_num[i]=pri_num2[cnt-i-1];
	}
	
	struct out prt;
	char line1[6]="     ";
	char line2[6]="     ";
	char line3[6]="     ";
	char line4[6]="     ";
	char line5[6]="     ";
	for (int i=0;i<4;i++) line1[i]=a;//一整行 
	
	line2[3]=a;//最后一个 
	
	line3[0]=a;//第一个 
	
	for (int i=0;i<4;i+=3) line4[i]=a;//第一个和最后一个 
	
	for (int p=0;p<10;p++){
		switch(pri_num[p]){
			case 1:
				strcat(prt.line1,line2);
				strcat(prt.line2,line2);
				strcat(prt.line3,line2);
				strcat(prt.line4,line2);
				strcat(prt.line5,line2);
				strcat(prt.line6,line2);
				strcat(prt.line7,line2);
				break;
			case 2:
				strcat(prt.line1,line1);
				strcat(prt.line2,line2);
				strcat(prt.line3,line2);
				strcat(prt.line4,line1);
				strcat(prt.line5,line3);
				strcat(prt.line6,line3);
				strcat(prt.line7,line1);
				break;
			case 3:
				strcat(prt.line1,line1);
				strcat(prt.line2,line2);
				strcat(prt.line3,line2);
				strcat(prt.line4,line1);
				strcat(prt.line5,line2);
				strcat(prt.line6,line2);
				strcat(prt.line7,line1);
				break;
			case 4:
				strcat(prt.line1,line4);
				strcat(prt.line2,line4);
				strcat(prt.line3,line4);
				strcat(prt.line4,line1);
				strcat(prt.line5,line2);
				strcat(prt.line6,line2);
				strcat(prt.line7,line2);
				break;
			case 5:
				strcat(prt.line1,line1);
				strcat(prt.line2,line3);
				strcat(prt.line3,line3);
				strcat(prt.line4,line1);
				strcat(prt.line5,line2);
				strcat(prt.line6,line2);
				strcat(prt.line7,line1);
				break;
			case 6:
				strcat(prt.line1,line1);
				strcat(prt.line2,line3);
				strcat(prt.line3,line3);
				strcat(prt.line4,line1);
				strcat(prt.line5,line4);
				strcat(prt.line6,line4);
				strcat(prt.line7,line1);
				break;
			case 7:
				strcat(prt.line1,line1);
				strcat(prt.line2,line2);
				strcat(prt.line3,line2);
				strcat(prt.line4,line2);
				strcat(prt.line5,line2);
				strcat(prt.line6,line2);
				strcat(prt.line7,line2);
				break;
			case 8:
				strcat(prt.line1,line1);
				strcat(prt.line2,line4);
				strcat(prt.line3,line4);
				strcat(prt.line4,line1);
				strcat(prt.line5,line4);
				strcat(prt.line6,line4);
				strcat(prt.line7,line1);
				break;
			case 9:
				strcat(prt.line1,line1);
				strcat(prt.line2,line4);
				strcat(prt.line3,line4);
				strcat(prt.line4,line1);
				strcat(prt.line5,line2);
				strcat(prt.line6,line2);
				strcat(prt.line7,line1);
				break;
			case 0:
				strcat(prt.line1,line1);
				strcat(prt.line2,line4);
				strcat(prt.line3,line4);
				strcat(prt.line4,line4);
				strcat(prt.line5,line4);
				strcat(prt.line6,line4);
				strcat(prt.line7,line1);
				break;
			default:
				printf("%s\n",prt.line1);
				printf("%s\n",prt.line2);
				printf("%s\n",prt.line3);
				printf("%s\n",prt.line4);
				printf("%s\n",prt.line5);
				printf("%s\n",prt.line6);
				printf("%s\n",prt.line7);
				return;
												
				
		}
		
		
	} 
	
} 


int main(){
	int cmd;
	while(1){
		printf("输入1进计算器,输入2进倒计时,0退出\n>>");
		scanf("%d",&cmd);
		switch(cmd){
			case 0:
				return 0;
			case 1:
				cal();
				break;
			case 2:
				show_word();
				break;
		}
	}
	
	return 0;
} 

int cal(){
	
	double num=0.0;
	printf("请输入数据\n>>");
	scanf("%lf",&num); 
	getchar();
	while(1){
		double num2=0;
		char user_cmd;
		printf("请输入运算符(+ - * / % = 输入'q'退出程序)\n>>");
		scanf("%c",&user_cmd);
		getchar();
		if(user_cmd=='='){
				printf("result:%lf\n",num);
				num=0;
		}else{
			if (num=='q') return 0; 
			printf("请输入数据\n>>");
			scanf("%lf",&num2);
			getchar();
			switch(user_cmd){
				case '+':
					num+=num2;
					break;
				case '-':
					num-=num2;
					break;
				case '*':
					num*=num2;
					break;
				case '/':
					try{
						num/=num2;
						if(num2==0) throw -1;
					}catch(int d){
						printf("除数不能为零!\n");
					}
					
					break;
				case '%':
					num=(int)num%(int)num2;
					break;
				case '^':
					num=pow(num,num2);
					break;
				case 'q':
					return 0;
			}
		}
	}
}
int show_word(){
	char use;
	int num;
	getchar();
	printf("请输入字符\n>>");
	scanf("%c",&use);
	getchar();
	printf("请输入数字\n>>");
	scanf("%d",&num);
	while(num>=0){
		print_num(num,use);
		Sleep(1000);
		
		system("cls");
		num--;
	}
	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值