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

题目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);
}

改进
#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;
}

浙公网安备 33010602011771号