高级程序设计语言吴 凡
TEL,83202682
E-mail,cdwf@tom.com
电子科技大学通信与信息工程学院第四章 顺序程序设计电子科技大学通信与信息工程学院
C语句概述
语句( statement):指示计算机完成一定操作任务的指令。
一条语句?编译? 若干条机器指令
声明:数据的描述,而语句:对数据的操作
每条语句以分号( ;)结束电子科技大学通信与信息工程学院
C程序结构
C程序源程序文件 1 源程序文件 2 源程序文件 N
预处理指令 全局变量声明 函数 1 函数 n
函数首部 函数体局部变量声明 执行语句电子科技大学通信与信息工程学院
C语句的分类
控制语句
选择语句:
if –else;
switch
循环语句:
for ( ) ~
while () ~
do ~ while ()
转向语句
break; continue
goto; return
电子科技大学通信与信息工程学院
C语句的分类
函数调用语句
格式:函数名 (参数表 );
例,printf("Hello world\n");
表达式语句
格式:表达式 ;
例,i++;
例,a = x + y;
重要的表达式语句:赋值语句
格式:赋值表达式 ;
例,a = 3;
例,if ( (a = b) > 0) t = a;/*区别与赋值表达式的区别,P69*/
区别:赋值表达式可以包含在其它表达式中,赋值语句不行电子科技大学通信与信息工程学院
C语句的分类
空语句
格式,;
功能:什么也不做
应用:
循环语句中的空循环体,例
for (i = 0; I < 1000; i++);
在程序开发过程中起到占位的作用,例
...; /*某一功能暂时未完成,有待今后补齐代码 */
电子科技大学通信与信息工程学院
C语句的分类
复合语句 (语句块 )
格式:
{
语句 1;
语句 2;
...
语句 N;
}
复合语句中 }后无分号
复合语句在语法上相当于一条语句
在复合语句中(语句块中),可以声明变量电子科技大学通信与信息工程学院数据的输入、输出
C语言没有专门的输入 /输出 (I/O)语句
I/O操作由标准库函数提供
源文件必须包含 I/O库函数所对应的头文件
( stdio.h)
方法:在源文件顶部,添加# include "stdio.h"
标准 I/O设备
标准输入设备:键盘
标准输出设备:显示器电子科技大学通信与信息工程学院字符输出函数 putchar
功能:向标准输出(显示器)输出一个字符
调用方式,putchar(c);
参数 c可以是字符型或者整型常量、变量、表达式
例,例:
#include "stdio.h"
main()
{
char c1 = 'a',c2 = 97;
putchar(c1); putchar(c2);
putchar('a'); putchar(97);
}
#include "stdio.h"
main()
{
putchar('a');
putchar('\n');
putchar('\141');
}
电子科技大学通信与信息工程学院字符输入函数 getchar
功能:从标准输入(键盘)输入一个字符
调用方式,getchar( );
使用注意
无参数,函数返回值就是从标准输入得到的字符
输入时,按回车后,才开始接收字符
只能接收第一个字符,多余的字符将省略
getchar ( )得到的字符可以赋给字符型,整型变量,或作为表达式的一部分
例,c = getchar( ) + ('a' – 'A');
电子科技大学通信与信息工程学院字符输入函数 getchar
例:
例:
#include "stdio.h"
main()
{
char c;
printf("Enter a character,");
c = getchar( );
putchar(c);
}
#include "stdio.h"
main()
{
printf("Enter a character,");
putchar(getchar());
}
电子科技大学通信与信息工程学院格式输出函数 printf
功能:向标准输出(显示器)按照指定格式输出任意类型的数据。
调用方式,printf(格式控制,输出表 );
例,printf("Answer = %d\n",11);
例,printf("Hello world!\n");
双引号括起来的字符串要输出的内容,
包括:常量、变量、表达式电子科技大学通信与信息工程学院格式控制
格式控制符的组成:
普通字符:原样输出
例,printf("a + b =12,\141 \n" );
格式转换说明:将要输出的数据转换为指定格式输出
每一个格式转换说明都由 %引导,而以格式字符结束
例,printf("%d%f%c",a,f1,'a');
有多少个的格式转换说明,就对应有多少个数据参数
int printf(格式转换说明,参数 1,参数 2,...);
电子科技大学通信与信息工程学院格式转换说明
格式转换说明组成:
% - 7,3 f
引导符 格式字符表示左对齐输出,省略表示右对齐输出表示输出 最小 宽度表示输出精度表示引导精度值电子科技大学通信与信息工程学院格式转换说明
例,printf("%d",12345); 输出:
例,printf("%7d",12345); 输出:
例,printf("%-7d",12345); 输出:
例,printf("%4d",12345); 输出:
例,printf("%-4d",12345); 输出:
例,printf("%7.3d",12345); 输出:
012345678
12345
12345
12345--
12345
12345
12345
电子科技大学通信与信息工程学院格式转换说明
例,printf("%f",1.2345); 输出:
例,printf("%7f",1.2345); 输出:
例,printf("%-7f",1.2345); 输出:
例,printf("%3f",1.2345); 输出:
例,printf("%9f",12345); 输出:
例,printf("%9.3f",12345); 输出:
例,printf("%.3f",12345); 输出:
例,printf("%-9.3f",12345); 输出:
012345678
1.234500
1.234500
1.234500
1.234500
1.234500
1.234
1.234
1.234
电子科技大学通信与信息工程学院格式转换说明
例,printf("%s","hello"); 输出:
例,printf("%9s","hello"); 输出:
例,printf("%-4s","hello"); 输出:
例,printf("%.3s","hello"); 输出:
例,printf("%9.3s","hello"); 输出:
例,printf("%-9.3s","hello"); 输出,
012345678
hello
hello
hello
hel
hel
hel------
电子科技大学通信与信息工程学院格式转换说明
注意:
printf函数默认是右对其输出
宽度值 m:输出的最小宽度,
如果没有指定精度,按数值的实际长度输出
如果数值的位数 >m,则直接按数值的位数输出
如果数值的位数 <m,则补齐位数(默认用空格)
精度值:
整型:输出数值的最小位数,如果数值的位数 >m,则直接按数值的位数输出
浮点型:指定实数小数点后的位数
字符串:指定输出字符串的最大位数(超出的截断)
电子科技大学通信与信息工程学院格式字符
格式字符:指定输出数据的类型和相应的格式
整型格式字符( P73- P74)
d:带符号的十进制整型
u:无符号的十进制整型
o:以无符号的八进制整型
x:以无符号的十六进制整型
ld:带符号的十进制长整型电子科技大学通信与信息工程学院整型格式字符
例( P74例 4.3)
a,1111111111111111
b,1111111111111110
#include "stdio.h"
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,ffff,65535
b = -2,177776,fffe,65534
电子科技大学通信与信息工程学院格式字符
c:输出一个字符
s:输出字符串
例:
#include "stdio.h"
main()
{
char c = 'a';
printf("c = %c,%c\n",c,97);
printf("%s\n","CHINA");
}
电子科技大学通信与信息工程学院格式字符
e:以指数形式输出实型数据;
f:以小数形式输出实型数据;
g:自动选择 f格式或 e格式中宽度较小的一种输出实数,且不打印无效的 0。
注意:
单精度型数据,用% f输出,前 7位有效,且小数点后固定位 6位
双精度型数据,用% lf输出,前 16位有效,且小数点后固定位 6位电子科技大学通信与信息工程学院
printf函数注意事项
输出数据类型要与格式说明相匹配,包括类型、
格式
格式字符 x,e,g可以是大写字母 X,E,G
除 x,e,g外的格式字符均为小写
如若输出字符“%”,在“格式控制”中用连续两个“%”即可
长度修正符:
h( short):只能修饰整型数据
l( long):
修饰整型数据 ——输出长整型,
修饰浮点型 ——输出双精度电子科技大学通信与信息工程学院格式输入函数 scanf
功能:将用户从标准输入输入的数据存储到由变量地址所指定的内存空间。
调用格式,scanf(格式控制,变量地址表 );
,格式控制” 部分同 printf函数,但有区别(无精度控制)。
,地址表”由变量地址组成,表明每个输入项应在存储单元的首地址。
获取变量首地址的格式,&变量名
例:
#include "stdio.h"
main()
{
char c;
int i;
scanf("%c%d",&c,&i)
}
...
...
变量 c
地址 内存
80A5
80A6
80A7
80A8
80A9
变量 i
电子科技大学通信与信息工程学院格式输入函数 scanf
格式控制:与 printf函数中的格式控制相似
每一个格式转换说明都由 %引导,而以格式字符结束
例,scanf("%d%i%f",&i1,&i2,&f);
格式字符 (P80)
对于无符号整型,可使用 u,o,x
格式符 i,表示可以用十进制( 123),也可用八进制( 0123),和十六进制( 0x123)输入;而格式符 d只能输入十进制整型
附加格式说明字符,l,h,*,域宽( P80)
电子科技大学通信与信息工程学院
scanf函数注意事项
输入数据的分割
采用隐含的分隔符:空格、回车,Tab键
根据格式中指定的域宽分隔数据项(不提倡)
采用用户指定的分隔符,即在格式控制字符串内除格式说明以外的其它字符,输入数据时都应照样输入
例,scanf("input %d,%d",&a,&b);
在输入时应键入,input 2,3
输入无符号数据时,应采用 o,x格式符电子科技大学通信与信息工程学院
scanf函数注意事项
scanf函数不能规定精度
例,scanf("%4.2f",&f1);X
采用 %c输入字符时,空格和转义字符都有效