4、基本输入/输出和顺序程序设计
1、格式化输出 printf
1、格式控制字符串用于指定输出格式。包含两类字符:
-
常规字符:包括可显示字符和用转义字符表示的字符。
-
格式控制符:以%开头的一个或多个字符,以说明输出数据的类型、形式、长度、小数位数等。
要想显示 % ,必须在格式控制字符串中使用%%来代替单个%。
如果格式控制字符串中格式控制符的个数多于表达式的个数,则余下的格式控制符的值将不确定;如果格式控制符的个数少于表达式的个数,则不影响。
2、输出有符号整数的格式控制符一般格式为:%[-] [+] [0] [width] [.precision] [l] [h] d
-
[]:表示可选项,可省略。
-
-:表示输出的数据左对齐,默认右对齐。
-
+:输出正数时,在数的前面加上+号。
-
数字0:右对齐时,如果实际宽度小于width,则在左边的空位补0。
-
width:无符号整数,表示输出整数的最小域宽(即占屏幕的多少格)。若实际宽度超过了width,则按照实际
宽度输出。
-
.precision:无符号整数,表示至少要输出precision位。若整数的位数大于precision,则按照实际位数输出,
否则在左边的空位上补0。
-
字母l:如果在d的前面有字母l(long),表示要输出长整型数据。
-
字母h:如果在d的前面有字母h(short),表示要输出短整型数据。
3、输出无符号整数的格式控制符的一般格式位:%[-] [#] [0] [width] [.precision] [l] [h] u|o|x|X
-
|:表示互斥关系。
-
#:表示当以八进制形式输出数据(%o)时,在数字前输出0;当以十六进制形式输出数据(%x或%X)时,在数字
前输出0x或0X。
-
.precision:含义同上,不过它所指定的位数不包含0x或0X所占的位数。
4、输出实数的格式控制符的一般格式位:%[-] [+] [#] [0] [width] [.precision] [l|L] f|e|E|g|G
- #:表示必须输出小数点。
- .precision:规定输出实数时,小数部分的位数。
- l:输出double型的数据(省略时也是输出double型数据)。
- L:输出 long double 型数据。
5、输出字符和字符串的格式控制符的一般格式位:字符:%[-] [0] [width] c 字符串:%[-] [0] [width] [.precision] s
- .precision:表示之输出字符串的前precision个字符。
6、注意点:
-
输出时表达式值的计算顺序是从右到左。
int i=1; printf("%d,%d,%d\n",i,i+1,i=3); //3,4,3
-
格式转换符中,除了X、E、G以外,其他均为小写。
-
表达式的实际数据类型要与格式转换符所表示的类型相符,printf函数不会进行不同数据类型之间的自动转换。(而且前一个的不正常输出会影响到下一个表达式的正常输出。)
2、格式化输入scanf
1、&符号的功能是取变量地址,且只能作用于变量,不能作用于表达式。
2、scanf函数的第一个参数格式控制字符串的含义与printf函数的第一个参数完全相同,都包含两类字符,常规字 符和格式控制符。
3、scanf函数的格式控制符的一般格式为:%[*] [width] [l|h] Type
- width:指定输入数据的域宽,遇空格或不可转换字符则结束。
- Type:表4-4列出的各种格式转换符。
- *:抑制符,输入的数据不会赋值给相应的变量。
- l:用于d、u、o、x|X前,指定输入为long型整数;用于e|E、f前,指定输入为double型实数。
- h:用于d、u、o、x|X前,指定输入为short型整数。
4、scanf函数的注意点
- 如果相邻两个格式控制符之间,不指定数据分隔符(如逗号、冒号等),则相应的两个输入数据之间,至少用一个空格分隔,或者用Tab键分隔,或者输入一个数据后,按回车键,然后再输入下一个数据。
- 格式控制字符串中出现的常规字符(包括转义字符),务必原样输入。
- 当格式控制字符串中指定了输入数据的域宽width时,将读取输入数据中相应的width位,按需要的位数赋给相应的变量,多余部分舍弃。
- 使用格式控制符%c输入单个字符时,空格和转义字符均作为有效字符被输入。
- 输入数据时,遇到以下情况,系统认为该数据输入结束:
- 遇到空格或者回车键或者Tab键。
- 遇到输入域宽度结束。
- 遇到非法输入。
- 当一次scanf调用需要输入多个数据项时,如果前面数据的输入遇到非法字符,并且输入的非法字符不是格式控制字符串中的常规字符,这种非法输入将影响后面数据的输入,导致输入失败。
5、在输入数据类型和字符类型的两个scanf函数之间通常使用fflush库函数以清除键盘缓冲区中的字符。
3、字符数据的非格式化输入/输出
1、字符数据的非格式化输入(getchar、getc、getche、getch)
回显就是能在输入屏幕看到你输入的字符。
注意在多个字符输入时,空格之类字符也会算进去。
它们的返回值都是所取字符的ASCII码。
2、字符数据的非格式化输出
putchar、putc 返回值:若正常,返回显示字符的代码值;若出差,返回EOF(-1)。
puts输出后将自动换行。
函数原型所在头文件均为stdio.h。
4、程序的控制结构
1、算法的特点:
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
2、算法的描述方法
- 自然语言
- 传统流程图
- N-S流程图
- 伪代码
3、算法的基本结构
三种基本结构:顺序结构、选择(分支)结构和循环结构。
结构化方法结构清晰,易于纠错。遵循这种方法的程序设计就是结构化程序设计。
循环结构有两种基本形态:while循环(当型循环)和do-while循环(直到型循环)
5、易错
#include或#define命令不用分号结束。
调用scanf函数输入浮点数时不能规定精度。
算法是解决某个问题的具体方法和步骤。