第4章程序设计三种基本结构
c语言程序设计第五版习题答案

习题解析与答案第1章C语言概述一.简答题1.概述C语言的主要特点。
【解答】(1)语言简洁、紧凑,使用方便、灵活。
(2)数据类型丰富,表达能力强。
(3)运算符多样。
C语言中的运算符包含的范围非常广泛。
(4)具有结构化的控制语句。
如if…else语句、while语句、do while语句、switch 语句、for语句。
(5)允许直接访问物理地址。
C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。
(6)所生成的目标代码质量高,可移植性好。
2.构成C语言程序的基本单位是什么?它由哪几部分组成?【解答】函数是构成C语言程序的基本单位。
一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。
3.C语言程序的运行一般要经过哪几个步骤?【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。
二.运行程序写结果1.输入下面程序并运行。
main(){int a1,a2,x;a1=100;a2=50;x=a1-a2;printf(″x=%d\n″,x);}【解答】运行结果为:x=502.输入下面程序并运行。
main(){int a1,a2,x;a1=10;a2=20;x=a1*a2;printf(″a1=%d,a2=%d\n″,a1,a2);printf(″x=%d\n″,x);}【解答】运行结果为:a1=10,a2=20x=200三.编程题1.参照本章例题,编写一个C程序,用于显示如下信息:*************************I love C programs!*************************【分析与提示】①要有文件包含语句#include <stdio.h>。
C语言中没有数据的输入、输出等功能,数据的输入、输出都是通过调用系统提供的库函数scanf和printf等来实现的。
这些函数的说明都包括在stdio.h文件中。
②main是主函数的名称。
程序的三种基本结构

