第四章顺序结构程序设计源程序文件 1
预处理命令 全局变量声明函数首部局部变量声明 执行部分函数体函数 1 函数 n
源程序文件 2 源程序文件 3
C 程序

4.1 C语言表达式语句
( 1) 表达式语句表达式语句由一个表达式加一个分号构成,其一般形式为:
表达式 ;
在 C语言中用的最多的是由赋值表达式加一个分号构成的赋值表达式语句
( 2) 函数调用语句函数调用语句由一次函数调用加一个分号构成,其一般形式为:
函数名(实参表) ;
C语言语句可以分为五大类:
例如,i=i+1; a=3.5; i++;
例如,printf( "THIS IS A EXAMPLE");
( 3) 控制语句控制语句是用来完成一定的控制功能的。 C语言有九种控制语句,它们是:
(1) if ( ) ~~ else ~~ (条件语句)
(2) for ( ) ~~ (循环语句)
(3) while ( ) ~~ (循环语句)
(4) do ~~ while ( ) (循环语句)
(5) continue (结束本次循环语句)
(6) break (终止执行 switch语句)
(7) switch (多分支选择语句)
(8) goto (转向语句)
(9) return (从函数返回语句)
( 4 ) 复合语句复合语句是将若干条 C语句用花括号 "{"和 "}"括起来其一般形式为,{ 语句 1;
语句 2;
......
语句 n;
}
( 5 ) 空语句只有一个分号的语句称为空语句,其一般形式为:;
赋值语句赋值语句由赋值表达式加上分号构成。其格式为:
变量 =表达式 ;
如,x=a+b;
a+b=y;
y=13;
x+13=y
1,"="为赋值运算符,不是等号
2、注意区分赋值语句和赋值表达式
int x=5,y=3,z=1;
int x=5;y=3;z=1;
对错数据输入输出的概念及在 C中的实现输入输出的主体:计算机输入输出通过函数实现
putchar()
getchar()
printf()
scanf()
使用 C的库函数时要用预编译命令 "#include"将有关头文件包括到你的源文件中,如:
# include <stdio.h> 或 # include "math.h"
4.2 基本的标准输入与输出函数一、字符输入函数 getchar( )
getchar( )函数的作用是把一个字符从标准的输入设备上输入其一般调用形式为,getchar( )
该函数没有参数,例如,ch=getchar();
printf("%c",ch);
getchar()是标准函数,在,stdio? h‖函数库中定义,故如要在程序中调用该函数,必须在程序开始处加上如下命令行:
#include "stdio?h"
二、字符输出函数 putchar()
putchar()的作用是把一个字符从标准输出设备上输出。
其一般形式为,putchar( ch);
其中 ch为字符型或整型变量、字符型常量注意
1? putchar()是标准函数,在,stdio? h‖函数库中定义,故如要在程序中调用该函数,必须在程序开始处加上如下命令行,#include "stdio?h"
2? putchar() 一次只能输出一个字符注意注意练习,以下正确的函数调用为 _______
A) getchar( ); B) putchar('\108');
C)putchar('as'); D) PUTCHAR('\'')
A
#include "stdio.h"
main( )
{ char c;
c=65;
putchar(c);
putchar(66);
putchar('C');
putchar('\n');
putchar('\x62');
putchar('\363')
}
标准函数说明例 4.2:
4.2.2 格式输入与输出函数一,printf()函数 ——格式输出函数
printf()的作用就是按照指定格式向终端设备输出数据其一般调用形式为,printf(格式控制,输出项表);
格式控制是以双引号括起来的字符串,它规定了输出项输出的格式,printf(―%d‖,a);
输出项表由一个或多个输出项组成,当有多个输出项时,输出项之间用“,”分隔。每一个输出项可以是变量、常量或表达式。
printf(―%f %c‖,2.5*x,ch);
格式控制 通常包括格式格式说明和普通字符两部分格式说明:格式说明由 %及格式字符组成,如 %d,%f
普通字符:普通字符就是要原样输出的字符例如,printf("num1=%d,num2=%d\n",num1,num2);
普通字符原样照印格式说明输出项表注意
1? 格式说明的个数、类型要与输出项表中的输出项的个数、类型相匹配
2? 格式说明按从左至右的顺序与输出项表中的输出项配对
输出参数可以由一个以上的输出项组成
printf( ―… %d… %x… %f…‖,a,b,c );
整型 整型 实型
printf()亦可以没有输出项,利用它可输出提示信息。如,printf(―please input data!\n‖);
要求:输出格式中的格式符与输出项的个数必须相同,它们按各自的先后顺序一一对应,且符合类型匹配的要求。
格式字符 ——不同类型的数据用不同的格式字符整型数据的输出
%d——以十进制形式输出
%u——以十进制形式输出无符号整数
%o——以八进制形式输出
%x——以十六进制形式输出例如,int a=12 ; unsigned int b=12;
printf( " %d,%o,%x,%u",a,a,a,b);
例如,int a=-1;
printf("%d,%o",a,a);
输出结果为,12,14,c,12
输出结果为,-1,177777
字符型数据和字符串数据的输出
c——输出单个字符
s——输出一个 字符串例如,char c='a';
printf("%c,%s",c,"CHINA");
输出结果为,a,CHINA
整型数据只要其值在 0~255范围内,可以用字符形式输出;
字符数据也可以用整型格式输出。
实型数据的输出
%f——以小数形式输出
%e——以指数形式输出
%g——根据数值的大小,自动选择以 f或 e格式输出,其原则是选择输出时占宽度较小的一种,且不输出无意义的零例如,float f=123.123;
printf("%f,%e,%g",f,f,f);
输出结果为,123.123000,1.23123e+02,123.123
注意
1? %f使整数部分如数输出,小数占 6位
%e按标准化指数形式输出,即小数点前有且只有一位非零数字,小数点后 5位小数,指数部分占 4位(如 e+02),其中 "e"占 1位,指数符号占 1位,指数占 2位
2? 单精度实数的有效位为 7位,双精度实数则为 16位附加格式说明符 用途:用来控制 输出项的宽度、小数位数、精度、对齐方式。
附加格式说明符的 位置,在 %与格式字符间。
控制字段宽度和小数位数:
m,指定输出最小宽度为 m。
若数据不足 m位,则左端补空格;
若大于 m位,则按实际位数输出。
如,printf(―%4d‖,21);printf(―%3d‖,2134);
输出,21 2134
0m:指定输出的最小宽度为 m,
若数据不足 m位,则左端补 0。
如,printf(―%03d‖,21);
输出,021
m.n,m 为输出的总宽度;
n 表示输出的小数位数;
对字符串表示截取的字符个数。
如,printf(―%7.2d‖,3.1415926);
输出,3.14
如,printf(―%5.3s‖,‖COMPUTER‖);
输出,COM
控制对齐方式:
在 %与格式字符间加入符号 "–",则可以控制输出数据为 "左对齐 "方式,否则为 "右对齐 "方式例如,int i=15;
printf("%–8d\n",i);
输出结果为,15
而 printf("%8d\n",i);
输出结果为,15
控制输出精度:附加格式字符 "l"
l:输出长型数据
%ld——输出长整型
%lf——输出双精度型
long型数据不能用 %d格式输出,只能用 %ld格式输出输出结果为

