第4章程序设计三种基本结构
- 格式:docx
- 大小:32.03 KB
- 文档页数:22
习题解析与答案第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是主函数的名称。
程序设计的三种基本结构程序设计中的三种基本结构是顺序结构、选择结构和循环结构。
这些结构是用来控制程序执行顺序和逻辑流程的基础。
一、顺序结构:顺序结构是程序中最简单的结构,即按照顺序执行各个语句,一条接一条地执行,没有跳转和分支。
顺序结构利用语句的执行顺序来确定程序的执行流程。
例子如下:```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的功能。
循环结构使得程序可以重复执行同一段代码,以达到需要重复执行的任务。
程序的三种基本结构荷兰学者Dijkstra提出了"结构化程序设计"的思想,它规定了一套方法,使程序具有合理的结构,以保证和验证程序的正确性.这种方法要求程序设计者不能随心所欲地编写程序,而要按照一定的结构形式来设计和编写程序.它的一个重要目的是使程序具有良好的结构,使程序易于设计,易于理解,易于调试修改,以提高设计和维护程序工作的效率.结构化程序规定了以下三种基本结构作为程序的基本单元:(1) 顺序结构. 见图1-1在这个结构中的各块是只能顺序执行的. (2) 判断选择结构.见图1-2根据给定的条件是否满足执行A块或B块.图1-1 图1-2 (3) 循环结构.见图1-3和图1-4.图1-3表示的结构称为"当型"循环.当给定的条件满足时执行A块,否则不执行A块而直接跳到下面部分执行.图1-4表示的结构称为"直到型"循环,它的含义是:执行A块直到满足给定的条件为止(满足了条件就不再执行A块).这两种循环的区别是:当型循环是先判断(条件)再执行,而直到型循环是先执行后判断.图1-3图1-4 以上三种基本结构可以派生出其它形式的结构.由这三种基本结构所构成的算法可以处理任何复杂的问题.所谓结构化程序就是由这三种基本结构所组成的程序.可以看到,三种基本结构都具有以下特点:① 有一个入口.② 有一个出口.③ 结构中每一部分都应当有被执行到的机会,也就是说,每一部分都应当有一条从入口到出口的路径通过它(至少通过一次).④ 没有死循环(无终止的循环).结构化程序要求每一基本结构具有单入口和单出口的性质是十分重要的,这是为了便于保证和验证程序的正确性.设计程序时一个结构一个结构地顺序写下来,整个程序结构如同一串珠子一样顺序清楚,层次分明.在需要修改程序时,可以将某一基本结构单独孤立出来进行修改,由于单入口单出口的性质,不致影响到其它的基本结构.。
程序设计三种基本结构在Visual Basic 程序设计语言中,提供了以下三种基本的控制结构:其对应的结流程图如下所示:顺序结构分支结构循环结构顺序顺序结构是按语句的先后次序依次执行的控制结构,其中“执行A”和“执行B”可以是一个语句也可以是一组语句。
在VB中录制的宏都是顺序结构的语句。
例如,以下程序段的控制结构就属于顺序结构:a=1b=a+1c=a+b例1:以下是一段Visual Basic宏程序,运行后变量x的值为x=2y=3y=y+1x=x+y-1选择分支结构又称为选择结构。
根据条件判断其是否成立,从而选择程序执行的方向,执行其中的一个分支。
分支结构的语法结构如下:语法1语法2If 条件 Then语句End If If 条件 Then语句1 Else语句2 End If例2:以下是一段Visual Basic宏程序,运行后变量a的值为a=10If a<10 Thena=a+1Elsea=a-1End If循环循环结构是根据条件判断是否成立,如果条件成立则重复执行循环结构中某语句序列功能,直到条件不成立为止,最后退出循环结构。
其中For…Next语句的语法定义如下:(详见书本第137页)For counter=start To end [Step step][statements]Next [counter]说明:counter必要参数,用作循环计数器的数值变量start必要参数,counter的初值end必要参数,counter的终值Step可选参数,counter的步长。
如果没有指定,step默认的值为1例3:以下是一段Visual Basic宏程序,运行后变量m的值为m=0For i=1 To 3m=m+2Next i。
程序的三种基本结构;
【学习者分析】
通过整章的学习,学生对程序设计有了一定的了解,对程序的结构、算法流程都有了一定的了解,本节通过实例加深学生对程序三种基本结构的理解。
【教材内容分析】
・本节的主要内容及在本章中的地位:
本节是对本章知识的小结、整理和提升。
本节总结归纳了程序的三种基本结构,分析三种基本结构的执行过程及特点,为学生进一步学习算法与程序设计打下基础。
・教学重点:
程序的三种基本结构的执行过程。
・教学难点:
程序的三种基本结构的执行过程。
・课时安排:1课时。
【教学目标】
・知识与技能:
了解程序的三种基本结构的执行过程,并能画出它们的流程图。
・过程与方法:
通过教学实例的分析,让学生体验利用程序的三种基本结构编写计算机程序,解决实际问题。
・情感态度价值观:
培养学生的逻辑思维能力。
【教学理念和方法】
通过教学实例的讲练,以教师为主导,学生主动,体验思考,讲练结合,以任务驱动等方式来完成教学内容。
【教学过程设计】
・教学内容的组织与呈现方式:
以实例分析深入展开,小结归纳,将程序的三种基本结构的执行过程和特点一一呈现,通过不同的练习,让学生从中慢慢理解并掌握程序的三种基本结构的执行过程,最后完成课堂自评。
・教学过程:
教学环节
教师教学
学生活动
设计意图
复习引入
我们学习了“求圆面积”的程序,请看程序段(演示),程序中语句的执行是如何的?。
第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);则输出结果是。