《C语言程序设计PPT课件第4章键盘输入和屏幕输出.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计PPT课件第4章键盘输入和屏幕输出.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第第第4 4 4 4章章章章 键盘输入键盘输入键盘输入键盘输入和屏幕输出和屏幕输出和屏幕输出和屏幕输出2023/1/162/38本章学习内容本章学习内容 字符常量与转义字符字符常量与转义字符 字符输出函数字符输出函数putchar()字符输入函数字符输入函数getchar()数据的格式化输出函数数据的格式化输出函数printf()数据的格式化输入函数数据的格式化输入函数scanf()2023/1/163/38字符常量字符常量 字符常量是用单引号括起来的一个字符字符常量是用单引号括起来的一个字符字符常量是用单引号括起来的一个字符字符常量是用单引号括起来的一个字符aa是字符常量,而是字符常量,而
2、是字符常量,而是字符常量,而a a则是一个标识符则是一个标识符则是一个标识符则是一个标识符33表示一个字符常量,而表示一个字符常量,而表示一个字符常量,而表示一个字符常量,而3 3则表示一个整数则表示一个整数则表示一个整数则表示一个整数 转义字符转义字符转义字符转义字符(Escape CharacterEscape Character)一些特殊字符(无法从键盘输入或者另有他用)用一些特殊字符(无法从键盘输入或者另有他用)用一些特殊字符(无法从键盘输入或者另有他用)用一些特殊字符(无法从键盘输入或者另有他用)用转义字符表示转义字符表示转义字符表示转义字符表示2023/1/164/38 字符型变量
3、的取值范围取决于计算机系统所使用的字符集字符型变量的取值范围取决于计算机系统所使用的字符集字符型变量的取值范围取决于计算机系统所使用的字符集字符型变量的取值范围取决于计算机系统所使用的字符集 ASCIIASCII(美国标准信息交换码)字符集(美国标准信息交换码)字符集(美国标准信息交换码)字符集(美国标准信息交换码)字符集 规定了每个字符所对应的编码规定了每个字符所对应的编码规定了每个字符所对应的编码规定了每个字符所对应的编码 一个字符以其对应的一个字符以其对应的一个字符以其对应的一个字符以其对应的ASCIIASCIIASCIIASCII码的二进制形式存储在内存中码的二进制形式存储在内存中码的
4、二进制形式存储在内存中码的二进制形式存储在内存中 一个字节,保存一个字符(英文字母、数字、符号)一个字节,保存一个字符(英文字母、数字、符号)一个字节,保存一个字符(英文字母、数字、符号)一个字节,保存一个字符(英文字母、数字、符号)字符常数就是一个普通整数,也可参与各种数学运算字符常数就是一个普通整数,也可参与各种数学运算字符常数就是一个普通整数,也可参与各种数学运算字符常数就是一个普通整数,也可参与各种数学运算 每个字符具有一个每个字符具有一个每个字符具有一个每个字符具有一个02550255之间的数值,可从之间的数值,可从之间的数值,可从之间的数值,可从ASCIIASCII表查出表查出表查
5、出表查出 注意:注意:注意:注意:55和整数和整数和整数和整数5 5的区别的区别的区别的区别 55的的的的ASCIIASCII码值是码值是码值是码值是5353字符常量字符常量2023/1/165/384.1单个字符的输入单个字符的输入/输出输出 通过调用标准库函数来实现通过调用标准库函数来实现通过调用标准库函数来实现通过调用标准库函数来实现#includeinclude 字符输出函数字符输出函数字符输出函数字符输出函数putchar(ch)putchar(ch)输出输出输出输出一个一个一个一个字符字符字符字符chch 字符输入函数字符输入函数字符输入函数字符输入函数getchar()getch
6、ar()无参数无参数无参数无参数函数值为从输入设备接收的字符函数值为从输入设备接收的字符函数值为从输入设备接收的字符函数值为从输入设备接收的字符2023/1/166/38【例例4.1】大小写英文字母转换大小写英文字母转换Press a key and then press Enter:B b ch=ch-(a A);What does this statement mean?2023/1/167/384.2数据的格式化屏幕输出数据的格式化屏幕输出 格式格式格式格式printf(格式控制字符串格式控制字符串,输出项表列输出项表列);printf(a=%d b=%f,a,b);可以输出若干可以输出
7、若干可以输出若干可以输出若干任意类型任意类型任意类型任意类型的数据的数据的数据的数据 函数名函数名可选输可选输出表列出表列普通普通字符字符格式格式说明说明2023/1/168/38%c character以字符形式输出单个字符以字符形式输出单个字符%s string 输出一个字符串输出一个字符串%d decimal 以带符号十进制整数输出以带符号十进制整数输出%f float 以小数形式输出浮点数(以小数形式输出浮点数(6位小数)位小数)%e exponent 以标准指数形式输出(以标准指数形式输出(6位小数)位小数)%g 选用选用%f,%e中输出宽度较小的一种格式中输出宽度较小的一种格式%o
8、 octal 以八进制无符号整数输出(无前导以八进制无符号整数输出(无前导0)%x hex 以十六进制无符号整数输出(无前导以十六进制无符号整数输出(无前导0 x)%u unsigned 以十进制无符号整数输出以十进制无符号整数输出printf()printf()格式字符格式字符格式字符格式字符2023/1/169/38【例例4.2】大小写英文字母转换大小写英文字母转换Press a key and then press Enter:B b,982023/1/1610/38m 表示数据占用的最小宽度表示数据占用的最小宽度 数据宽度大于数据宽度大于m,按实际宽度输出,按实际宽度输出 数据宽度小于
9、数据宽度小于m时,补空格时,补空格n 对实数表示输出对实数表示输出n位小数位小数 对字符串表示最多输出的字符个数对字符串表示最多输出的字符个数l 长整型整数长整型整数,加在,加在d、o、x、u前前L long double型数,加在型数,加在f、e、g前前-改变输出内容的对齐方式改变输出内容的对齐方式 默认为右对齐默认为右对齐printf()printf()的格式修饰符的格式修饰符的格式修饰符的格式修饰符2023/1/1611/38printf()的格式修饰符的格式修饰符Format for float:%f%f General format:%.f fExample:printf(Value
10、 is:%10.4f,32.6784728);Value is:32.6785 10 characters4 digits2023/1/1612/38printf()的格式修饰符的格式修饰符Example:printf(Value is:%10f,32.6784728);Value is:32.67847310 characters6 digits(default)2023/1/1613/38Example:printf(Value is:%.3f,32.6784728);Value is:32.678 3 digitsprintf()的格式修饰符的格式修饰符2023/1/1614/38Inp
11、ut r:5.3 printf WITHOUT width or precision specifications:circumference=33.300854,area=88.247263printf WITH width and precision specifications:circumference=33.30,area=88.25【例例例例4.34.3】计算圆的周长和面积计算圆的周长和面积计算圆的周长和面积计算圆的周长和面积 2023/1/1615/384.3数据的格式化键盘输入数据的格式化键盘输入 格式格式格式格式scanf(格式控制字符串格式控制字符串,地址表列地址表列);s
12、canf(%d,%f,&a,&b);格式字符格式字符指定输入数指定输入数据格式据格式输入数据输入数据地址表列地址表列非格式字符非格式字符输入数据以输入数据以,分隔分隔没有时可以没有时可以空格空格、Tab或或回车回车分隔分隔2023/1/1616/38c 以字符形式输入单个字符以字符形式输入单个字符s 输入字符串输入字符串,以非空字符开始以非空字符开始,遇第一个遇第一个 空白字符结束空白字符结束d 以带符号十进制形式输入整型数据以带符号十进制形式输入整型数据f 以小数形式输入浮点数以小数形式输入浮点数e 以标准指数形式输入以标准指数形式输入o 以八进制无符号形式输入(无前导以八进制无符号形式输入
13、(无前导0)x 以十六进制无符号形式输入(无前导以十六进制无符号形式输入(无前导0 x)scanf()scanf()的格式字符的格式字符的格式字符的格式字符2023/1/1617/38m 表示数据占用的宽度表示数据占用的宽度l 加在加在d、o、x、u前:输入长整型前:输入长整型 加在加在f、e 前:输入双精度型前:输入双精度型L 加在加在f、e 前:输入前:输入long double型型h 加在加在d、o、x 前前:输入短整型输入短整型*本输入项在读入后不赋给相应的变量本输入项在读入后不赋给相应的变量scanf()scanf()的格式修饰符的格式修饰符的格式修饰符的格式修饰符2023/1/16
14、18/38#includeinclude main()main()intint a,b;a,b;printf(Please input a and b:);printf(Please input a and b:);scanf(%2d scanf(%2d%*2d%*2d%2d,&a,&b);%2d,&a,&b);printf(a=%d,b=%d,a+b=%dn,a,b,a+b);printf(a=%d,b=%d,a+b=%dn,a,b,a+b);Please input a and b:a=12,b=56,a+b=68123456 跳过一个输入项跳过一个输入项输入数据的格式控制输入数据的格式控
15、制输入数据的格式控制输入数据的格式控制2023/1/1619/38#includeinclude main()main()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);printf(a=%d,b=%dn,a,b);问题问题问题问题1 1:当要求程序输出结果为:当要求程序输出结果为:当要求程序输出结果为:当要求程序输出结果为 a=12,b=34a=12,b=34时,用户应该如何输入数据?时,用户应该如何输入数据?时,用户应该如何输入数据?时,用户应该如何输入数据?12 34 输入数据的格式控制输
16、入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.44.44.44.42023/1/1620/38#includeinclude main()main()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);printf(a=%d,b=%dn,a,b);问题问题问题问题2 2:当限定用户输入数据以逗号为分隔符,即输入数据:当限定用户输入数据以逗号为分隔符,即输入数据:当限定用户输入数据以逗号为分隔符,即输入数据:当限定用户输入数据以逗号为分隔符,即输入数据格式为:格式为:格式为:格式为:
17、12,3412,34 时,应修改程序中的哪条语句?怎样修改?时,应修改程序中的哪条语句?怎样修改?时,应修改程序中的哪条语句?怎样修改?时,应修改程序中的哪条语句?怎样修改?,输入数据的格式控制输入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.44.44.44.42023/1/1621/38#includeinclude main()main()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);printf(a=%d,b=%dn,a,b);问题问题问题问题3 3:语句:语句:语句:
18、语句scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);修改为修改为修改为修改为scanf(scanf(a=a=%d,%d,b=b=%d,&a,&b);%d,&a,&b);时,用户应该如何输入数据?时,用户应该如何输入数据?时,用户应该如何输入数据?时,用户应该如何输入数据?a=12,b=34a=12,b=34 输入数据的格式控制输入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.44.44.44.42023/1/1622/38#includeinclude main()main()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(
19、%d%d,&a,&b);printf(a=%d,b=%dn,a,b);printf(a=%d,b=%dn,a,b);问题问题问题问题4 4:限定用户输入数据为以下格式:限定用户输入数据为以下格式:限定用户输入数据为以下格式:限定用户输入数据为以下格式 12341234 同时要求程序输出结果为同时要求程序输出结果为同时要求程序输出结果为同时要求程序输出结果为a=12,b=34a=12,b=34%2d%2d%2d%2d 输入数据的格式控制输入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.44.44.44.42023/1/1623/38#includeinclude main()ma
20、in()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(a=%d,b=%d n,a,b);printf(a=%d,b=%d n,a,b);问题问题问题问题5 5:限定用户输入数据为以下格式:限定用户输入数据为以下格式:限定用户输入数据为以下格式:限定用户输入数据为以下格式1212 3434 同时要求程序输出结果为同时要求程序输出结果为同时要求程序输出结果为同时要求程序输出结果为a=12,b=34a=12,b=34%d%d ,b=,b=%d%d输入数据的格式控制输入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.4
21、4.44.44.42023/1/1624/38#includeinclude main()main()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);printf(a=%d,b=%dn,a,b);问题问题问题问题6 6:设计程序使得用户可以以任意字符(回车、空格、:设计程序使得用户可以以任意字符(回车、空格、:设计程序使得用户可以以任意字符(回车、空格、:设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其他)作为分隔符进行数据的输入制表符、逗号、其他)作为分隔符进行数据的输入制表符、逗
22、号、其他)作为分隔符进行数据的输入制表符、逗号、其他)作为分隔符进行数据的输入输入数据的格式控制输入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.44.44.44.4%*c2023/1/1625/38#includeinclude main()main()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);printf(a=%d,b=%dn,a,b);问题问题问题问题7 7:输入:输入:输入:输入123456123456时程序的输出结果是什么?时程序的输出结果是什么?时程序的输出结果
23、是什么?时程序的输出结果是什么?输入数据的格式控制输入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.44.44.44.4%*2da=12,b=56a=12,b=562023/1/1626/38#includeinclude main()main()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);printf(a=%d,b=%dn,a,b);问题问题问题问题8 8:如果用户输入了非法字符,例如输入了:如果用户输入了非法字符,例如输入了:如果用户输入了非法字符,例如输入了:如果用户输
24、入了非法字符,例如输入了12 3a12 3a,那么程序运行结果如何?那么程序运行结果如何?那么程序运行结果如何?那么程序运行结果如何?输入数据的格式控制输入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.44.44.44.412 3a12 3a a=12,b=3a=12,b=32023/1/1627/38#includeinclude main()main()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);printf(a=%d,b=%dn,a,b);问题问题问题问题9 9:如果用
25、户输入的是:如果用户输入的是:如果用户输入的是:如果用户输入的是123a123a,那么结果又会如何呢?,那么结果又会如何呢?,那么结果又会如何呢?,那么结果又会如何呢?输入数据的格式控制输入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.44.44.44.4123a123a a=123,b=-858993460a=123,b=-8589934602023/1/1628/38#includeinclude main()main()intint a,b;a,b;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);pri
26、ntf(a=%d,b=%dn,a,b);问题问题问题问题1010:如果程序第:如果程序第:如果程序第:如果程序第5 5行语句修改为行语句修改为行语句修改为行语句修改为.,那么结果又会如,那么结果又会如,那么结果又会如,那么结果又会如何呢?何呢?何呢?何呢?输入数据的格式控制输入数据的格式控制输入数据的格式控制输入数据的格式控制例例例例4.44.44.44.4 a,b2023/1/1629/38#includeinclude main()main()intint data1,data2,sum;data1,data2,sum;charchar op;op;printf(Please enter
27、the expression printf(Please enter the expression data1+data2n);data1+data2n);scanf(%d%c%d,&data1,&op,&data2);scanf(%d%c%d,&data1,&op,&data2);printf(%d%c%d=%dn,printf(%d%c%d=%dn,data1,op,data2,data1+data2);data1,op,data2,data1+data2);Please enter the expression data1+data2Please enter the expression
28、 data1+data2 第第第第1 1次测试次测试次测试次测试12+312+3 12 4199288=4199300 12 4199288=4199300 C C C C格式符的问题及解决格式符的问题及解决格式符的问题及解决格式符的问题及解决例例例例4.54.54.54.52023/1/1630/38#includeinclude main()main()intint data1,data2,sum;data1,data2,sum;charchar op;op;printf(Please enter the expression printf(Please enter the express
29、ion data1+data2n);data1+data2n);scanf(%d%c%d,&data1,&op,&data2);scanf(%d%c%d,&data1,&op,&data2);printf(%d%c%d=%dn,printf(%d%c%d=%dn,data1,op,data2,data1+data2);data1,op,data2,data1+data2);Please enter the expression data1+data2Please enter the expression data1+data2 第第第第2 2次测试次测试次测试次测试12 312 3 12 3=
30、15 12 3=15 C C C C格式符的问题及解决格式符的问题及解决格式符的问题及解决格式符的问题及解决例例例例4.54.54.54.52023/1/1631/38#includeinclude main()main()intint data1,data2,sum;data1,data2,sum;charchar op;op;printf(Please enter the expression printf(Please enter the expression data1+data2n);data1+data2n);scanf(%d%c%d,&data1,&op,&data2);scan
31、f(%d%c%d,&data1,&op,&data2);printf(%d%c%d=%dn,printf(%d%c%d=%dn,data1,op,data2,data1+data2);data1,op,data2,data1+data2);Please enter the expression data1+data2Please enter the expression data1+data2 第第第第3 3次测试次测试次测试次测试12+312+3 12+3=15 12+3=15 C C C C格式符的问题及解决格式符的问题及解决格式符的问题及解决格式符的问题及解决例例例例4.54.54.54
32、.52023/1/1632/38#includeinclude main()main()intint a;a;charchar b;b;floatfloat c;c;printf(Please input an integer:);printf(Please input an integer:);scanf(%d,&a);scanf(%d,&a);printf(integer:%dn,a);printf(integer:%dn,a);printf(Please input a character:);printf(Please input a character:);scanf(%c,&b);
33、scanf(%c,&b);printf(character:%cn,b);printf(character:%cn,b);printf(Please input a float number:);printf(Please input a float number:);scanf(%f,&c);scanf(%f,&c);printf(float:%fn,c);printf(float:%fn,c);Please input an integer:希望得到的运行结果希望得到的运行结果希望得到的运行结果希望得到的运行结果12 Please input an character:a Please i
34、nput a float number:3.5 integer:12character:afloat number:3.500000C C C C格式符的问题及解决格式符的问题及解决格式符的问题及解决格式符的问题及解决例例例例4.64.64.64.62023/1/1633/38#includeinclude main()main()intint a;a;charchar b;b;floatfloat c;c;printf(Please input an integer:);printf(Please input an integer:);scanf(%d,&a);scanf(%d,&a);pr
35、intf(integer:%dn,a);printf(integer:%dn,a);printf(Please input a character:);printf(Please input a character:);scanf(%c,&b);scanf(%c,&b);printf(character:%cn,b);printf(character:%cn,b);printf(Please input a float number:);printf(Please input a float number:);scanf(%f,&c);scanf(%f,&c);printf(float:%fn
36、,c);printf(float:%fn,c);Please input an integer:结果好像很奇怪呀!结果好像很奇怪呀!结果好像很奇怪呀!结果好像很奇怪呀!12 Please input an character:a Please input a float number:3.5 integer:12float number:3.500000C C C C格式符的问题及解决格式符的问题及解决格式符的问题及解决格式符的问题及解决例例例例4.64.64.64.62023/1/1634/38#includeinclude main()main()intint a;a;charchar b
37、;b;floatfloat c;c;printf(Please input an integer:);printf(Please input an integer:);scanf(%d,&a);scanf(%d,&a);printf(integer:%dn,a);printf(integer:%dn,a);printf(Please input a character:);printf(Please input a character:);getchar();getchar();/*/*将存于缓冲区中的回车字符读入,避免被后面的变量作为有效字符读入将存于缓冲区中的回车字符读入,避免被后面的变量
38、作为有效字符读入将存于缓冲区中的回车字符读入,避免被后面的变量作为有效字符读入将存于缓冲区中的回车字符读入,避免被后面的变量作为有效字符读入*/scanf(%scanf(%c c,&b);,&b);printf(character:%cn,b);printf(character:%cn,b);printf(Please input a float number:);printf(Please input a float number:);scanf(%f,&c);scanf(%f,&c);printf(float:%fn,c);printf(float:%fn,c);Please input
39、an integer:程序修改后得到的运行结果程序修改后得到的运行结果程序修改后得到的运行结果程序修改后得到的运行结果12 Please input an character:a Please input a float number:3.5 integer:12character:afloat number:3.500000C C C C格式符的问题及解决格式符的问题及解决格式符的问题及解决格式符的问题及解决例例例例4.64.64.64.62023/1/1635/38#includeinclude main()main()intint a;a;charchar b;b;floatfloat
40、c;c;printf(Please input an integer:);printf(Please input an integer:);scanf(%d,&a);scanf(%d,&a);printf(integer:%dn,a);printf(integer:%dn,a);printf(Please input a character:);printf(Please input a character:);scanf scanf(“%c%c”,&b);&b);/*/*第第第第2 2种解决方案种解决方案种解决方案种解决方案:在在在在%c%c前加一个空格前加一个空格前加一个空格前加一个空格*
41、/*/printf(character:%cn,b);printf(character:%cn,b);printf(Please input a float number:);printf(Please input a float number:);scanf(%f,&c);scanf(%f,&c);printf(float:%fn,c);printf(float:%fn,c);C C C C格式符的问题及解决格式符的问题及解决格式符的问题及解决格式符的问题及解决例例例例4.64.64.64.62023/1/1636/38#includeinclude main()main()intint d
42、ata1,data2,sum;data1,data2,sum;charchar op;op;printf(Please enter the expression printf(Please enter the expression data1+data2n);data1+data2n);scanf(%d scanf(%d%c%c%d,&data1,&op,&data2);%d,&data1,&op,&data2);printf(%d%c%d=%dn,printf(%d%c%d=%dn,data1,op,data2,data1+data2);data1,op,data2,data1+data2)
43、;12+312+3 12+312+3 1212 +3 3 再回头来看例再回头来看例再回头来看例再回头来看例4.54.54.54.5 如何以任意分隔符输入加法算式?如何以任意分隔符输入加法算式?如何以任意分隔符输入加法算式?如何以任意分隔符输入加法算式?2023/1/1637/38格式输入函数常见错误格式输入函数常见错误scanf(%d,%fn,&a,&b);scanf(%d,%f,a,b);scanf(%7.2f,&a);几点忠告几点忠告不要拘泥于细节不要拘泥于细节不要拘泥于细节不要拘泥于细节不要死记硬背不要死记硬背不要死记硬背不要死记硬背在使用中慢慢掌握在使用中慢慢掌握在使用中慢慢掌握在使用中慢慢掌握注意!注意!注意!注意!2023/1/1638/38 Questions and answersQuestions and answers