else
statement4
例 输入两数并判断其大小关系
/*ch4_4.c*/
#include <stdio.h>
main()
运行:Enter integer x,y:12,23
{ int x,y; printf("Enter integer x,y:");
scanf("%d,%d",&x,&y); if(x!=y)
main()
{ int x,y;
scanf(“%d,%d”,&x,&y); Compile Error! if(x>y)
x=y; y=x;
else
5.i1f.语2 句嵌套
一般形式: if (expr1)
if (expr2)
statement1
else if (estxapter1m)ent2
statement1
X<Y Enter integer x,y:12,6
X>Y Enter integer x,y:12,12
X==Y
if(x>y) printf("X>Y\n");
程序的三种基本结构
– 结构化程序设计
基本思想:任何程序都可以用三种基本结构表示,限 制使用无条件转移语句(goto)
结构化程序:由三种基本结构反复嵌套构成的程序叫 ~
优点:结构清晰,易读,提高程序设计质量和效率
– 三种基本结构
顺序结构
A
流程图
B
A B
N-S图
选择结构
真
假
P
二分支选择结构 A
[例5.2」输入三个数,按由小到大顺序输出。 •main( )
第四章三种基本结构程序设计

>0 初值<终值 =1 时,可省略 步长 <0 初值>终值 =0 死循环
4.2.3 循环结构实例
例: For I=2 To 13 Step 3 Print I , Next I Print “I=“, I
输出I的值分别为: 2 5 8 11 出了循环输出为: I=14
4.2.3 循环结构实例
2、 Do…Loop循环语句
4.2.2 选择结构实例
例 输入一学生成绩,评定其等级。方法是:90~100分为 “优秀”,80~89分为“良好”,70~79分为“中等”, 60~69分为“及格”,60分以为“不合格” 使用IF语句实现的程序段如下: If x>=90 then Print "优秀" ElseIf x>=80 Then Print "良好" ElseIf x>=70 Then Print "中等" ElseIf x>=60 Then Print "及格" Else Print "不及格" End If
不同分支中执行某一分支的相应操作(程序块),并且任何情 况下总有“无论条件多寡,必择其一;虽然条件众多,仅选其 一”的特性。
4.2.2 选择结构实例
1. If…Then语句(单分支结构)
If <表达式> Then
语句块 End If
或
If <表达式> Then <语句块>
例:已知两个数x和y,比较它们的大小,使得x大于y. If x<y Then t=x : x=y: y=t End If 或 If x<y Then t=x: x=y: y=t
程序设计的三种基本结构

程序设计的三种基本结构程序设计中的三种基本结构是顺序结构、选择结构和循环结构。
这些结构是用来控制程序执行顺序和逻辑流程的基础。
一、顺序结构:顺序结构是程序中最简单的结构,即按照顺序执行各个语句,一条接一条地执行,没有跳转和分支。
顺序结构利用语句的执行顺序来确定程序的执行流程。
例子如下:```int a, b, c;a=10;b=20;c=a+b;```在上面的例子中,按照顺序结构,首先给变量a赋值为10,然后给变量b赋值为20,最后将a和b的和赋值给变量c。
程序将按照这个顺序执行下去。
二、选择结构:选择结构用来根据一些条件的真假来决定程序的执行流程。
根据条件的结果,可能会选择执行一段代码或者另一段代码。
常见的选择结构有if语句、switch语句等。
例子如下:int x = 10;if (x > 0)//x大于0的情况下执行的代码printf("x is positive");} else//x小于等于0的情况下执行的代码printf("x is not positive");```在上面的例子中,根据if语句中的条件判断表达式x > 0的结果,如果为真,则执行if语句块内的代码;如果为假,则执行else语句块内的代码。
通过选择结构,程序可以根据不同的条件来执行不同的代码块。
三、循环结构:循环结构用来进行重复执行一段代码的操作。
通过判断循环条件的真假来控制循环的执行和退出。
常见的循环结构有for循环、while循环、do-while循环等。
例子如下:```int i;for (i = 0; i < 10; i++)printf("%d\n", i);在上面的例子中,利用for循环结构,通过初始化循环变量i并设置循环条件i < 10以及每次循环完执行的表达式i++来实现了循环打印数字0到9的功能。
循环结构使得程序可以重复执行同一段代码,以达到需要重复执行的任务。
第4章 C语言程序的基本控制结构

#include<stdio.h> main() { int c1,c2; scanf("%c",&c); c1=c-1;c2=c+1; printf("%c%4c%4c\n",c1,c,c2); printf("%d%4d%4d\n",c1,c,c2); }
4.2 顺序结构
运行结果:
4.3选择结构
入口
入口
A 语句1 B
真
表达 式
假
条件 语句2 循环体
出口
图4.1 顺序结构
出口 出口
图4.2 选择(分支)结构 图4.3 循环结构
上述三种基本控制结构的共同特定是具有单入口和单出口。 还有一种goto语句,又叫转向语句,在本章的4.4.5小节中将会讲解到。 我们在编写程序时,力求使用前三种基本结构语句。
4.3选择结构
例4.3 幼儿园里三个小朋友站队要求小个站在前面,高个站在后面。 分析:我们可以把个子最小的小朋友放在a位置上,较高的小朋友放在b位 置上,个子最高的小朋友放在c位置上。输入三个数,a,b,c,要求按由小到 大的顺序输出。先比较a和b,若a大于b,则a与b对换,再比较a和c,若a 大于c,则a与c对换,这时a的值是最小的,最后比较b和c,若b大于c,则b 与c对换。这样操作之后就使a<b<c的关系成立。然后顺序输出a,b,c既可。
! 逻辑非,单目运算符,自右至左结合。其运算规则是:当 运算量为0,运算结果为1;反之,当运算量为1,运算结果为0。 && 逻辑与,双目运算符,自左至右结合。其运算规则是: 只有当运算符两边的运算量都是非0时,运算结果才为1,否则为0。 || 逻辑或,双目运算符,自左至右结合。其运算规则是:只 要运算符两边的运算量有一个为为非0,运算结果就为1。只有两 个运算量都为0,结果才是0。 这三个运算符的优先级,逻辑非!最高,逻辑与&&次之,逻 辑或||最低。!(逻辑非)的优先级高于算术运算符和关系运算符, 而&&(逻辑与)和||(逻辑或)的优先级低于算术运算符和关系运算符。 由 此可见: a>b&&c>d 相当于 (a>b)&&(c>d) a= =0||b= =0 相当于 (a= =0)||(b= =0) !a&&b= =c 相当于 (!a)&&(b= =c)
程序设计3(3种基本结构)

流程图:
3.2.5 条件运算符(了解即可) 若if语句中,在表达式为“真”和“假”时,且都 只执行一个赋值语句给同一个变量赋值时,可以用 简单的条件运算符来处理。例如,若有以下if语句: if (a>b) max=a; else max=b; 可以用下面的条件运算符来处理: max=(a>b)?a∶b; 其中“(a>b)?a∶b”是一个“条件表达式”。它是 这样执行的:如果(a>b)条件为真,则条件表达式 取值a,否则取值b。
3.3.5 示例:
4பைடு நூலகம்
1
1 3 1 5 1 7
例:多项式如下:π/4 =1 - 1/3 + 1/5 - 1/7 + 1/9 ... 计算的项数n由键盘输入,求π。结果保留2位小数。 #include <iomanip> int main(){ int n, sign=1; double sum=0.0; cin>>n; for(int i=1; i<=n; i+=2) { sum = sum + sign*1.0/i; sign = -sign; } // 设置浮点数的小数个数2位 cout<<fixed<<setprecision(2)<<4*sum<<endl; return 0; }
3.3.3 for
for语句使用最为灵活,不仅可以用于循 环次数已经确定的情况,而且可以用于循环 次数不确定而只给出循环结束条件的情况, 它完全可以代替while语句。一般形式为: for(表达式1;表达式2;表达式3) 语句
它的执行过程如下: (1) 先求解表达式1。 (2) 求解表达式2,若其值为真, 则执行for语句中指定的内嵌语句, 然后执行下面第(3)步。若为假, 则结束循环。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执 行。
C#结构化程序设计

4.3.1 条件语句
说明:在上例中,if条件表达式是判定x的取值是否小 于0,如果x小于0,则执行if语句的控制语句“y=-x”, 即将y赋值为x的绝对值;否则,不执行该控制语句, 而保持y为x的输入数。
20
C#程序设计实用教程
2. if…else语句 if…else语句是一种更为常用的选择语句。if…else语句 的语法如下: if(表达式) { 语句块1; }
27 C#程序设计实用教程
4.3.1 条件语句
if (InputScore >= 70) { if (InputScore >= 80) { if (InputScore >= 90) { OutputScore = "优秀"; //优秀 } else { OutputScore = "良好"; //良好 } } else { OutputScore = "中等"; //中等 }
7 C#程序设计实用教程
4.1.2 流程图
流程图(Flowchart),它是用一些几何框图、流向线和
文字说明来表示各种类型的操作。计算机算法可以用流 程图来表示,图4-1、图4-2、图4-3和图4-4是用流程图 表示了结构化程序设计的3种基本结构。
8
C#程序设计实用教程
4.2 顺序结构
顺序结构的流程图如图4-1所示,先执行A语句,再 执行B语句,两者是顺序执行的关系。A、B可以是 一个简单语句,也可以是一个基本结构,即顺序结 构、选择结构或者循环结构之一。 常用的简单语句包括空语句、复合语句、标签语句、 声明语句和表达式语句等。
4 C#程序设计实用教程
程序的三种基本结构(共24张PPT)

•scanf("%d,%d,%d",&a,&b,&c); •if(a>b) • {temp=a;a=b;b=temp;} •if(a>c) • {temp=a;a=c;c=temp;} •if(b>c) • {temp=b;b=c;c=temp;} •printf("%d,%d,%d",a,b,c);
实现if ~ else 正确配对方法
例: if (a==b)
if(b==c)
printf(“a==b==c〞);
else printf(“a!=b〞);
修改: if (a==b) { if(b==c) printf(“a==b==c〞); } else printf(“a!=b〞);
实现if ~ else 正确配对方法:加{ }
任给a,b,c三个数,按从小到大的顺序输出。
70~89
7,8
else…... else…...
#include <stdio.
else…... 分析: 设score为整型数,在score≥90 的范围内,score可能取100, 99,.
各个case的出现次序不影响执行结果。
{temp=a;a=c;c=temp;}
•
5.2 switch语句
• switch语句是多分支选择语句。if语句只有两个分 支可供选择,而实际问题中常常需要用到多分支的选 择。例如,学生成绩分类〔90分以为‘A’等,80~89分 为‘B’等,70~79分为‘c’ 等,……〕;人口统计分类〔 按年龄分为老、中、青、少、儿童〕;工资统计分类 ;银行存款分类;……等。当然这些都可以用嵌套的if 语句或多分支来处理,但如果分支较多,那么嵌套的if 语句层数多,程序冗长而且可读性降低。C语言提供 switch语句直接处理多分支选择,它的一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章程序设计三种基本结构一、选择题:【例1】(2002年4月)下面的程序的输出结果是( )。
#includemain( ){int i=010,j=10;printf("%d,%d",++i,j--);}A. 11,10B. 9,10C. 010,9D. 10,9【答案】B (i的值是以八进制定义的)【例2】(2002年4月)以下的程序的输出结果是( )。
main( ){int a=5,b=4,c=6,d;printf(("d\n",d=a>b?)(a>c?a:c):(b));}A. 5B. 4C. 6D. 不确定【答案】C【例3】(2002年4月)以下程序的输出结果是( )。
{int a=4,b=5,c=0,d;d=!a&&!b||!c;printf("%d\n",d);}A. 1B. 0C. 非0的数D. -1【答案】A【例4】(2002年4月)以下程序的输出结果是( )。
main( ){char x=040;printf("%o\n",x<<1);}A. 100B. 80C. 64D. 32【答案】A【例5】(2002年9月)已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2,k的值为3,以下选项中正确的输入语句是(C )。
A. scanf("---",&I,&j,&k);B. scanf("%d %d %d",&I,&j,&k);C. scanf("%d,%d,%d",&I,&j,&k);D. scanf("i=%d,j=%d,k=%d",&I,&j,&k);【例6】(2002年9月)若有以下程序main( ){int k=2,i=2,m;m=(k+=i*=k);printf(“%d,%d\n”,m,i);}执行后的结果是( )。
A. 8,6B. 8,3C. 6,4D. 7,4【答案】C【考点解析】根据C语言中printf函数的用法可知,格式控制参数是d,即是输出是十进制的数,复合运算表达式是右结合性,先从右边开始计算i*=k得i= i*k=2*2=4,k+=i得k=k+i=2+4=6,所以m的值为6。
输出结果为m=6,i=4。
【例7】(2003年4月)若有以下程序段(n所赋的是八进制数)int m=32767, n=032767;printf(“%d,%o\n”,m,n);执行后输出结果是( )。
A. 32767,32767B. 32767,032767C. 32767,77777D. 32767,77777【答案】A【例8】(2003年4月)有以下程序段int m=0,n=0,char c='a';scanf("%d%c%d",&m,&c,&n);prinft("%d,%c,%d\n",m,c,n);若从键盘上输入:10A10<回车>,则输出结果是()。
A. 10,A,10B. 10,a,10C. 10,a,0D. 10,A,0【答案】A【例9】(2003年4月)有以下程序main( ){int i=10,j=1;printf("%d,%d\n ",i--,++j);}执行输出的结果是(B)。
A. 9,2B. 10,2C.9,1D. 10,1【答案】B【例10】(2003年9月)有以下程序main()int a ;char c=10;float f=100.0;double x;a=f/=c*=(x=6.5);printf("%d %d %3.1f %3.1f\n ",a,c,f,x);}程序运行后的输出结果是()。
A. 1 65 1 6.5B. 1 65 1.5 6.5C. 1 65 1.0 6.5D. 2 65 1.5 6.5【答案】B【例11】(2003年9月)有以下程序main(){int a=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=aprintf("%d,%d\n",k,m);}程序运行后的输出结果是()。
A. 0,0B. 0,1C. 1,0D. 1,1【答案】C【例12】(2003年9月)有定义语句:int x,y;若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是"A. 11 12<回车>B. 11, 12<回车>C. 11,12<回车>D. 11,<回车> 12<回车>【答案】A【例13】(2003年9月)设有以下程序段:int x=2002,y=2003;printf(“%d\n”,(x,y));则以下叙述中正确的是"A. 输出语句中格式说明符的个数少于输出项的个数,不能正确输出。
B. 运行时产生出错信息。
C. 输出值为2002。
D. 输出值为2003。
【答案】D【例14】(2003年9月)有以下程序main ( ){int x=3,y=2,z=1;printf("%d\n",x/y&~z);}程序运行后的输出结果是()。
A. 3 B. 2 C. 1 D. 0 【答案】D【例15】(2004年4月)有以下程序main(){int x=102,y=012;printf("-,-\n",x,y);}执行后输出结果是()。
A. 10,01B. 02,12C. 102,10D. 02,10【答案】C【例16】(2004年4月)有以下程序main(){unsigned char a,b;a=4|3;b=4&3;printf("%d%d\n",a,b);执行后输出结果是( )。
A. 70B. 07C. 11D. 430【答案】A【例17】(2004年9月)有以下程序main(){chara,b,c,d;scanf("%c,%c,%d,%d ",&a,&b,&c,&d);printf("%c,%c,%c,%c\n ",a,b,c,d);}若运行时从键盘上输入:6,5,65,66<回车>。
则输出结果是()。
A. 6,5,A,BB. 6,5,65,66C. 6,5,6,5D. 6,5,6,6【答案】A【考点解析】在C语言程序设计中,scanf函数的格式控制参数中“%d”表示输入整数,“%c”表示输入字符,也就是说,前两个输入的数是以字符形式输入的,后两个输入的数是以整数形式输入的,输出时,全部都以字符形式输出,而刚才的后两个整数应该用ASCII码转化为字符。
则输出的是6,5,A,B。
【例18】(2004年9月)有以下程序main ( )int m=3,n=4,x;x=-m++;x=x+8/++n;printf(“%d\n”,x);}程序运行后的输出结果是()。
A. 3B. 5C. -1D.-2【答案】D【考点解析】在本题中,根据C语言中printf函数的用法可知,格式控制参数是d,即是输出是十进制的数,表达式x=-m++可以转换成x=-(m++),可得x的值为-3,而表达式x=x+8/++n可以转换成x=x+8/(++n),代入x的值得x=-3+8/5=-2,所以最后的输出结果是-2。
【例19】(2004年9月)有以下程序main ( ){char a=’a’,b;printf(“%c”,++a);printf(“%c\n”,b=a++);}程序运行后的输出结果是()。
A. b,bB. b,cC. a,bD. a,c【答案】A【例20】(2004年9月)有以下程序main ( ){int m=0256,n=256;printf("%o %o\n",m,n);}程序运行后的输出结果是()。
A. 0256 0400 B. 0256 256 C. 256 400 D. 400 400【答案】C【例21】(2004年9月)有以下程序main ( ){int a=666,b=888;printf(“%d\n”,a,b);}程序运行后的输出结果是()。
A. 错误信息B. 666C. 888D. 666,888【答案】B【例22】(2004年9月)有以下程序main ( ){unsignedint a;int b=-1;a=b;printf(“%u”,a);}程序运行后的输出结果是()。
A. -1B. 65535C. 32767D. -32768【答案】B【考点解析】在本题中,有一无符号变量和一整型变量,它们的值都是-1,在计算机整型的存储是以二进制存在,即是1000000000000001,输出函数的要求输出无符号a的值,即要把1000000000000001转化为十进制,得65535。
二、填空题:【例23】(2002年4月)以下程序的输出结果是_______。
main(){int a=177;printf("%o\n ",a);}【答案】261【考点解析】本题中先定义了一个十进制整数值为177的a,而printf()函数格式控制参数是o,也就是以八进制的整数形式输出,a的十进制数值是177转换为八进制数是261。
【例24】(2002年4月)以下程序的输出结果是_______。
main(){int a=0;a+=(a=8);printf(“%d\n”,a);}【答案】16【考点解析】在程序是用printf函数输出十进制的整数,表达式经过复合运算:a=a +a=8+8=16,则结果是16。
【例25】(2002年4月)以下程序的输出结果是_______。
main(){int a=5,b=4,c=3,d;d=(a>b>c);printf(“%d\n”,d);}【答案】0【考点解析】在C语言中规定了关系运算符”>”按左结合来运算的,所以在本题中先计算a>b,结果是真,即是1,再计算a>c,结果是假,所以最后结果是0。
【例26】(2003年4月)若有语句int i=-19,j=i%4;printf(“%d\n”,j);则输出结果是。