《程序设计基础》作业三讲评.docx
《《程序设计基础》作业三讲评.docx》由会员分享,可在线阅读,更多相关《《程序设计基础》作业三讲评.docx(21页珍藏版)》请在冰豆网上搜索。
《程序设计基础》作业三讲评
《程序设计基础》作业三
一、填空题
1.常见的线性结构有__线性表____、__栈____和__队列____等,其主要特征为各个结点之间“先后”有序。
2.常见的非线性结构包括___树___和__图型____结构。
注:
以上两题是常见的数据结构线性结构和非线性结构
3.对于一个线性表来说,如果它的表长为0,则我们称它为__空____表。
4.一棵二叉树上第5层的结点数最多为16。
注:
此题考核对于二叉树的性质的理解和掌握
5.设无向图G的顶点数为n,图G最少有n-1条边,最多有n(n-1)/2条边
注:
此题是对无向图的理解,无向图个顶点之间的连线没有方向,对于每个顶点都最多有n-1条边和其他顶点相连,n个顶点就有n(n-1)条边,由于没有方向性,所以连线不能重复,所以最多边的个数是n(n-1)/2条。
6.算法描述的常见方法是___伪码___,___流程图___和___N-S图___。
二、选择题
1.数据结构主要研究下面3方面的内容__A____。
A数据的逻辑结构、存储结构和运算
B数据的线性结构、树型结构和图结构
C数据的顺序存储、链式存储和散列存储
D数据的线性结构和非线性结构,以及相关运算
2.在存储线性表时,___C___。
A只能采用顺序存储结构
B只能采取链式存储结构
C可以任意采用顺序或链式存储结构
D没有明确的结论
3.栈的最主要特点是__B____。
A先进先出
B先进后出
C两端进出
D一端进一端出
注:
栈的特点就像一摞盘子,所以需要后进现出(先进后出)。
4.在一个长度为n的顺序表中删除第i(0
An-i
Bn-i+1
Cn-i-1
Di
5.采用顺序空间作为栈的存储空间时,在进行栈操作的时候___D___。
A不需要判断栈是否空,不需要判断栈是否满
B不需要判断栈是否空,但需要判断栈是否满
C需要判断栈是否空,不需要判断栈是否满
D需要判断栈是否空,也需要判断栈是否满
三、简答题
1.假设有四个元素依次进栈,进栈过程中允许出栈,试写出所有可能的出栈序列
此题考核对栈的理解和对栈的操作的方法(出栈操作是后进先出)。
参考答案:
假设四个元素分别为1,2,3,4,则可能的出栈序列:
1234124313241342143221342143231423412431
3214324134214321
注:
该题是考核对栈的性质的理解,即后进现出的特点,如果四个元素依次进栈,每个,按照1进-1出-2进-2出-3进-3出-4进-4出顺序可以构造出栈序列:
1234,按照这种思路,可以构造出:
1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321出栈序列。
2.写出下面二叉树的先序遍历、中序遍历、后序遍历时得到的定点序列
先序:
ABDEC
中序:
DEBAC
后序:
EDBCA
注:
本题考核对树的遍历的方法的理解。
先序就是先遍历根节点,再遍历左,后遍历右;中序就是先遍历左,再遍历根节点,后遍历右;后序就是先遍历左,再遍历右,后遍历根节点;以此方法遍历每一颗子树。
《程序设计基础》作业四
一、选择题
1、采用链式存储的有序数据要进行查找,可以采用__A____。
A顺序查找B折半查找
C顺序索引查找D顺序或折半查找
2、螺旋模型中包括需求定义、风险分析、工程实现和评审四个阶段,在开发过程中___A___。
A每个周期都要包括这四个阶段
B每个周期可以包括不同的阶段
C在最后交付使用之前才进行评审
D开项目开始时才需要进行风险分析
3、在软件需求完全确定的情况下,应该采用的软件开发模型是___A___。
A瀑布模型B渐进式开发模型
C原型模型D螺旋模型
4、流程图中表示判断框的是B。
A矩形框 B菱形框
C圆形框 D椭圆形框
注:
回答此题需要掌握流程图的各种符号。
二、简答题(答案参考教材)
注:
以下问题的回答需要对教材第七章涉及的内容理解并掌握。
1.什么是软件?
什么是软件工程?
2.在软件工程过程中围绕着工程设计、工程支持和工程管理应当遵循什么基本原则?
3.什么是软件的生存周期?
如何划分软件的生存周期?
4.快速原型法的主要思想和特点是什么?
作业二答案
一、选择题
1、C语言中,使用变量的要求是______。
A
A要先定义后使用B要先使用后定义
C不需要定义,可以直接使用D没有明确的要求
2、不是C语言的基本数据类型是______。
D
AintBdoubleCcharDbool
3、编程语言提供的三种基本控制结构是______。
D
A输入、处理和输出结构B常量、变量和表达式结构
C表达式、语句和函数结构D顺序、选择和循环结构
4、在C语言中,决定int数的表示范围的因素是______。
A
Aint类型占用的字节数量B人为事先的约定和习惯
C所存储的数据是否有符号D数在内存中的编码方式
5、C语言中,关于运算符的正确概念是_____。
D
A运算符具有优先级,同优先级的运算符由括号决定运算次序
B在不同优先级运算符进行混合运算时,运算的先后次序取决于结合性
C在同优先级的运算符参与运算时,先计算左侧的运算符
D运算符具有优先级和结合性
6、在C语言中关于循环语句的结论中,错误的是______。
D
Ado-while语句构成的循环至少要执行一次
Bwhile语句和for语句可以相互替代
Cfor和while语句的循环控制条件都是当条件成立时执行循环体
Ddo-while语句的循环控制条件是当条件不成立时继续执行循环体
二、填空题
1、最基本的程序控制有三种,它们是______,______和______。
这三种执行控制的任意组合和重复、嵌套就可以描述任意复杂的程序。
顺序执行、分支控制和循环控制
2、C语言中分支语言是______语句和______语句。
if,switch
3、C语言中循环语言是______语句,______语句和______语句。
while,for和do-while
4、C语言中自增运算符是______,求余数的运算符号是______。
++,%
5、C语言中要改变循环语句的流程可以使用语句______,______和______。
break,continue和goto
三、简答题
1、请简要介绍面向过程式语言中的三种程序设计的基本结构。
顺序结构是指按先后顺序从前到后执行的语句序列。
这些语句逻辑上可能有明确的顺序关系,即后一个程序语句依赖于前一个语句,也可能它们之间没有明确的顺序关系,即某些语句的先后顺序并不重要,一个语句逻辑上并不从属于另一些语句。
选择结构是指根据判定条件控制一些语句是否执行的语句。
选择结构可用if-then、if-then-else或case(或switch)等语句进行描述。
当判定条件成立时需要执行一组语句,且不成立时不需要执行这些语句,那么应当采用if-then语句。
当判定条件成立时需要执行一组语句,否则需要执行另一组语句时,可采用if-then-else语句。
当根据表达式的取值情况在多个动作中选取其一执行时,可采用case语句。
循环结构是指可重复执行一组语句(称为循环体)的程序语句。
根据重复方式的不同,循环结构可分为while型循环、until型循环和for型循环。
while型循环是在指定的条件(称为循环条件)成立时,重复执行循环体,其特点是执行循环体前先判定循环条件,因此可能一次也不执行循环体。
until型循环将重复执行循环体,直到循环条件成立才结束该重复,其特点是每执行一次循环体后判定循环条件,因此至少执行一次循环体。
for型循环将循环体重复执行给定次数,其特点是循环开始前可确定循环次数。
2、什么是面向过程式语言?
有什么特点?
面向过程式语言,也叫命令式语言或强制式语言,它是通过指明一列可执行的运算及运算的次序来描述计算过程的语言。
命令式语言以冯·诺依曼式计算机体系结构为背景。
机器语言与汇编语言是最早问世的命令式语言。
FORTRAN,ALGOL,COBOL,PASCAL,C,Ada等高级语言也属过程式语言,其变量对应于存储单元,对变量的访问就是对相应存储单元的访问。
各个语句在程序中的顺序以及转向语句等控制语句则明确规定了机器的执行步骤,这就是冯·诺依曼式体系结构的思维方式在程序设计中的反映。
过程式语言程序的本质是重复地、按步地计算低级(非抽象)值并将之赋给变量(对象),这就迫使程序人员去关心比较低级的细节,而这不适用于设计复杂算法。
因此,几十年来过程式语言一直向着隐蔽低级机器属性、提高程序层次与抽象性的方向发展。
3、结构化程序设计方法的主要技术是什么?
结构化程序设计方法的主要技术是自顶向下、逐步求精。
具体地说,就是在接受一个任务之后,纵观全局,先设想好整个任务分为几个子任务,每一个子任务又可以进行细分,直到不需要细分为止。
这种方法就叫做“自顶向下、逐步求精”。
采用这种方法考虑问题比较周全,结构清晰,层次分明。
用这种方法也便于验证算法的正确性。
在向下一层细分之前应检查本层设计是否正确,只有上一层是正确的才可以继续细分。
如果每一层设计都没有问题,则整个算法就是正确的。
由于每一层向下细分时都不太复杂,因此容易保证整个算法的正确性。
检查时也是由上而下逐层检查,这样做思路清晰,可以有条不紊地一步一步地进行,既严谨又方便。
4、结构化程序设计的主要特征与风格是什么?
结构化程序设计的主要特征与风格如下所述。
(1)一个程序按结构化程序设计方式构造时,由三种基本控制结构:
顺序结构、选择结构和循环结构构成。
(2)有限制地使用goto语句。
鉴于goto语句的存在使程序的静态书写顺序与动态执行顺序十分不一致,导致程序难读难理解,容易存在潜在的错误,难于证明正确性,有人主张程序中禁止使用goto语句,但有人则认为goto语句是一种有效设施,不应全盘否定而完全禁止使用。
结构程序设计并不在于是否使用goto语句,因此作为一种折衷,允许在程序中有限制地使用goto语句。
(3)往往藉助于体现结构化程序设计思想的所谓结构化程序设计语言来书写结构化程序,并采用一定的书写格式以提高程序结构的清晰性,增进程序的易读性。
(4)它强调了程序设计过程中人的思维方式与规律,是一种自顶向下的程序设计策略,它通过一组规则、规律与特有的风格对程序设计细分和组织。
对于小规模程序设计,它与逐步精化的设计策略相联系,即采用自顶向下、逐步求精的方法对其进行分析和设计;对于大规模程序设计,它则与模块化程序设计策略相结合,即将一个大规模的问题划分为几个模块,每一个模块完成一定的功能。
5、程序的最基本控制结构有几种?
分别叫什么?
如何组成千变万化的程序?
参考答案:
最基本的程序控制有以下三种:
顺序执行、分支控制和循环控制。
(3分)
这三种执行控制的任意组合和重复、嵌套就可以描述任意复杂的程序。
(2分)
四、写出程序的运行结果
1、写出程序运行结果。
#include
main()
{inta=3,b=7;
printf("%d\n",++a+++b);/*①*/
printf("%d\n",b%a);/*②*/
}
程序运行结果是:
①12②0
2、阅读下面的程序并回答问题。
#include
main()
{inta,b,m,n;
scanf(”%d%d",&a,&b);
m=n=1;
if(a>0)m=m+n;
if(a
elseif(a==b)n=5;
elsen=m+n;
printf("m=%dn=%d\n",m,n);
}
为了输出n=4,变量a和b应具备条件。
03、阅读程序,写出程序的输出结果。
#include
main()
{chari,j;
for(i=’0’,j=’9’;iprintf("%c%c",i,j);
printf("\n");
}
运行结果是:
0918273645
4、写出程序运行结果。
#include
main()
{inta,b,c;
a=1;b=2;c=3;
if(a>b)
if(a>c)
printf("%d",a);
elseprintf("%d",b);
printf("%d\n",c);
}
运行结果是:
3
5、阅读程序写出程序的输出结果。
#include
main()
{inti=0,j=0,k=0,m;
for(m=0;m<4;m++)
switch(m)
{case0:
i=m++;
case1:
j=m++;
case2:
k=m++;
case3:
m++;
}
printf("\n%d,%d,%d,%d",i,j,k,m);
}
运行结果是:
0,1,2,5
6.#include
voidmain()
{inta=1,b=4,c=2;
a=(a+b)/c;
printf(“%d\n”,--a);
}
运行结果:
1
7.
voidmain()
{charc1=67;/*‘A’的ASCII码值为65*/
if(‘A’<=c1&&c1<=’Z’)
printf(“%d,%c”,c1,c1+1);
elseprintf(“%c”,c1);}
运行结果:
67,D
8.
viodmain()
{inta=0,n=5;
for(;;)
{a++;n--;
printf(“%d,”,a);
a=n;
if(n==0)break;
}
printf(“%d”,a);
}
运行结果:
1,5,4,3,2,0
9.main()
{intk=10;charc=’b’;
do
swith(c++)
{case‘a’:
k++;
case‘b’:
k--;
case‘c’:
k+=3;break;
case‘d’:
k=k%4;
}
while(c!
=’c’);
printf(“%d\n”,k);
}
运行结果:
12
10.#include
main()
{intx=1,a=0,b=0;
switch(x)
{case0;b++;
case1;a++;
case2;a++;b++;
}
printf(“a=%d,b=%d\n”,a,b);
}
运行结果:
a=1,b=1
11、写出程序的运行结果。
#include
main()
{inta=2,b=-1,c=2;
if(a
if(b<0)c=0;
elsec+=1;
printf("%d\n",c);
}
运行结果是:
2
12、阅读程序写出运行结果。
#include
main()
{charch;
ch=getchar();
switch(ch)
{case65:
printf(”%c”,’A’);
case66:
printf(”%c”,’B’);
default:
printf(”%s\n”,”other”);
}
}
如程序可以正常运行,当从键盘输入字母A时,输出结果为。
运行结果是:
ABother
13、写出程序运行结果。
main()
{intx=23,y=10;
do
{printf(”%d%d”,x--,++y);}
while(!
x);
}
该程序的执行结果是______。
2311
14、写出程序运行结果。
#include
main()
{intk=1,j=0;
while(k+j<=10)
if(k>j)j=j+2;
elsek=k+2;
printf("%d%d\n",k,j);
}
该程序的执行结果是______和______。
56
15、阅读程序,写出程序的输出结果。
main()
{inta=0,n=5;
for(;;)
{a++;n--;
printf(“%d,”,a);
a=n;
if(n==0)break;
}
printf(“%d”,a);
}
运行结果:
____________________
1,5,4,3,2,0
16、阅读下面的程序并回答问题。
#include
main()
{inta=13,b=-7;
printf("%d\n",a/b);/*①*/
printf("%d\n",b/a*a);/*②*/
}
程序运行结果是:
______和______。
①1②0
17、阅读程序,写出程序的输出结果。
#include
main()
{inti=1,j=2;
if(i!
=j)
printf("YES\n");
else
printf("NO\n");
}
运行结果是:
______。
YES
18、阅读程序,写出程序的输出结果。
main()
{inta=0;
for(a=0;a<3;a++);
printf("%d\n",a);
}
运行结果:
______。
3
19、写出程序运行结果。
(2分)
#include
main()
{charc=’A’;
if(’0’<=c<=’9’)
printf(”YES”);
else
printf(”NO”);
}
该程序的执行结果是______。
YES
20、写出程序运行结果。
(4分)
#include
main()
{inti,j;
for(i=0,j=10;iprintf("%d\n",i);/*①*/
printf("%d\n",j);/*②*/
}
该程序的执行结果是______和______。
86
21、阅读程序,写出程序的输出结果。
(4分)
main()
{intx=10,y=10,i;
for(i=0;x>8;y=++i)
printf(”%d%d”,x--,y);
}
运行结果:
101091
22、以下程序的输出结果是_____。
voidmain()
{
intx=17,y=26;
printf("%d\n",y/=(x%6));
}
5
五、程序设计
1、编写一程序,从键盘输入10个实数,计算并输出这10个数的平均值。
#include
main()
{inti;
doublex,sum=0;
for(i=1;x<=10;x++)
{scanf(“%f”,%x)
sum+=x;
}
printf("%f\n",sum/10);
}
2、编写程序,计算1!
+2!
+3!
+…….+n!
的值,其中n的值由键盘输入。
#include
main()
{inti,j,n;
doublesum=0,fact=1;
printf(“Pleaseinputn:
”);
scanf(“%d”,&n);
for(i=1;1<=n;i++){
fact=1;
for(j=1;j<=k;j++)
fact=fact*j;
sum=sum+fact;
}
printf(“num=%.2lf”,sum);
}
3、从键盘输入h值,输出h行用*号组成等腰三角形。
例:
输入h=4,输出的图形如下:
*
***
*****
*******
#include
main()
{inth,k,j;
scanf(”%d”,&h);
for(k=1;k<=h;k++)/*控制打印h行*/
{for(j=1;j<=h-k;j++)/*打印空格*/
printf(””);
for(j=1;j<=2*k-1;j++)/*打印*号*/
printf(”*”);
printf(”\n”);
}
}
4、从键盘输入h值,输出h行用*号组成的菱形。
例:
输入h=4,输出的图形如下:
*
***
*****
*******
*****
***
*
#include
main()
{inth,k,j,m,n;
printf("EnterH:
");
scanf("%d",&h);
for(j=1;j<=2*h-1;j++)/*行控制*/
{if(j<=h){m=h-j;n=2*j-1;}
else{m=j-h;n=4*h-1-2*j;}
for(k=1;k<=m;k++)/*打印空格*/
printf("");
for(k=1;k<=n;k++)/*打印**/
printf("*");
printf("\n");
}
}
5、编写程序。
从键盘输入h值,输出h行用*号组成的平行四边形。
例:
输入h=4,输出的图形如下:
****
****
**