c语言 求助

样例输入
2012 4 9 91
2013 1 1 364
样例输出
2012.7.9
2013.12.31
想把一下代码弄成以上的格式
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int y,m,d,N,a;
scanf("%d %d %d",&y,&m,&d);
scanf("%d",&N);
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
{
a=31-d;
}else if(m==4||m==6||m==9||m==11)
{
a=30-d;
}else if(m==2)
{
if((y%4==0&&y%100!=0)||y%400==0)
{
a=29-d;
}else
{
a=28-d;
}
}
if(N<=a)
{
printf("%d %d %d",y,m,d+N);
}else
{
N=N-a;
m++;
}
for(;N>0;)
{
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
{
N=N-31;
m++;
}else if(m==4||m==6||m==9||m==11)
{
N=N-30;
m++;
}else if(m==2)
{
if((y%4==0&&y%100!=0)||y%400==0)
{
N=N-29;m++;
}else
{
N-=28;
m++;
}
}else if(m==13)
{
y++;
N-=31;
m=2;
}
}
m--;
if(m==1)
{
printf("%d.%d.%d\n",y,m=12,N+31);
}else if(m==3||m==5||m==7||m==8||m==10||m==12)
{
printf("%d.%d.%d\n",y,m,N+31);
}else if(m==4||m==6||m==9||m==11)
{
printf("%d.%d.%d\n",y,m,N+30);
}else if(m==2)
{
if((y%4==0&&y%100!=0)||y%400==0)
{
printf("%d.%d.%d\n",y,m,N+29);
}else
{
printf("%d.%d.%d\n",y,m,N+28);
}
}
system("PAUSE");
return 0;
}

重写的话当然可以写得简单些,改一下的话,如下较方便:

#include "stdio.h"
void myfun(int y,int m,int d,int N){
int a;
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
a=31-d;
}
else if(m==4||m==6||m==9||m==11){
a=30-d;
}
else if(m==2){
if((y%4==0&&y%100!=0)||y%400==0){
a=29-d;
}
else{
a=28-d;
}
}
if(N<=a){
printf("%d %d %d",y,m,d+N);
}
else{
N=N-a;
m++;
}
for(;N>0;){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
N=N-31;
m++;
}
else if(m==4||m==6||m==9||m==11){
N=N-30;
m++;
}
else if(m==2){
if((y%4==0&&y%100!=0)||y%400==0){
N=N-29;m++;
}
else{
N-=28;
m++;
}
}
else if(m==13){
y++;
N-=31;
m=2;
}
}
m--;
if(m==1){
printf("%d.%d.%d\n",y,m=12,N+31);
}
else if(m==3||m==5||m==7||m==8||m==10||m==12){
printf("%d.%d.%d\n",y,m,N+31);
}
else if(m==4||m==6||m==9||m==11){
printf("%d.%d.%d\n",y,m,N+30);
}
else if(m==2){
if((y%4==0&&y%100!=0)||y%400==0){
printf("%d.%d.%d\n",y,m,N+29);
}
else{
printf("%d.%d.%d\n",y,m,N+28);
}
}
}
int main(int argc,char *argv[]){
int a[10][4],n,i;
printf("Input n(int 0<n<11)...\nn=");
if(scanf("%d",&n)!=1 || n<1 || n>10){
printf("Input error, exit...\n");
return 0;
}
printf("Please enter %d year, month, day & number...\n",n);
for(i=0;i<n;i++)
scanf("%d%d%d%d",a[i],a[i]+1,a[i]+2,a[i]+3);
printf("The result is:\n");
for(i=0;i<n;i++)
myfun(a[i][0],a[i][1],a[i][2],a[i][3]);
return 0;
}

你对照看,可续问。

追问

题目描述
我们经常要计算,从今天往后N天之后是哪一天(哪年哪月哪日)。现在我们就可以编写一个程序,推算指定日期之后的第N天是什么日期。
输入
输入有多组。每组测试用例有一行,包括四个整数,分别表示年,月,日和第N天。
输出
对于每组测试用例,输入由一行组成,表示(年月日+N天后的)的年.月.日

样例输入
2012 4 9 91
2013 1 1 364

样例输出
2012.7.9
2013.12.31

追答

你说那么多啥意思?给你改的代码难道不是这样的吗?你根本就没有试吧?这是执行结果:

自己看……

追问

追答

不知道你在问什么,那就发一副全图片:

追问

作业要求是 输入
2012 4 9 91
2013 1 1 364
然后输出 他要的答案 多余的不行 这是机器批阅的作业

追答

多余的不要你删除不就得了?另,既然要求多组,既不说多组怎么结束,也不说先输入组数n,你说怎么弄?我只能认为是先输入组数了。如果只有两组,那就把主函数改如下就可以了:

int main(int argc,char *argv[]){
int a[2][4];
scanf("%d%d%d%d",a[0],a[0]+1,a[0]+2,a[0]+3);
scanf("%d%d%d%d",a[1],a[1]+1,a[1]+2,a[1]+3);
myfun(a[0][0],a[0][1],a[0][2],a[0][3]);
myfun(a[1][0],a[1][1],a[1][2],a[1][3]);
printf("\n");
return 0;
}

但这觉得就不叫什么程序了……

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-01-13
第2个回答  2017-06-11
你这题目要求都没说
相似回答