C 语言实训教程
----输入输出专项练习
能够熟练并正确定义、输入、输出并使用常用数据类型:整型、实型、字 符型
能够使用 scanf(),printf(),getchar(),putchar(),gets(),puts()进
行各种数据正确格式的输入输 出
用下面的 scanf 函数输入数据,使 a=3,b=7,x=8.5,y=71.82,c1=
ˊAˊ,c2=ˊaˊ,问在键盘上如何输入数据? #include<stdio.h>
int main()
{
int a,b; flaot x,y; char c1,c2;
scanf(“a=%db =%d”,&,&b); scanf(“%f%e”,&x&y); scanf(“%c%c”,&c1,&c2);
printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2); return 0;
}
运行时分别按以下方式输入数据,观察输出结果,分析原因。
① a=3,b=7,x=8.5,y=71.82,A,a↙
② a=3 b=7 x=8.5 y=71.82 A a↙
③ a=3 b=7 8.5 71.82 A a↙
④ a=3 b=7 8.5 71.82Aa↙
⑤ 3 7 8.5 71.82Aa↙
⑥ a=3 b=7↙ 8.5 71.82↙
A↙ a↙
⑦ a=3 b=7↙ 8.5 71.82↙
Aa↙
⑧ a=3 b=7↙
8.5 71.82Aa↙
字符输入 #include <stdio.h> main()
{
int a;
char b;
float c;
printf("Please input an integer:"); scanf("%d", &a);
printf("integer: %d\n", a); printf("Please input a character:"); scanf("%c", &b); printf("character: %c\n", b);
printf("Please input a float number:"); scanf("%f", &c);
printf("float: %f\n", c);
}
如果把 scanf("%c", &b);改为 scanf("%1s", &b);观察运行结果
验证格式输入
#include <stdio.h> void main()
{
int a, b;
printf("Please input a and b:"); scanf("%2d%*2d%2d", &a, &b); printf("a=%d, b=%d, a+b=%d\n",a,b,a+b);
}
输入 123456,验证上述实验结果 (2)输入 12345a
格式输入与输出
#include <stdio.h> main()
{
int a=-1;
printf ("%d,%o, %x",a,a, a); printf("%8o, %12x",a, a);
}
无符号数据的输出
#include<stdio.h> void main()
{
unsigned int a=65535;int b=-2; printf(“a=%d,%o,%x,%u\n”,a,a,a,a);
printf(“b=%d,%o,%x,%u\n”,b,b,b,b);
}
字符串的输出
#include<stdio.h> void main()
{
printf(“%3s,%7.2s,%.4s,%-5.3s\n”, “CHINA”, “CHINA”, “CHINA”, “CHINA”);
}
输出实数时的有效位数
#include <stdio.h> void main()
{ float x,y;
x=111111.111; y=222222.22;
prinft(“%f”,x+y);
}
输出双精度数时的有效位数
#include <stdio.h> void main()
{double x,y;
x=1111111111111.111111111; y=2222222222222.222222222;
printf(“%f”,x+y);
}
输出实数时指定小数位数
#include <stdio.h> void main()
{
float f=123.456;
printf(“%f%10f%10.2f%.2f%-10.2f\n”,f,f,f,f,f);
}
字符输出
#include <stdio.h> int main(void) { int c;
for ( ; ; ) {
c = getchar(); if (c == EOF) break;
if ((c >= ’a’) && (c <= ’z’)) c += ’A’ - ’a’;
putchar(c);
}
return 0;
}
对比下列五种代码,将 4-7、10 行代码替换如下,程序应该如何修改才能保持输出结果相同?
for (c=getchar(); c!=EOF; c=getchar()) putchar(c);
将 4-7、10 行代码替换如下,程序应该如何修改才能保持输出结果
相同?
while ((c=getchar())!=EOF) putchar(c);
将 4-7、10 行代码替换如下,程序应该如何修改才能保持输出结果相同?
c = getchar(); while (c!=EOF)
{ putchar(c); c = getchar(); }
(4)如果用 ASCII 码修改 if ((c >= ’a’) && (c <= ’z’)); c += ’A’ - ’a’;
这两句代码,应该如何修改?
(5) 利用 ctype 函数修改上面代码,验证程序结果
#include <stdio.h> #include <ctype.h> int main(void) { int c;
for ( ; ; ) {
c = getchar();
if (c == EOF) break; if (islower(c))
c = toupper(c); putchar(c);
}
return 0;
}
转义符输出,并解释为什么是这样的输出结果
#include <stdio.h> void main ( )
{
printf("a\nb\tc\bd\fef");
}
字符串输入输出,连续输入三个单词,每个单词以空格分隔
#include <stdio.h> void main ( )
{
char str1[5],str2[5],str3[5]; scanf(”%s%s%s”,str1,str2,str3); printf("%s %s %s", str1,str2,str3);
}
编写 printf 函数调用下列格式来显示 float 型变量 x:
指数表示形式: 最小为 8 的字段宽度内左对齐; 小数点后保留 1 位数字.
指数表示形式: 最小为 10 的字段宽度内右对齐; 小数点后保留 6 位数字
定点十进制表示形式: 最小为8 的字段宽度内左对齐; 小数点后保留3
位数字
定点十进制表示形式: 最小为 6 的字段宽度内右对齐; 小数点后无数字.
设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其它)作为分隔符进行数据的输入
编写一个程序, 接收用户录入的日期信息并且将其显示出来. 其中, 输入日期的形式为月/日/年(mm/dd/yy), 输出日期的形式为年月日 (yymmdd)
有 3 个字符串,要求找出其中最大者
编写一个程序, 对用户录入的产品信息进行格式化, 程序运行后需要有以下会话:
Enter item number: 583 Enter unit price: 13.5
Enter purchase date(mm/dd/yy): 10/24/95 Item Unit Price Purchase Date 583 $ 13.50 10/24/95
其中, 数字项和日期项左对齐, 单位价格右对齐, 美元数量最大取值为
9999.99
计算若干整数的值,要求输入有若干行,每行第一个整数 n,代表后面还有 n 个数据,如果 n=0 代表输入结束。
输出:要求对于每一行都要在相应的行输出和。