选人问题 C语言

Python017

选人问题 C语言,第1张

第一个问题

/*--------------------------------------------------------------*/

#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)

}