📄 xt3.htm
字号:
width=9></DIV></TD>
<TD>
<DIV align=left><A class=mb14
href="http://www.nuist.edu.cn/JSJ/syjx/szll.htm"> 师资力量</A></DIV></TD></TR>
<TR>
<TD height=26>
<DIV align=right><IMG height=15 src="xt3.files/article_common.gif"
width=9></DIV></TD>
<TD>
<DIV align=center>
<P align=left><A class=mb14
href="http://www.nuist.edu.cn/JSJ/syjx/jxcg.htm"> 教学成果</A></P></DIV></TD></TR>
<TR>
<TD height=26>
<DIV align=right><IMG height=15 src="xt3.files/article_common.gif"
width=9></DIV></TD>
<TD>
<DIV align=left><A
href="http://www.nuist.edu.cn/JSJ/syjx/jxkh.htm"> 教学考核</A></DIV></TD></TR>
<TR>
<TD height=26>
<DIV align=right><IMG height=15 src="xt3.files/article_common.gif"
width=9></DIV></TD>
<TD>
<DIV align=left><A class=mb14
href="http://www.nuist.edu.cn/JSJ/syjx/zwpj.htm"> 自我评价</A></DIV></TD></TR>
<TR>
<TD height=26>
<DIV align=right><IMG height=15 src="xt3.files/article_common.gif"
width=9></DIV></TD>
<TD>
<DIV align=left><A class=mb14
href="http://www.nuist.edu.cn/JSJ/syjx/jsgh.htm"> 建设规划</A></DIV></TD></TR>
<TR>
<TD height=26>
<DIV align=right><IMG height=15 src="xt3.files/article_common.gif"
width=9></DIV></TD>
<TD>
<DIV align=left><A class=mb14
href="http://www.nuist.edu.cn/JSJ/syjx/jcxy.htm"> 教材选用</A></DIV></TD></TR>
<TR>
<TD height=2></TD>
<TD></TD></TR></TBODY></TABLE></TD>
<TD vAlign=top colSpan=2>
<TABLE class=bg height=241 cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD width="11%" height=33><IMG height=34 src="xt3.files/homedha.gif"
width=55><IMG height=34 src="xt3.files/homedhbg.gif" width=8></TD>
<TD
width="89%"><!-- InstanceBeginEditable name="EditRegion4" --><SPAN
class=s14><STRONG>习题三</STRONG></SPAN><!-- InstanceEndEditable --></TD></TR>
<TR>
<TD colSpan=2><!-- InstanceBeginEditable name="EditRegion5" -->
<TABLE cellSpacing=1 cellPadding=1 width="100%" border=1>
<TBODY>
<TR>
<TD>
<DIV align=center>第3章 函数 </DIV></TD></TR>
<TR>
<TD>
<P class=xt12 align=left>3.1
什么是函数?函数是如何分类的?<BR>答:函数是实现特定功能的相对独立的程序段 .从不同的角度可以将函数分成 :
库函数和用户自定义函数、主调函数和被调函数、无参函数和有参函数。 </P>
<P class=xt12>3.2 自定义函数如何定义?有哪三种调用方式?<BR>答:自定义函数定义一般格式为:〔 类型 〕
< 函数名 > ( < 形式参数表 > ){< 语句序列 >
}函数调用的方式通常有三种,即:函数调用语句、函数表达式、函数参数。 </P>
<P class=xt12>3.3
在函数的调用过程中,实参传送给形参有哪两种方式?这两种传送方式有什么区别?<BR>答:在函数的调用过程中,实参传送给形参有“值传递”和“传地址”两种方式。<BR>所谓的“值传递“,调用函数时,系统给形参分配存储单元,并将实参的值传递给对应的形参;在函数执行时,都是形参参与运算;函数返回时,形参值的改变不影响实参,实参保持原来的值。<BR>所谓的“传地址”,当函数的形参为数组时,其实参只能是相同类型的数组。调用函数时,系统将
实参数组的起始地址传递给形参数组,两个数组占用相同的内存空间单元。这时,在执行函数时,形参数组中各元素值的变化会使实参数组元素的值同时发生变化。
</P>
<P class=xt12>3.4
什么情况下必须使用函数的原型说明?在函数的原型说明的形参表中,形参名是否是必须的?为什么?<BR>答:在 C++
程序中,当函数调用在前、函数定义在后时,则应在主调函数中,在调用前增加对被调函数的原型说明。在函数原型说明中,可只写形参的数据类型,而省略形参名。这是因为:函数原型说明的目的是告诉编译程序,该函数返回值的类型、参数的个数和各参数的类型,以便其后调用该函数时,编译程序对该函数的调用作参数的类型、个数及函数的返回值是否有效的检查。仅给出每一个参数的类型,实际上也已说明了参数的个数。
</P>
<P class=xt12>3.5
什么是递归?递归方法解决问题时,必须分析清楚哪三个问题?<BR>答:函数的递归调用指的是在一个函数定义的函数体中又出现直接或间接地调用该函数本身。利用递归方法解决问题时,必须注意三点:递归的公式、递归的结束条件、递归的限制条件。</P>
<P class=xt12>3.6 什么是作用域?在 C++ 中,作用域分成哪 5 类?在前 4
类作用域中,变量有效作用区域是什么?<BR>答:作用域是变量在程序中可引用的区域。<BR>在 C++
中,作用域共分成五种:块作用域、文件作用域、函数原型作用域、函数作用域和类作用域。所谓块就是用花括号括起来的一部分程序。在块内说明的变量具有块作用域,其作用域从变量的说明处到块的结束处。<BR>在函数外定义的变量或用
extern
说明的变量具有文件作用域。具有文件作用域的变量缺省的作用域是:从定义变量的位置开始到该源程序文件结束,即符合变量先说明、后使用的原则。<BR>在函数原型的参数表中说明的变量所具有的作用域称为函数原型作用域,它从其说明处开始,到函数原型说明的结束处结束。<BR>函数作用域是指在函数内定义的标识符在其定义的函数内均有效,即不论在函数内的任一地方定义,均可以引用这种标识符。</P>
<P class=xt12>3.7
什么是局部变量与全局变量?局部变量与全局变量的作用域是什么?什么是静态变量与动态变量?静态变量与动态变量分别存放在什么存储区?静态变量与动态变量各自生存期是什么?<BR>答:局部变量指的是在一个函数内部定义的变量或在一个块内定义的变量。全局变量指的是在函数外定义的变量。全局变量具有文件作用域。<BR>当具有块作用域的局部变量与具有文件作用域的全局变量同名时,局部变量优先。在块作用域内可通过作用域运算符“
::
”来引用与局部变量同名的全局变量。<BR>动态变量指的是在程序的执行过程中,为其分配存储空间的变量。静态变量指的是在程序开始执行时系统就为变量分配存储空间,直到程序执行结束时,才收回为变量分配的存储空间。<BR>动态变量存储在内存中的动态存储区;静态变量存储在内存中的静态存储区。静态变量的生存期为整个程序的执行期间。动态变量的生存期仅在变量的作用域内。
</P>
<P class=xt12>3.8
变量的存储类型有哪四种?按存储类型,变量可分为哪五种?叙述每类存储变量的存储特性。<BR>答:在 C++
中,变量的存储类型分为四种:自动类型( auto )、静态类型 (static) 、寄存器类型 (register)
、外部类型 (extern)
。<BR>按存储类型,变量可分为自动变量、寄存器变量、局部静态变量、全局静态变量、外部变量五种。每类存储变量的存储特性总结在下表中:<BR>表
5.1 变量存储类型表 </P>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=113>
<P class=xt12>变量类型 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>全局、局部变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>作用域 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>静、动态变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>存储区 </P></TD></TR>
<TR>
<TD vAlign=top width=113>
<P class=xt12>自动变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>局部变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>块作用域 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>动态变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>动态存储区 </P></TD></TR>
<TR>
<TD vAlign=top width=113>
<P class=xt12>寄存器变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>局部变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>块作用域 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>动态变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>CPU 寄存器 </P></TD></TR>
<TR>
<TD vAlign=top width=113>
<P class=xt12>局部静态变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>局部变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>块作用域 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>静态变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>静态存储区 </P></TD></TR>
<TR>
<TD vAlign=top width=113>
<P class=xt12>全局静态变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>全局变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>文件作用域 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>静态变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>静态存储区 </P></TD></TR>
<TR>
<TD vAlign=top width=113>
<P class=xt12>外部变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>全局变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>文件作用域 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>静态变量 </P></TD>
<TD vAlign=top width=113>
<P class=xt12>静态存储区 </P></TD></TR></TBODY></TABLE>
<P class=xt12>3.9 如何定义内联函数?使用内联函数的实质与目的是什么?<BR>答:在类型前加关键字
inline 定义的函数称为所谓内联函数,<BR>定义格式为:inline < 类型 > < 函数名
> ( < 形式参数表 > )<BR>{ 函数体
}内联函数的实质就是在编译时把函数的函数体直接插入到调用处。其目的是降低系统的开销,提高程序的执行效率。</P>
<P class=xt12>3.10
什么是函数的重载?调用重载函数时,通过什么来区分不同的重载函数?<BR>答:函数的重载是指用重名函数完成不同功能的函数运算。<BR>定义的重载函数的形参必须不同,即:或者参数个数不同或者数据类型不同。只有这样,编译器才有可能根据不同的参数去调用不同的重载函数。
</P>
<P class=xt12>3.11 写出下列程序的运行结果:<BR>#include
<iostream.h><BR>void modify(int x,int y)<BR>{
cout<<"x="<<x<<'\t'<<"y="<<y<<endl;<BR> x=x+3;
y=y+4;<BR> cout<<"x="<<x<<'\t'<<"y="<<y<<endl;<BR>}<BR><BR>void
main(void)<BR>{ int
a,b;<BR> a=1;b=2;<BR> cout<<"a="<<a<<'\t'<<"b="<<b<<endl;<BR> modify(a,b);<BR> cout<<"a="<<a<<'\t'<<"b="<<b<<endl;<BR>}<BR>程序的运行结果:<BR>a=1
b=2<BR>x=1 y=2<BR>x=4 y=6<BR>a=1 b=2</P>
<P class=xt12>3.12 写出下列程序运行后的输出图形:<BR>#include
<iostream.h><BR>void main(void)<BR>{ int i=4,jvoid
printchar(int,char);<BR> printchar(25,'
');<BR> j=i;<BR> printchar(i+2*j-2,'*');<BR> cout<<endl;<BR> for
(j=2;j>=0;j--)<BR> { printchar(28-j,'
');<BR> printchar(i+2*j,'*');<BR>
cout<<endl;<BR> }<BR>}<BR>void printchar(int len,char
c)<BR>{ int k;<BR> for (k=1;k<=len;k++)<BR>
cout<<c;<BR>}<BR>程序的运行结果是:<BR> **********<BR>
********<BR> ******<BR> ****</P>
<P class=xt12>3.13 写出下列递归程序的递归公式、限制条件、结束条件及运行结果:<BR>#include
<iostream.h><BR>int fac(int n)<BR>{ int z;<BR> if
(n>0)<BR> z=n*fac(n-2);<BR> else<BR> z=1;<BR> return
z;<BR>}<BR>void main(void)<BR>{ int
x=7,y;<BR> y=fac(x);<BR> cout<<y<<endl;<BR>}<BR>答:
</P>
<P class=xt12><IMG height=82 src="xt3.files/sjt3.gif"
width=143><BR>( 1 )递归公式: x*fac(x-1)<BR>( 2 )递归结束条件: x<0 或
x=0<BR>( 3 )递归约束条件: x 所有的数<BR>( 4 )程序运行结果是: 105</P>
<P class=xt12>3.14 写出下列以数组为参数的函数调用运行结果:<BR>#include
<iostream.h><BR>#include <string.h><BR>void
main(void)<BR>{ char a[]="abcdef";<BR> int n;<BR> void
fun(char s[],int k);<BR> n=strlen(a);<BR> fun(a,n);<BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -