程序不能正常运行。第1个 scanf()语句只读取用户输入的名,而用户输入的姓仍留在输入缓冲区中(缓冲区是用于储存输入的临时存储区)。下一条 scanf()语句在输入缓冲区查找重量时,从上次读入结束的地方开始读取。这样就把留在缓冲区的姓作为体重来读取,导致 scanf()读取失败。另一方面,如果在要求输入姓名时输入 Lasha144,那么程序会把144作为用户的体重(虽然用户是在程序提示输入体重之前输入了144)。
a. printf(“He sold the painting for $%2.2f.\n”, 2.345e2);
b. printf(%c%c%c\n", ‘H’, 105, ‘\41’);
c. #define Q “His Hamlet was funny without being vulgar.”
printf("%s\nhas %d characters.\n", Q, strlen(Q));
d. printf(“ls %2.2e the same as %2.2f?\n”, 1201.0, 1201.0);
a.He sold the painting for $234.50.
b.Hi!
c.His Hamlet was funny without being vulgar.
has 42 characters.
d.Is 1.20e+003 the same as 1201.00?
printf(""%s"\nhas %d characters.\n", Q, strlen(Q));
define B booboo
define X 10
main(int)
{
int age;
char name;
printf("Please enter your first name.");
scanf("%s", name);
printf("All right, %c, what's your age?\n", name);
scanf("%f", age);
xp = age + X;
printf("That's a %s! You must be at least %d.\n", B, xp);
rerun 0;
}
答:
#include //别忘了要包含合适的头文件
#define B "booboo" //添加#和双引号
#define X 10 //添加#
int main(void)
{
int age;
char name[20]; //把name声明为数组
int xp; //声明所有变量
printf("Please enter your first name.\n"); //添加\n,提高可读性
scanf("%s", name);
printf("All right, %s, what's your age?\n", name); //%s 用于打印字符串
scanf("%d", &age); //把%f改成%d,把age改成&age
xp = age + X;
printf("That's a %s! You must be at least %d.\n", B, xp);
return 0; //不是rerun
}
#define BOOK “War and Peace”
int main(void) {
float cost =12.99;
float percent = 80.0;
请构造一个使用BOOK,cost和percent的printf()语句,打印以下内容:
This copy of “War and Peace” sells for $12.99.
That is 80% of list.
printf("This copy of \"%s\" sells for $%0.2f.\n", Book, cost);
printf("This is %0.0f%% of list\n", percent);
a. 一个字段宽度与位数相同的十进制整数 %d
b. 一个形如8A、字段宽度为4的十六进制整数 %4x
c. 一个形如232.346、字段宽度为10的浮点数 %10.3f
d. 一个形如2.33e+002、字段宽度为12的浮点数 %12.2e
e. 一个字段宽度为30、左对齐的字符串 %-30s
a. 一个字段宽度为15的unsigned long整数 %15lu
b. 一个形如0x8a、字段宽度为4的十六进制整数 %4x
c. 一个形如2.33E+02、字段宽度为12、左对齐的浮点数 %-12.2E
d. 一个形如+232.346、字段宽度为10的浮点数 %+10.3f
e. 一个字符串的前8个字符,字段宽度为8字符 %8.8s
a. 一个字段宽度为6、最少有4位数字的十进制整数 %6.4d
b. 一个在参数列表中给定字段宽度的八进制整数 % * o
c. 一个字段宽度为2的字符 %2c
d. 一个形如+3.13、字段宽度等于数字中字符数的浮点数 %+0.2f
e. 一个字段宽度为7、左对齐字符串中的前5个字符 %-7.5s
a. 101
b. 22.32 8.34E-09
c. linguini
d. catch 22
e. catch 22(但是跳过catch)
a.
int a;
scanf("%d", &a)
b.
float a, b;
scanf("%f %f", &a, &b);
c.
char name[20];
scanf("%s", name)
d.
char zifu[20];
int value;
scanf("%s %d", zifu, &d);
e.
int value;
scanf("%*s %d", &value);
包括:空格、制表符和换行符。
C语言用空白分隔记号。
scanf()使用空格分隔连续的输入项。
%z中的z是修饰符,不是转换字符,所以要在修饰符后面加上一个它修饰的转换字符。可以使用%zd打印十进制数,或用不同的说明符打印不同进制的数,例如,%zx打印十六进制的数。
#define ( {
#define ) }
可以,但是预编译器无法区分哪些该换哪些不该换,所有的()都会被替换为{}
#include
int main(void)
{
char name[20];
char surname[20];
printf("输入名和姓:");
scanf("%s %s", name, surname);
printf("%s,%s",name,surname);
return 0;
}
a. 打印名字,包括双引号
b. 在宽度为20的字段右端打印名和姓,包括双引号
c. 在宽度为20的字段左端打印名和姓,包括双引号
d. 在比姓名宽度宽3的字段中打印名字。
#include
#include //包含strlen()函数的头文件
int main(void)
{
char name[20];
int nameLength;
printf("输入名和姓:");
scanf("%s",name);
nameLength = strlen(name);
printf("\"%s\"\n",name); //a. 打印名字,包括双引号
printf("\"%20s\"\n",name); //b. 在宽度为20的字段右端打印名和姓,包括双引号
printf("\"%-20s\"\n",name); //c. 在宽度为20的字段左端打印名和姓,包括双引号
printf("\"%*s\"\n",nameLength+3,name); //d. 在比姓名宽度宽3的字段中打印名字。
return 0;
}
a. The input is 21.3 or 2.1e+001.
b. The input is +21.290 or 2.129E+001.
#include
int main(void)
{
float count;
printf("输入一个浮点数:");
scanf("%f", &count);
printf("The input is %.1f or %.1e.\n", count, count);
printf("The input is %+.3f or %.3E.\n", count, count);
return 0;
}
#include
int main(void)
{
float height;
char name[20];
printf("输入身高(单位:英寸)和姓名:");
scanf("%f %s",&height,name);
printf("%s, you are %.3f feet tall\n",name,height);
float cmheight;
char cmname[20];
printf("输入身高(单位:厘米)和姓名:");
scanf("%f %s",&cmheight,cmname);
printf("%s, you are %.3f metre tall\n",cmname,cmheight/100);
return 0;
}
At 18.12 megabits per second, a file of 2.20 megabytes
downloads in 0.97 seconds.
#include
int main(void)
{
float speed, size, time;
printf("输入下载速度(Mb/s)和文件大小(MB):");
scanf("%f %f",&speed,&size);
time = size/(speed/8);
printf("At %.2f megabits per second, a file of %.2f megabytes\n",speed,size);
printf("downloads in %.2f seconds.\n",time);
return 0;
}
Melissa Honeybee
7 8
接下来,再打印相同的信息,但是字母个数与相应名和姓的开头对齐,如下所示:
Melissa Honeybee
7 8
#include
#include
int main(void){
char first_name[20], last_name[20];
int first_count, last_count;
printf("先输入名,后输入姓:\n");
scanf("%s %s",first_name,last_name);
first_count = strlen(first_name);
last_count = strlen(last_name);
printf("打印用户输入的名和姓:%s %s\n",first_name,last_name);
printf("分别打印名和姓的字母数:%d %d\n",first_count,last_count);
return 0;
}
#include
#include
int main(void)
{
double a = 1.0/3.0;
float b = 1.0/3.0;
printf("%.6f %.6f\n",a,b);
printf("%.12f %.12f\n",a,b);
printf("%.16f %.16f\n",a,b);
printf("FLT_DIG=%d DBL_DIG=%d",FLT_DIG,DBL_DIG); //float类型、double类型最少有效数字位数
return 0;
}
#include
#define distance_CONVERT 1.609
#define Gasoline_CONVERT 3.785
int main(void)
{
float distance, Gasoline_quantity;
printf("请输入旅行的里程(英里)和消耗的汽油量(加仑):");
scanf("%f %f",&distance,&Gasoline_quantity);
printf("显示消耗每加仑汽油行驶的英里数:%.1f\n",distance/Gasoline_quantity);
printf("把单位是英里/加仑的值转换为升/100公里:%.1f\n",(Gasoline_quantity*Gasoline_CONVERT)/(distance*distance_CONVERT)*100);
return 0;
}