a,97
A,65,65,41,101
347.250000,3.47250e+02,347.25
综合练习:阅读下列程序,你能写出程序的执行结果吗?
main( )
{ char c='a';
int i=65;
float x=347.25;
printf("%c,%d\n",c,c);
printf("%c,%d,%u,%x,%o\n",i,i,i,i,i);
printf("%f,%e,%g\n",x,x,x);
}
输出结果为:
12345,12345
a,a
123.46,123.46
1.2e+02,1.2e+02
CH,CH
main( )
{int a=12345;
char c='a';
float f=123.456;
printf("%-6d,%6d\n",a,a);
printf("%-3c,%3c\n",c,c);
printf("%-10.2f,%10.2f\n",f,f);
printf("%-10.2e,%10.2e\n",f,f);
printf("%-7.2s,%7.2s\n","CHINA","CHINA");
}
输出结果为,135790,135790,135790
main( )
{ long a=135790;
printf("%ld,%8ld,%-8ld\n",a,a,a);
}
使用 printf( )小结
输出项表中的每个输出项必须有一个与之对应的格式说明,且每个输出项与格式字符必须按照从左到右的顺序在类型上一一匹配
当格式字符少于输出项时,多余的输出项不予输出,当格式字符多于输出项时,将输出不定值,如:
– printf("c=%c f=%f",c,f,g); /*不输出 g*/
– printf("x=%d s=%f",x); /*第二个数输出值不定 */
格式字符一律用小写字母,如 %d不能写成 %D
scanf( )函数的作用是把从终端上输入的数据传送给对应的变量其调用的一般形式为,scanf(格式控制,输入项地址表 );
格式控制的含义与 printf( )函数相同,用来规定输入项的输入格式输入项地址表由若干个用逗号分隔的 地址项 组成例如,scanf("%d%d%d",&a,&b,&c);
含义是,从键盘输入 3个整数,计算机将输入的 3个整数分别存入变量 a,b,c的内存中,也就是输入 3个整数分别给变量 a,b,c
&——取地址运算符
&a——指变量 a所在的内存地址输入数据时,以空格,tab键或回车键分隔二、格式输入函数 scanf( )
1,格式说明格式字符 说 明字母 l
输入长整型或双精度型数,可用 % ld,% lo,% lx,
%lf,%le
字母 h 输入短整型数,可用 % hd,% ho,% hx
m ( 代表一正整数 )
指定输入数据的宽度
* 表示本输入项在读入后不给相应数据式均可 )
输入格式字符附加格式字符格式字符 说明
d 输入十进制整数
o 输入八进制整数
x 输入十六进制整数
f 输入实数 ( 指数形式和小数形式均可 )
e 与 f 格式作用相同,可以互换
c 输入单个字符
s 输入字符串
双精度实数必须用 %lf 格式输入
可以指定输入数据所占列数,系统自动按它截取所需数据如,scanf("%3d%3d",&a,&b);
当输入 123456 时,系统会自动将 123给 a,456给 b
在 scanf( )中不能规定输入数据的精度如 scanf("%7.2f",&a); 是不符合 C语言语法的
"*"附加符用来表示跳过相应的数据例如,scanf("%d%*d%d",&a,&b);
当从键盘输入,12 345 67
则 a=12 b=67
注意如果在 "格式控制 "字符串中出现普通字符,则在执行中输入数据时应照原样输入。
例如,scanf("%d,%d",&a,&b);
输入时应输入如下形式,3,4
若输入 3 4 则是错误的又如,scanf("a=%d,b=%d,c=%d",&a,&b,&c);
输入形式应为如下,a=12,b=24,c=36
在用 "%c"格式输入字符时,空格字符和转义字符都作为有效字符例如,scanf("%c%c%c",&c1,&c2,&c3);
如输入,a b c
则 c1='a' c2=' ' c3='b'
正确输入法,abc
请思考:
假如用下面的 scanf()函数输入数据,使 a=10,b=20,c1='A',
c2='a',x=1.5,y=-3.75,z=67.8,写出键盘输入数据形式,
scanf("%5d%5d%c%c%f%f,%f",&a,&b,&c1,&c2,&x,&y,&z);
输入数据的正确形式应为,
10 20Aa 1.5 -3.75,67.8
变量定义输入语句算法的描述输出语句
main( )
{
}
标准函数说明符号常量定义
4.3 顺序结构程序设计举例例 4.5,从键盘输入三角形的三条边长,求三角形的面积,
1,分析问题
(1) 已知条件,三角形的 3条边长
(2) 所求结果,三角形的面积
(3) 解决办法,(如何由已知条件得到所求结果 )
根据三角形的面积公式,))()(( cpbpapps
其中
)(21 cbap
2,算法描述:
(1) 程序中所需的变量 (变量名、类型)
三角形的三条边长分别用变量 a,b,c 均为实型三角形的面积用变量 area 为实型半周长用变量 p 为实型
(2) 算法的描述步骤先输入 a,b,c
求 p
再求 area
(3) 输入输出语句的形式输入三条边长,scanf("%f%f%f",&a,&b,&c);
输出三角形面积,printf("area=%f\n",area);
float a,b,c,p,area;
scanf("%f%f%f",&a,&b,&c);
p=(a+b+c)/2;
area=sqrt(p*(p-a)*(p-b)*(p-c));
printf("area=%f\n",area);
main( )
{
}
#include "math.h"(4) 写程序例 4.6
从键盘输入 1个 3位 正整数,然后逆序输出。
例如,输入 345,显示:
5 4 3
1,分析问题
(1) 已知条件:输入的 1个 3位正整数 number(整型)
(2) 所求结果,3位数的三个数字( a100,a10,a1,均为整型)
(3) 算法,先输入一个三位正整数,再从中取出各位数字三个数字的求法有很多种(采用算术运算)
a100=number/100
a10=(number-a100*100)/10
a1=number-a100*100-a10*10
a100=number/100
a1=number%10
a10=number/10%10
4,输入输出语句形式输入语句,scanf("%d",&number);
输出语句,printf("%-6d%-6d%-6d\n",a1,a10,a100);
3
345-300454
3
5
3453445
int a100,a10,a1,asc100,asc10,asc1,number;
scanf("%d",&number);
a100=number/100;
a10=number%100/10;
a1=number%10;
printf("%-6d%-6d%-6d\n",a1,a10,a100);
main( )
{
}
程序如下,
例,从键盘输入两个整数给 a,b,然后将 a,b的值互换后输出
5
ba
3
a
5 3
b
c
分三步完成第 一 步第二步第三步
a
3
c
5
b a
3 5
b a
5
3
bc
3
a
3
c
3 c=a;
a=b;
b=c;
c
5
b
3
本章小结
putchar()
getchar()
printf()
scanf()
变量定义输入语句算法的描述输出语句
main( )
{
}
标准函数说明符号常量定义
1,scanf( "%d \n ",&a);
上机常见错误总结:
scanf语句不要使用 "\n"。
2,复合语句
if (x<1000)
a=x%10;
b=x%100/10;
c=x/100;
else
printf("x超出范围 !");
{
}
3,强制类型转换
b=int(a); b=(int)a;
scanf 练习题,
若要用以下输入语句为 i输入 -10,为 j输入 12,为 x输入 410.34,请写出正确的输入形式。
scanf("i=%dj=%dx=%f",&i,&j,&x);
scanf("%4d%4d%10f",&i,&j,&x);
scanf("%o%x%e",&i,&j,&x);
scanf("%d%d%f",&i,&j,&x);
i=-10j=12x=410.34
-10 12 410.34
-12 c 4.1034e02
-10 12 410.34
不可加入多余空格,
否则将数据错位,无法正确输入。
每个输入数据的宽度要与指定宽度相符。
p.64
作业 1
4.1 4.2 4.3 4.4
作业 2
4.5 4.6 4.7
习题 4.2
main()
{
int a,b0,b1,b2,b3;
scanf("%d",&a);
b0=a%2;
b1=(a/2)%2;
b2=(a/2/2)%2;
b3=(a/2/2/2)%2;
printf("%d,
%d%d%d%d%#8o%#8x\n",a,b3,b2,b1,b0,a,a );
}
4.3,输入一个 5位整数,分别显示它的每个数字,例如:输入 42339,显示
4 2 3 3 9
main( )
{
int a,b,c,d,e;
long x;
scanf("%ld",&x);
a=x%10;
b=x%100/10;
c=x%1000/100;
d=x%10000/1000;
e=x/10000;
printf(―%5d%5d%5d%5d%5d%10ld\n‖,e,d,c,b,a,x);
}
main( )
{
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
printf("%-5c%-5c%-5c\n",a,b,c);
}
习题 4.5
main()
{char c;
scanf(―%c‖,&c);
if (c>=97&&c<=122)
{c-=32;
printf(―five letter centred on %c are
%c%c%c%c%c―,c,c-2,c-1,c,c+1,c+2);
}
}