作者: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

posted on 2024-10-26 22:12  GaPb  阅读(36)  评论(0)    收藏  举报