
第3章顺序结构程序设计第一单元重点与难点解析1.a=10与a=10;有什么区别?a=10是一个赋值表达式,而a=10;是一条赋值语句。在赋值表达式的尾部添加分号“;”就构成了赋值语句。2.空语句什么也不做,为何还要使用?空语句不执行任何操作,通常用于一些特殊场合。例如:int i;for(i=0;i<10;i++):此循环中的循环体为空语句,这个循环什么也不做,起延时的作用。另外,空语句可以用作对程序扩展预留的伏笔。例如,程序中有一些功能并不在当前实现,此时可以使用空语句,再在适当时间填补语句进行功能扩展。3.在输入多个整数或实数时,如果希望数据之间用空格作为间隔,应该如何组织scanf函数的格式控制字符串?scanf函数用于从标准输人设备(通常是键盘)输入数据,并存人指定的变量中。scanf函数的一般形式如下:scanf(格式控制字符串,变量地址表)在输人数据时,一般以空格、回车、逗号等作为数据的分隔符。在输入多个整数或实数时,如果希望数据之间空格作为间隔,那么scanf函数的格式控制字符串中只需紧凑写入各数据的格式字符,不必写人其他符号,例如,scanf("%d%o%x"&a,&b,&c);。在执行程序键入数据值时,数据之间键人空格即可4.scanf函数中变量名之前必须要写“&”吗?在C语言中函数的参数只能进行单向传递(详细内容将在第9章讲述)。如果scanf函数中的第二个参数是普通变量名,那么输人的数据将无法传回到这个变量中。因此,变量名之前的“&”是必不可少的,除非这个变量是一个指针变量(有关内容将在第7章讲述)5,若希望在输入数据时首先给出提示信息,应该如何实现呢?scanf函数的功能是按指定格式从键盘读入数据;printf函数的功能是按指定格式向显示器输出数据。scanf函数格式控制字符串中的普通字符需要在键盘上原样输入,而输人数据前的提示信息属于显示器将呈现的内容,因此提示信息的内容需要在执行scanf函数之前,使用printf函数进行输出。题第二单元习一、判断题1.C语言程序中的“二”是赋值运算符,与数学中等号的功能相同。(

2.C语言中,printf函数的格式说明"%10.4f"中10表示数据输出的最小宽度,4表示小数位数。()3.假设有floatx=3,则x%2的值为1。(4.复合语句是用一对花括号括起来的若干条语句,从语法上讲,复合语句视为一条语句。()5.使用getchar和putchar函数能够在标准输人输出设备上输人或输出一个字符。(二、选择题1.若有定义inta,b;floatx,y;,以下选项中正确的赋值语句是B. y=(x%2) /10;C. x=(y=8)-a; D.a+b=x;A. a=1,b-2,2.若有定义inta=5,b;,以下选项中不能给b赋值为2的语句是C. b=2%a;A. b=a/2;B. b=b+2:D. b=5;b=2;3.若有定义inta=8,b=5,c;,执行语句c=a/b+0.4;后c的值是A.1.4D.2B. 1C.2.04.若有inta,b,c;,要给变量a、b、c输人数据,以下正确的输人语句是A.read (a,b,c);B. get ("%d%d%d",a,b,c) ;C. scanf ("%d%d%d",a,b,c);D.scanf("%d%d%d",&a,&b,&c);5.若有floata,b,c;,要通语句scanf("%f%f%f"&a,&b&c);给a赋值10、b赋值22、c赋值33,以下不正确的输人形式是22A.10B. 10.0,22.0,33.0C. 10.0D. 10223322.033.0336.若有语句inta,b;scanf("%d,%d",&a,&b),以下数据的输入格式中不能实现把值3赋给a、5赋给b的选项是B.3,5,4C.3 5D.3,5A.3,5,7.若变量已正确定义和赋值,要将a和b的值进行交换,下面不正确的语句组是A. a=a+b; b=a-b: a-a-b;B. t-a; a=b: b=t:C.a-t: t-b: b-a.D. t=b; b=a, a=t;8.以下程序段的输出结果是inta=1234;第doub1e b=3.141593;3printf("g3dg7.6fln",a,b);章B.1233.141593A.12343.141593顺D.123, 3.141593C.12343.14159序三、填空题结构1.若有语句inti=0,j-0,k=0;scanf("%d",&i);scanf("%d",&j);scanf("%d",&k);程运行程序时,若从键盘输入:序23.4V设则变量i、j、k的值分别是计13

。空语句的形式是2.复合语句在语法上被认为是3.设chl、ch2和ch3为字符型变量,若要执行语句Jscanf("%c%c%c",&chl,&ch2,&ch3);使变量chl、ch2和ch3分别存放小写字母a、b和c,则输人数据的形式是4.若整型变量a与b的值分别为2和3,要求按照以下格式输出a与b的值:a=2b=3相应的输出语句是printf("",a,b)i.5.有以下程序段:char chl,ch2;int n;ch1=getchar();ch2=getchar();n=ch1-ch2;printf("gd",n);若程序运行时输人:23,则输出n的值是四、改错题1.输人圆球的半径,求球体积。上机调试下面的程序,分析系统给出的错误提示并改正。#include (1)#definePI3.14159;(2)int main(float r,v;printf("Input r:");(3)scanf("ed",&r);V=4/3*PI*r*r*r;(4)printf("v is &fln",v);return O;2.输入一个0~9之间数字字符,转换成对应的整数,并输出。上机调试下面的程序,分析系统给出的错误提示并改正。#include int main (void)(char c;c(1)char n;语(2)getchar(c);言n=c-"0";程(3)putchar(n):库return O;设计训五、读程序写结果练教l.#include程int main(void)14

(int a;float b;double c;a=b=c-20/3;printf("8d,%f,&fln",a,b,c);return O;2.#includeint main(void)(f1oatx=3.4,y=5.6;inta=12,b=45;printf("a=%6d,b=%6dln",a,b);printf("x=%7.2f,y=87.2fn",x,y);return o;六、补足程序1.程序功能:输人一个小写字母,输出其对应的大写字母。请补足程序#includeint main(void)(charch,ch2;printf("please input a lowercase:");(1)chl=(2)ch2=putchar((3)return O;:2.程序功能:输入商品的原价和折扣率,计算商品的实际售价。请补足程序,使得程序的运行结果与给定的结果一致。#includeint main(void)floatcost,percent,cprintf("请输人商品的原价(单位:元):");scanf((1));第printf"请输人商品的折扣率:");3scanf((2));章c=cost*percent;printf("(3)",c):顺return 0;序结运行结果:构请输人商品的原价(单位:元):90程请输人商品的折扣率:0.8序实际售价为:72.00元设3.程序功能:输入学生的学号和分数,计算总分并输出。请补足程序,使得程序的运计15

行结果与给定的结果一致。#includeint main(void)(int num,scorel,score2,score;printf("请输人学号:");(1)):scanf(printf("请输人考试成绩:");scanf("(2)",&scorel,&score2);score= scorel+ score2;(3)printf("");printf("In");printf("(4)",num,scorel,score2,score);return O;程序运行结果:请输人学号:10001请输人考试成绩:92,89学号成绩1成绩2总成绩891000192181七、编程题1.编写程序,已知公式s-vot+1/2a,并已知vo-10.2,a-9.8,求任意时刻t对应的位移s。2.编写程序,输入3个双精度数,求出它们的平均值并输出,要求保留一位小数。第三单元习题参考答案及解析一、判断题1.错误。解析:C语言中赋值运算符左边为存储数据的对象,功能是向内存中的变量存人数据其与数学中等号的功能不同。2.正确。c解析:在printf函数的格式说明"%m.nf"中,m指数据输出的最小宽带为m位,不足语m位左端补空格,超过m位按照实际位数输出;n指输出n位小数。言3.错误。程解析:取余运算符“%要求两侧的运算量都为整型。库4.正确。设计解析:复合语句是用一对花括号括起来的若干条语句。从语法上讲,复合语句视为一训条语句,经常用于语法要求为一条语句,而实际需要执行多条语句的情况练5.正确。教解析:C语言中,getchar和putchar函数的功能是在标准输入输出设备上输人或输出一程16

个字符。二、单选题1. C解析:选项A中,缺少语句结束标志分号。选项B中,变量x为实数类型,不能进行取余运算。选项D中,赋值运算符左边不能为表达式。2. B解析:选项B中,取b+2的值赋给变量b,由于此前变量b未做明确赋值,所以其值为随机数,将b的值+2之后重新赋给变量b后仍然是一个随机数。3. B解析:语句c=a/b+0.4:中,a/b为整数相除,结果为整数1,再将相加结果1.4存人变量c,由于变量c为整型变量,截断取整,答案为B。4. D解析:此题考查输函数scanf的语法,只有选项D正确。选项A和选项B的函数在C语言中不存在。选项C的参数中缺少取地址运算符。5. B解析:根据此处scanf函数中格式控制字符串的格式,各输人数据之间应当以空格、回车、Tab作为间隔,而不能出现其他实体字符,因此选项B为不符合要求。6.C解析:在使用scanf函数时,如果在“格式控制字符串”中除了格式说明字符外还有普通字符,则在输入数据时原样输入,本题中的,"就是普通字符。选项A、选项B中有效数据后的多余内容不被接收,不会产生影响。选项C中在数据之间只有空格,与格式说明不符,无法准确接收输入数据。7. C解析:选项A经过运算可以实现变量数值交换。选项C中造成变量数据丢失。选项B和选项D同理,可以实现变量数值交换。8.A解析:printf函数中,“%md”指输出有符号十进制整数,输出的最小域宽为m位,不足m位左端补空格,超过m位按照实际位数输出。“%m.nf”指实数总的输出域宽为m位(包括小数点),小数部分占n位,总位数不足m位左端补空格,超过m位按照实际位数输出。此题中,a的值有4位,超出域宽,按照实际位数输出。b的值共8位,小数部分第3有6位,总位数超出域宽,按照实际位数输出。只有选项A符合。章三、填空题顺1.2300库解析:对于采用%d格式符的scanf函数,在输人数据时,遇到".4"看作非法字符,因结构此只能有效接收数据23赋值给变量i,变量j和k未得到键盘输入数据,维持初值0。程2.一条语句:库解析:根据语法,复合语句被视为一条语句。空语句只有一个分号。设计17

3. ab c解析:scanf函数的格式控制字符串中出现的一切普通字符都需要原样输入,因此在输入字符a、b、c时,需在b和c之间输人一个空格。4.a=%dnb=%dn解析:根据输出格式要求,用普通字符输出a=、b=和换行符,用%d格式符输出变量a、b的值。5. -1解析:通过执行两次getchar函数得到的是字符2和字符3,而不是整数23。两字符相减即为其ASCI码值相减,结果为-1。四、改错题1.(1)#definePI3.14159(2)int main (void)(4)v=4.0/3*Pl*r*r*r(3)scanf("%f&r)解析:符号常量定义的结尾不应该有分号。函数定义时函数名后面必须带有圆括号。scanf函数中格式字符应与变量的数据类型保持一致。两个整型数据进行除法运算,结果的数据类型为整型,因此为了保证除法运算的数据精度,需要至少有一个运算量为实型数据。2.(1)intn;(2) c=getchar ();;(3)printf("nis%d",n);解析:根据题意,变量n的数据类型应为int型。getchar函数为无参函数。putchar函数为字符输出函数,只能输出单个字符,而根据题意,输出结果为整数,格式输出函数printf能够满足各种数据类型的输出要求。五、读程序写结果1.6,6.000000,6.000000解析:20与3同为整型数据,除法运算结果为整型数据。赋值语句在赋值过程中,变量c、b得到实数6.0,变量a得到整数6。输出时依次按照对应格式输出结果452.a=12, b-3.40.y=5.60x=3解析:整型变量a、b在输出时各占6列域宽,实型变量x、y在输出时各占7列域宽,其中小数部分保留两位。当数据实际位数少于域宽时,左边补充空格。六、补足程序c1. (1)getchar ())(2)ch1-32(3) ch2语解析:本题考查字符输入函数getchar与字符输出函数putchar的使用方法。同一字母言程的大小写形式的ASCII码值相差32。序2.(1)"%f",&cost(2)"%f",&percent(3)实际售价为:%.2f元ln设解析:本题考查格式输人函数scanf和格式输出函数printf的使用方法。printf函数中计转义字符n控制换行效果,%.2f控制输出的数字有两位小数。训3.(1)"%d",&num(2) %d,%d练(3)学号\t成绩1\t成绩2/t总成绩)n(4)%d\t%d\t%d\t%dn教程解析:根据给定运行结果,通过两次调用scanf函数,先输入学号,再输入两个成绩,18

成绩之间用逗号做间隔。输出时使用转义符t控制数据之间的间距。七、编程题1.编程思路:根据求解问题的顺序,首先通过赋值或输人获得已知变量的值,然后利用公式求解出未知量。将此问题依据日常解题的逻辑顺序,使用编程语言设计出来。注意给变量设计合理的数据类型,以保证结果的准确性。源程序:#include"stdio.h"int main(void)(float vo,a,t,s;v0=10.2;a=9.8;社printf("请输人任意时刻t的值:In"):scanf("gf",&t);s=v0*t+1.0/2.0*a*t*t;printf("该时刻的位移为:%f\n",s);return 0;广2.编程思路:从键盘获取三个数据进行计算,按照输出格式的要求进行输出。源程序:#include"stdio.h"int main(void)(double x,Y,z,s;printf("input x,y,z:");scanf("&lf%lf%lf"&x,&y,&z);s=(x+y+z)/3.0;printf("\n平均数是=%6.1f\n",s);return ;.第3第四单元实验指导章实验一顺序一、实验目的结构1.了解数据的输人/输出在C语言中的实现。程2.掌握putchar、getchar、printf、scanf等输人/输出函数的用法。序设计19

二、实验要求1.通过下面给出的实验内容,掌握C语言中最常用的一种语句一一赋值语句的用法。2.根据下面给出的实验内容,先自已分析出程序的运行结果(包括运行中可能出现的错误),再在C语言运行环境中输人源程序并验证自已分析的结果。三、实验内容1.运行下述程序,分析输出结果。#include "stdio.h"int main(void){charcl,c2,c3,c4,c5,c6,scanf("%cc%c%c",&cl,&c2,&c3,&c4);c5=getchar0)c6=getchar()putchar(cl);putchar(c2);printf("c%cln",c5,c6);return O;1运行程序后,若从键盘输入(从第一列开始输入)123456分析其输出结果。2.运行下述程序,分析输出结果。#include"stdio.h"int main(void){int cl;char c2;cl=65c2-"d";printf("g3c%3c",cl,c2),printf("83d83d",cl,c2);return 0;若将程序第三行改为intcl,c2;,然后把c2=d;改为c2=100,重新运行程序,分析其结果。3.交换两个变量的值(由终端输入两个整数给变量x和y,然后输出x和y的值,在C语交换x和y的值后,再输出x和y的值,验证两个变量中的数是否正确进行了交换)。言实验二程房一、实验目的设计1.掌握顺序结构程序设计的思想和方法。2.熟悉顺序结构程序的一般调试方法。练二、实验要求教程1.在C语言运行环境中输入顺序结构程序的源代码。20

2.编译、连接程序,修改其中的错误。3.运行程序得到结果。三、实验内容1.调试运行下面的程序,并分析其功能#include "stdio.h"int main(void){int a=147,b=258;a=a+b;b=a-b;a-a-b;printf("a=%d,b=%dln",a,b);return 0;2.上机调试下面的程序,分析系统给出的出错信息,改正其中的错误#include "stdio.h"int main(void)(int a,b;doublex=1.414,y=3.1415926;scanf("%d%d",a,b);printf("a=gd,b=8f,x=%d,y=3.4fln",a,b,x,y);printf("The program's name is c:ltoolslb.txt");return O;3.输入一个华氏温度,输出对应的摄氏温度,输出结果保留2位小数。其公式为5C=-(F-32)科学9第3章顺库结构程库设计21