/*--------------------------------------------------------------*/
#include "stdio.h"
int md[12]=/*每个月的天数*/
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) /*加上一个月后检查月份是否超出范围*/
//然后依次减去以后各个月的天数,直到不能再减为止
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)/*加上一个月后检查月份是否超出范围*/
}
day = d//减剩的就是day
}
}
/*---------------------------------------------------------------*/
其实三个问题中第一个还比较复杂,其余两个相对简单,先给第一个的答案吧,占个位子,有空再来补上其余两个。
第一个程序经过我调试运行通过,测试没有什么问题,其实你可以加上任意大于0的天数,该程序都能得出正确结果。另外程序中的提示字符串我是用中文,因为VC++支持中文,如果你的编译器不支持中文(如TC),请你自己把中文字符串改为英文。
ps:非常痛恨百度知道的删除空格做法,原本很漂亮的程序变的面目全非了!!!
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
#include<stdio.h>#include<string.h>
struct pe //建立一个结构体,内容包含了候选人的名字和票数
{
char name[20]
int score
}a[3]
int main()
{
int i
char b[20]
for(i=0i<3i++) //初始化候选人的名字
{
printf("请输入%d号候选人的名字,确认候选人:",i+1)
scanf("%s",a[i].name)
a[i].score=0
}
for(i=0i<10i++) //进行投票和票数统计
{
printf("请输入你要投票的人的名字:")
scanf("%s",b)
if (strcmp(a[0].name,b)==0)
a[0].score++
else if(strcmp(a[1].name,b)==0)
a[1].score++
else if(strcmp(a[2].name,b)==0)
a[2].score++
}
printf("候选人名字:%s,候选人票数:%d\n",a[0].name,a[0].score)
printf("候选人名字:%s,候选人票数:%d\n",a[1].name,a[1].score)
printf("候选人名字:%s,候选人票数:%d\n",a[2].name,a[2].score)
//输出票数和候选人名字
}
没记错,我昨天也回答了你的问题,你要清楚scanf的输入方式,不然你又会错误。记的我给你的代码中输入时用的是for循环,你每次输入又要用回车的
main(){
int i,a=0,b=0,c=0,d=0
char a[20]
printf("")
for(i=0i<20i++)
{
scanf("%c",&a[i])
switch(a[i])
{
case 'A':a++i++break
case 'B':b++i++break
case 'C':c++i++break
case 'D':d++i++break
default:printf("选票无效!请重新输入\n")break
}
}
printf("A获得%d张选票\n",a)
printf("B获得%d张选票\n",b)
printf("C获得%d张选票\n",c)
printf("D获得%d张选票\n",d)
}