王道训练营3月9日

DEBUG NDEBUG

trace(),assert()都只是在DEBUG的模式下才起作用的,如果定义了NDEBUG,编译器会认为是非DEBUG的模式(虽然编译出来的程序还是很大,而且还可以进行调试),此时trace(),assert()就没有用了.就如同你编译成release版的时候这些没有用一样.

 

else与最近的if配对

switch 中的case val:  val的值不能为浮点数,只能为字符或整数,如为字符串则用函数strncmp(str1,str2,n);

1 #ifndef  __HEAD_H__
2 #define  __HEAD_H__
3 //.h中的内容
4 
5 #endif<`0`>
6 
7 
8 printf("%03d",num);  //输出占用3个数字宽度,右对齐,不足的补0

 

  1 /*打印某一年的日历*/
  2 
  3 #include <stdio.h>
  4 #include <string.h>
  5 #include <stdlib.h>
  6 
  7 #define BEGIN 1899
  8 #define LINE_BG "|    "
  9 #define IS_LEAP(year) (year%400==0 || year%4==0&&year%100!=0)
 10 #define WEEK_FORMOT "|%2d  SUM MON TUE WED TUR FRI SAT  %2d  SUM MON TUE WED TUR FRI SAT |\n"
 11 static int get_day_of_year(int mon,int year)
 12 {
 13     int sum = 0;
 14     int index;
 15     for(index = 1;index < mon;index++)
 16     {
 17         switch(index)
 18         {
 19             case 1:
 20             case 3:
 21             case 5:
 22             case 7:
 23             case 8:
 24             case 10:
 25             case 12: sum +=31;break;
 26             case 4:
 27             case 6:
 28             case 9:
 29             case 11:sum += 30;break;
 30             case 2:if(IS_LEAP(year))
 31                    {
 32                        sum += 29;
 33                    }else
 34                    {
 35                        sum += 28;
 36                    }
 37         }
 38     }
 39     return sum;
 40 }
 41 int get_day_of_mon(int mon,int year)
 42 {
 43     switch(mon)
 44     {
 45         case 1:
 46         case 3:
 47         case 5:
 48         case 7:
 49         case 8:
 50         case 10:
 51         case 12: return 31;
 52         case 4:
 53         case 6:
 54         case 9:
 55         case 11: return 30;
 56         case 2:if(IS_LEAP(year))
 57                {
 58                    return 29;
 59                }else{
 60                    return 28;
 61                }
 62     }
 63 }
 64 static int get_week(int mon,int year)
 65 {
 66     int index;
 67     int sum = 0;
 68     for(index = BEGIN;index < year;index++)
 69     {
 70         if(IS_LEAP(index))
 71         {
 72             sum+=366;
 73         }
 74         else {
 75             sum +=365;
 76         }
 77     }
 78     sum += get_day_of_year(mon,year);
 79     return sum%7;
 80 }
 81 
 82 void show(int mon,int year)
 83 {
 84     int week1,week2;
 85     int day1_max,day2_max;
 86     int day1 = 1,day2 = 1;
 87     int space_cnt;
 88     week1 = get_week(mon,year);
 89     week2 = get_week(mon+6,year);
 90     day1_max = get_day_of_mon(mon,year);
 91     day2_max = get_day_of_mon(mon+6,year);
 92     printf(WEEK_FORMOT,mon,mon+6);
 93     //line 1
 94     printf(LINE_BG);
 95     space_cnt = 0;
 96     while(space_cnt < week1)
 97     {
 98         printf("    ");
 99         space_cnt++;
100     }
101     for(;week1<=6 && day1<=day1_max;week1++)
102     {
103         printf("%3d ",day1);
104         day1++;
105     }
106 
107     week1 = 0;
108     space_cnt = 0;
109     while(space_cnt < week2)
110     {
111         printf("    ");
112         space_cnt++;
113     }
114     printf("    ");
115     for(;week2<=6 && day2<day2_max;week2++)
116     {
117         printf("%3d ",day2);
118         day2++;
119     }
120     week2 = 0;
121     printf("|\n");
122 
123     //line2
124     printf(LINE_BG);
125     for(;week1<=6&&day1<=day1_max ;week1++)
126     {
127         printf("%3d ",day1);
128         day1++;
129     }
130     week1 = 0;
131     printf("    ");
132     for(;week2 <= 6&& day2<=day2_max;week2++)
133     {
134         printf("%3d ",day2);
135         day2++;
136     }
137     week2 = 0;
138     printf("|\n");
139 
140     //line3
141     printf(LINE_BG);
142     for(;week1 <=6&&day1<=day1_max;week1++)
143     {
144         printf("%3d ",day1);
145         day1++;
146     }
147     week1 = 0;
148     printf("    ");
149     for(;week2<=6 && day2 <= day2_max;week2++)
150     {
151         printf("%3d ",day2);
152         day2++;
153     }
154     week2 = 0;
155     printf("|\n");
156 
157     //line4
158     printf(LINE_BG);
159     for(;week1 <=6&&day1<=day1_max;week1++)
160     {
161         printf("%3d ",day1);
162         day1++;
163     }
164     week1 = 0;
165     printf("    ");
166     for(;week2<=6 && day2 <= day2_max;week2++)
167     {
168         printf("%3d ",day2);
169         day2++;
170     }
171     week2= 0;
172     printf("|\n");
173 
174     //line 5
175     printf(LINE_BG);
176     for(;week1<=6&&day1<=day1_max;week1++)
177     {
178         printf("%3d ",day1);
179         day1++;
180     }
181     while(week1<=6)
182     {
183         printf("    ");
184         week1++;
185     }
186     week1 = 0;
187     printf("    ");
188     for(;week2 <=6 && day2<=day2_max;week2++)
189     {
190         printf("%3d ",day2);
191         day2++;
192     }
193     while(week2<=6)
194     {
195         printf("    ");
196         week2++;
197     }
198     week2 = 0;
199     printf("|\n");
200 
201     //line 6
202     if(day1 <= day1_max || day2 <=day2_max )
203     {
204         printf(LINE_BG);
205         for(;week1<=6 && day1 <=day1_max ;week1++)
206         {
207             printf("%3d ",day1);
208             day1++;
209         }
210         while(week1 <=6)
211         {
212             printf("    ");
213             week1 ++;
214         }
215         week1 = 0;
216         printf("    ");
217         for(;week2 <= 6&&day2 <=day2_max;week2++)
218         {
219             printf("%3d ",day2);
220             day2++;
221         }
222         while(week2<=6)
223         {
224             printf("    ");
225             week2++;
226         }
227         week2 = 0;
228         printf("|\n");
229     }
230 }
231 
232 int main(int argc,char* argv[])
233 {
234     int year;
235     int i;
236     while(fflush(stdin),(scanf("%d",&year))!=EOF)
237     {
238         for(i=1;i<6;i++)
239             show(i,year);
240     }
241     return 0;
242 }

 

转载于:https://www.cnblogs.com/qianyanglinux/p/4322877.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值