C語言的有趣之處就是可以實現更多的想法
通過C語言實現萬年曆的時候,從沒有想過還可以這樣做好像挺花哨的,看着網絡上那些大牛實現的飛機大戰,感覺自己和他們差距好像挺遠的,而對於萬年曆的話也因爲自己學習的不夠它看起來不夠完美,但我覺得這好像也挺不錯的哈哈,畢竟還是得自信!
萬年曆
也是一次在CSDN上看到別人使用C語言在編寫萬年曆,就想着爲什麼自己不嘗試一番就有了這個萬年曆的生成,從對於年月日輸出的規劃,以及如何能夠定義定義自己輸入的是每一年的那一個月,星期幾,還專門瞭解了一些內容,之後順利的完成了這份萬年曆,希望記錄下自己的每一個腳印吧,並且幫助到那些和我一起學習的朋友,也可以一起交流。
**主函數**
int main(){
int year = 0;
int month = 0;
printf("請輸入您要查看的萬年曆年 月");
scanf("%d%d", &year, &month);//輸入想要查看的年和月
LayOut(year, month);//打印出年月日萬年曆
system("pause");
return 0;
}
每次想要完成一個項目的時候,我總是會先在紙上畫出大概的輪廓圖,之後根據輪廓圖來進行填充,將具體的內容補充完善;而如果沒有紙的時候我也是儘可能地在大腦之中構思一個結構的大概,將所需要考慮的細節慢慢搭建起來,這可能也是很多人說道德自上向下的一種編程思維吧,所以我個人覺得學習C語言,更多的就是鍛鍊自己的編程思維。
**閏年的判斷**
int Leap(int year){//判斷是否是閏年
if (year % 400 == 0){//能被400整除,則判斷爲閏年返回1
return 1;
}
if (year % 4 == 0 && year % 100 != 0){//能被4整除,而不能被100整除的則爲閏年返回1
return 1;
}
return 0;
}
**計算在所需要輸出年份之前的總天數有多少天,以1900年1月1日爲星期一**
int DayCount(int year){//計算在所需要輸出年份之前的總天數
int count = 0;
count = 365 * (year - 1900);//計算從1900年到所輸入的年份之前總天數
for (int i=1900; i < year; i++){
if (Leap(i) == 1){//判斷是否爲閏年,一次閏年count總天數+1;
count++;
}
}
return count;
}
void LayOut(int year, int month){//計算所需要輸出的月份對應的星期,並且進行順序的打印
int i;
int n;
int M[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int daysum = 0;
daysum = DayCount(year);
if (month <= 2){//若是2月,只需要增加1月的日子
daysum += 31;
}
if (month > 2){//如果大於二月的話,先進行求閏年,若是閏年則加1;
daysum += Leap(year);
for (i = 0; i < month - 1; i++){
daysum += M[i];
}
}
n = (daysum % 7) + 1;//計算出星期幾
printf("日 一 二 三 四 五 六 \n");
int count = 0;
for (i = 0; i < n; i++){
printf(" ");
count+=1;
}
for (i = 1; i < M[month]; i++){
printf("%-2d ", i);
count += 1;
if (count %7==0){
printf("\n");
}
}
}
當初老以爲萬年曆應該是個很困難的問題,沒想到自己編寫出來的時候挺順利,除過對於星期幾的問題不知道應該如何判斷的時候查閱了資料外,其他都很順利的進行了下去,完成的時候還挺開心的。
萬年曆源碼鏈接
邏輯數字遊戲
對於這個遊戲也是無意中突然想到的,記得好像是以前看過的一個電影還是節目之中所出現的,讓猜一個物品的價格,所以就想到了這麼一個遊戲來進行玩耍,編程路上也是需要快樂的不是嗎?
**頭文件+主函數**
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int main(){
int i, j;
int arr[4];//定義四個數的數組
slashCard(arr);//採用時間戳隨機生成四個數字
int ans[4];//定義自己輸入的四個數的數組
for (i = 1; i <= 8; i++){//回答次數
printf("第%d次輸入:\n",i);
for (j = 0; j < 4; j++)
{
scanf("%d", &ans[j]);//輸入自己猜的四個數
}
if (judgeAns(ans, arr))//判斷輸入的四個數和需要猜測的四個數的比較
{
break;
}
}
if (i == 9){
printf("您的機會已用盡!\n");
printf("正確答案爲:\n");
printArray(arr, 4);
}
else{
printf("恭喜 您的挑戰成功!");
}
system("pause");
return 0;
}
**生成隨機的四個不重複的數**
void slashCard(int arr[]){
srand((unsigned int)time(NULL));//定義時間戳
int s;
int str[10] = { 0,1,2,3,4,5,6,7,8,9 };
int i;
for (i = 0; i < 4; i++){
s = rand() % 10;//取0-9的數
while (str[s] == -1){如果這個數字已經取過,則取下一位
s++;
if (s == 10){//如果取到第九位則加一位後等價於從0開始
s = 0;
}
}
arr[i] = str[s];//將取出來的值放入數組之中
str[s] = -1;//將所取走的值置換爲-1
}
}
**打印函數**
void printArray(int arr[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
putchar('\n');
}
**判斷函數**
int judgeAns(int ans[], int arr[]){
int i, j;
int countA=0;//代表存在且數值和數都對
int countB=0;//代表存在這個數
for (i = 1; i <= 4; i++){
for (j = 1; j <= 4;j++){
if (ans[i] == arr[j]){
countB++;
break;
}
}
}
for (i = 0; i < 4; i++){
if (ans[i] == arr[i]){
countA++;
}
}
countB = countB - countA;//存在且位數對得話,則B減去A的可能
printf("%dA%dB\n", countA, countB);
if (countA == 4)
{
return 1;
}
return 0;
}
邏輯數字遊戲源碼
這就是整體的代碼,對於源代碼的話,也是會附在後面,也希望能夠讓更多的朋友學到這個東西。