第四章 顺序结构程序设计本章内容:
1.C语句概述,C语句的组成及 C的语句
2.赋值语句
3.数据输入 /输出的概念
4.字符型数据的输入 /输出
5.格式输入 /输出
6.程序举例
C语句概述预处理命令
C
程序源程序文件 1
源程序文件 2
源程序文件 n
…………..
全局变量声明函数 1
函数 2
函数 n
………
函数首部函数体变量声明执行部分
(语句)
C程序的组成
C程序的执行部分是由语句组成的 。
程序的功能也是由执行语句实现的 。
C语句可分为以下五类:
C程序的语句
C程序的语句表达式语句 (表达式 ;)
函数调用语句 (函数调用 ;)
控制语句( 9种)
复合语句 ( 由 { } 括起来 )
空语句 ( ; )
表达式语句由表达式加上分号,;,组成 ;
一般形式为,表达式 ;
执行表达式语句就是计算表达式的值 。
1.表达式语句例如:
x=y+z; 赋值语句
y+z; 加法运算语句,但计算结果不能保留,无实际意义
i++; 自增 1语句,i值增 1
由函数名,实际参数加上分号,;,组成 。
一般形式为,函数名 (实际参数表 );
执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值或完成函数的功能 。
例如,printf("C++ Program"); 调用库函数,输出字符串 。
2.函数调用语句控制语句用于控制程序的流程,实现程序的各种结构方式 。
它们由特定的语句定义符组成 。
C语言有九种控制语句 。 可分成以下三类:
(1) 条件判断语句
if语句,switch语句
(2) 循环执行语句
do while语句,while语句,for语句
(3) 转向语句
break语句,goto语句,continue语句,return语句
3.控制语句把多个语句用括号 { }括起来组成的一个语句称复合语句 。
在程序中应把复合语句看成是单条语句,而不是多条语句 。
例如:
{ x=y+z;
a=b+c;
printf(“%d%d”,x,a); }
复合语句内的各条语句都必须以分号,;”结尾,在括号,}”
外不能加分号。
4.复合语句只有分号,;,组成的语句称为空语句 。
空语句是什么也不执行的语句 。
在程序中空语句可用来作空循环体 。
例如 while(getchar()!='\n') ;
5.空语句赋值语句是由赋值表达式再加分号构成的表达式语句。
赋值语句的一般形式为,变量 =表达式 ;
赋值语句的功能和特点都与赋值表达式相同 。
赋值语句是程序中使用最多的语句之一 。
赋值语句
1,赋值符,=”右边的表达式也可以又是一个赋值表达式变量 =(变量 =表达式 ); 是成立的,
其展开之后的一般形式为:
变量 =变量 =…= 表达式 ;
在赋值语句的使用中需要注意以下几点:
例如,a=b=c=d=e=5;
按照赋值运算符的右接合性实际上等效于:
e=5; d=e; c=d; b=c; a=b;
给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾 。
2,注意在变量说明中给变量赋初值和赋值语句的区别
3,在变量说明中,不允许连续给多个变量赋初值如下述说明是错误的,int a=b=c=5
必须写为,int a=5,b=5,c=5;
而赋值语句允许连续赋值,即 a=b=c=5;
赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。
4,注意赋值表达式和赋值语句的区别
下述语句是合法的:
if ((x=y+5)>0) z=x;
语句的功能是,若表达式 x=y+5大于 0则 z=x。
下述语句是非法的:
if ((x=y+5;)>0) z=x;
因为 x=y+5;是语句,不能出现在表达式中。
数据输入 /输出的概念内存
RAM
从键盘将数据输入从数据文件读入将数据输出到屏幕将数据输出到文件数据输入 /输出是相对计算机内存
1.数据输入 /输出的概念
C语言本身不提供输入 /输出语句,所有的数据输入/
输出都是由库函数完成的 。 因此数据输入 /输出语句都是函数语句 。
在 C语言中使用库函数时,要使用预编译命令 #include
将相关的头文件 ( *.h) 包含到用户源文件中 。
使用形式,#include "头文件 "
或 #include <头文件 >
说明,1,标准输入 /输出头文件是,stdio.h
2,printf() 和 scanf()函数不需要头包含文件
2.数据输入 /输出语句
1.字符输出函数 putchar()
putchar 函数是字符输出函数,其功能是在显示器上输出单个字符 。
其一般形式为,putchar(字符变量 ) ;
例如,putchar('A'); 输出大写字母 A
putchar(x); 输出字符变量 x的值
putchar(?\n?); 输出换行对控制字符则执行控制功能,不在屏幕上显示 。
使用本函数前必须要用文件包含命令:
#include <stdio.h>
字符数据的输入 /输出函数 getchar函数的功能是从键盘上输入一个字符 。
其一般形式为,字符变量 =getchar();
2.字符输入函数 getchar( )
如:
#include<stdio.h>
void main()
{ char c;
printf("input a character\n");
c=getchar();
putchar(c);
}
putchar(getchar());
使用 getchar函数还应注意几个问题:
getchar函数只能接受单个字符,输入数字也按字符处理。
输入多于一个字符时,只接收第一个字符,多余的字符存入到键盘的缓冲区,若有下一个 getchar函数语句,由直接从键盘的缓冲区读一个字符。
使用本函数前必须包含文件,stdio.h”。
#include<stdio.h>
main()
{ char c1,c2;
c1=getchar();
c2= getchar();
putchar(c1);putchar(c2);
}
例 如:
ab当程序运行后:输入 ABCDEF,输出为:
一、格式输出函数 printf()
一般形式为:
printf(“格式控制字符串,,输出表列 )
例如,printf("%3d\n",x)
%格式说明起始符 3输出数据的宽度
d输出数据的类型
x输出项格式输入 /输出格式字符串的一般形式为:
% [标志 ] [输出最小宽度 ] [.精度 ] [长度 ]类型其中方括号 [ ]中的项为可选项 。
各项的意义介绍如下:
说 明:
1.类型类型字符用以表示输出数据的类型,表示输出类型的格式字符及意义
d,i 以十进制形式输出带符号整数 (正数不输出符号 )
o 以八进制形式输出无符号整数 (不输出前缀 O)
x,X 以十六进制形式输出无符号整数 (不输出前缀 OX)
u 以十进制形式输出无符号整数
f 以小数形式输出单、双精度实数(小数 6位)
e,E 以指数形式输出单、双精度实数
g,G 以 %f,%e中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串格式字符注 意:
%ld表示长整型输出;
%o,%x,%u均输出无符号整数;
整数 (0~255)均可以以 %d形式输出;
单精度型浮点数以 %f形式输出时,小数 6位,有效数字 7位;
双精度型浮点数以 %f形式输出时,小数 6位,有效数字 16位;
%e形式输出时小数 6位,指数 5位,其中 e占 1位,指数符号占 1
位,指数 3位,并以规范化指数形式输出。
如 1.234560e+002。
- 结果左对齐,右边填空格
+ 输出符号 (正号或负号 )空格输出值为正时冠以空格,为负时冠以负号
# 对 c,s,d,u类无影响;
对 o类,在输出时加前缀 o;对 x类,在输出时加前缀 0x;
对 e,g,f 类当结果有小数时才给出小数点
2.标志
3.输出最小宽度用十进制整数来表示输出的最少位数。
若实际位数多于定义的宽度,则按实际位数输出;
若实际位数少于定义的宽度则补以空格或 0。
% [标志 ] [输出最小宽度 ] [.精度 ] [长度 ] 类型精度格式符以,,”开头,后跟十进制整数 。
本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分 。
5.长度长度格式符为 h,l 两种,h表示按短整型量输出,l表示按长整型量输出。
% [标志 ] [输出最小宽度 ] [.精度 ] [长度 ] 类型4.精度
void main()
{ int a=15;
float b=138.3576278;
double c=35648256.3645687;
char d='p';
printf("a=%d,%5d,%#o,%#x\n",a,a,a,a);
printf("b=%f,%5.4f,%e\n",b,b,b);
printf("c=%f,%8.4f\n",c,c);
printf("d=%c,%8c\n",d,d);
}
例 如:
a=15,15,017,0xf
b=138.357620,138.3576,1.38358e+02
c= 35648256,364569,35648256,3646
d=p,p
1,格式字符串是以 %开头的字符串,可由格式字符串和非格式字符串两种组成,其中格式控制字符串用于指定输出格式。
2,在 %后面跟有各种格式字符,以说明输出数据的类型、
形式、长度、小数位数等。
3,非格式字符串在输出时原样显示,起提示作用。
4,输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。
注 意:
1,scanf()函数的一般形式
scanf(“格式控制字符串,,地址表列 );
格式控制字符串的使用与 printf函数基本相同;
不能显示非格式字符串,也就是不能显示提示字符串;
地址表列中给出各变量的地址 。
地址是由地址运算符,&”后跟变量名组成的 。
二、格式输入函数 scanf( )
例如,&a,&b,&c分别表示变量 a,b,c 的地址
main()
{
int a,b,c;
printf("input a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
格式字符串的一般形式为:
%[*][输入数据宽度 ][长度 ]类型其中有方括号 [ ]的项为任选项 。
类型各项的意义如下:
表示输入数据的类型,其格式符和意义如下所示:
d 输入十进制整数
o 输入八进制整数
x 输入十六进制整数
u 输入无符号十进制整数
f或 e 输入实型数 (用小数形式或指数形式 )
c 输入单个字符
s 输入字符串
2,格式字符串用以表示该输入项读入后不赋予相应的变量,即跳过该输入值 。
如 scanf("%d %*d %d",&a,&b);当输入为,1 2 3
时,把 1赋予 a,2被跳过,3赋予 b。
* 符宽 度用十进制整数指定输入的宽度 (即字符数 )。
例如,scanf("%5d",&a);
输入,12345678
只把 12345赋予变量 a,其余部分被截去。
又如,scanf("%4d%4d",&a,&b);
输入,12345678将把 1234赋予 a,而把 5678赋予 b。
%[*][输入数据宽度 ][长度 ]类型长度格式符为 l和 h,l表示输入长整型数据 (如 %ld)
和双精度浮点数 (如 %lf)。 h表示输入短整型数据。
长 度
%[*][输入数据宽度 ][长度 ]类型
3,使用 scanf函数还必须注意以下几点:
(1) scanf函数中没有精度控制 。
如,scanf("%7.2f",&a); 是非法的。不能企图用此语句输入小数为 2位的实数。
( 2) scanf中要求给出变量地址,如给出变量名则会出错 。
如 scanf( "%d",x);是非法的,应改为 scnaf("%d",&x);
才是合法的 。
( 3) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔 。
C编译在碰到空格,TAB,回车或非法数据 (如对,%d”输入,12A”时,A即为非法数据 )时即认为该数据结束 。
( 4) 在输入字符数据时,若格式控制串中无非格式字符,
则认为所有输入的字符均为有效字符 。
使用 scanf函数还必须注意以下几点:
若输入为,d e f
则把 'd'赋予 a,赋予 b,'e' 赋予 c。
只有当输入为,def时,才能把 'd'赋于 a,'e'赋予 b,'f'赋予 c。
如果在格式控制中加入空格作为间隔,如 scanf (“%c %c
%c”,&a,&b,&c);则输入时各数据之间要加空格 。
例如:
main()
{ char a,b,c;
printf("input character a,b,c\n");
scanf("%c%c%c",&a,&b,&c);
printf("%c%c%c\n",a,b,c);
}
( 5) 如果格式控制串中有非格式字符则输入时也要输入该非格式字符 。
例如,scanf("%d,%d,%d",&a,&b,&c);
其中用非格式符,,”作间隔符,故输入时应为,5,6,7
又如,scanf("a=%d,b=%d,c=%d",&a,&b,&c);
则输入应为 a=5,b=6,c=7
使用 scanf函数还必须注意以下几点:
( 6)如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。
void main()
{ int a;
printf("input a number\n");
scanf("%d",&a);
printf("%ld",a);
}
使用 scanf函数还必须注意以下几点:
由于输入数据类型为整型,而输出语句的格式串中说明为长整型,因此输出结果和输入数据不符。
void main()
{ long a;
printf("input a long integer\n");
scanf("%ld",&a);
printf("%ld",a);
}
改动后程序如下:
运行结果为:
input a long integer
1234567890
1234567890 当输入数据改为长整型后,输入输出数据相等。
顺序结构程序设计举例例 4.10 输入三角形的三边长,求三角形面积
#include "math.h"
main()
{
float a,b,c,s,area; //声明程序所需变量
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%7.2f,b=%7.2f,b=%7.2f,s=%7.2f\n“,a,b,c,s);
printf("area=%7.2f\n",area);
}
例 4.11 从键盘输入一个字母,改用小写字母输出。
#include "stdio.h"
main()
{
char c1,c2;
c1=getchar();
printf("%c,%d\n",c1,c1);
c2=c1+32;
printf("%c,%d\n",c2,c2);
}
1,程序可分为三种最基本的结构:顺序结构,选择结构 /循环结构 。
2,程序中执行部分最基本的单位是语句 。
C语言的语句可分为五类:
( 1) 表达式语句
( 2) 函数调用语句
( 3) 控制语句
( 4) 复合语句
( 5) 空语句本章小结
( 1) scanf和 getchar函数是输入函数,接收来自键盘的输入数据 。
scanf是格式输入函数,按指定的格式输入任意类型数据;
getchar函数是字符输入函数,只能接收单个字符 。
( 2) printf和 putchar函数是输出函数,向显示器屏幕输出数据 。
printf是格式输出函数,按指定格式显示任意类型数据;
putchar是字符显示函数,只能显示单个字符。
所有输入输出都调用库函数中的输入输出函数来实现。
3.C语言中没有提供专门的输入输出语句
P85 4.5 4.6 4.8 4.9
习 题实 验实验指导书上机实验之实验二教材 P65 3.7