c语言程序题~!

1

输入一个日期,求出这个日期的下一天是多少号?
比如:输入2008 5 4 则输出2008 5 5
输入2008 12 31则输出2009 1 1

要求:
1 输入一个日期(年,月,日)判断输入日期的合法性(在主函数中完成)
年:大于1的整数
月:大于等于1,小于等于12的整数
日:如果月份为1,3,5,7,8,10,12则天数为1到31合法
如果月份为4,6,9,11则天数为1到30合法
如果月份为2月,则先判断是否是闰年,是闰年则天数为1到29合法,不是闰年则天数为1到28合法
2 在日期合法的基础上,求日期的下一天,要求利用函数完成

2

选班长,一个班有三个候选人 关羽,张飞,赵云
候选人代号分别为关羽--1,张飞--2,赵云--3
输入候选人代号,进行投票,当输入0时投票结束

要求:
1 如果候选人投票错误(即输入的不是0,1,2或者3),则提示"输入错误,请重新输入"
2 如果输入0,则投票结束
3 投票结束后,利用函数完成票数统计(即输出每个候选人的得票数),然后输出哪位侯选人被选中

3

输入一个班级学生基本信息和C语言的考试成绩
基本信息包括: 学号,姓名,年龄
然后分别调用函数完成以下要求:
1 定义一个函数,求出最高分和最低分
2 定义一个函数,求出总分和平均分
3 定义一个函数,对这个班的C语言成绩进行排名(由高到低)

第一个问题

/*--------------------------------------------------------------*/
#include "stdio.h"

int md[12]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月的天数*/
int year; /*年*/
int month; /*月*/
int day; /*日*/
int ad; /*要加上的天数*/

int IsLeapYear(int y); /*判断y是否闰年*/
void AddDay(int d); /*在日期上加上d天*/

int main()
{
printf("输入年:");
scanf("%d",&year);
while(year<1)
{
printf("\n输入错误,重新输入:");
scanf("%d",&year);
}
printf("输入月:");
scanf("%d",&month);
while(month<1 || month>12)
{
printf("\n输入错误,重新输入:");
scanf("%d",&month);
}
printf("输入日:");
scanf("%d",&day);
while(day<1 || day>( month==2 ? (IsLeapYear(year) ? 29:md[month-1]) : md[month-1]) )
{/*上面这句有些复杂,因为要判断这个月的天数,还有判断是否年*/
printf("\n输入错误,重新输入:");
scanf("%d",&day);
}
printf("输入要加上的天数:");
scanf("%d",&ad);
while(ad<1)
{
printf("\n输入错误,重新输入:");
scanf("%d",&ad);
}
printf("输入的日期是 %d年%d月%d日\n",year,month,day);
AddDay(ad); /*加上ad天*/
printf("加上%d天后是 %d年%d月%d日\n",ad,year,month,day);
}

int IsLeapYear(int y) /*判断是否闰年*/
{
if((y%400 == 0)||(y%4 == 0 && y%100 != 0))
return 1;
return 0;
}

void AddDay(int d)
{
if((day+d) <= md[month-1]) //如果加上d天后,还未超出本月
day = day+d;
else
{
//首先减去当月剩余的天数
if(IsLeapYear(year) && month == 2)
d -= (29-day);
else
d -= (md[month-1]-day);
month++;
if(month>12) {year++; month=1;} /*加上一个月后检查月份是否超出范围*/
//然后依次减去以后各个月的天数,直到不能再减为止
while( d > ( month==2 ? (IsLeapYear(year) ? 29:md[month-1]) : md[month-1]) )
{
if(IsLeapYear(year) && month == 2) //如果是闰年且是二月
d -= 29;
else
d -= md[month-1];
month++;
if(month>12){year++;month=1;}/*加上一个月后检查月份是否超出范围*/
}
day = d; //减剩的就是day
}

}
/*---------------------------------------------------------------*/

其实三个问题中第一个还比较复杂,其余两个相对简单,先给第一个的答案吧,占个位子,有空再来补上其余两个。
第一个程序经过我调试运行通过,测试没有什么问题,其实你可以加上任意大于0的天数,该程序都能得出正确结果。另外程序中的提示字符串我是用中文,因为VC++支持中文,如果你的编译器不支持中文(如TC),请你自己把中文字符串改为英文。
ps:非常痛恨百度知道的删除空格做法,原本很漂亮的程序变的面目全非了!!!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-14
1
4
3
2
8
6
5
7
3
7
2
5
4
8
6
1
原始的数组是这样的,算是个矩阵。
而你那个程序的作用是

矩阵的对角线上的数进行降序排。所以原先对角线上的1
6
2
1
就变成了6
2
1
1了。
变成了
6
4
3
2
8
2
5
7
3
7
1
5
4
8
6
1
6
就跑到了左上角。
而你程序的输出
只是输出
第一行。所以是
6
4
3
2
第2个回答  2019-03-16
1
4
3
2
8
6
5
7
3
7
2
5
4
8
6
1
二维数组第一次循环K=1
i=0
是a[0][0]与a[1][1]比较大小,如果a[1][1]>a[0][0]两者交换位置,显然a[1][1]>a[0][0]则两者位置交换,第二次循环a[1][1]与a[2][2]重复上面的算法第三次循环a[2][2]和a[3][3]重复上面算法。得到新的二维数组。
6
4
3
2
8
2
5
7
3
7
1
5
4
8
6
1
再输入第一行。
不知道这样说你明不明白。
相似回答