C语言程序的构成和格式
#include
包含 头文件:输入输出的函数
main()main函数是C语言的主函数,括号不能省略。主程序的起始行,每个C程序里面有且只有一个main函数
{
函数体:定义说明部分,执行语句部分
double a,b,area;定义部分
a=1.2;说明部分
b=3.6;
area=a*b;执行部分
printf("a=%f,b=%f,area=%fn",a,b,area);
}输出
=是赋值操作
标识符:
定义:C语言中,符号的命名(变量、函数名、数组等)
命名规则:可以由字母、数字和下划线构成,第一个字符必须为字母或下划线
合法标识符:area、PI、s1234、_str
非法标识符:456P、cade-y、a&b
注意:
1.C语言中,大写字母和小写字母是两个不同的字符
2.标识符的长度有限制,取决于不同的系统
标识符分类:
1.关键字:C语言预先规定,在程序中代表固定含义,不能它用;例如:int、double、if等
2.预定义标识符:C语言中预先定义具有特定含义的标识符,但允许重新定义它用,会失去预先定义的含义。例如:printf、define等
3.用户标识符:用户定义,又称自定义标识符,尽量“见名知意”,增加程序可读性
注意:
1.如果用户标识符与关键字相同,程序编译时将会出错
2.用户标识符与预定义标识符相同,系统并不会报错,但预定义标识符会失去原有含义
常量:
含义:程序运行过程中,其值不能被改变的量
包括:整型常量、实型常量、字符常量和字符串常量等
例如:12、-1、3.14159、'A'、“Beijing”
其中整型常量和实型常量又称为数值型常量,有正值和负值之分
符号常量:
C语言中,用一个符号代表一个常量
#include “stdio.h”
#define PI 3.14159
定义符号名PI为3.14159
main()
{
double r,s;
r=5.0;
s=PI*r*r;
printf("s=%fn",s);
}
输出结果:s=78.539750
变量
含义:在程序运行中其值可以改变的量
程序中使用的所有变量都必须有一个名字作为标识,变量的名字由用户定义,必须符合标识符的命名规则
一个变量实质上是代表了内存中的若干个存储单元
C语言中,变量必须先定义后使用
变量也有整型变量、实型变量、字符变量等不同类型
实型数据
实型常量
实型也称为浮点型,由整数和小数部分组成,在常量后面可以使用F(f)修饰,表示float单精度类型;或使用L(l)修饰,表示long float长双精度类型
在C语言中,实数只采用十进制,有两种表示方法:十进制小数形式、指数形式
(1)十进制
科学计数形式,0-9组成,例如:0.1 127.154
(2)指数形式
一般形式:aEn(其中a、n都是十进制数)
表示:a*10^n
实型变量
按实数的精度可以分为单精度(7位有效数字)、双精度(16位有效数字)和长双精度(19位有效数字)类型
例如:单精度float类型,指数占8位,范围是-2^128~2^128
指数范围对应十进制就是:-3.4*10^38和3.4*10^38
一般占4个字节的内存空间,按指数形式存储
例如:3.1415的指数形式为:0.31415e1,在内存中存储如下:
数符占1位,指数占8位,小数部分占23位
+ .31415 1
数符 小数部分 指数
1 23 8=32位 4个字节
算术运算符
单目运算符:+正值运算符 -负值运算符 +A -B
双目运算符:+加法 -减法 *乘法 /除法 %取模运算符 A+B C+V
说明:
1.如果双目运算符两边的运算数类型一致,所得结果类型与运算数的类型一致,例如1.0/2.0,结果为0.5;1/2,结果为0
2.如果双目运算符两边运算数的类型不一致,系统将自动进行类型转换,使运算符两边的类型达到一致后,再进行运算
3.在C语言中,所有实型数的运算均以双精度进行,若是单精度数,则在尾数部分添0,使之转化为双精度
整型常量
C语言中整型常量可以用十进制、八进制和十六进制形式表示
(1)八进制:在常数前加0,数值的每个数值码取值为0~7.例如:0345 0123
(2)十进制形式:人们最容易接受的形式,数值的数码取值为0~9
(3)十六进制:在常数前加0X或0x修饰,数值的数码取值为:0~9、A~F(10~15)
注意:
(1)在C语言中,只有十进制可以是负数,八进制和十六进制数只能表示正数
(2)整型常量的类型有短整型(short int)、基本整型(int)、长整型(long int)和无符号整型(unsigned)
整型变量
基本类型、短整型、长整型和无符号类型
基本类型用关键字int定义
int K;
一个定义语句必须以一个“;”结束,可以在一个定义语句中同时定义多个变量,变量之间用逗号分开。
例如:int i,j,k;
int i=1,j=0,k=2;
一位存0或1,称为二进制位。八个二进制位组成一个字节,若干字节组成字
算术表达式
算术运算符的优先级
优先级高的运算符先进行运算
单目运算符的优先级高于双目运算符
双目运算符中,*、/、%的优先级高于+、-
双目运算符中,*、/、%相同优先级,+、-相同优先级
左结合性:优先级相同的运算符,自左向右运算
右结合性:优先级相同的运算符,自右向左运算
算术运算符在优先级相同时,具有左结合性
括号可以改变表达式的运算优先级和结合性
算术表达式
用算术表达符合一对圆括号将运算数(或称操作数)连起来的。符合C语言语法的表达式称为算术表达式
运算对象有常量、变量和函数等,例如:2+sqrt(c*b
强制类型转换表达式
表达形式:(类型名)(表达式)
利用强制类型转换运算符可以将一个表达式的值转换成指定的类型,例如:
(double)(10%3)
赋值表达式
赋值运算符“=”
变量名=表达式
a=10;
b=a+5;
说明:
1.赋值运算符的优先级只高于逗号运算符
2.不同于数学中的等于号
复合赋值表达式
在赋值运算符之前加上其他运算符可以构成复合赋值运算符
一般形式:
变量名 复合赋值运算符 表达式;
等价于:
变量名=变量名 双目运算符 表达式;
与算术运算符有关的复合赋值运算符有:
+=、-=、*=、/=、%=
复合赋值运算符的优先级与赋值运算符的优先级相同
a+=10等价于a=a+10
强制类型转换运算符与赋值运算符中的类型转换
强制类型转换表达式
表达形式:(类型名)(表达式)
利用强制类型转换运算符可以将一个表达式的值转换成指定的类型,例如:
(double)(10%3)
赋值运算符中的类型转换
规则:
1.若运算符两边一个是短整型,一个是长整型,则将短整型转换为长整型,然后运算
2.若运算符两边一个是有符号整型,一个是无符号整型,则将有符号整型转换成无符号整型,然后运算
自加、自减运算符和逗号运算符
自加++ 自减--
运算结果是将运算对象的值增1或减1
++i;相当于i=i+1,先执行自增1,再参与其他运算
--i;相当于i=i-1,i先执行自减1,再参与其他运算
i++; 相当于i=i+1,i参与运算后再自增1
i--; 相当于i=i-1,i参与运算后,i再执行自减1
结合方向自右向左
逗号运算符和逗号表达式
一般形式
表达式1,表达式2,表达式3,...,表达式n
过程:
先求解表达式1,再求解表达式2,一直求解表达式n,最终整个表达式的值就是表达式n的值
说明:逗号运算符的优先级是所有运算符中最低的,结合性是自左向右
3 3 5 10
(i=3,i++,++i,i+5)
4 5 5
第三章 顺序结构
3.1 赋值语句
在赋值表达式的尾部加“;”构成赋值语句,也称表达式语句
例举:a=b+c是赋值表达式,a=b+c;是赋值语句
注意:
1.赋值语句是一种可执行语句,应当出现在函数的可执行部分
2.不要把变量定义时的赋初值和赋值语句混为一谈
3.2 数据输出
把数据从计算机内部送到计算机外部设备上的操作称为“输出”
C语言本身没有提供输入输出语句,可以通过调用标准库函数中提供的输入和输出函数来实现数据的输入和输出
使用输入输出函数之前,需要在源程序中包含文件stdio.h
printf()函数的一般调用形式
调用形式:
printf(格式控制,输出项1,输出项2,…);
格式是控制字符串形式
在printf()函数调用之后加上“;”构成输出语句
printf("a=%d,b=%d",a,b);
格式控制作用:
1.给输出项提供输出格式说明:将要输出的数据按照指定格式输出
2.提供需要原样输出的文字或字符:除了格式转换说明之外,字符串中的其他字符(包括空格)将按原样输出
输出项之间使用逗号隔开,它们可以是任何合法的变量,常量或表达式
printf("a=%d,b=%c",a,b);
printf()函数中常用的格式说明
一般形式
[标志] [输出最小宽度] [精度] [长度]类型
d以十进制形式输出带符号整数(正数不带符号)
o以八进制形式输出无符号整数(不输出前缀0)
X、x以十六进制形式输出无符号整数(不输出前缀0x)
u以十进制形式输出无符号整数
f以小数形式输出单、双精度实数
E、e以指数形式输出单、双精度实数
G、g以%f或%e中较短的输出宽度输出单、双精度
c输出单个字符
s输出字符串
printf()函数中常用的格式说明
系统默认按照数据本身的实际宽度输出,前后不加空格,并采用右对齐形式
长度修饰符:长度格式有h、l两种:h表示按短整型输出(%hd),l表示按长整型量输出(%ld)
输出最小宽度:用十进制整数来表示输出的最少位数,若实际位数多于给定的宽度,则按实际位数输出;若实际位数少于给定的宽度则补空格或0
精度:精度格式以“.”开头,后跟十进制整数。本选项的意思是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于给定的精度数,则截取超出的部分
左对齐:由于输出数据隐含右对齐,如果想要数据左对齐,可以在格式控制中的%和宽度之间加“-”号来实现
使输出数据带+或-号
默认输出时,负数前面有符号“-”,整数前面的“+”省略,如果要使每个数前面都带正负号,可以在%和格式字符之间加一个“+”号来实现
使用printf()函数时的注意事项
1.printf("%d%f",a,b);其中a=1234,b=123.456,输出:1234123.456
2.格式控制控制中必须含有与输出项一一对应的输出格式说明,类型必须匹配
3.格式控制中,除了格式说明符之外,其他任意合法的字符原样输出,注意转义字符‘n’d等
4.在格式控制中用“%%”输出“%”号
5.printf函数返回值是本次调用输出字符的个数
6.尽量不要再输出语句中改变输出变量的值,这样可能会造成输出结果的不确定性
7.输出数据时的域宽可以改变:printf(“%*d”.m.i);按照m的域宽输出i
3.3 数据输入
scanf函数的一般调用形式
形式:scanf(格式控制,输出项1,输出项2,…)
格式控制是字符串形式
在scanf()函数调用之后加上“;”构成输入语句
scanf(“%d%d”,&a,&b);
格式控制是制定输入时的数据转换格式,即格式转换说明,scanf()函数的格式转换说明与printf的类似,也是由%开始,其后是格式字符
输入项之间使用逗号隔开,变量名前必须加上&符号,即取地址运算符
d输入十进制整数
o输入八进制整数
x输入十六进制整数
u输入无符号十进制整数
f或e输入实型数(用小数形式或指数形式)
c输入单个字符
s输入字符串
scanf函数常用的格式说明
1.在格式串中,必须含有与输入项一一对应的格式转换说明符
2.在VC6.0环境下,输入short型整数的格式控制符要求%hd
3.在scanf()函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以对实数指定小数位的宽度
4.输入是一个字符流,scanf()函数从这个流中按照格式控制指定的格式解析出相应数据,送到指定的地址变量中,因此当数据少于输入项时,运行程序将等待输入,直到满足输入要求为止;当输入数据多于输入项时,多于的数据在输入流中没有作废,等待下一个输入操作语句继续从输入流读取数据
5.scanf()函数返回值是本次scanf()函数调用正确输入的数据项的个数
输入数值数据
在输入整数或实数这类数值型数据时,输入的数据之间必须用空格,回车符,制表符(tab)等间隔符隔开,间隔符个数不限
指定输入数据所占的宽度
在格式字符前加入一个正整数指定输入数据所占的宽度
scanf("%3d%5f%5le",&k,&a,&y);
输入:
123456.789.123
printf("%d%f%fn",k,a,y);输出:123 456.7000000 89.120000
跳过某个输入数据
可以在%和格式字符之间加入“*”号,作用是跳过对应的输入数据
int x,y,z;
scanf("%d%*d%d%d",&x,&y,&z);
printf("%d%d%dn,x,y,z);
输入:12 34 56 78
输出:12 56 78
在格式控制字符串中插入其他字符
scanf("Please input x,y,z:%d%d%d",&x,&y,&z);
Please input x,y,z:不会输出在屏幕上
必须输入:Please input x,y,z:12 34 56
包括字符的大小写,字符的间隔等必须与scanf中完全一致(这些非格式说明符称为通配符)
为了减少不必要的麻烦,尽量不要用通配符
3.4 复合语句和空语句
复合语句
C语言中,一对花括号“{ }”不仅可用作函数体的开头和结尾的标志,也可用作复合语句的开头和结尾的标志,复合语句也称为“语句块”
{
语句1;
语句2;
…
}
例:{a++;b*=a;printf("b=%dn",b);}
空语句
C程序中所有语句必须由一个分号“;”作为结束,如果只有一个分号:
{
;
}
称为空语句,程序不执行任何动作



