|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2004-04-08, 07:20 PM | #1 |
註冊會員
|
C++程式語法"結構"問題
請問如何用C++程式語法"結構"的寫法把今年2月份的月曆跑出來呢?(包括星期?的格式)如下表:
我使用的是這套c++軟體->Dev C++是免費軟體有興趣的朋友可從http://www.bloodshed.net/devcpp.html 下載 最新的版本與相關的資源 |
送花文章: 0,
|
2004-04-08, 10:16 PM | #2 (permalink) |
註冊會員
|
http://www.hkln.net/
如果不用結構呢 其實應該這個程式也不太需要用到結構 因為資料型態都一樣 #include <iostream.h> #include <stdio.h> #include <stdlib.h> int m_days(int,int); // 回傳月份有幾天-28 int first_mon(int); // 每年的一月一號是星期幾 int first_day(int,int); // 回傳某個月份的一號是星期幾 main() { FILE *fptr ; fptr = fopen ("C:\\萬年歷.txt","w"); int y , m=1 ; // y 年份, m 月份 int i , j=1 ; // 計數器 int d , e ; // 一個月有days天 第一行個e格 printf("執行完請至 C:\\萬年曆.txt\n") ; cout << "請輸入年份 " ; cin >> y ; do{ i=1,j=1; fprintf(fptr,"\n\t\t\t\t\t%d年%d月\n",y,m) ; for(i=0;i<=48;i++) fprintf(fptr,"_"); fprintf(fptr,"\n"); e = first_day(y,m); // 每個月第一天 d = m_days(y,m)+28; // 每個月有幾天 fprintf(fptr,"\n日\t一\t二\t三\t四\t五\t六\n"); // 第一行空白 for(i=1;i<=e;i++) fprintf(fptr,"\t"); // 第一行數字 for(i=1;i<=7-e;i++) fprintf(fptr,"%d\t",i); fprintf(fptr,"\n"); // 剩餘數字 for(i;i<=d;i++) { if(j%7==0) { fprintf(fptr,"%d\t\n",i); j++ ; } else { fprintf(fptr,"%d\t",i); j++ ; } } fprintf(fptr,"\n"); m++; }while(m<=12); cout << endl ; system("pause"); } int first_mon(int y) //每年的一月一號是星期幾 { int i , j=2 ; for(i=1;i<=(y-1980);i++) { if(i%4==1) j+=2; else j++ ; } return j%7; } int m_days(int y,int m) //回傳月份有幾天-28 { switch(m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 3; break; case 2 : if (y%4==0) return 1 ; else return 0 ; break ; default : return 2; break ; } } int first_day(int y,int m) // 每月的一號是星期幾 { int i ,sum=0; for(i=1;i<=m-1;i++) sum+=m_days(y,i); sum=(sum+first_mon(y))%7; return sum ; } |
送花文章: 623,
|
2004-04-09, 01:45 AM | #3 (permalink) |
註冊會員
|
嘿呀~我也是覺得不一定要用到"結構"
可是我們老師就規定一定要用結構的形式我也被他打敗了! 可是版主~我們的問題是指要寫出2004年2月份的月曆就可以了! 不用寫出萬年曆~不過萬年曆我也寫了一個~可是好像有點不一樣~ #include <stdio.h> #include <stdlib.h> #define S 0 //基準年 : 西元 0 年 int N(int); int Y(int); //年月空格的計算 int M0(int,int); int M(int,int); //當月總天數 int main(int argc, char *argv[]) { // 輸入月份 int e=1 ; int y,m ; do{ do{ printf("輸入年份(西元): "); scanf("%d",&y); printf("輸入月份: ") ; scanf("%d",&m); }while (y<0||m>12||m<1); int n=0; if(y>0) n=N(y); //判斷是否潤年 int space=(Y(y)+M0(m,n))%7; //算空格數 printf("\n\tSun\tMon\tTue\tWed\tTue\tFri\tSat\n"); // 執行空格 int i,j,c=0 ; for(i=0;i<space;i++){printf("\t "); c++;} for(j=1;j<=M(m,n);j++){if(c==7) {printf("\n");c=0;} printf("\t%d",j);c++;} /*test*/ printf("\n\nspace=%d",space); printf("\nY= %d",Y(y)); printf("\nM0= %d",M0(m,n)) ; printf("\n\n"); printf("若不想再輸入一次按: 2\t");scanf("%d",&e); printf("\n\n"); }while(e==1); system ("pause"); return 0; } // 當年閏年 ? int N(int y) { int sum=0,a=1; if(y==0) a=0; int q1=y%4, q2=y%100, q3=y%400 ; if (q1==0) sum=1; if (q2==0) sum=0; if(q3==0) sum=1; return sum ; } // 年 空格計算 int Y(int y) { int sum,a=0; if(y==0) a=1; sum=(((y-1+a)/4-(y-1+a)/100+(y-1+a)/400)+ y*29)%7; return sum; } // 月 空格計算 int M0(int m,int n) { int sum, k[12]={0-n,3,3,6,8,11,13,16,19,21,24,26}; return sum=n+k[m-1]; } // 當月總天數 int M(int m,int n) { int F[12]={31,28+n,31,30,31,30,31,31,30,31,30,31}; return F[m-1]; } 我這個已經被打回票了! 因為一定得用"結構"的方式來寫2月份的月曆~ 不過還謝謝版主嚕~ |
送花文章: 0,
|