第二章练习参考答案P55-4方法1:#include<stdio.h>main(){int y;printf("Please enter a year:");scanf("%d",&y);if(y%400==0)printf("It is a leap year.\n");elseif(y%4==0 && y%100!=0)printf("It is a leap year.\n");elseprintf("It is not a leap year.\n");}方法2:#include<stdio.h>main(){int y;printf ("Please enter a year:");scanf ( "%d",&y);if ( y%4==0 && y%100!=0 || y%400==0 )printf("It is a leap year.\n");elseprintf("It is not a leap year.\n");}P55-5方法1:#include<stdio.h>main(){int year,month;printf("Please enter a year and a month:");scanf("%d%d",&year,&month);switch(month){case 4: case 6: case 9: case 11:printf("It has 30 days.\n");break;case 1: case 3: case 5: case 7: case 8: case 10: case 12:printf("It has 31 days.\n");break;case 2:if(year%400==0)printf("It has 29 days.\n");elseif(year%4==0 && year%100!=0)printf("It has 29 days.\n");elseprintf("It has 28 days.\n");}}方法2:#include<stdio.h>main(){int year, month, day;printf("Please enter a year and a month:");scanf("%d%d", &year, &month);switch(month) {case 4: case 6: case 9: case 11:day = 30;break;case 1: case 3: case 5: case 7: case 8: case 10: case 12:day = 31;break;case 2:if(year%400==0 || (year%4==0 && year%100!=0))day = 29;elseday = 28;}printf("It has %d days.\n", day);}P55-6#include <stdio.h>#define N 100main( ){int x, i, sum=0, n=0;printf("\nEnter 100 integer number :\n");for(i=1; i<=N; i++) {scanf("%d", &x);if ( x%2==0 ) {sum = sum + x;n++;}}printf("%.2f\n", 1.0*sum/n);}P55-7#include <stdio.h>main( ){int x,i;printf("\nEnter an integer number (>0) :"); scanf("%d", &x);for ( i = 1; i<=x; i++)if ( x%i==0 )printf("%4d", i);}P55-8#include<stdio.h>main(){int x, i;printf("Please Enter a integer: ");scanf("%d", &x);for(i=2; i<x; i++)if (x%i==0) break;if(i<x)printf("%d is not prime.\n",x);elseprintf("%d is prime.\n",x);}P55-9方法1:#include<stdio.h>main(){int x = 2, i, num = 0;while (x < 100) {i = 2while (i <= x) {if (x % i != 0) {printf("%d", x);num = num + 1;if (num % 5 == 0)printf("\n");}i++;}x++;}}方法2:#include<stdio.h>main(){int x = 1, i, num = 0, flag;while (x < 100) {i = 2;flag = 1;while (i < x) {if (x % i == 0) {flag = 0;break;}i++;}if(flag == 1) {printf("%d ", x);num = num + 1;if (num % 5 == 0)printf("\n");}x++;}printf("\n");}方法3:#include<stdio.h>main(){int x, n = 0, i, flag;for( x=2; x<=100; x++) {flag = 1;for(i=2; i<x; i++)if (x%i==0) {flag = 0; break;}if(flag) {printf("%5d", x);n++;if (n % 5 == 0)printf("\n");}}}P55-10方法1:#include <stdio.h>main(){int i, m, n;printf("Please Enter two integers: "); scanf("%d%d", &m, &n);for(i=1; i<n; i++)if ((i*m)%n ==0) break;printf("lcd=%d\n",i*m);getch();}方法2:#include <stdio.h>main(){int i, m, n;printf("Please Enter two integers: "); scanf("%d%d", &m, &n);for(i=m; ; i++)if(i%m==0 && i%n==0) break;printf("lcd=%d\n", i);getch();}P56-2 (上机)方法1:#include<stdio.h>main(){int x, y, month, day=4, i, r, mday, num=0; /* day=4 以2006年的1月1日为基准作为本年度*/printf("Please enter a year and a month:");scanf("%d%d", &y, &x);/* 计算总天数*/for(month = 1; month < x; month++){switch(month) {case 4: case 6: case 9: case 11:day = day + 30;break;case 1: case 3: case 5: case 7: case 8: case 10: case 12:day = day + 31;break;case 2:if(y%400==0 || (y%4==0 && y%100!=0))day = day + 29;elseday = day + 28;break;}}r = day % 7;printf("SUN MON TUE WED THU FRI SA T\n");for(i=0; i<r; i++)printf(" ");for(i=1; i<=7-r; i++)printf("%3d ", i);printf("\n");switch(x) {case 4: case 6: case 9: case 11:mday = 30;break;case 1: case 3: case 5: case 7: case 8: case 10: case 12:mday = 31;break;case 2:if(y%400==0 || (y%4==0 && y%100!=0))mday = 29;elsemday = 28;break;}for(i=8-r; i<=mday; i++){num = num + 1;printf("%3d ", i);if(num%7==0)printf("\n");}printf("\n");}方法2:#include <stdio.h>#define START_DAY 6 /* 以2000年的1月1日为本程序的基准*/void main( ){int year,month;int day,num,d,start,m,y,s;printf("Enter a year,month:");scanf("%d%d",&year,&month);/* 可先不考虑,输入年月出错的情况if (year<2000) year=2000;if (month<1||month>12) month=12;*/num=0;/* 可完成2000年开始的任意某年的某个月的日历(累计年的总天数)for (y=2000; y<year; y++) {if (y%400==0 || y%4==0 && y%100!=0)num=num+366;else num=num+365;}*/for (m=1; m<month; m++) { /* 计算一年内某月前的总天数*/switch (m) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:num=num+31;break;case 4:case 6:case 9:case 11:num=num+30;break;case 2: if (year%400==0||year%4==0&&year%100!=0)num=num+29;else num=num+28;break;}}start = (START_DAY+num)%7; /* 得到某月的1日是星期几*/ switch(month) { /* 得到某月的天数*/case 1:case 3:case 5:case 7:case 8:case 10:case 12:d=31;break;case 4:case 6:case 9:case 11:d=30;break;case 2: if (year%400==0||year%4==0&&year%100!=0)d=29;else d=28;break;}printf("\n === %4d . %2d ===\n",year,month);printf("\n SUN MON TUE WED THU FRI SA T\n");for (s=0; s<start; s++)printf("%4c", ' ');for (day=1; day<=d; day++) {if (start==0) putchar('\n');printf("%4d", day);start=(start+1)%7;}putchar('\n');}P57-1#include <stdio.h>main(){int i,x,max,min;printf("Enter x:");scanf("%d",&x);max=x; min=x;for (i=1; i<4; i++) {printf("Enter x:");scanf("%d",&x);if (x>max) max=x;if (x<min) min=x;}printf("max=%d min=%d\n", max, min);getch();}P57-2#include <stdio.h>main( ){int a,b,c,n;a=0;b=1;printf("%6d",a);printf("%6d",b);for(n=3;n<=20;n++){c=a+b;printf("%6d",c);if (n%5==0) printf("\n");a=b;b=c;}getch();}。