1、第2章 最简单的C程序设计_顺序程序设计 2.1顺序程序设计举例 1.概念:程序从前往后依次执行 2.举例 例2.1已知三角形三边长,显示三角形的面积。 程序代码 #include"stdio.h" #include"math.h" int main() {float a,b,c,s,area; scanf("%f ,%f ,%f",&a,&b,&c); s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("a=%.2f\nb=%.2f\nc=%.2f\narea=%.2f\n",a,b,c,area);
2、 return 0; } 例2.2已知2010年中国人口为1370536875人,设年增长率为0.5%,2050年人口数为多少? 程序代码 #include"stdio.h" #include"math.h" int main() {double p0,p1,r; p0=1370536875; r=0.005; p1=p0*pow(1+r,40); printf("%.0f\n",p1); return 0; } 例2.3计算并显示方程ax2+bx+c=0的根。设b2-4ac≥0。 程序代码 #include"stdio.h" #include"ma
3、th.h" int main() {double a,b,c,d; scanf("%lf ,%lf ,%lf",&a,&b,&c); d=b*b-4*a*c; printf("x1=%.2f\nx2=%.2f\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)); return 0; } 2.2数据的类型及存储形式 2.2.1 C的数据类型 1.概念: 数据的存储单元的长度及存储形式 2.种类 数据类型 基本类型 整数类型 基本整型(int , unsigned int) 短整型(short , unsigned sho
4、rt) 长整型(long , unsigned long) 字符型(char , unsigned char) 浮点类型 单精度(float) 双精度(double) 枚举类型(enum) 空类型(void) 派生类型 指针类型(*) 数组类型([ ]) 结构体类型(struct) 共用体类型(union) 函数类型(( )) 2.2.2 常量和变量 1.常量:其值不允许变化的量 2.变量: 其值允许变化的量 定义变量的格式: 数据类型 变量名[=初值]; 3. 标识符: ⑴功能: 名字(变量、函数、类型等) ⑵标识符构成:由字母或下划线
5、开始,由字母、数字和下划线构成 ⑶区分大小写 ⑷不要将关键字(C语言已经使用有特殊含义的名字)用作其它用途 2.2.3 整型数据 1.整型常量的三种形式 ⑴十进制 ⑵八进制 ①格式:0八进制数字序列 ②例: 012和-012分别与十进制的10和-10相等 ⑶十六进制 ①格式:0x十六进制数字序列 或 0X十六进制数字序列 ②例: 0X12和-0x12分别与十进制的18和-18相等 2.有符号整型数据的存储方式: 定点整数补码 3. 4. 5.整型变量的分类 基本整型(int , unsigned [int]) 短整型(short , unsigned sh
6、ort) 长整型(long , unsigned long) 例2.4整型数据溢出。 程序代码 #include"stdio.h" int main() {short a=32767,b; b=a+1; printf("a=%d,a+1=%d\n",a,b); return 0; } 运行结果: a=32767,a+1=-32768 讨论:本题有偷梁换柱之嫌,a+1的值与b的值未必相等 6.整型常量的类型 默认:在int范围内的就用int型,否则用long型 类型符:在常量后加l或L表示长整型,如12L。在常量后加U或u表示无符号,如12u,12LU 2
7、2.4 字符型数据 功能:表示一个字符 存储方式:字符编码(整数) 1.字符常量 ⑴表示形式 '字符' ⑵转义字符表示形式 ①功能:表示通常无法表示的字符 ②格式:见37页表2.2 2.字符变量 例2.5字符变量保存整数(字符代码)示例。 程序代码 #include"stdio.h" int main() {char c1,c2; c1=97;c2=98; printf("c1=%c,c2=%c\n",c1,c2); printf("c1=%d,c2=%d\n",c1,c2); return 0; } 思考:将char c1,c2;中的cha
8、r改为int,执行结果无变化 例2.6小写字母变对应的大写字母示例。 程序代码 #include"stdio.h" int main() {char c1,c2; c1='a';c2='b'; c1=c1-32;c2=c2-32; printf("%c,%c\n",c1,c2); return 0; } 3.字符串常量 ⑴表示形式: "字符序列" ⑵占用字节数:长度+1 ⑶与字符常量的区别: 表示形式,长度 ⑷没有字符串变量 2.2.5 浮点型数据 1.浮点数概念 用科学计数法表示的数(指内部) 2.分类 ⑴单精度(float) ⑵双精度
9、double) 3.存储形式 规格化浮点数 4.常量类型 双精度 5.误差 例2.7浮点型数据误差示例。 程序代码 #include"stdio.h" int main() {float a; a=3.141592612; printf("a=%f\n",a); return 0; } 执行结果: a=3.141593 2.3运算符与表达式 2.3.1 表达式 1.概念:常量、变量和函数是表达式;表达式、运算符以及括号组成的有意义的式子也是表达式。 2.常见表达式:算术、关系、逻辑、赋值、逗号 2.3.2 算术运算符 运算符 含义 举
10、例 表达式结果 备注 优先级 + 正 +a a的值 2 - 负 -a a的相反数的值 2 ++ 自加 ++a a++ a+1之后的值 a+1之前的值 变量a增1 变量a增1 2 -- 自减 --a a-- a-1之后的值 a-1之前的值 变量a减1 变量a减1 2 * 乘 a*b a和b的乘积 3 / 除 a/b a除以b的商 3 % 求余 a%b a整除以b的余数 3 + 加 a+b a和b的和 4 - 减 a-b a和b的差 4 2.3.3 运算
11、符的优先级与结合性 1.优先级: 分15级;相邻的两个运算符,先执行高优先级的运算符。 2.结合性:相邻的同优先级运算符的执行顺序由结合性确定。结合性分为左结合性、右结合性两种。 详见270页附录C 2.3.4 不同数据类型间的混合运算(数据类型自动转换) 1.必定的转换:水平向左 2.混合类型转换:垂直向上 例2.7.1数据类型自动转换示例。 程序代码 #include "stdio.h" int main() { int i=2; float f=3; double d=4; long n=5; printf("表达式的值=%f,表达式的值占据内存
12、字节数=%d\n",50+'b'+i*f-d/n,sizeof(50+'b'+i*f-d/n)); return 0; } 结果: 表达式的值=153.200000,表达式的值占据内存字节数=8 double float unsigned long long unsigned int unsigned char unsigned short char short 优先级 高 低 2.3.5 强制类型转换 1.格式:(类型名)表达式 2.强制类型转换表达式的值:等于指定表达式的值(可
13、能有误差) 3.强制类型转换表达式的类型:类型名指定的类型 例2.7.2强制类型转换示例。 程序代码 #include"stdio.h" int main() {float x=7.8; printf("x%%4=%d\n",(int)x%4); return 0; } 结果: x%4=3 2.4赋值语句 2.4.1 C语句概述 1.C程序:由若干程序文件构成 2.程序文件:由若干函数构成 3.函数:函数首部+函数体 4.函数体:声明部分+执行语句构成 5.语句种类 ⑴控制语句:控制程序的执行方向 ⑵函数调用语句 调用方式之一: 函数名(实参列表
14、 ⑶表达式语句: 表达式; ⑷空语句: ; ⑸复合语句(语句块): 用一对花括号括起来的一组声明和语句 2.4.2 赋值表达式 1.赋值运算符: = 2.赋值表达式: 变量 = 表达式 ⑴功能: 计算、转换、保存 ⑵表达式的值: 等于保存在左端变量中的值 例 a=b=c=5 变量a,b,c以及表达式的值均为5 a=5+(c=6) 变量c等于6,a以及表达式均为11 a=(b=4)+(c=6) 变量b等于4,c等于6,a以及表达式均为10 a=(b=10)/(c=2) b等于10,c等于2,a以及表达式均为5 3.复合
15、赋值运算符以及表达式 ⑴算术复合赋值运算符: += , -= , *= , /= , %= ⑵表达式: 变量 复合赋值运算符 表达式 ⑶表达式的值: 等于保存在左端变量中的值 例2.7.3复合赋值表达式示例。 程序代码 #include "stdio.h" int main() {int a=3,b=5; printf("%d\n",a*=a+b); printf("%d\n",a); return 0; } 结果: 24 24 4.赋值过程中的类型转换 ⑴浮点数保存到整型变量中之前,进行截断取整。 如: int i ; i=36.
16、99 ; 保存到变量i中的值为36。 ⑵为简单起见,只要保证保存在变量中的值不超过变量的范围即可。 2.4.3 赋值语句 1.区分赋值表达式与赋值语句: 表达式无分号,语句以分号结尾 2.变量赋初值的方式 ⑴用赋值语句 int i; i=100; ⑵定义变量时直接赋初值 int i=100; 例2.8互换两个变量的值示例。 提示:借助于中间变量互换。 程序代码 #include "stdio.h" int main() {int a=3,b=4,t; //借助变量t交换a和b的值 t=a;a=b;b=t; printf("a=%d,b=%d\n",a
17、b); return 0; } 结果: a=4,b=3 2.5 输入输出 2.5.1 概念 1.标准输入输出设备(终端: 显示器+键盘) 2.常用标准输入输出函数:putchar、getchar、printf、scanf、puts、gets 3.程序中用到标准输入输出函数时,在程序的开始添加编译指令#include "stdio.h" 2.5.2 printf函数 功能:将表达式的值按指定的格式输出 例2.9输出实数示例。 程序代码 #include "stdio.h" int main() {double a=11.111; float b=22
18、222; printf("%4.2f+%6.2f=%f\n",a,b,a+b); return 0; } 结果: 11.11+ 22.22=33.333000 1.格式 printf(格式控制,输出表列) ⑴格式控制:普通字符、格式说明 ①普通字符:原样输出 ②格式说明: 对输出表达式进行格式化 2. 格式说明 ⑴用法: %[ - ] [宽度] [.精度] [l]格式字符 ⑵格式字符:d(十进制整数)、u(无符号十进制整数)、o(八进制整数)、x(十六进制整数)、X(十六进制整数)、c(字符)、s(字符串)、f(小数形式的双精度数)、e(科学计数法形式的双精度
19、数)、E(科学计数法形式的双精度数)、g(f和e格式中较短的一种格式,不输出无意义的0)、G(f和e格式中较短的一种格式,不输出无意义的0)。 ⑶ l:放在d、u、o、x、X前输出长整型数 ⑷宽度:输出数据的最小宽度(默认实际宽度) ⑸精度:对实数表示小数位数(默认6位小数);对字符串,表示输出字符的个数 ⑹ - : 左对齐 2.5.3 scanf函数 功能: 将输入的字符串转化为指定类型的数据并存入指定的变量 例2.9.1输入一个学生的学号(int型)、性别(字符:用m和f分别表示男和女)、体重(double型)。 程序代码 #include "stdio.h" in
20、t main() {int xh; char xb; double tz; scanf("%d %c%lf",&xh,&xb,&tz); printf("学号:%d,性别:%c,体重:%6.2f\n" , xh , xb , tz); return 0; } 程序执行时输入: 20131234 f 45.234 显示结果: 学号:20131234,性别:f,体重: 45.23 1.格式 scanf(格式控制,地址列表) ⑴地址列表:由逗号分隔的一组变量地址 ⑵格式控制:表示输入格式的字符串 ①组成:普通字符 + 格式说明 ②普通字符:原样匹配(
21、空白符:1对多;其它:1对1) ③格式说明:将输入的字符转化为指定类型的数据 2.格式说明 ⑴ 用法: %[宽度] [h|l]格式字符 ⑵ 格式字符:d(十进制整数)、u(十进制整数)、o(八进制整数)、x(十六进制整数)、c(字符)、s(字符串,不含空白符)、f、e、E、g、G(单精度) ⑶h放在d、u、o、x前输入短整型数 ⑷l:放在d、u、o、x前输入长整型数;l: 放在f、e、E、g、G前输入双精度数 ⑸宽度:输入数据的最大宽度 提示:仅格式字符c可以输入空白符,其余的格式字符将越过当前的所有空白符从第一个非空白符处开始转换数据,并在再次遇到空白符时结束。 2.
22、5.4 字符的输入输出 1.putchar ⑴用法: putchar(c) ⑵功能: 输出代码为c的字符 例2.10依次输出BOY三个字符。 程序代码 #include "stdio.h" int main() { putchar('B');putchar('O');putchar('Y');putchar('\n'); return 0; } 2.getchar ⑴用法: getchar( ) ⑵功能: 输入一个字符,函数值等于输入字符的代码 ⑶不能立即读取键盘,需要按Enter 确认 例2.11从键盘输入BOY三个字符(用Enter确认),然后将其显示到屏幕上。 程序代码 #include "stdio.h" int main() { putchar(getchar()); putchar(getchar()); putchar(getchar()); putchar('\n'); return 0; }






