这是学校题库里发现的,我感觉有点意思,所以就尝试了一下,结果做不出来(我是大一新生),想要请教一下有缘人,下面是题目:
闰年判断
题目内容:
从键盘任意输入一个公元年份(大于等于1),判断它是否是闰年。若是闰年输出“Yes”,否则输出“No”。要求对输入数据进行合法性判断。
已知符合下列条件之一者是闰年:
(1)能被4整除,但不能被100整除;
(2)能被400整除。
运行结果示例1:
2015↙
No
运行结果示例2:
2016↙
Yes
运行结果示例3:
-123↙
Input error!
运行结果示例4:
a↙
Input error!
输入格式: "%d"
输出格式:
是闰年,输出:"Yes\n"
不是闰年,输出:"No\n"
输入数据不合法,输出:"Input error!\n"
有没有人可以帮我解答一下?
我在前面求闰年的程序中都没有什么问题,就是最后这个输入数据不合法这块不会搞,
试了好几种方法输出结果都会不可避免的带上Yes或No。
这是我最后一次尝试的代码:
#include
#include
int main()
{
char x;
x=getchar();
scanf("%d\n",&x);
x>0;
if((x%4==0&&x%100!=0)||(x%400==0))
{printf("yes\n",x);}
else
{printf("No\n",x);}
if((x<=0)||(x>='a'&&x<='z')||(x>='A'&&x<='Z'))
{printf("Input error!\n",x);}
return 0;
}
我怀疑可能是需要使用do while语句,但我对do while语句不怎么会,所以没有尝试。
希望有人可以帮我解答一下,指正一下我的错误,谢谢!
#include <stdio.h>
int main()
{
int year=0;
if(scanf("%d",&year)!=1) //这里判断输入的是否是整数
printf("Input error!\n");
else
{
if(year < 0) //这里判断输入的是否是一个正整数
printf("Input error!\n");
else
(((year % 4 == 0)&&(year % 100 != 0)) || (year % 400 == 0)) ? printf("Yes\n") : printf("No\n");
}
}
可以借助scanf的返回值判断,当你输入的符合要求时,他返回一个整数,因为当前输入个数为一个数,所以它的返回值为1,当然,输入一个负数也是整数,它也会返回1,所以负数我们单独判断。
有帮助的话采纳一下哦!
#include<stdio.h>
int main()
{
int x;
scanf("%d", &x);
if(x <= 0)
{
printf("Input error!\n");
}
else if((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int year;
int n;
printf("input year:");
n=scanf("%d",&year);
if(n==1)
{
if(((year%4==0)&&(year%100!=0))||(year%400==0))
{
printf("Yes\n");
}
else
{
printf("NO\n");
}
}
else
{
printf("No\n");
}
return 0;
}
问题指正
#include<stdio.h>
#include<math.h>
int main()
{
char x;
// 你想靠第一个字符判断? 这样可不可行!
// 比如 我输入456d 返回的是-> yes 但输入依旧不合法
x=getchar();
// 包括这样的语句依旧输入 456d 返回不出 no , 所以如果允许456d输入的话,其他人的回答是存在问题的
// if(scanf("%d",&x)!=1) printf("no!\n");
scanf("%d\n",&x);
x>0; // 无意义语句
if((x%4==0&&x%100!=0)||(x%400==0))
{printf("yes\n",x);}
else
{printf("No\n",x);}
if((x<=0)||(x>='a'&&x<='z')||(x>='A'&&x<='Z'))
{printf("Input error!\n",x);}
return 0;
}
回答
#include<stdio.h>
int main()
{
char s[2022];
int year=0,index=0;
gets(s);
while (s[index]!='\0')
{
if(s[index]>='0' && s[index]<='9')
{
year = year*10 + s[index] - '0'; // ASCII 码
index += 1;
continue;
}
printf("Input error!\n");
return 0;
}
if(year==0) printf("Input error!\n");
else
{
if(year%400==0 || (year%4==0 && year%100!=0)) printf("Yes\n");
else printf("No\n");
}
return 0;
}
因为输入可能有字符,所以,读取年的时候,需要先判断读取的是否是数字。如果是数字,还需要判断数字是否大于等于1,然后再判断是否是闰年。
关键点都有注释。
代码如下:
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
//判断是否输入错误,输入非整数的时候,就会出错
if (cin.fail())
{
cout << "Input error!";
return 0;
}
//判断输入是否大于等于1
if (n < 1)
{
cout << "Input error!";
return 0;
}
//判断闰年
if (n % 4 == 0 && n % 100 != 0 || n % 400 == 0)
cout << "Yes";
else
cout << "No";
return 0;
}
不需要用do-while循环,这道题用if else语句完全足够了。
代码程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=0;
scanf("%d",&n);
if(n>0)
{
if((n%4==0&&n%100!=0)||(n%400==0))
printf("Yes\n");
else
printf("No\n");
}
else
printf("Input error!\n");
return 0;
}
测试: