作業二

GaPb發表於2024-10-26

作者:tANGjIAqIAN

題目1

答案:D
原因:輸入的實際上是 123 45 678,而scanf 函式會按照以下步驟讀取資料:

1.%3d 格式說明符會讀取前三個數字 123 並將其賦值給 int x。由於 %3d 限制了最多讀取三個數字,scanf會在讀取三個數字後停止對x的賦值。

2.讀取完 123 後,scanf 繼續讀取下一個格式說明符 %f 指定的輸入。%f 格式說明符會讀取接下來的兩個數字 45 作為浮點數 float y 的整數部分,但由於後面緊跟的是空格而不是小數點或小數部分,scanf 會認為整數部分是 45,而小數部分是 0。
因此,x 的值是 123,y 的值是 45.000000。

題目2

1.當執行到 c1 = getchar(); 時,它會讀取第一個字元 1 並將其儲存在 c1 中。
2.接下來執行 scanf("%2d", &a1);,它會讀取接下來的兩個兩個字元作為整數,即 '2a'。但是,由於 'a' 不是一個數字,scanf 函式會停止讀取,並將已經讀取到的有效數字 '2' 轉換為整數並賦值給 a1 變數。所以 a1 的值是 2。
3.然後執行 c2 = getchar();,此時,輸入流中的下一個字元是 'a',因此 getchar() 會讀取 'a' 並將其賦值給 c2 變數。
4.然後執行 scanf("%3d", &a2);,它會讀取接下來的三個數字 3、4 和 5 並將其儲存在 a2 中
5.最後執行printf("%d, %d, %c, %c\n", a1, a2, c1, c2);這行程式碼列印出 a1, a2, c1, 和 c2 的值
因此,正確的答案是 (A) 2, 345, 1, a

題目3

17,21,11

題目4

*3.140000, 3.142*

題目5

#include<stdio.h>
int main()
{
	char uppercase;
    // 提示使用者輸入一個大寫字母
    printf("請輸入一個大寫字母: ");
    // 讀取使用者輸入的一個字元
    scanf("%c", &uppercase); 
    char lowercase = uppercase + 32;
    // 輸出轉換後的小寫字母
    printf("對應的小寫字母是: %c\n", lowercase);
    return 0;
}

image

題目6

問題:直接跳過了第二個scanf

#include <stdio.h>
main()
{
    int     a;
    char    b;
    float   c;

    printf("Please input an integer:\n");
    scanf("%d", &a);

    printf("integer:%d\n", a);

    printf("Please input a character:\n");
    scanf("%c", &b);

    printf("character:%c\n", b);

    printf("Please input a float number:\n");
    scanf("%f", &c);

    printf("float:%f\n", c);
}

image

改進

#include <stdio.h>

int main() {
    int a;
    char b;
    float c;

    printf("Please input an integer:\n");
    scanf("%d", &a);

    printf("integer:%d\n", a);

    // 清除輸入緩衝區中的換行符
    getchar();

    printf("Please input a character:\n");
    scanf("%c", &b);

    printf("character:%c\n", b);

    printf("Please input a float number:\n");
    scanf("%f", &c);

    printf("float:%f\n", c);

    return 0;
}

image

相關文章