⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 考研论坛 - 软件硕士(mse) - [推荐]数据结构(c++)习题解答(页 1) 简化版本.htm

📁 研究生硕士考题 数据结构C++部分 多道好题和答案
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                                    
                  &nbsp; &nbsp; }<BR>}<BR><BR>1-9 (1) 
                  在下面所给函数的适当地方插入计算count的语句:<BR>&nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; void d (ArrayElement x[ ], int n ) 
                  {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp;&nbsp; &nbsp; int i = 1;<BR>&nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; do {<BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp;&nbsp; &nbsp;x[ i ] += 2;&nbsp;&nbsp;i +=2;<BR>&nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; 
                  } while (i &lt;= n );<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; i = 1;<BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; while ( 
                  i &lt;= (n/2) ) {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;x[ i ] 
                  += x[ i+1];&nbsp;&nbsp;i++;<BR>&nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; }<BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; (2) 
                  将由(1)所得到的程序化简。使得化简后的程序与化简前的程序具有相同的count值。<BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; (3) 程序执行结束时的count值是多少?<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; (4) 使用执行频度的方法计算这个程序的程序步数,画出程序步数统计表。 <BR>【解答】<BR>(1) 
                  在适当的地方插入计算count语句<BR>void d ( ArrayElement x [ 
                  ],&nbsp;&nbsp;int n ) {<BR>int i = 1;<BR>&nbsp;&nbsp;&nbsp; 
                  &nbsp; &nbsp; &nbsp; count ++;<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; do {<BR>&nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; x[ i ] += 2;&nbsp;&nbsp;count ++;<BR>&nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; i += 2;&nbsp;&nbsp;count 
                  ++;&nbsp;&nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count ++;&nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; //针对while语句<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 
                  &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; } while ( i &lt;= n 
                  );<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
                  &nbsp; &nbsp; i = 1;<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 
                  &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; count ++;<BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; while ( 
                  i &lt;= ( n / 2 ) ) {<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 
                  &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  count ++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; //针对while语句<BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; x[ i ] += x[ i+1];<BR>count ++;<BR>i ++;<BR>count 
                  ++;<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
                  &nbsp; &nbsp; }<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 
                  &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; count ++;&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; //针对最后一次while语句<BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; }<BR>&nbsp; &nbsp; &nbsp; &nbsp; (2) 
                  将由(1)所得到的程序化简。化简后的程序与原来的程序有相同的count值:<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; void d ( ArrayElement x [ ],&nbsp;&nbsp;int n ) 
                  {<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
                  &nbsp; &nbsp; int i = 1;<BR>do {<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  count += 3;&nbsp;&nbsp;i += 2;<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; } while ( i 
                  &lt;= n );<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
                  &nbsp; &nbsp; &nbsp; i = 1;<BR>while ( i &lt;= ( n / 2 ) ) 
                  {<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count += 
                  3;&nbsp;&nbsp;i ++;&nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; 
                  &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 
                  }<BR>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
                  &nbsp; &nbsp; count += 3;&nbsp; &nbsp; &nbsp; &nbsp; 
                  <BR>&nbsp; &nbsp; &nbsp; &nbsp; }<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; (3) 程序执行结束后的count值为 3n + 3。<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 当n为偶数时,count = 3 * ( n / 2 
                  ) + 3 * ( n / 2 ) + 3 = 3 * n + 3<BR>当n为奇数时,count = 3 * ( ( n 
                  + 1 ) / 2 ) + 3 * ( ( n – 1 ) / 2 ) + 3 = 3 * n + 3<BR>(4) 
                  使用执行频度的方法计算程序的执行步数,画出程序步数统计表:<BR><BR>行 号&nbsp; &nbsp; &nbsp; 
                  &nbsp;&nbsp; &nbsp;&nbsp; 
                  &nbsp;程&nbsp;&nbsp;序&nbsp;&nbsp;语&nbsp;&nbsp;句&nbsp; &nbsp; 
                  &nbsp; &nbsp; 一次执行步数&nbsp; &nbsp; &nbsp; &nbsp; 执行频度&nbsp; 
                  &nbsp; &nbsp; &nbsp; 程序步数<BR>&nbsp; &nbsp;1<BR>&nbsp; 
                  &nbsp;2<BR>&nbsp; &nbsp;3<BR>&nbsp; &nbsp;4<BR>&nbsp; 
                  &nbsp;5<BR>&nbsp; &nbsp;6<BR>&nbsp; &nbsp;7<BR>&nbsp; 
                  &nbsp;8<BR>&nbsp; 
                  &nbsp;9<BR>&nbsp;&nbsp;10<BR>&nbsp;&nbsp;11<BR>&nbsp;&nbsp;12&nbsp; 
                  &nbsp; &nbsp; &nbsp; void d ( ArrayElement x [ 
                  ],&nbsp;&nbsp;int n ) {<BR>&nbsp;&nbsp;int i = 
                  1;<BR>&nbsp;&nbsp;do {<BR>&nbsp; &nbsp; &nbsp; &nbsp; x[ i ] 
                  += 2;<BR>&nbsp; &nbsp; &nbsp; &nbsp; i += 2;<BR>&nbsp;&nbsp;} 
                  while ( i &lt;= n );<BR>&nbsp;&nbsp;i = 
                  1;<BR>&nbsp;&nbsp;while ( i &lt;= ( n / 2 ) ) {<BR>&nbsp; 
                  &nbsp; &nbsp; &nbsp; x[ i ] += x[ i+1];<BR>&nbsp; 
                  &nbsp;&nbsp;&nbsp;i ++;<BR>&nbsp;&nbsp;}<BR>}&nbsp; &nbsp; 
                  &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 0<BR>&nbsp; 
                  &nbsp;&nbsp; &nbsp;1<BR>&nbsp; &nbsp;&nbsp; &nbsp;0<BR>&nbsp; 
                  &nbsp;&nbsp; &nbsp;1<BR>&nbsp; &nbsp;&nbsp; &nbsp;1<BR>&nbsp; 
                  &nbsp;&nbsp; &nbsp;1<BR>&nbsp; &nbsp;&nbsp; &nbsp;1<BR>&nbsp; 
                  &nbsp;&nbsp; &nbsp;1<BR>&nbsp; &nbsp;&nbsp; &nbsp;1<BR>&nbsp; 
                  &nbsp;&nbsp; &nbsp;1<BR>&nbsp; &nbsp;&nbsp; &nbsp;0<BR>&nbsp; 
                  &nbsp;&nbsp; &nbsp;0&nbsp; &nbsp; &nbsp; &nbsp; 
                  1<BR>1<BR>&#61675;(n+1)/2&#61691; 
                  <BR>&#61675;(n+1)/2&#61691;<BR>&#61675;(n+1)/2&#61691;<BR>&#61675;(n+1)/2&#61691;<BR>1<BR>&nbsp;&nbsp;&#61675;n/2+1&#61691;<BR>&nbsp; 
                  &nbsp;&#61675;n/2&#61691;<BR>&nbsp; &nbsp;&#61675;n/2&#61691;<BR>&nbsp; 
                  &nbsp;&#61675;n/2&#61691;<BR>&nbsp; &nbsp; 1&nbsp; &nbsp; &nbsp; &nbsp; 
                  0<BR>1<BR>&nbsp; &nbsp; 
                  0<BR>&#61675;(n+1)/2&#61691;<BR>&#61675;(n+1)/2&#61691;<BR>&#61675;(n+1)/2&#61691;<BR>1<BR>&nbsp;&nbsp;&#61675;n/2+1&#61691;<BR>&nbsp; 
                  &nbsp;&#61675;n/2&#61691;<BR>&nbsp; &nbsp;&#61675;n/2&#61691;<BR>&nbsp; &nbsp; 0<BR>&nbsp; 
                  &nbsp; 0<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;( n &#61625; 0 )&nbsp; 
                  &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;3n + 3<BR><BR>1-10 
                  设有3个值大小不同的整数a、b和c,试求<BR>(1) 其中值最大的整数;<BR>(2) 其中值最小的整数;<BR>(3) 
                  其中位于中间值的整数。<BR>【解答】<BR>(1) 求3个整数中的最大整数的函数<BR>&nbsp; 
                  &nbsp;【方案1】<BR>int max ( int a, int b, int c ) 
                  {<BR>&nbsp;&nbsp;int m = a;<BR>&nbsp;&nbsp;if ( b &gt; m ) m = 
                  b;<BR>&nbsp;&nbsp;if ( c &gt; m ) m = c;<BR>&nbsp;&nbsp;return 
                  m;<BR>}<BR>&nbsp; &nbsp;【方案2】(此程序可修改循环终止变量扩大到n个整数)<BR>int max 
                  ( int a, int b, int c ) {<BR>&nbsp;&nbsp;int data[3] = { a, b, 
                  c };<BR>&nbsp;&nbsp;int m = 0;&nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  //开始时假定data[0]最大<BR>&nbsp;&nbsp;for ( int i = 1; i &lt; 3; i++ 
                  )&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; //与其他整数逐个比较<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; if ( data[ i ] &gt; data[m] ) m = i;&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  //m记录新的最大者<BR>&nbsp;&nbsp;return data[m];<BR>}<BR>(2) 
                  求3个整数中的最小整数的函数<BR>可将上面求最大整数的函数稍做修改,“&gt;”改为“&lt;”,可得求最小整数函数。<BR>&nbsp; 
                  &nbsp;【方案1】<BR>int min ( int a, int b, int c ) 
                  {<BR>&nbsp;&nbsp;int m = a;<BR>&nbsp;&nbsp;if ( b &lt; m ) m = 
                  b;<BR>&nbsp;&nbsp;if ( c &lt; m ) m = c;<BR>&nbsp;&nbsp;return 
                  m;<BR>}<BR>&nbsp; &nbsp;【方案2】(此程序可修改循环终止变量扩大到n个整数)<BR>int max 
                  ( int a, int b, int c ) {<BR>&nbsp;&nbsp;int data[3] = { a, b, 
                  c };<BR>&nbsp;&nbsp;int m = 0;&nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  //开始时假定data[0]最小<BR>&nbsp;&nbsp;for ( int i = 1; i &lt; 3; i++ 
                  )&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; //与其他整数逐个比较<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; if ( data[ i ] &lt; data[m] ) m = i;&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  //m记录新的最小者<BR>&nbsp;&nbsp;return data[m];<BR>}<BR>(3) 
                  求3个整数中具有中间值的整数<BR>可将上面求最大整数的函数稍做修改,“&gt;”改为“&lt;”,可得求最小整数函数。<BR>&nbsp; 
                  &nbsp;【方案1】<BR>int mid ( int a, int b, int c ) 
                  {<BR>&nbsp;&nbsp;int m1 = a, m2;&nbsp;&nbsp;<BR>&nbsp;&nbsp;if 
                  ( b &lt; m1 ) { m2 = m1;&nbsp;&nbsp;m1 = b; 
                  }<BR>&nbsp;&nbsp;else m2 = b;<BR>&nbsp;&nbsp;if ( c &lt; m1 ) 
                  { m2 = m1;&nbsp;&nbsp;m1 = c; }<BR>&nbsp;&nbsp;else if ( c 
                  &lt; m2 ) { m2 = c; }<BR>&nbsp;&nbsp;return m2;<BR>}<BR>&nbsp; 
                  &nbsp;【方案2】(此程序可修改循环终止变量扩大到n个整数寻求次小元素)<BR>int mid ( int a, int 
                  b, int c ) {<BR>&nbsp;&nbsp;int data[3] = { a, b, c 
                  };<BR>&nbsp;&nbsp;int m1 = 0, m2 = -1; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; //m1指示最小整数, m2指示次小整数<BR>&nbsp;&nbsp;for ( 
                  int i = 1; i &lt; 3; i++ )&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; //与其他整数逐个比较<BR>&nbsp; &nbsp; &nbsp; &nbsp; if ( data[ i 
                  ] &lt; data[m1] ) { m2 = m1;&nbsp;&nbsp;m1 = i; }&nbsp; &nbsp; 
                  &nbsp; &nbsp; //原来最小变为次小, m1指示新的最小<BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; else if ( m2 == -1 || data[ i ] &lt; data[m2] ) m2 = 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -