C語言課后習(xí)題練習(xí)(五)

1.編寫一函數(shù),實(shí)現(xiàn)兩個(gè)字符串的比較。即自己寫一個(gè)strcmp函數(shù),函數(shù)原型為strcmp(char *p1, char *p2)

int main() {
    char *month_name[13] = {"illegal month", "January","February","March","April","May","June","July","August","September","October","November","December"};
    int n;
    printf("input month:\n");
    scanf("%d",&n);
    if ((n <= 12) && (n >= 1))
        printf("It is %s.\n",*(month_name + n));
    else
        printf("It is wrong. \n");
    
    return 0;
}

運(yùn)行結(jié)果:
c1.png

2.用指向指針的方法對(duì)n個(gè)整數(shù)排序并輸出。要求將排序單獨(dú)寫成一個(gè)函數(shù)。n個(gè)整數(shù)在主函數(shù)中輸入,最后在主函數(shù)中輸出。

int main() {
    void sort(int **p, int n);
    int i, n, data[20], **p, *pstr[20];
    printf("input n:\n");
    scanf("%d",&n);
    for (i = 0; i < n; i++)
        pstr[i] = &data[i];       //將第i個(gè)整數(shù)的地址賦予指針數(shù)組pstr的第i個(gè)元素
    printf("input %d integer numbers :",n);
    for (i = 0; i < n; i++)
        scanf("%d",pstr[i]);
    p = pstr;
    sort(p, n);
    printf("Noew,the sequence is:\n");
    for (i = 0; i < n; i++)
        printf("%d",*pstr[i]);
    printf("\n");
    return 0;
}

void sort(int **p, int n) {
    int i, j, *temp;
    for (i = 0; i < n - 1; i++) {
        for (j = i + 1; j < n; j++) {
            if (**(p + 1) > **(p + j)) {       //比較后交換整數(shù)地址
                temp = *(p + i);
                *(p + i) = *(p + j);
                *(p + j) = temp;
            }
        }
    }
}

運(yùn)行結(jié)果:
c2.png

3.定義一個(gè)結(jié)構(gòu)體變量(包括年、月、日)。計(jì)算該日在本年中是第幾天,注意閏年問題

  • 解法一:
struct {
    int year;
    int month;
    int day;     //結(jié)構(gòu)體變量date中的成員對(duì)應(yīng)于年、月、日
}date;
int main() {
    int days = 0;     //days為天數(shù)
    printf("input year, month, day:");
    scanf("%d,%d,%d",&date.year,&date.month,&date.day);
    switch (date.month) {
        case 1:
            days = date.day;
            break;
        case 2:
            days = date.day + 31;
            break;
        case 3:
            days = date.day + 59;
            break;
        case 4:
            days = date.day + 90;
            break;
        case 5:
            days = date.day + 120;
            break;
        case 6:
            days = date.day + 151;
            break;
        case 7:
            days = date.day + 181;
            break;
        case 8:
            days = date.day + 212;
            break;
        case 9:
            days = date.day + 243;
            break;
        case 10:
            days = date.day + 273;
            break;
        case 12:
            days = date.day + 304;
            break;
        case 13:
            days = date.day + 334;
            break;
    }
    if (((date.year%4 == 0 && date.year%100 != 0) || date.year % 4 == 0) && date.month >= 3) {
        days+=1;
    }
    printf("%d/%d is the %dth day in %d.\n",date.month,date.day,days,date.year);
    return 0;
}

運(yùn)行結(jié)果:
c3.png
  • 解法二:
struct {
    int year;
    int month;
    int day;     //結(jié)構(gòu)體變量date中的成員對(duì)應(yīng)于年、月、日
}date;
int main() {
    int i, days;
    int day_tab[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    printf("input year, month,day:");
    scanf("%d,%d,%d",&date.year,&date.month,&date.day);
    days = 0;
    for (i = 1; i < date.month; i++)
        days = days + day_tab[i];
    days = days + date.day;
    if ((date.year % 4 == 0) && (date.year % 100 != 0 || date.year % 400 == 0) && date.month >= 3)
        days = days + 1;
    printf("%d%d is the %dth day in %d.\n",date.month,date.day,days,date.year);
    return 0;
}

運(yùn)行結(jié)果:
c3_2.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容