记录PTA练题中的两则疑问(19、20题)

总结写在前面~
写了两天的PTA,后面确实有点吃力,课程仅学习到判断和循环,还有很多很多很多知识点没接触,深感自己还有很大不足:即使是判断和循环,保守估计我都没吃透十分之一二,虽然面对笔试可以不再紧张,但我的目标不仅仅是这点。
借用高中历史老师对我们说过的一句话:
勤学如春起之苗,日有所增,不见其长,怠学如磨刀之石,日有所减,不见其少。

第19题(计算天数)

在这里插入图片描述

#include <stdio.h>
int main()
{
	int yyyy,mm,dd,day;
	scanf("%d/%d/%d",&yyyy,&mm,&dd);
	if(yyyy%4==0&&yyyy%100!=0||yyyy%400==0){
		switch(mm){
			case 1:
				day=dd;
				break;
			case 2:
				day=31+dd;
				break;
			case 3:
				day=31+29+dd;
                break;
			case 4:
				day=31+29+31+dd;
				break;
			case 5:
				day=31+29+31+30+dd;
				break;
			case 6:
				day=31+29+31+30+31+dd;
				break;
			case 7:
				day=31+29+31+30+31+30+dd;
				break;
			case 8:
				day=31+29+31+30+31+30+31+dd;
				break;
			case 9:
				day=31+29+31+30+31+30+31+31+dd;
				break;
			case 10:
				day=31+29+31+30+31+30+31+31+30+dd;
				break;
			case 11:
				day=31+29+31+30+31+30+31+31+30+31+dd;
				break;
			case 12:
				day=31+29+31+30+31+30+31+31+30+31+30+dd;
		}
	}else switch(mm){
			case 1:
				day=dd;
				break;
			case 2:
				day=31+dd;
				break;
			case 3:
				day=31+28+dd;
				break;
			case 4:
				day=31+28+31+dd;
				break;
			case 5:
				day=31+28+31+30+dd;
				break;
			case 6:
				day=31+28+31+30+31+dd;
				break;
			case 7:
				day=31+28+31+30+31+30+dd;
				break;
			case 8:
				day=31+28+31+30+31+30+31+dd;
				break;
			case 9:
				day=31+28+31+30+31+30+31+31+dd;
				break;
			case 10:
				day=31+28+31+30+31+30+31+31+30+dd;
				break;
			case 11:
				day=31+28+31+30+31+30+31+31+30+31+dd;
				break;
			case 12:
				day=31+28+31+30+31+30+31+31+30+31+30+dd;
		}
	printf("%d",day);
	return 0;
}

疑问点:不知道怎么让它自己记录数据,考虑闰月的话又会多出一大段代码。估计这的确是一个只有新手才会用的笨蛋解决方案吧

有一说一,hh,我都觉得这个代码很…蠢,太过于冗长了,不过我短时间内凭自己那点东西还真想不出好的解决方案,暂且放这里,等后面代码敲多了,学习了新的知识点,就来试试看能不能改良一下。

第20题(简单计算器)

在这里插入图片描述

# include<stdio.h>
int main()
{
	int a,b,c,flag=0;
	char ch;
	scanf("%d",&a);
	while((ch=getchar())!='=')
	{
		scanf("%d",&b);
		if((ch=='/')&&(b==0))
		{
			flag=1;break;
		}
		switch(ch)
		{
			case '+': a=a+b;break;
			case '-':a=a-b;break;
			case '*':a=a*b;break;
			case '/':a=a/b;break;
			default :
			flag=1;break;
		}
		if(flag) break;
	}
		if(flag)
		{
			printf("ERROR");
		}
	     else
	     {
	     	printf("%d",a);
		 }
	return 0;
}

百度找到的解决方案(现在还看不懂
疑问点:实在想不出如何改变四则运算的优先级。
有问过群里大佬,说:进栈 遇到左括号 还有乘除法 出栈计算了 再进栈
听起来的确不难,百度了一下栈的概念,出现在数据结构部分,暂时还没学到,等过两天就来解决这个问题。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值