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");
}