![C语言程序设计实例教程(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/105/41865105/b_41865105.jpg)
3.1 顺序结构程序设计
学习目标
1)掌握程序的几种基本结构。
2)掌握顺序结构程序设计的程序模式。
3)掌握字符型输入输出函数。
4)掌握常用的格式输入输出函数。
5)掌握头文件在编写程序时的作用。
6)掌握复合语句和空语句的格式及作用。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/40_01.jpg?sign=1738950070-QDmGrrmZgYAj0adwU04bxfJooNdI1ShQ-0-4cb012afa5fc45ba34d8cb6f7da0fd51)
实例11
实例11字符型数据的输入和输出——输入与输出几个字符
实例任务
输入几个字符然后将其输出。程序运行结果如图3-1所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/40_02.jpg?sign=1738950070-kMyq8L3Kxvq3B5sEcFQRh37c8Qyon2LZ-0-083fc69bcdd24e01b7b68d4a1e1ce7e0)
图3-1 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/40_03.jpg?sign=1738950070-MYqg1Xp2Xp63QL1QFwg2DNp0rARELY3P-0-a810f958def7418ef0a98c70a9d4cf0e)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/41_01.jpg?sign=1738950070-RSXmzk45ge290vcWtUdt6iuP3Dj4AX7H-0-b503e8f1138a508ff4030462807a73cb)
相关知识
1.程序的几种基本结构
C语言中,常用的流程控制结构分为顺序结构、选择结构和循环结构。由这3种结构可组成各种复杂的程序。顺序结构是3种结构中最简单、最常见的程序结构。3种流程控制结构使用特定的流程控制语句,从而实现程序的各种结构方式。C语言中常用的控制语句有if语句、switch语句、do while语句、while语句、for语句、continue语句、break语句等。
2.顺序结构的执行过程
所谓“程序结构”,即指程序中语句的执行顺序。程序设计者要把事情交给计算机去做,都是写出一条条语句并顺序执行,这是顺序结构。本例中的程序运行就是顺序执行每条语句。
3.getchar()函数
getchar()函数是一个没有参数的函数,它从标准输入(键盘)读取一个字符,返回该字符的编码值。当使用此函数时,按下的键将自动回显到屏幕上。使用getchar()函数时,任何键都是有效的返回值。调用没有参数的函数时应在函数名后写一对空括号。下面的代码演示了getchar()函数的用法:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/41_02.jpg?sign=1738950070-UlUfB1fRUiAkvXdYHJZozgvY1QJe925M-0-69c16a15e23ff17800602e87c6e1e220)
getchar()函数只能接收单个字符,输入数字也按字符处理。当输入多于一个字符时,只接收第一个字符。使用getchar()函数时需要注意这一点。
函数fflush()用于清空输入缓冲区。stdin是标准的输入,即键盘输入。分配给键盘的缓冲区需要清空,以便存储新数据。有时,键盘缓冲区中保留着旧信息,如果不清空,在接收字符时会将旧信息返回,这样就可能引发错误。
4.putchar()函数
putchar()函数对应于getchar()函数,它把一个字符送到标准输出。例如:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/41_03.jpg?sign=1738950070-NrFKUVI6CcTPrIWIM7u0nWWvOJC3sU9f-0-2726ab62f46c4d3360a97a4b828ebeca)
两个字符'o'和'k'将被送到标准输出。标准输出的默认连接通常是计算机显示器,因此执行这两条语句的效果使字符在计算机屏幕上显示出来。实例中创建了3个变量a、b和c,getchar()函数将用户输入的字符存储在这些变量中。每个getchar()前都使用一个fflush()函数清空缓冲区。在该程序中,如果不使用fflush(),也不会出现问题。随着每个getchar()函数的执行,输入的字符就显示在屏幕上。最后一行输出结果将显示前面输入的所有字符。此输出结果表明,使用putchar()函数后,所有字符将显示在同一行上,最后换行(输出一个换行符),程序随即结束。
课堂精练
1)从键盘输入3个数,并计算它们的和值。程序运行结果如图3-2所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/42_01.jpg?sign=1738950070-hnKR9v4DV30ixnNSks9r8fNaCYGjhAiW-0-62f6b0dae38eab19327b6211d27cd9f6)
图3-2 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/42_02.jpg?sign=1738950070-OmwEKBJ2wa92UlXpv1gHCYkZF2on6d0H-0-178dcbfdd53daff1cff1e873bd5acd91)
2)从键盘输入2个整数,计算两数整除所得的余数。程序运行结果如图3-3所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/42_03.jpg?sign=1738950070-HFlErzTvUUXRcgaIBZbpi8pjyn9wv8uM-0-a49e2faa8a830ebcb6f4bfe499339bfe)
图3-3 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/42_04.jpg?sign=1738950070-nbTfyzM8Kp7QD5OxJxGBwk2w8SRXjLMn-0-0ec5e1aa26509fd88d4c9a470207cf14)
3)从键盘输入一个大写字母,输出该字母的小写。程序运行结果如图3-4所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/43_01.jpg?sign=1738950070-nK5tfYKouCU8wRdAba0UFVjK1ed2Lj6g-0-40522c3d3296d580b39f2f3b9638b5e6)
图3-4 程序运行结果(3)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/43_02.jpg?sign=1738950070-l9aMRJ1XXCBBScMHjqOtOt7DgOy0X859-0-0f9527256872cf650a5c91d035dd3fcc)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/43_03.jpg?sign=1738950070-zodFa3e01ReX1mYxgKUQXsSPqqFUkdnE-0-684403ccb21640df31408528017b687b)
实例12
实例12 格式化数据的输入和输出——互换两个变量的值
实例任务
接收两个整数,分别保存在两个变量中,通过第三个变量将这两个变量的值互换。程序运行结果如图3-5所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/43_04.jpg?sign=1738950070-rhrTbgAaxiNyLMtK6AIWRm7c29juCVTW-0-42038e7bb4f23a325df3abb4a05ad835)
图3-5 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/43_05.jpg?sign=1738950070-RBApOhYFyumJQRZQ0JGOyHrMWXSBPjNh-0-c8a86dd80209302250ab6d6d18b4da67)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/44_01.jpg?sign=1738950070-pVCoU4EDClI5curLK4odcmiqWIExFoJm-0-97c7ca6800741ed724c59f9353f6b289)
相关知识
1.头文件stdio.h
C语言的格式输入函数scanf()和格式输出函数printf()都在头文件stdio.h里。因此,编程中使用它们时,在程序的开始处应该书写一条包含命令:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/44_02.jpg?sign=1738950070-vXqMBE18ANU5U7H2UdXBevsPU2qQkAMm-0-4ab05d7dbbcbb5b89964477812f9d39b)
或
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/44_03.jpg?sign=1738950070-JI94uUctVfoNiwXVqlstmurrHHbVPVMS-0-17b9df2187573d45f30a0a0e03379037)
2.格式输出函数printf()
格式输出函数printf()的功能是按指定的格式将数据在标准设备上进行输出。其一般格式为:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/44_04.jpg?sign=1738950070-nV0SOTpliPtgAyFfDFghhKPUV3HOBWix-0-22f45378367d3271ad2b388f710c5f2f)
其中输出项表列由各输出项组成,各输出项之间用逗号分隔开。输出项可以是合法的变量、常量或表达式。
格式控制参数是由双引号括起来的字符串,它是由格式描述符和普通字符组成的。普通字符将被原样输出。格式描述符以%开头,以一个格式字符结束,作用是将输出数据按指定的格式输出。常用的格式描述符包括以下几种类型。
● %d:以十进制形式输出带符号的整数。
● %o:以八进制无符号形式输出整数。
● %x:以十六进制无符号形式输出整数。
● %c:用于输出单个字符。
● %f:以十进制形式输出实型数据。
● %s:用于输出字符串。
在printf()函数中的一个格式描述符对应一个输出数据,也就是说,必须在输出项表列中有一个变量与之相对应,且类型要前后一致。
说明:
1)在%与格式字符间插入整数来指定输出宽度。
● %md:表明所输出的数据占m个字符的宽度,如果实际输出数据的字符数大于m,则按实际的位数输出,否则在输出数据的左端补空格。
● %mc:表明输出的字符占m个字符的宽度,如果m大于1,则左端补空格。
● %ms:表明输出m个字符的字符串。如果实际长度大于m,则按原样输出字符串,否则左端补空格。
● %m.nf:表明输出数据的总宽度为m(包括整数位数、小数点和小数位数),n为小数位数。如果输出的数据的总长度小于m,则在输出数据的左端补空格。对于小数部分,若n小于实际输出的小数位数,则对第n+1位进行四舍五入。
格式控制符与输出结果之间的关系如表3-1所示(其中Ц表示空格)。
表3-1 格式控制符与输出结果之间的关系
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/45_01.jpg?sign=1738950070-YphrtyMg0p93Y82OhUscnLH32JwaK0aB-0-69995c252f9ac882c2f0652fcf1965f5)
2)若需在输出的数值型数据前带正负号,可以通过在%与格式字符间加一个“+”来实现。例如:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/45_02.jpg?sign=1738950070-q7j1Y8rK63Io1tTh6bzSYPlR1VcBN6hp-0-f4c1b04d57d7d76dff4212d5f6d4e851)
语句的输出结果为:+1,-1。
3)如需在输出数据前加前导0,可以通过在%与指定输出宽度的整数间加一个“0”来实现。例如:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/45_03.jpg?sign=1738950070-zWZah4uESqRuwXgi0wMzFzhrfgmwz0Hc-0-ad6225f30ea4c657ec16113394b077d9)
则输出结果为:00122。
4)在格式控制字符串中,如果两个%连用,则输出一个%。例如:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/45_04.jpg?sign=1738950070-72rWVlwEQKWFY294gM7IPFkLpGMH6LT1-0-946a91be060d86887e6730f50a96ab38)
语句的输出结果为:%10。
3.格式输入函数scanf()
格式输入函数scanf ()的功能是按指定的格式从键盘上输入数据。其一般格式为:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/45_05.jpg?sign=1738950070-5JHpTShdXDx7UpHO3TqoSE1et3iIW8Yg-0-6769b09a1cf71178441718ce4e826846)
其中,地址项表列是由接收数据的变量的地址组成,求地址运算符为&,如&a,&b,&c。
格式控制参数是由双引号括起来的字符串,里边有格式描述符和输入数据分隔符。常用的格式描述符与printf ()函数的格式描述符相同。
在scanf ()函数中的一个格式描述符对应一个输入数据,也就是说,必须在地址项表列中有一个变量与之相对应,且类型要前后一致。
1)如果输入数值型数据,数据间要用空格、〈Tab〉键或〈Enter〉键(即回车键)分隔。例如:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/46_01.jpg?sign=1738950070-Yrdz0KfqVzmDLfOpukdZCgLIL7Dk4YTR-0-d9353e1c68892c6d8941d397e5e9f696)
对应此语句,可输入13 789↙(↙表示回车)。
2)如果在各格式描述符间有分隔符,则在输入数据时,要输入相同的字符作为分隔符。例如:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/46_02.jpg?sign=1738950070-LDrzhPdf74OGmFjoARxQJaK2PQ4saeXW-0-a1f9fd5a382b7dcb14393e6c5b972e80)
对应此语句,要求输入数据间要用“,”分隔。可输入:13,789↙。
3)如果要输入多个字符数据,则不需要在各字符间输入分隔符。例如:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/46_03.jpg?sign=1738950070-dPRfEX3hhonTZ1KTmxKibSzj2P7b7FHW-0-a2147c0ff778d2c0d8e87ee6c4c563b5)
对应此语句,可输入:AB↙。则对应a输入字符A,对应b输入字符B。
4)当交叉输入数值数据和字符数据时,如果字符数据在前,则字符数据和数值数据间要有空格;如果数值数据在前,则数值数据和字符数据间不要有空格。例如:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/46_04.jpg?sign=1738950070-StQCoQaLXheieZar1ywxr7XumJobmmAm-0-434706ea7eec34f8d38cb90f5322997f)
对应此语句,必须输入:20A 30B↙。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/46_05.jpg?sign=1738950070-DUG3yudPfngFuNUfGJlQ97fLOCzMirfk-0-ae72ebb39dd3364e42f326b43ffa6ebf)
对应此语句,可以输入:A 20B 30↙。
4.复合语句
在C语言程序中,可以用一对花括号把若干条语句括起来使其形成一个整体,这个整体就被称为复合语句。从语法上讲,复合语句相当于一条语句。复合语句的一般格式是:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/46_06.jpg?sign=1738950070-P8D8ZDrdUA0gVPVpUxBxl1dJLVv0dDWg-0-1a7e0c99d2c376d053982fc96ae24f30)
要注意,复合语句中可以出现变量说明,复合语句中的最后一条语句的语句结束符(分号)不能省略,否则会造成语法错误。另外,标识复合语句结束的右花括号的后面不能有语句结束符(分号)。
5.空语句
在C语言中,称仅由一个分号组成的语句为空语句,即:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/46_07.jpg?sign=1738950070-SE4hlKupGHonm5hNmLbbZlI0wPce6NDc-0-6950d2c9cc54680da4942749888d0654)
编译程序在遇到空语句时,不会为其产生任何指令代码。这就是说,空语句不执行任何操作。因此,空语句只是C语言语法上的一个概念,它起到一个语句的作用,仅此而已。
课堂精练
1)输入圆的半径,求其周长和面积。程序运行结果如图3-6所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/47_01.jpg?sign=1738950070-HhyL20vhEHf3z67P4y8VKYWzKOCAWscv-0-d631a9cd609b703de9f5c3598fae0904)
图3-6 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/47_02.jpg?sign=1738950070-qaDbx3jUiv4k4uGAuGTdqHdd3GLkvsYh-0-085ab60a99d9b208f572ab620d0cbc2d)
2)复合语句和空语句的使用。程序运行结果如图3-7所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/47_03.jpg?sign=1738950070-qetxUoK5cUTowDKtLRZa6b77vZOwmiZ0-0-1c5fa1f03f7c28c824a84fafecb547c1)
图3-7 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/47_04.jpg?sign=1738950070-MAtP47BWLVEeOrmap2A3AXB5Txxq8kh5-0-6ee8e2edb898a967cc772ca2d7f5f8ce)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/48_01.jpg?sign=1738950070-pfxhWAvEcXP3VK5Pf0Rag4LjJMUVLLLa-0-0439ead1a8e1de1b83dd33816316fda1)