1. 程式人生 > 其它 >牛客網C語言程式設計初學者入門訓練130題詳解

牛客網C語言程式設計初學者入門訓練130題詳解

技術標籤:c++演算法oj系統面試

2021/1/2

1、實踐出真知

題目描述

於老師經常告訴我們“學習程式設計最好的辦法就是上機實踐,因為你要對計算機下指令,想讓計算機幫你幹活,就得多和計算機‘交流’,實踐才能出真知。”

輸入描述:

輸出描述:

Practice makes perfect!

解答

#include <stdio.h>
int main()
{
    printf("Practice makes perfect!");
    return 0;
}

2、我是大V

題目描述

每個人都想成為大V ,但要一點一點積累才行,先從小v做起。要求輸出由小寫字母v組成的大V。

輸入描述:

輸出描述

v   v v v  v

備註

換行使用轉義字元‘\n’

解答

#include <stdio.h>
int main()
{
    printf("v   v\n");
    printf(" v v\n");
    printf("  v\n");
    return 0;
}

3、有容乃大

題目描述

確定不同整型資料型別在記憶體中佔多大(位元組),輸出不同整型資料型別在記憶體中佔多大(位元組)。

輸入描述:

輸出描述:

不同整型資料型別在記憶體中佔多大(位元組),具體格式詳見輸出樣例,輸出樣例中的?為不同整型資料型別在記憶體中佔的位元組數。輸出樣例如下:
The size of short is ? bytes.
The size of int is ? bytes.
The size of long is ? bytes.
The size of long long is ? bytes.

解答

#include <stdio.h>
int main()
{
    printf("The size of short is %lld bytes.\n", sizeof(short));
    printf("The size of int is %lld bytes.\n", sizeof(int));
    printf("The size of long is %lld bytes.\n", sizeof(long));
    printf("The size of long long is %lld bytes.\n"
, sizeof(long long)); return 0; }

C6328:大小不匹配:已將"unsigned _int64"作為_Param_(2)傳遞,但需要使用"int"來呼叫“printf".

原始碼

#include <stdio.h>
int main()
{
    printf("The size of short is %d bytes.\n", sizeof(short));
    printf("The size of int is %d bytes.\n", sizeof(int));
    printf("The size of long is %d bytes.\n", sizeof(long));
    printf("The size of long long is %d bytes.\n", sizeof(long long));
    return 0;
}

解析

  • 雖然提示上面的錯誤,但能輸出結果
  • 提示已經很明確,說你將一個64位 (8bytes)的無符號整型作為printf的第二個引數傳入;
  • 查資料佔位符%d在格式化輸入輸出中代表int(4bytes),%ld代表long int(>=4bytes), %lld代表long long int (8bytes);
  • 問題出在sizeof上,它返回的是一個64位 (8bytes)的無符號整型,所以佔位符應該是%lld
  • 補充:sizeof不是函式,而是單目運算子,C/C++語言編譯器在預編譯階段的時候就已經處理完了sizeof的問題,也就是說sizeof類似於巨集定義,
    sizeof 一般形式為:sizeof(object),也可以sizeof var_char,不過大部分programer習慣用sizeof(),其運算子的含義是:求出物件在計算機記憶體中所佔用的位元組數。

4、小飛機

題目描述

KiKi學會了printf在螢幕輸出資訊,他想輸出一架小飛機。請幫他編寫程式輸出這架小飛機。

輸入描述:

輸出描述:

img

解答

#include <stdio.h>
int main()
{
    printf("     **\n");
    printf("     **\n");
    printf("************\n");
    printf("************\n");
    printf("    *  *\n");
    printf("    *  *");
    return 0;
}

5、反向輸出四位數

題目描述

將一個四位數,反向輸出。

輸入描述:

一行,輸入一個整數n(1000 <= n <= 9999)。

輸出描述:

針對每組輸入,反向輸出對應四位數。

輸入

1234

輸出

4321

解答

//按照int型別輸出
#include <stdio.h>
int main()
{
    int n = 0;
    int result = 0;
    //輸入
    scanf("%d",&n);
    //輸出
    //個位變千位
    result += n % 10 * 1000;
    //將小數點左移一位
    n /= 10;
    //十位變百位
    result += n % 10 * 100;
        //將小數點左移一位
    n /= 10;
    //百位變十位
    result += n % 10 * 10;
    n /= 10;
    //千位變一位
    result += n;
    printf("%04d",result);
    return 0;
}

//按照str型別輸出
#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    //當整除後結果為0表示已運算完最高位,跳出迴圈
    while(n != 0){
        //依次列印最低位
        printf("%d",n % 10);
        //抹掉最後一位
    	n /= 10;
    }
    return 0;
}

輸出8進位制,10進位制,16進位制輸出以及高位補0

int PrintVal = 9;
/*按整型輸出,預設右對齊*/
printf("%d\n",PrintVal);
/*按整型輸出,補齊4位的寬度,補齊位為空格,預設右對齊*/
printf("%4d\n",PrintVal);
/*按整形輸出,補齊4位的寬度,補齊位為0,預設右對齊*/
printf("%04d\n",PrintVal);

/*按16進位制輸出,預設右對齊*/   
printf("%x\n",PrintVal);
/*按16進位制輸出,補齊4位的寬度,補齊位為空格,預設右對齊*/
printf("%4x\n",PrintVal);
/*按照16進位制輸出,補齊4位的寬度,補齊位為0,預設右對齊*/
printf("%04x\n",PrintVal);

/*按8進位制輸出,預設右對齊*/
printf("%o\n",PrintVal);
/*按8進位制輸出,補齊4位的寬度,補齊位為空格,預設右對齊*/
printf("%4o\n",PrintVal);
/*按照8進位制輸出,補齊4位的寬度,補齊位為0,預設右對齊*/
printf("%04o\n",PrintVal);

6、大小寫轉換

題目描述

實現字母的大小寫轉換。多組輸入輸出。

輸入描述:

多組輸入,每一行輸入大寫字母。

輸出描述:

針對每組輸入輸出對應的小寫字母。

輸入

A
B

輸出

a
b

解答

#include <stdio.h>
int main()
{
    int ch = 0;
    while((ch = getchar()) != EOF){
        printf("%c\n",ch+32);
        getchar();//輸入一個字串回車,鍵盤緩衝區存在兩個字元,一個是輸入的,另一個是回車的\n,當下次迴圈讀取的時候,會讀取\n所以,要吸收掉才行
    }
    return 0;
}