第 3章 简单的 C程序设计
3.1 程序的基本结构
3.2 数据的输入 / 输出
第 3章 简单的 C 程序设计
3.1 程序的基本结构
? 循环结构
选择结构中还有多分支选择结构。
? 顺序结构
? 选择结构 A
B
A
直到条件为假
当条件为真
A
条件
真 假
A B
3.2 数据的输入 / 输出
C本身不提供输入输出语句,输入和输出操作是由
函数实现的。
1,putchar 函数 (字符输出函数 )
putchar 函数的作用是向终端输出 1 个字符。
putchar(c); /? 输出字符变量或整型变量 c 的值 ?/
使用标准 I / O 库函数时,必须在程序开头加上
#include“stdio.h” 命令。
例 3.1
#include,stdio.h”
main( )
{ char a,b;
a=?o?; b=?k?;
putchar(a); putchar(b); putchar(?\n?);
putchar(a); putchar(?\n?);
putchar(b); putchar(?\n?);
}
运行结果:
ok
o
k
2,printf 函数 (格式输出函数 )
1) printf 函数的一般格式
printf(格式控制, 输出项表 )
其中:“格式控制”为双引号括起来的“转换控制
字符串”。
“输出项表”为需要输出的一项或多项数据
(变量 /表达式 )。
例:若 a=3,b=4,则:
printf(“%d?? %d\n”,a,b);
printf(“a=%d,b=%d\n”,a,b);
输出结果,
3?? 4
a=3,b=4
2) 格式字符
%d 以十进制输出整数。
%o 以八进制输出整数。
%x 以十六进制输出整数。
%u 以十进制输出 unsigned数据。
%c 用来输出 1 个字符。
%s 用来输出一个字符串。
%ms 按 m宽度输出字符串。若串长 >m,则照字符串原样输出;
若串长 <m,则左边补空格。
%m.ns 靠右输出字符串左边的 n个字符,左补空格。 (n ? m)
%-m.ns 靠左输出字符串左边的 n个字符,右补空格。 (n ? m)
%f 以小数形式输出实数。
%m.nf 输出宽度为 m,其中小数为 n位。若数值长度 <m,则
靠右输出,左边补空格。
%-m.nf 同 ?类似,,-”表示靠左输出,右边补空格。
%e 以指数形式输出实数。
%m.ne和 %-m.ne 此处 m,n,-同 f 格式。
%g 根据数值大小自动选择 f 格式或 e 格式中占用宽度小
的一种输出实数,且不输出无意义的零。
%-ms 类似 %ms,若串长 <m,则字符串向左靠,右边补空格。
例 3.2
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);
}
输出结果,
a= –1,177777,f f f f,65535
b= –2,177776,f f f e,65534
1000000000000001–1的原码,
–1的反码,
–1的补码, 655351111111111111111
0111111111111111
例 3.3
main( )
{char c=?a?;
int i=97;
printf(“%c,%d\n”,c,c);
printf(“%c,%d\n”,i,i );
printf(“%3c”,c);
}
输出结果为,
a,97
a,97
?? a
整数按字符输出
字符按十进制整数输出
右对齐,左边以空格补齐
例 3.4
main( )
{printf(“%s,%3s\n”,“CHINA”,“CHINA”);
printf(“%7.2s,%.4s,%–5.3s\n”,
“CHINA”,“CHINA”,“CHINA”);
}
输出结果为:
CHINA,CHINA
????? CH,CHIN,CHI??
宽度为 7,输出前 2 个字
符并右对齐,左边补空格未指定宽度,输
出前 4个字符。
宽度为 5,输出前
3个字符,左对齐
宽度不够,按字符
串实际宽度输出。
例 3.5 若 f =123.456,下列语句:
输出结果为:
printf(“%e?? %10e?? %10.2e?? %.2e?? %–10.2e”,f,f,f,f,f );
1.234560e+002?? 1.234560e+002?? ? 1.23e+002?? 1.23e+002?? 1.23e+002?
13列 13列 10列 9列 10列
3,getchar 函数 (字符输入函数 )
例 3.6
#include“stdio.h”
main( )
{char c;
c=getchar( );
putchar(c);
}
此两句可改为:
putchar(getchar( ) );
或 printf(“%c”,getchar());
4,scanf 函数 (格式输入函数 )
scanf函数可以用来输入任何类型的多个数据。
1) scanf 函数的一般形式
scanf(格式控制,地址表列 )
其中:“格式控制”的含义同 printf函数。“地址表列”是
由若干个变量的地址或字符串的首地址组成的表列。
getchar函数从终端输入 1 个字符。
例 3.7
main( )
{ int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
printf(“%d,%d,%d\n”,a,b,c);
}
运行结果:
3? 4? 5 ?
3,4,5
注,
?“&”为地址运算符,不得漏写。
?用,%d%d%d”输入数据时,数据项之间不能用逗号
而只能用 空格, 回车 或 Tab键 作分隔符。
表示按回车键
若将此句写成:
printf(“%d%d%d\n”,a,b,c);
则输出为:
345
变量名前 必须加 &
变量名前 不得加 &
2) 格式说明
scanf 函数的格式说明类似于 printf 函数。
? 在标准 C中用 %d或 %o,%x格式输入 unsigned型数据。
? 可以指定输入数据所占列数,系统自动按其截取所需
数据。
如,scanf(“%3d%3d”,&a,&b);
输入 123456时,则 a的值为 123,b的值为 456 。
scanf(“%3c”,&ch); /* ch为 char型 */
输入 abc时,则 ch的值为 ‘ a? 。
? 可在 %后附加,?”跳过相应的数据。如:
scanf(“%2d %?3d %2d”,&a,&b);
输入 12? 345? 67时,a的值为 12,b的值为 67。
? 输入数据时不能规定精度。
? scanf 函数执行中应注意的问题
?,格式控制”后面应当是变量地址,而不应是变量名。
? 如果在“格式控制”字符串中有除格式说明以外的其它
字符,则在输入数据时应输入与这些字符相同的字符 如:
scanf(“%d%d”,&a,&b); /* 1? 2? */
scanf(“%d? %d”,&a,&b); /* 1?? 2?或 1? 2? */
scanf(“%d,%d”,&a,&b); /* 1,2 ? */
scanf(“%d:%d:%d”,&m,&n,&p); /* 1:2:3 ? */
scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
/* a=1,b=2,c=3? */
? 在用,%c”格式输入字符时,空格和“转义字符”都为有
效字符。 如,scanf(“%c%c%c”,&c1,&c2,&c3);
若输入 a? b? c时,则 c1的值为‘ a?,c2的值为‘ ? ’,c3
值为‘ b?。
例 3.8 从键盘输入一个大写字母,要求改用小写字母输出
#include,stdio.h”
main( )
{ char c1,c2;
c1=getchar( );
printf(“%c,%d\n”,c1,c1);
c2=c1+32;
printf(“%c,%d\n”,c2,c2);
}
运行情况如下:
A ?
A,65
a,97
从键盘输入一个字符 A赋给字符变量 c1
#include,math.h”
main( )
{ float a,b,c,d,x1,x2,p,q;
scanf(“a=%f,b=%f,c=%f”,&a,&b,&c);
d=b?b-4?a?c;
p=-b/(2?a); q=sqrt(d)/(2?a);
x1=p+q; x2=p-q;
printf(“x1=%5.2f \nx2=%5.2f\n”,x1,x2);
}
例 3.9 求方程的根 。 a,b,c的值由键盘输入 。 设 d > 0。
若此句改成,
scanf(“%f%f%f”,&a,&b,&c);
则输入格式为,
1? 3? 2 ?
运行情况:
a=1,b=3,c=2 ?
注意按格式输入数据
x1=-1.00
x2=-2.00
课外练习:习题册中习题二全部