1 #include<stdio.h>
2 #include<time.h>
3 #include<math.h>
4 #include<stdlib.h>
5
6 int No=-1; //功能选择标志
7
8 void HomePage(); //首页
9 void FunctionSelection(); //功能选择
10 void MultiplicationTable(); //九九乘法表
11 void YanghuiTriangle(); //杨辉三角
12 void IntLeapYear(); //判断闰年
13 void LettersPyramid_1(); //字母金字塔(1)
14 void LettersPyramid_2(); //字母金字塔(2)
15 void GCD_LCM(); //最大公约数最小公倍数
16 void Josephus(); //约瑟夫环
17 void JudgePrime(); //判断素数
18 void NarcissisticNumber(); //水仙花数
19 void PrimeFactors(); //分解质因数
20 void JudgmentDay(); //判断某年某月某日是今年的第几天
21 void Pattern(); //打印棱形图案
22
23 void main()
24 {
25 do{
26 system("cls");
27 HomePage();
28 FunctionSelection();
29 }while(No!=0);
30 }
31
32 void FunctionSelection() //功能选择
33 {
34 switch(No)
35 {
36 case 1:MultiplicationTable();break;
37 case 2:YanghuiTriangle();break;
38 case 3:IntLeapYear();break;
39 case 4:LettersPyramid_1();break;
40 case 5:LettersPyramid_2();break;
41 case 6:GCD_LCM();break;
42 case 7:Josephus();break;
43 case 8:JudgePrime();break;
44 case 9:NarcissisticNumber();break;
45 case 10:PrimeFactors();break;
46 case 11:JudgmentDay();break;
47 case 12:Pattern();break;
48 }
49
50 }
51
52 void HomePage() //首页
53 {
54 char* str_time=NULL;
55 time_t t;
56 system("cls");
57 t=time(0); /*获取当前时间*/
58 str_time=ctime(&t); /*把日期和时间转换为字符串*/
59
60 printf ("┏ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅┓\n");
61 printf ("┇请选择您需要的功能: ┇\n");
62 printf ("┣ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅┫\n");
63 printf ("┇ 九九乘法表请按 …………………………………………1 ┇\n");
64 printf ("┇ 杨辉三角请按 ……………………………………………2 ┇\n");
65 printf ("┇ 判断闰年请按 ……………………………………………3 ┇\n");
66 printf ("┇ 字母金字塔(1)请按 ……………………………………4 ┇\n");
67 printf ("┇ 字母金字塔(2)请按 ……………………………………5 ┇\n");
68 printf ("┇ 最大公约数最小公倍数请按 ……………………………6 ┇\n");
69 printf ("┇ 约瑟夫环请按 ……………………………………………7 ┇\n");
70 printf ("┇ 判断素数请按 ……………………………………………8 ┇\n");
71 printf ("┇ 水仙花数请按 ……………………………………………9 ┇\n");
72 printf ("┇ 分解质因数请按 …………………………………………10 ┇\n");
73 printf ("┇ 判断某年某月某日是今年的第几天请按 ………………11 ┇\n");
74 printf ("┇ 打印棱形图案请按 ………………………………………12 ┇\n");
75 printf ("┇ 退出_0 ┇\n");
76 printf ("┗ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅┛\n");
77 printf (" %s",str_time);
78 printf ("Please write down the number:");
79 scanf ("%d",&No);
80 }
81
82
83
84 void MultiplicationTable() //九九乘法表
85 {
86 int i,j;
87 for(i=1;i<10;i++)
88 {
89 for(j=1;j<=i;j++)
90 {
91 printf("%d*%d=%-2d ",j,i,i*j);
92 }
93 printf("\n");
94 }
95 system("pause");
96 }
97
98 void YanghuiTriangle() //杨辉三角
99 {
100 int n;
101 printf("请先定义杨辉三角的深度(3~13最佳):");
102 scanf("%d",&n);
103 //缺少异常机制
104 int a[30][30];
105 int i,j,k;
106 for(i=0;i<n;i++)
107 for(j=0;j<=i;j++)
108 {
109 if(j==0||i==j) a[i][j]=1; //对两边的1进行赋值
110 }
111 for(i=2;i<n;i++)
112 for(j=1;j<i;j++)
113 a[i][j]=a[i-1][j-1]+a[i-1][j]; //数为两肩上的数之和
114
115 for(i=0;i<n;i++)
116 {
117 for(k=0;k<n-i;k++)
118 printf(" ");
119 for(j=0;j<=i;j++)
120 printf("%-3d ",a[i][j]); //输出
121 printf("\n");
122 }
123 system("pause");
124 }
125
126
127
128 void IntLeapYear() //判断闰年
129 {
130 int year,leap;
131 printf("\n请输入年份:");
132 scanf("%d",&year);
133 if((year%4==0 && year%100!=0)||(year%400==0))
134 leap=1;
135 else leap=0;
136 if(leap)
137 printf("%d is ",year);
138 else
139 printf("%d is not ",year);
140 printf("a leap year.\n\n");
141 system("pause");
142 }
143
144 void LettersPyramid_1() //字母金字塔(1)
145 {
146 int i,j;
147 for(i=0;i<26;i++)
148 {
149 for(j=0;j<26-i;j++) printf(" ");
150 for(j=i;j>=0;j--) printf("%c",'A'+j);
151 for(j=1;j<i+1;j++) printf("%c",'A'+j);
152 putchar('\n');
153 }
154 system("pause");
155 }
156
157 void LettersPyramid_2() //字母金字塔(2)
158 {
159 int i,j;
160 for(i=0;i<26;i++)
161 {
162 for(j=0;j<25-i;j++) putchar(' ');
163 for(j=0;j<i;j++) putchar('A'+j);
164 for(j=i;j>=0;j--) putchar('A'+j);
165 putchar(10);
166 }
167 system("pause");
168 }
169
170 void GCD_LCM() //最大公约数最小公倍数
171 {
172 int n,m,nm,t;
173 printf("请输入两个数:");
174 scanf("%d%d",&n,&m);
175 nm=n*m;
176 if(m>n)
177 {
178 t=m;
179 m=n;
180 n=t;
181 }
182 while(n%m!=0)
183 {
184 t=n%m;
185 n=m;
186 m=t;
187 }
188 printf("最大公约数:%d,最小公倍数:%d\n",m,nm/m);
189 system("pause");
190 }
191
192
193
194
195 void Josephus() //约瑟夫环
196 {
197 int m,n,i,j=0,a[100];
198 int count1=0,count2=0;
199 printf("请输入人数,和退出序数:");
200 scanf("%d%d",&n,&m);
201 for(i=0;i<n;i++) a[i]=i+1;
202 i=0;
203 while(count2<n)
204 {
205
206 while(a[i]!=0)
207 {
208 count1++;
209 if(count1==m)
210 {
211 j++;
212 printf("第%d个退出序数:%d\n",j,a[i]);
213 a[i]=0;
214
215 count1=0;
216 count2++;
217 }
218 i++;
219 i=i%n;
220 }
221 i++;
222 i=i%n;
223 }
224 system("pause");
225 }
226
227
228
229 void JudgePrime() //判断素数
230 {
231 int n,j;
232 printf("请输入一个数:");
233 scanf("%d",&n);
234 for(j=2;j<=sqrt(n);j++)
235 {
236 if(n%j==0) break;
237 }
238 if(j>sqrt(n)) printf("%d是素数.\n",n);
239 else printf("%d不是素数.\n",n);
240 system("pause");
241 }
242
243
244 void NarcissisticNumber() //水仙花数
245 {
246 int i,bai,shi,ge;
247 printf("水仙花数:\n");
248 for(i=100;i<=999;i++)
249 {
250 bai=i/100;
251 shi=i/10-bai*10;
252 ge=i%10;
253 if(i==bai*bai*bai+shi*shi*shi+ge*ge*ge)
254 printf("%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\n\n",i,bai,bai,bai,shi,shi,shi,ge,ge,ge);
255 }
256 system("pause");
257 }
258
259
260
261 void PrimeFactors() //分解质因数
262 {
263 int k,n;
264 printf("(分解质因数)请输入一个数:");
265 scanf("%d",&n);
266 printf("%d=",n);
267 for(k=2;k<=n;k++)
268 {
269 while(n%k==0)
270 {
271 printf("%d",k);
272 if(n!=k) printf("*");
273 n=n/k;
274 }
275
276 }
277 printf("\n");
278 system("pause");
279 }
280
281
282 void JudgmentDay() //判断某年某月某日是今年的第几天
283 {
284 int year,month,day,sum=0;
285 printf("(判断某年某月某日是今年的第几天)\n请输入年 月 日:");
286 scanf("%d%d%d",&year,&month,&day);
287 switch(month)
288 {
289 case 1:sum=0;break;
290 case 2:sum=31;break;
291 case 3:sum=59;break;
292 case 4:sum=90;break;
293 case 5:sum=120;break;
294 case 6:sum=151;break;
295 case 7:sum=181;break;
296 case 8:sum=212;break;
297 case 9:sum=243;break;
298 case 10:sum=273;break;
299 case 11:sum=304;break;
300 case 12:sum=335;break;
301 }
302 sum+=day;
303 if(year%4==0&&year%100!=0||year%400==0) sum++;
304 printf("\n今天是今年的第%d天.\n\n",sum);
305 system("pause");
306 }
307
308
309 void Pattern() //打印棱形图案
310 {
311 int i,j,k,l;
312 char a[7][7]={' '};
313 for(i=0;i<7;i++)
314 {
315 j=3;
316 k=j-i;
317 l=j+i;
318 if(i>3)
319 {
320 k=i-3;
321 l=6-k;
322 }
323 for(j=k;j<=l;j++)
324 {
325 a[i][j]='*';
326 }
327 }
328 for(i=0;i<7;i++)
329 {
330 for(j=0;j<7;j++)
331 {
332 printf("%c",a[i][j]);
333 }
334 printf("\n");
335 }
336 system("pause");
337 }