1.輸入月份,輸出該月天數
int m; printf("請輸入月份", &m); scanf("%d", &m); if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) { printf("%d月有31天", m); } if(m == 4 || m == 6 || m == 9 || m == 11) { printf("%d月有30天", m); } if(m == 2) { printf("%d月有28天", m); }2.輸入一數字n,輸出1+2+....+n之答案,若n<0提示輸入錯誤
int n, i, sum = 0; printf("請輸入n >"); scanf("%d", &n); if(n > 0) { for(i = 1;i <= n;i++) sum +=i; printf("%d\n", sum); } else { printf("數字有誤\n"); }3.承2,若n<0,提示輸入錯誤,並重新輸入直到n>0為止(利用for)
int n, i, sum = 0; for(;;) { printf("請輸入n >"); scanf("%d", &n); if(n < 0) { printf("數字有誤\n"); } else { break; } } for(i = 1;i <= n;i++) { sum +=i; } printf("%d\n", sum);4.同3,利用while改寫
int n, i, sum = 0; printf("請輸入n >"); scanf("%d", &n); if(n < 0) { printf("數字有誤\n"); } while(n < 0) { printf("請輸入n >"); scanf("%d", &n); if(n < 0) { printf("數字有誤\n"); } } for(i = 1;i <= n;i++) { sum = sum+i; } printf("%d\n", sum);解題 1.輸入一個數,找最大質因數
- 解法1
int n, max; scanf("%d", &n); int m; for(m = 1;m <= n;m++) { int i; for(i = 2;m%i != 0 && i <= m/2;i++); if(i <= m/2) continue; } if(n%m == 0) { max = m; } printf("%d 的最大質因數為 %d", n, max);
- 解法2
int n, max; scanf("%d", &n); int m; for(m = 1;m <= n;m++) { int i, flag = 0; // 用flag去標記m是不是質數,如果被整除,他就不是質數,標記為0 for(i = 2;i <= m/2;i++) { flag = 1; if(m%i == 0) { flag = 0; break; } } //若 flag被標記為1,表示m為質數,則驗證m是否為n的因數 if(flag == 1 && n%m == 0) { max = m; } } printf("%d 的最大質因數為 %d", n, max);
int n; scanf("%d", &n); int m = 2; while(n > 1) { if(n%m == 0) { n = n/m; printf("%d ", m); } else { m++; } }3.利用輾轉相除法處理GCD(HCF)最大公因數問題
int m, n, temporary; printf("請輸入第一個數字 >"); scanf("%d", &m); printf("請輸入第二個數字 >"); scanf("%d", &n); printf("GCD(%d, %d) = ", m, n); if(n > m) { temporary = m; m = n; n = temporary; } while(n > 0) { temporary = n; n = m%n; m = temporary; } printf("%d", m);4.Bonus-輸入一個包含年月份的日期,計算他是該年的第幾天(考慮閏年)
int year, month, day, totalDay = 0; printf("請輸入 西元年 月 日(以空白分隔) >"); scanf("%d %d %d", &year, &month, &day); /* 先判斷閏年 閏年定義:年份為4的倍數且不為100的倍數,或者為400的倍數。 */ int flag = 0; //閏年標記 0=不閏年, 1=閏年 if(year%4 == 0 && year%100 != 0) { flag = 1; } if(year%400 == 0) { flag = 1; } /* 檢查日期有沒有問題,我們設定條件 1.不考慮西元前 2.月份介於1~12 3.日期不能超該月天數 */ int error = 0; //如果三個參數有錯error被設為1 if(year < 0 || month > 12 || month < 1) { error = 1; } else { if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { if(day > 31) error = 1; } if(month == 4 || month == 6 || month == 9 || month == 11) { if(day > 30) error = 1; } if(month == 2 && flag == 0) { if(day > 28) error = 1; } if(month == 2 && flag == 1) { if(day > 29) error = 1; } } /* 1.先把month-1之前的天數算完 2.再把該月的日期加上 */ if(error == 0) { int i; for(i = 1;i < month;i++) { if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) { totalDay += 31; } if(i == 4 || i == 6 || i == 9 || i == 11) { totalDay += 30; } if(i == 2 && flag == 0) { totalDay += 28; } if(i == 2 && flag == 1) { totalDay += 29; } } totalDay += day; printf("%d年%d月%d日是這一年的第%d天\n", year, month, day, totalDay); } else { printf("輸入的日期不支援\n"); }
沒有留言:
張貼留言