第四章 顺序结构程序设计
4.1 语句 4.2 输出函数 4.3 输入函数 4.4 常用的数学函数 4.5 顺序结构程序设计举例
§4.1 语句 定义:用来向计算机系统发出操作的指令。 分类: (1)控制语句 (2)函数调用语句 (3)表达式语句 (4)空语句:; (5)复合语句 { 语句1; 语句2; … 语句n; }
几个知识点: 赋值表达式后加一个分号既为一个赋值语句 赋值表达式可以放在其他表达式中,而赋值语句不可以放在其他表达式中 (a=3)+4 if ((a=b)>0) t=a
几个知识点: 即 C语言无I/O语句,I/O操作由函数实现 #include <stdio.h> 输入:从输入设备(鼠标、键盘、扫描仪等)向计算机输入数据。 输出:从计算机向输出设备(显示屏、打印机等)输出数据。 C不提供输入输出语句,输入输出数据是由系统提供的函数来完成的,输入输出函数在系统文件stdio.h中定义,在主函数前用预处理命令将其包含: #include <stdio.h> 即 C语言无I/O语句,I/O操作由函数实现 #include <stdio.h>
§4.2 格式输入/输出函数 #include <stdio.h> main() { int num; printf(“input a number:"); scanf("%d",&num); printf(" \nthe square of the %d is %d \n", num,num*num); } 输入/输出函数 (printf/scanf) 用于接受和显示数据或信息 格式字符 转义字符
printf 函数4-1 int visitor_count = 150; printf (" %d" , visitor_count); 将一些信息按照指定的格式送到标准输出(显示器) 将按指定的格式显示该变量的值 转换字符串 说 明 %d 将参数按整数形式转换输出,对应参数应是int 类型 %ld 将参数按长整数形式转换输出,对应参数应是long 类型 %c 输出一个字符,对应参数应该是一个字符 %s 输出一个字符串,对应参数应该是一个字符串 %f 将参数按带小数点数形式输出,对应参数应是double 类型,默认情况下精确到 6 位小数 %o, %x, %u %e, %g
printf 函数4-2 输出结果:150 int visitor_count = 150; printf (" %d" , visitor_count); 输出结果:150
printf 函数4-3 输出结果: 5500 int salary = 5500; printf (" %10d" , salary); 输出结果: 5500 输出结果的左边显示了 6 个空格
printf 函数4-4 输出结果:78.530000 9.478679 float circumference = 78.53; printf (" %f" , circumference); 9.4786789; 输出结果:78.530000 9.478679 默认情况下精确到六位小数
printf 函数5-5 输出结果: 168.23 double mercury_level = 168.2251074; printf ("%7.2f" , mercury_level); " %7.2f" 输出结果: 168.23 宽度,表示所有的数字和小数点所占的位数。不够7位右对齐。 精度(精确到小数点后多少位)
转义序列 转义序列 名称 描述 输出结果: Name: Audrey Hepburn Movie: ‘Roman Holiday’ 代码: 警告 产生一则警告。 \b 退格 将光标回退一格。 \f 换页 将光标移到下一页的第一格。 \n 换行 将光标移到下一行的第一格。 \r 回车 将光标移到当前行的第一格。 \t 水平制表 将光标移到下一个水平制表位置。 \v 垂直制表 将光标移到下一个垂直制表位置。 \' 单引号 产生一个单引号。 \" 双引号 产生一个双引号。 \? 问号 产生一个问号。 \\ 反斜线 产生一条反斜线。 \0 空 产生一个空字符。 输出结果: Name: Audrey Hepburn Movie: ‘Roman Holiday’ 代码: printf(“Name: Audrey Hepburn \n Movie: \‘Roman Holiday\’”); 转义序列允许在输出结果中包括特殊字符
printf 函数使用示例 #include <stdio.h> void main() { float radius=1.5, high=2.0; float pi=3.14159, vol; /*计算体积*/ vol=pi*radius*radius*high; /*输出体积的值*/ printf("vol=%7.2f\n",vol); } 内存 radius pi high 1.5 2.0 3.14159 vol 14.14 输出: vol= 14.14
printf 函数总结 2.一般格式:printf("格式控制串",输出表) 普通字符:原样输出 转义字符:原义输出 格式说明:%格式字符 1.作用:向计算机系统默认的输出设备(一般指终端或显示器)输出若干个任意类型的数据。 2.一般格式:printf("格式控制串",输出表) 说明: ①格式控制串:包含三种信息 普通字符:原样输出 转义字符:原义输出 格式说明:%格式字符 ②输出表:要输出的常量或变量、表达式,相邻的两个输出项用逗号分隔 例: printf("a=%d,c=%c\n",5,'a'); printf("a=%d,c=%c\n",a,c); printf("a=%d,c=%c\n",3*5,97);
printf 函数总结 格式字符 不同类型的数据用不同的格式字符(%d、%f、%c、%s) 格式字符要用小写输出(除了X,E,G外) 格式字符的个数与输出项的个数应相同,类型相一致,按先后顺序一一对应; 输出字符%应写成printf("%%");
scanf 函数 scanf("%d",&num); 变量的名称 &符号(附在读取的每个变量上)用于指明变量在内存中的位置 转换字符串 转换字符串 参数变量的类型 要求的实际输入 %d int 十进制数字序列 %ld long %f float 十进制数,可以有小数点及指数部分 %lf double
scanf float tax_rate; scanf (" %f" , &tax_rate); 在内存中分配一块 32 位存储空间 提示用户输入一个值 输入的值存储在变量中(因为 scanf 提供此变量的地址) 12.234
scanf 函数使用示例 #include <stdio.h> void main() { double radius,high,vol; printf("请输入圆柱体底面积的半径和圆柱体的高: "); scanf("%lf%lf",&radius,&high); vol=3.14*radius*radius*high; printf("radius=%7.2f, high=%7.2f, vol=%7.2f\n", radius,high,vol); } 内存 radius high 5 10 vol 785 请输入圆柱体底面积的半径和圆柱体的高: 5 10 radius= 5.00, high= 10.00, vol= 785.00
§4.3 字符输入/输出函数 getchar函数 putchar函数
接受并显示字符 字符型数据 getchar() 字符型数据 putchar() 字符型变量
getchar() 函数 getchar() char variablename; variablename = functionname; 语法: char variablename; variablename = functionname; 例如: char c; c=getchar(); getchar()
getchar()和putchar()示例 内存 #include <stdio.h> void main() { char a,b; printf(" 请输入两个字符:\n"); a=getchar(); b=getchar(); putchar(a); putchar(b); putchar('\n'); } a b O K 输出: 请输入两个字符: O K
§ 4.4 常用的数学函数
§ 4.5 顺序结构程序设计 在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。 § 4.5 顺序结构程序设计 在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。 例: 输入任意三个整数,求它们的和及平均值。 main() {int num1,num2,num3,sum; float aver; printf("Please input three numbers:"); scanf("%d,%d,%d",&num1,&num2,&num3);/*输入三个整数*/ sum=num1+num2+num3; /*求累计和*/ aver=sum/3.0; /*求平均值*/ printf("num1=%d,num2=%d,num3=%d\n",num1,num2,num3); printf("sum=%d,aver=%7.2f\n",sum,aver); } [程序演示] 思考题:能否将"aver=sum/3.0;"中"3.0"改为"3"?
<例>求方程ax2+bx+c=0的实数根。要求a,b,c由键盘输入,a≠0且b2-4ac>0。 #include "math.h" main() { float a,b,c,disc,x1,x2; printf("enter coefficient: "); scanf("%f,%f,%f",&a,&b,&c); disc=b*b-4*a*c; x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); }
练习 运行结果示例: please input two letter: A,B↙ the lower is a,b 输入一个华氏温度,要求输出摄氏温度。公式为c=5/8(F-32)。输出要有文字说明,取2位小数。 从键盘输入一小写字母,(1)输出对应的大写字母;(2)输出其前导字母与后续字母。 从键盘任意输入一个三位整数,编程将它逆序输出。例如输入127,输出为721。 从键盘输入x和y的值,求数学公式 的值。 从键盘输入用逗号隔开的两个大写字母,输出两个与之相应的小写字母及其ASCII码值。 运行结果示例: please input two letter: A,B↙ the lower is a,b the ascii is 97,98
总结 及补充 printf中出现的各种格式符 scanf的注意事项 字符型数据的输入输出
printf的各种格式符 (1)d格式符:用来输出十进制整数 ①%d:按整型数据的实际长度输出 ②%md:按m所指定的长度输出。 例:int a=123,b=12345; printf("a=%4d,a=%-4d,b=%4d",a,a,b); 结果:a=123,a=123,b=12345 ③%ld:输出长整型数据 %mld或%-mld :按m指定的长度输出长整型数 例:long a=1234567; printf("a=%ld\n",a); printf("a=%8ld",a); 结果:a=1234567 a= 1234567
printf的各种格式符 (2)o格式符:以八进制形式输出整数 将整数的补码转换成八进制,输出的数值不带符号 形式:①%o②%mo或%-mo ③%lo④%mlo或%-mlo 例:int a=1,b=-1; printf("a=%d,b=%d\n",a,b); printf("a=%o,b=%o\n",a,b); printf("a=%4o,b=%4o",a,b); 结果:a=1,b=-1 a=1,b=177777 a= 1,b=177777
printf的各种格式符 (3)x格式符:以十六进制形式输出整数 将整数的补码转换成十六进制,输出数值不带符号 形式:①%x②%mx或%-mx ③%lx④%mlx或%-mlx (若x为大写则输出的十六进制数中的字母也为大写) 例:int a=-1; printf("%d,%o,%x,%X",a,a,a,a); 结果: -1,177777,ffff,FFFF
printf的各种格式符 (4)u格式符:以十进制形式输出无符号型(unsigned)整数 形式:①%u②%mu或%-mu ③%lu④%mlu或%-mlu 例:unsigned int a=65535; printf("%u,%d",a,a); 结果: 65535,-1
printf(“x=%d, y=%d”, x, y); } main() { int x, y; x=32767; y = x + 1; printf(“x=%d, y=%d”, x, y); } x=32767, y=-32768
unsigned int a, b; a=65535; b=a + 1; printf(“b=%u\n”, b); 0 ~ 65535 1 1 unsigned int a, b; a=65535; b=a + 1; printf(“b=%u\n”, b); To understand: “ 无符号整型 ”
printf(“k=%d, k=%o, k=%x\n”, k,k,k); } main() { int k=11; printf(“k=%d, k=%o, k=%x\n”, k,k,k); } A) k=11,k=12,k=11 B) k=11,k=13,k=13 C) k=11,k=013,k=0xb D) k=11,k=13,k=b
main() { int k=011; printf(“k=%d, k=%o, k=%x\n”, k,k,k); } k=9,k=11,k=b
printf(“%d, %u, %o\n”, x,x,x); } EXAMPLE: main() { int x= -1; printf(“%d, %u, %o\n”, x,x,x); } A) -1, -1, -1 B) -1, 32767, -177777 C) -1, 32768, -177777 D) -1, 65535, 177777
printf(“%d, %u, %o\n”, x,x,x); } main() { int x=-1; printf(“%d, %u, %o\n”, x,x,x); } 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 原码 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 反码 从前面的内容中我们已经知道,补码的作用在于化减法为加法,实现类似于代数中 。。。 。。。 运算。 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 补码 -1 65535 177777
printf(“%d, %u, %o\n”, x,x,x); } main() { int x=-1; printf(“%d, %u, %o\n”, x,x,x); } A) -1, -1, -1 B) -1, 32767, -177777 C) -1, 32768, -177777 D) -1, 65535, 177777
printf的各种格式符 (5)c格式符:输出字符型数据 在0~255范围内的整数可以用字符形式输出 字符型数据也可以用整数形式(ASCII值)输出 形式:①%c②%mc或%-mc 例:char c='a'; putchar(c); printf("%4c,%5d",c,c); 结果: aa,97
printf的各种格式符 (6)s格式符:输出一个字符串 形式:①%s:按字符串实际长度输出 ②%ms或%-ms:按m指定的宽度输出 ③%m.ns:共占m列,取字符串左端n个字符,左补空格 %-m.ns:共占m列,取字符串左端n个字符,右补空格 ④%.ns:没指定m,m自动取n的值 例: printf("%3s,%7.2s\n","china","china"); printf("%.4s,%-5.3s\n","china","china"); 结果: china,ch chin,chi
(7)f格式符:以小数形式输出单、双精度实数 形式:①%f:不指定宽度,整数部分全部输出,小数部分隐含保留6位 printf的各种格式符 (7)f格式符:以小数形式输出单、双精度实数 形式:①%f:不指定宽度,整数部分全部输出,小数部分隐含保留6位 ②%m.nf:共占m列,小数部分占n列,左补空格 %-m.nf:共占m列,小数部分占n列,右补空格 (8)e格式符:以指数形式输出 形式: ①%e:不指定宽度,按规范化指数形式输出,本书保留6位小数,5位指数部分(如e+002) ②%m.ne或%-m.ne (若e为大写则输出的指数中的字母也为大写E) 例:float f=123.456; printf("%f,%E,%10.2e,%.2e,%-10.2f\n",f,f,f,f,f); 运行结果: 123.456001,1.234560E+002,1.23e+002,1.23e+002,123.46
printf的各种格式符 (9)g格式符:输出实数,自动选用%f和%e格式中输出宽度较短的一种格式,不输出无意义的0 形式:①%g或%G 例: float f=123.468; printf("%f,%e,%g\n",f,f,f); 结果: 123.468000,1.234680e+002,123.468 10列 13列 7列
scanf的主意事项 1.一般格式:scanf("格式控制串",地址表列) scanf(“%d",&radius) 2.输入长整型数据或double型数据在格式字符前加l(%ld、%lo、%lx、%lf、) scanf(“%ld",&radius) 3. 如果相邻2个格式符之间,不指定数据分隔符(如逗号、冒号等),则相应的2个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下1个数据。 4. “格式字符串”中出现的普通字符(包括转义字符形式的字 符),务必原样输入。
scanf("%d%d",&num1,&num2); 12 35<回车> 12 <回车> 35 <回车> scanf("%d,%d",&num1,&num2); 12 ,35<回车>
5。使用格式说明符“%c”输入单个字符时,空格和转义字符均作为有效字符被输入。 例如: scanf("%c%c%c",&ch1,&ch2,&ch3); printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3); 假设输入:ABC↙ 则系统将字母'A'赋值给ch1,空格''赋值给ch2,字母'B'赋值给ch3。 结果:ch1=A,ch2=,ch3=B
输入数据时,遇到以下情况,系统认为该数据结束: (a)遇到空格,或者回车键,或者Tab键。 (b)遇到输入域宽度结束。例如"%3d",只取3列。 (c)遇到非法输入。例如,在输入十进制数值数据时,遇到字母等非数值符号(数值符号仅由数字字符0-9、小数点和正负号构成)。 例:scanf("%d%c%f",&a,&b,&c); 如输入:1234a123o.45
6。如果在%后有一个“*”号,表示跳过它所指定的列数,该 输入项在读入后不赋给任何变量 例: scanf("%2d%*3d%2d",&a,&b); printf("a=%d,b=%d",a,b); 输入:1234567 结果:a=12,b=67 7。输入数据时不能规定精度 scanf("%7.2f",&a);