实验综合练习一打印万年历(1)已知公元1年1月1日是星期一,计算输入的年月日是星期几?编程如下:#include <stdio.h>void main(){int i,year,month,day,day_of_year,day_of_month;long sumday=0;printf("请先输入年、月、日,中间以空格或换行符间隔:\n");scanf("%ld%ld%ld",&year,&month,&day);for(i=1;i<=year-1;i++){if(i%400==0||i%100!=0&&i%4==0)day_of_year=366;elseday_of_year=365;sumday=sumday+day_of_year;}for(i=1;i<=month-1;i++){if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)day_of_month=31;else if(i==4||i==6||i==9||i==11)day_of_month=30;else if(i==2){if(year%400==0||year%100!=0&&year%4==0)day_of_month=29;elseday_of_month=28;}sumday=sumday+day_of_month;}sumday=sumday+day;i=sumday%7;if(i==0)i=7;printf("%ld年%ld月%ld日是星期%d\n",year,month,day,i);}为了使输出的星期为大写且将星期7变成星期天,可作如下改动:#include <stdio.h>void main(){int i,year,month,day,day_of_year,day_of_month;long sumday=0;printf("请先输入年、月、日,中间以空格或换行符间隔:\n");scanf("%ld%ld%ld",&year,&month,&day);for(i=1;i<=year-1;i++){if(i%400==0||i%100!=0&&i%4==0)day_of_year=366;elseday_of_year=365;sumday=sumday+day_of_year;}for(i=1;i<=month-1;i++){if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)day_of_month=31;else if(i==4||i==6||i==9||i==11)day_of_month=30;else if(i==2){if(year%400==0||year%100!=0&&year%4==0)day_of_month=29;elseday_of_month=28;}sumday=sumday+day_of_month;}sumday=sumday+day;i=sumday%7;switch(i){case 0: printf("%ld年%ld月%ld日是星期日",year,month,day); break;case 1: printf("%ld年%ld月%ld日是星期一",year,month,day); break;case 2: printf("%ld年%ld月%ld日是星期二",year,month,day); break;case 3: printf("%ld年%ld月%ld日是星期三",year,month,day); break;case 4: printf("%ld年%ld月%ld日是星期四",year,month,day); break;case 5: printf("%ld年%ld月%ld日是星期五",year,month,day); break;case 6: printf("%ld年%ld月%ld日是星期六",year,month,day); break;}printf("\n");}当然也可以这样编程:#include <stdio.h>int leap_year(int year){if(year%400==0 || year%100!=0 && year%4==0)return 1;elsereturn 0;}void main(){long year, month, day;char *a[7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};printf("请先输入年、月份、日,中间以空格或换行符间隔:\n");scanf("%ld%ld%ld",&year,&month,&day);int i, xq=0,sumday=0;for(i=1;i<=year-1;i++){sumday=sumday+365+leap_year(i);}for(i=1;i<=month-1;i++){if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)sumday=sumday+31;else if(i==4||i==6||i==9||i==11)sumday=sumday+30;else if(i==2)sumday=sumday+28+leap_year(year);}sumday=sumday+day;i=sumday%7;printf("%ld年%ld月%ld日是%s\n",year,month,day,a[i]);}(2)输入年份,在屏幕上输出该年的年历(已知1900年第一天也是星期一)。
#include<stdio.h>void main(){int year,i,j,k,sumday,yuandan,weekday,day,day_of_year,day_of_month;printf("Please input the year:\n");scanf("%d",&year);printf("\n");for(i=1,sumday=0;i<=year-1990;i++){if(i%400==0||i%100!=0&&i%4==0)day_of_year=366;elseday_of_year=365;sumday=sumday+day_of_year;}yuandan=(sumday+1)%7;weekday=yuandan;printf(" 公元%d年\n",year);for(i=1;i<=12;i++){printf(" %d月\n",i);printf(" Sun Mon Tue Wed Thu Fri Sat\n");for(j=0;j<weekday;j++)printf(" ");if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)day_of_month=31;else if(i==4||i==6||i==9||i==11)day_of_month=30;else if(i==2){if(year%400==0 || year%100!=0 && year%4==0)day_of_month=29;elseday_of_month=28;}day=day_of_month;for(k=1;k<=day;k++){printf("%4d",k);weekday=(weekday+1)%7;if(weekday==0)printf("\n");}printf("\n\n");}}#include<stdio.h>void main(){int year,i,j,k,sumday,yuandan,weekday,day,day_of_year,day_of_month;printf("Please input the year:\n");scanf("%d",&year);printf("\n");for(i=1,sumday=0;i<=year-1;i++){if(i%400==0||i%100!=0&&i%4==0)day_of_year=366;elseday_of_year=365;sumday=sumday+day_of_year;}yuandan=(sumday+1)%7;weekday=yuandan;printf(" 公元%d年\n",year);for(i=1;i<=12;i++){switch(i){case 1:printf(" January\n"); break;case 2:printf(" February\n"); break;case 3:printf(" March\n"); break;case 4:printf(" April\n"); break;case 5:printf(" May\n"); break;case 6:printf(" June\n"); break;case 7:printf(" July\n"); break;case 8:printf(" August\n"); break;case 9:printf(" September\n"); break;case 10:printf(" October\n"); break;case 11:printf(" November\n"); break;case 12:printf(" December\n");break;}printf(" Sun Mon Tue Wed Thu Fri Sat\n");for(j=0;j<weekday;j++)printf(" ");if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) day_of_month=31;else if(i==4||i==6||i==9||i==11)day_of_month=30;else if(i==2){if(year%400==0 || year%100!=0 && year%4==0) day_of_month=29;elseday_of_month=28;}day=day_of_month;for(k=1;k<=day;k++){printf("%4d",k);weekday=(weekday+1)%7;if(weekday==0)printf("\n");}printf("\n");}}或者:#include<stdio.h>void main(){int year,i,j,k,sumday,yuandan,weekday,day,day_of_year,day_of_month;cha*a[13]={"","January","February","March","April","May","June","July","Au gust","September","October","November","December"};printf("Please input the year:\n");scanf("%d",&year);printf("\n");for(i=1,sumday=0;i<=year-1990;i++){if(i%400==0||i%100!=0&&i%4==0)day_of_year=366;elseday_of_year=365;sumday=sumday+day_of_year;}yuandan=(sumday+1)%7;weekday=yuandan;printf(" 公元%d年\n",year);for(i=1;i<=12;i++){printf(" %s\n”,a[i]);printf(" Sun Mon Tue Wed Thu Fri Sat\n");for(j=0;j<weekday;j++)printf(" ");if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)day_of_month=31;else if(i==4||i==6||i==9||i==11)day_of_month=30;else if(i==2){if(year%400==0 || year%100!=0 && year%4==0)day_of_month=29;elseday_of_month=28;}day=day_of_month;for(k=1;k<=day;k++){printf("%4d",k);weekday=(weekday+1)%7;if(weekday==0)printf("\n");}printf("\n\n");}}当然也可以定义函数和调用定义的函数:#include<stdio.h>int leap_year(int year){if(year%400==0 || year%100!=0 && year%4==0)return 1;elsereturn 0;}int day_of_month(int i,int year){if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)return 31;else if(i==4||i==6||i==9||i==11)return 30;else if(i==2)return 28+leap_year(year);}void main(){int year,i,j,k,sumday,firstday,weekday,day;char*a[13]={"","January","February","March","April","May","June","July","A ugust","September","October","November","December"};printf("Please input the year:\n");scanf("%d",&year);printf("\n");for(i=1,sumday=0;i<=year-1990;i++)sumday=sumday+365+leap_year(i);firstday=(sumday+1)%7;weekday=firstday;printf(" %d年\n",year);for(i=1;i<=12;i++){printf(" %s\n",a[i]);printf(" Sun Mon Tue Wed Thu Fri Sat\n");for(j=0;j<weekday;j++)printf(" ");day=day_of_month(i,year);for(k=1;k<=day;k++){printf("%4d",k);weekday=(weekday+1)%7;if(weekday==0)printf("\n");}printf("\n");}}运行结果实例如下:2001JanuarySun Mon Tue Wed Thu Fri Sat1 2 3 4 5 67 8 9 10 11 12 13……February……实验综合练习二(1)输入一个班10个学生的学号和每个学生考试三门功课(数学、英语、计算机基础)的成绩。