<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>我有昕想法 | Peter_Matthew的博客</title>
  
  <subtitle>I have Xin ideas. | A Konjac in Province H.A.&#39;s Blog</subtitle>
  <link href="https://www.gh.zhangkaixin.cc/atom.xml" rel="self"/>
  
  <link href="https://www.gh.zhangkaixin.cc/"/>
  <updated>2025-08-12T08:46:46.887Z</updated>
  <id>https://www.gh.zhangkaixin.cc/</id>
  
  <author>
    <name>William Peter Matthew</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>题解 GPLT L3-009 长城</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Solution/solution-gplt-l3-009/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Solution/solution-gplt-l3-009/</id>
    <published>2025-08-06T14:34:23.000Z</published>
    <updated>2025-08-12T08:46:46.887Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>从南到北的折线中，选取尽量少的点建造烽火台，使得敌情可以通过北向南传递到总部，且每一个敌情点能被北方某个烽火台“看到”（没有遮挡）。</p><p>设点 A、B、C 从南到北排列,如果你从 C 看向 A，但中间的 B 挡住了视线（因为 B 比连线 AC 更高），那么就说明C → A 不可见，因为 B 遮挡。这个几何问题，本质上就是三点是否形成“凹形”或“右转”。</p><p>判断三点 A, B, C 是否构成凹形 —— 用 叉积（cross product）判断转向方向：<br>叉积公式：<br>$$ (p2 - p1) \times (p3 - p2) &#x3D; (x2 - x1) \ast  (y3 - y2) - (y2 - y1) \ast  (x3 - x2) $$<br>如果结果 ≥ 0：说明是右转或共线（遮挡）</p><p>整体做法是：</p><ol><li>初始化栈为空。</li><li>从第一个点（最南端，总部）开始，依次处理每个点。</li><li>对于当前点，如果前面两个栈顶点 + 当前点构成凹形（即中间点会遮挡），就把中间点从栈中弹出。然后判断栈顶点是否已经是烽火台：如果不是，则现在它必须成为烽火台。</li><li>最后把当前点压入栈。</li></ol><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 判断是否形成“右转”或“共线”（即中间点被遮挡）</span></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isConcave</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> mid, <span class="type">int</span> r, <span class="type">const</span> vector&lt;<span class="type">long</span> <span class="type">long</span>&gt;&amp; X, <span class="type">const</span> vector&lt;<span class="type">long</span> <span class="type">long</span>&gt;&amp; Y)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">return</span> (Y[r] - Y[l]) * (X[mid] - X[l]) &gt;= (Y[mid] - Y[l]) * (X[r] - X[l]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    cin &gt;&gt; n;</span><br><span class="line"></span><br><span class="line">    <span class="function">vector&lt;<span class="type">long</span> <span class="type">long</span>&gt; <span class="title">X</span><span class="params">(n)</span>, <span class="title">Y</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; ++i) &#123;</span><br><span class="line">        cin &gt;&gt; X[i] &gt;&gt; Y[i];</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; tower;       <span class="comment">// 单调栈：用于维护可见性链上的点下标</span></span><br><span class="line">    <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">vis</span><span class="params">(n, <span class="literal">false</span>)</span></span>; <span class="comment">// 标记哪些点被选为烽火台</span></span><br><span class="line">    <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; ++i) &#123;</span><br><span class="line">        <span class="keyword">if</span> (!tower.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">            <span class="comment">// 如果形成了“凹形”（右转），弹出中间的那个点</span></span><br><span class="line">            <span class="keyword">while</span> (tower.<span class="built_in">size</span>() &gt; <span class="number">1</span> &amp;&amp; <span class="built_in">isConcave</span>(i, tower.<span class="built_in">back</span>(), tower[tower.<span class="built_in">size</span>() - <span class="number">2</span>], X, Y)) &#123;</span><br><span class="line">                tower.<span class="built_in">pop_back</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="comment">// 如果当前 tower 栈顶的点未被标记为烽火台，则现在它必须成为一个烽火台</span></span><br><span class="line">            <span class="keyword">if</span> (tower.<span class="built_in">size</span>() != <span class="number">1</span> &amp;&amp; !vis[tower.<span class="built_in">back</span>()]) &#123;</span><br><span class="line">                vis[tower.<span class="built_in">back</span>()] = <span class="literal">true</span>;</span><br><span class="line">                ++ans;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        tower.<span class="built_in">push_back</span>(i);  <span class="comment">// 当前点加入栈（作为可能的烽火台或可见链上的一员）</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; ans &lt;&lt; endl;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="题解" scheme="https://www.gh.zhangkaixin.cc/tags/%E9%A2%98%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>题解 GPLT L2-025 分而治之</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Solution/solution-gplt-l2-025/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Solution/solution-gplt-l2-025/</id>
    <published>2025-08-06T13:42:12.000Z</published>
    <updated>2025-08-06T13:42:16.830Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>图论问题，邻接表建图；<br>对每组方案用 unordered_set 存储要移除的城市，用另一个 unordered_set 存储剩下的城市，遍历剩余城市的邻接边，只要找到一个邻居也在剩余城市中，说明它们之间仍然连通，若无此情况，输出 YES，否则输出 NO。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> N, M;</span><br><span class="line">    cin &gt;&gt; N &gt;&gt; M;</span><br><span class="line"></span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt; &gt; <span class="built_in">graph</span>(N + <span class="number">1</span>); <span class="comment">// 城市编号从1开始</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">// 构建无向图的邻接表</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; M; ++i) &#123;</span><br><span class="line">        <span class="type">int</span> u, v;</span><br><span class="line">        cin &gt;&gt; u &gt;&gt; v;</span><br><span class="line">        graph[u].<span class="built_in">push_back</span>(v);</span><br><span class="line">        graph[v].<span class="built_in">push_back</span>(u);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> K;</span><br><span class="line">    cin &gt;&gt; K;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; K; ++i) &#123;</span><br><span class="line">        <span class="type">int</span> Np;</span><br><span class="line">        cin &gt;&gt; Np;</span><br><span class="line">        unordered_set&lt;<span class="type">int</span>&gt; to_remove;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; Np; ++j) &#123;</span><br><span class="line">            <span class="type">int</span> city;</span><br><span class="line">            cin &gt;&gt; city;</span><br><span class="line">            to_remove.<span class="built_in">insert</span>(city);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 构建剩余城市集合</span></span><br><span class="line">        unordered_set&lt;<span class="type">int</span>&gt; remaining;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> city = <span class="number">1</span>; city &lt;= N; ++city) &#123;</span><br><span class="line">            <span class="keyword">if</span> (to_remove.<span class="built_in">find</span>(city) == to_remove.<span class="built_in">end</span>()) &#123;</span><br><span class="line">                remaining.<span class="built_in">insert</span>(city);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 检查剩余城市是否之间有连接</span></span><br><span class="line">        <span class="type">bool</span> isolated = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> u : remaining) &#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> v : graph[u]) &#123;</span><br><span class="line">                <span class="keyword">if</span> (remaining.<span class="built_in">find</span>(v) != remaining.<span class="built_in">end</span>()) &#123;</span><br><span class="line">                    <span class="comment">// u 和 v 都在剩余城市集合中，说明还有边</span></span><br><span class="line">                    isolated = <span class="literal">false</span>;</span><br><span class="line">                    <span class="keyword">break</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (!isolated) <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        cout &lt;&lt; (isolated ? <span class="string">&quot;YES&quot;</span> : <span class="string">&quot;NO&quot;</span>) &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="题解" scheme="https://www.gh.zhangkaixin.cc/tags/%E9%A2%98%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>题解 GPLT L2-020 功夫传人</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Solution/solution-gplt-l2-020/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Solution/solution-gplt-l2-020/</id>
    <published>2025-08-06T13:33:12.000Z</published>
    <updated>2025-08-06T13:33:59.710Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>使用 BFS来遍历整棵树，并记录每个节点的深度（即第几代弟子）。若某位得道者在第 d 代，则功力为：<br>$$Z \times (1 - r&#x2F;100)^d \times 倍数$$</p><p>因此从根节点（祖师爷，编号0）开始做BFS，记录每个节点的深度。如果是得道者，计算其功力，加入总和。最后取整输出所有得道者功力之和。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> N;</span><br><span class="line">    <span class="type">double</span> Z, r;</span><br><span class="line">    cin &gt;&gt; N &gt;&gt; Z &gt;&gt; r;</span><br><span class="line"></span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">tree</span>(N);        <span class="comment">// 存储师傅到徒弟的关系</span></span><br><span class="line">    <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">isLeaf</span><span class="params">(N, <span class="literal">false</span>)</span></span>;      <span class="comment">// 标记是否是得道者（即叶子节点）</span></span><br><span class="line">    <span class="function">vector&lt;<span class="type">double</span>&gt; <span class="title">multiplier</span><span class="params">(N, <span class="number">1.0</span>)</span></span>;   <span class="comment">// 得道者的功力倍数</span></span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">depth</span><span class="params">(N, <span class="number">0</span>)</span></span>;            <span class="comment">// 每个节点的深度（代数）</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; N; ++i) &#123;</span><br><span class="line">        <span class="type">int</span> K;</span><br><span class="line">        cin &gt;&gt; K;</span><br><span class="line">        <span class="keyword">if</span> (K == <span class="number">0</span>) &#123;</span><br><span class="line">            isLeaf[i] = <span class="literal">true</span>;</span><br><span class="line">            <span class="type">double</span> m;</span><br><span class="line">            cin &gt;&gt; m;</span><br><span class="line">            multiplier[i] = m;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; K; ++j) &#123;</span><br><span class="line">                <span class="type">int</span> child;</span><br><span class="line">                cin &gt;&gt; child;</span><br><span class="line">                tree[i].<span class="built_in">push_back</span>(child);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// BFS 遍历整棵树并记录深度</span></span><br><span class="line">    queue&lt;<span class="type">int</span>&gt; q;</span><br><span class="line">    q.<span class="built_in">push</span>(<span class="number">0</span>);  <span class="comment">// 祖师爷编号为0</span></span><br><span class="line">    depth[<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span> (!q.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">        <span class="type">int</span> current = q.<span class="built_in">front</span>();</span><br><span class="line">        q.<span class="built_in">pop</span>();</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> child : tree[current]) &#123;</span><br><span class="line">            depth[child] = depth[current] + <span class="number">1</span>;</span><br><span class="line">            q.<span class="built_in">push</span>(child);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 计算所有得道者的功力</span></span><br><span class="line">    <span class="type">double</span> totalPower = <span class="number">0.0</span>;</span><br><span class="line">    <span class="type">double</span> rate = <span class="number">1.0</span> - r / <span class="number">100.0</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; N; ++i) &#123;</span><br><span class="line">        <span class="keyword">if</span> (isLeaf[i]) &#123;</span><br><span class="line">            <span class="type">double</span> power = Z * <span class="built_in">pow</span>(rate, depth[i]) * multiplier[i];</span><br><span class="line">            totalPower += power;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 输出功力总值的整数部分</span></span><br><span class="line">    cout &lt;&lt; (<span class="type">long</span> <span class="type">long</span>)(totalPower) &lt;&lt; endl;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="题解" scheme="https://www.gh.zhangkaixin.cc/tags/%E9%A2%98%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>题解 APA 算法编程协会内部第三次月赛 —— “类天梯模拟赛”</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Solution/solution-cppuapam03/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Solution/solution-cppuapam03/</id>
    <published>2025-08-06T12:37:43.000Z</published>
    <updated>2025-08-12T09:15:20.353Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>本篇题解所使用的语言是C++，部分其他语言的选手可能需要理解做法后自行编写对应语言的代码。</p><h2 id="L1-1-等号警长的求助"><a href="#L1-1-等号警长的求助" class="headerlink" title="L1-1 等号警长的求助"></a>L1-1 等号警长的求助</h2><h3 id="题目背景"><a href="#题目背景" class="headerlink" title="题目背景"></a>题目背景</h3><p>你是数字之城最著名的侦探——派大饼。一天，等号警长向你发来求救短信，你需要立即回他消息。</p><h3 id="题目描述"><a href="#题目描述" class="headerlink" title="题目描述"></a>题目描述</h3><p>What on earth is going on??!</p><p>请你输出这句话帮他回复短信。</p><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>无</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>一行字符串。</p><h3 id="输入样例"><a href="#输入样例" class="headerlink" title="输入样例"></a>输入样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">无</span><br></pre></td></tr></table></figure><h3 id="输出样例"><a href="#输出样例" class="headerlink" title="输出样例"></a>输出样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">What on earth is going on??!</span><br></pre></td></tr></table></figure><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>输出时注意避免 <a href="/blog/Graph-Sequence/#%E4%B8%89%E5%AD%97%E7%AC%A6%E7%BB%84">三字符组</a> 转义即可。</p><h3 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    cout&lt;&lt;<span class="string">&quot;What on earth is going on\?\?!&quot;</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L1-2-数字之城的谜团"><a href="#L1-2-数字之城的谜团" class="headerlink" title="L1-2 数字之城的谜团"></a>L1-2 数字之城的谜团</h2><h3 id="题目背景-1"><a href="#题目背景-1" class="headerlink" title="题目背景"></a>题目背景</h3><blockquote><p>质数：只能被1和自己整除的数。<br>合数： 除了能被1和它本身整除，还能被其他的正整数整除。  </p></blockquote><p>你是数字之城最著名的侦探——派大饼。通过新闻得知，城内出现了许多数字干尸，遍布城市各个区域，这些受害者都是大于0的整数。很明显，数字之城出现了吸血鬼。案件十分棘手，你的好朋友等号警长找到了你，希望你能帮他的忙。你们统计了所有干尸，发现存在几名失踪人员。虽然你最近一直在调查这些失踪人员，但还是把警长发给你的线索看了一下，你得出了一个结论，所有失踪人员都是绝对质数。</p><h3 id="题目描述-1"><a href="#题目描述-1" class="headerlink" title="题目描述"></a>题目描述</h3><p>所谓绝对质数，是指一个本身是质数且通过拆分无法将其拆成不是质数的数。</p><p>以下是一些例子：</p><ul><li>2是绝对质数，因为它是质数且无法被拆分；</li><li>4不是绝对质数，因为它不是质数；</li><li>13不是绝对质数，虽然它是质数，但是可以拆分为1和3，其中1不是质数；</li><li>23是绝对质数，因为它是质数，且拆分为2和3后得到的也是质数；</li><li>137不是绝对质数，虽然它是质数，但可以拆分为1和37，其中1不是质数。（注意，虽然拆分为13和7满足划分完是质数，但是要所有拆分都无法拆出不是质数的数；此外，1、3、7的拆分方式也能说明他不是绝对质数）</li></ul><p>现在，等号警长希望给你个名单，你需要快速告诉等号警长名单上的人员会是干尸还是失踪人员，以方便警长救援。 </p><h3 id="输入格式-1"><a href="#输入格式-1" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行一个数字 $ T $ ，表示名单上人员的数量。</p><p>第二行到第 $ T+1 $ 行，每行一个数字，表示名单上的数字 $n_i$ 。</p><h3 id="输出格式-1"><a href="#输出格式-1" class="headerlink" title="输出格式"></a>输出格式</h3><p>共 $ T $ 行，每行一个字符串，如果 $n_i$ 是干尸，则输出 <code>ganshi</code> ，否则输出 <code>shizong</code> 。</p><h3 id="输入样例-1"><a href="#输入样例-1" class="headerlink" title="输入样例"></a>输入样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">5</span><br><span class="line">2</span><br><span class="line">4</span><br><span class="line">13</span><br><span class="line">23</span><br><span class="line">137</span><br></pre></td></tr></table></figure><h3 id="输出样例-1"><a href="#输出样例-1" class="headerlink" title="输出样例 1"></a>输出样例 1</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">shizong</span><br><span class="line">ganshi</span><br><span class="line">ganshi</span><br><span class="line">shizong</span><br><span class="line">ganshi</span><br></pre></td></tr></table></figure><h3 id="数据范围"><a href="#数据范围" class="headerlink" title="数据范围"></a>数据范围</h3><p> $ 1 \leq T \leq 10^6 $<br> $ 1 \leq n_i \leq 10^9 $  </p><h3 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h3><p>可以手动模拟一下，很容易发现一位的绝对质数是：2、3、5、7。</p><p>对于两位的绝对质数，只能由上面四个数组合得到，也就是从22、23、25、27、32、33、35、37、52、53、55、57、72、73、75、77这16个数中得到。<br>其中22、32、52、72可以被2整除不是质数；25、35、55、75可以被5整除不是质数；33和77可以被11整除不是质数；27和57可以被3整除不是质数。即两位的绝对质数只有23、37、53、73。</p><p>三位的绝对质数要满足前两个数是两位的绝对质数且后两个数是两位的绝对质数，所以只能第二位和第三位只能是3和7。<br>通过符合上述条件的组合，能够得到的数只有237、373、537、737这四个数。<br>其中237和537可以被3整除不是质数，737可以被11整除不是质数。即三位的绝对质数只有373。</p><p>由于四位的绝对质数要满足前三个数是三位的绝对质数且后两个数是两位的绝对质数，所以不能存在四位的绝对质数。同时，也就不存在更多位数的绝对质数。  </p><p>因此，打表判断即可通过。</p><h3 id="代码-1"><a href="#代码-1" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> T;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="type">bool</span> pd[<span class="number">1000</span>];</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">memset</span>(pd,<span class="number">0</span>,<span class="built_in">sizeof</span>(pd));</span><br><span class="line">    pd[<span class="number">2</span>]=<span class="literal">true</span>;</span><br><span class="line">    pd[<span class="number">3</span>]=<span class="literal">true</span>;</span><br><span class="line">    pd[<span class="number">5</span>]=<span class="literal">true</span>;</span><br><span class="line">    pd[<span class="number">7</span>]=<span class="literal">true</span>;</span><br><span class="line">    pd[<span class="number">23</span>]=<span class="literal">true</span>;</span><br><span class="line">    pd[<span class="number">37</span>]=<span class="literal">true</span>;</span><br><span class="line">    pd[<span class="number">53</span>]=<span class="literal">true</span>;</span><br><span class="line">    pd[<span class="number">73</span>]=<span class="literal">true</span>;</span><br><span class="line">    pd[<span class="number">373</span>]=<span class="literal">true</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">panduan</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">if</span>(n&gt;=<span class="number">1000</span>)<span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">return</span> pd[n];</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">init</span>();</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;T);</span><br><span class="line">    <span class="keyword">while</span>(T--&gt;<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,<span class="built_in">panduan</span>(n)?<span class="string">&quot;shizong&quot;</span>:<span class="string">&quot;ganshi&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L1-3-奇怪的两个骰子"><a href="#L1-3-奇怪的两个骰子" class="headerlink" title="L1-3 奇怪的两个骰子"></a>L1-3 奇怪的两个骰子</h2><h3 id="题目背景-2"><a href="#题目背景-2" class="headerlink" title="题目背景"></a>题目背景</h3><p>你和等号警长找到了失踪人员关押的地方，但是门口有一个智能锁，锁上有两个奇怪的骰子。智能锁提示，只有通过多次投掷，将投掷的和正确扔到指定的数字，才能开锁。等号警长希望知道他一次就打开门锁的概率。</p><h3 id="题目描述-2"><a href="#题目描述-2" class="headerlink" title="题目描述"></a>题目描述</h3><p>换句话来说，现在有两个奇怪的骰子，你需要投掷它们 $n$ 次，求所有投掷结果加和等于指定的数字 $m$ 的概率。</p><p>这两个骰子的点数分别是：</p><ul><li>骰子1：1,2,2,3,3,4</li><li>骰子2：1,3,4,5,6,8</li></ul><p>由于概率可能为小数，但是等号警长想看到确切的值，因此请将小数转为最简分数的形式输出。</p><h3 id="输入格式-2"><a href="#输入格式-2" class="headerlink" title="输入格式"></a>输入格式</h3><p>共一行，两个数字 $n$ 和 $m$ ，为投掷次数和指定的数字。</p><h3 id="输出格式-2"><a href="#输出格式-2" class="headerlink" title="输出格式"></a>输出格式</h3><p>共一行，为可能的概率。</p><h3 id="输入样例-2"><a href="#输入样例-2" class="headerlink" title="输入样例"></a>输入样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2 4</span><br></pre></td></tr></table></figure><h3 id="输出样例-1"><a href="#输出样例-1" class="headerlink" title="输出样例"></a>输出样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1/1296</span><br></pre></td></tr></table></figure><h3 id="数据范围-1"><a href="#数据范围-1" class="headerlink" title="数据范围"></a>数据范围</h3><p> $ 1 \leq n \leq 10 $</p><h3 id="题解-2"><a href="#题解-2" class="headerlink" title="题解"></a>题解</h3><p>这两个骰子也叫西克曼骰子，点数分别是1,2,2,3,3,4和1,3,4,5,6,8，概率和抛出两个正常骰子是一样的。因此直接dp就行。</p><p>本来计划在这里搞一个乘法逆元，但是考虑天梯几乎没有考过乘法逆元，因此没有这么出，但是我还是给出乘法逆元版本的结果。</p><h3 id="本题代码"><a href="#本题代码" class="headerlink" title="本题代码"></a>本题代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> p[<span class="number">13</span>]=&#123;<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">5</span>,<span class="number">4</span>,<span class="number">3</span>,<span class="number">2</span>,<span class="number">1</span>&#125;;</span><br><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">gcd</span><span class="params">(<span class="type">long</span> <span class="type">long</span> a,<span class="type">long</span> <span class="type">long</span> b)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> b==<span class="number">0</span>?a:<span class="built_in">gcd</span>(b,a%b);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">long</span> <span class="type">long</span> f[<span class="number">15</span>][<span class="number">125</span>];</span><br><span class="line"><span class="type">int</span> n,m; </span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    <span class="keyword">if</span>(m&lt;<span class="number">2</span>*n||m&gt;<span class="number">12</span>*n)</span><br><span class="line">    &#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">0</span>&lt;&lt;endl;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    f[<span class="number">0</span>][<span class="number">0</span>]= <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">2</span>*i;j&lt;=<span class="number">12</span>*i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            f[i][j]=<span class="number">0</span>;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> k=<span class="number">2</span>;k&lt;=<span class="number">12</span>;k++)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">if</span>(j-k&gt;=<span class="number">2</span>*(i<span class="number">-1</span>)&amp;&amp;j-k&lt;=<span class="number">12</span>*(i<span class="number">-1</span>))</span><br><span class="line">                &#123;</span><br><span class="line">                    f[i][j]+=f[i<span class="number">-1</span>][j-k]*p[k];</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> ans = f[n][m];</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> sum = <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        sum*=<span class="number">36</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> g=<span class="built_in">gcd</span>(ans,sum);</span><br><span class="line">    ans/=g;</span><br><span class="line">    sum/=g;</span><br><span class="line">    cout&lt;&lt;ans&lt;&lt;<span class="string">&quot;/&quot;</span>&lt;&lt;sum&lt;&lt;endl;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="模意义下的代码"><a href="#模意义下的代码" class="headerlink" title="模意义下的代码"></a>模意义下的代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">const</span> <span class="type">long</span> <span class="type">long</span> mod=<span class="number">998244353</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> p[<span class="number">13</span>]=&#123;<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">5</span>,<span class="number">4</span>,<span class="number">3</span>,<span class="number">2</span>,<span class="number">1</span>&#125;;</span><br><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">qpow</span><span class="params">(<span class="type">long</span> <span class="type">long</span> a,<span class="type">long</span> <span class="type">long</span> b)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> res=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span>(b)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(b&amp;<span class="number">1</span>)res=res*a%mod;</span><br><span class="line">        a=a*a%mod;</span><br><span class="line">        b&gt;&gt;=<span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> f[<span class="number">1005</span>][<span class="number">12005</span>];</span><br><span class="line"><span class="type">int</span> n,m; </span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    <span class="keyword">if</span>(m&lt;<span class="number">2</span>*n||m&gt;<span class="number">12</span>*n)</span><br><span class="line">    &#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">0</span>&lt;&lt;endl;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    f[<span class="number">0</span>][<span class="number">0</span>]= <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">2</span>*i;j&lt;=<span class="number">12</span>*i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            f[i][j]=<span class="number">0</span>;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> k=<span class="number">2</span>;k&lt;=<span class="number">12</span>;k++)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">if</span>(j-k&gt;=<span class="number">2</span>*(i<span class="number">-1</span>)&amp;&amp;j-k&lt;=<span class="number">12</span>*(i<span class="number">-1</span>))</span><br><span class="line">                &#123;</span><br><span class="line">                    f[i][j]=(f[i][j]+f[i<span class="number">-1</span>][j-k]*p[k])%mod;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> ans = f[n][m];</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> sum = <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        sum=sum*<span class="number">36</span>%mod;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> inv=<span class="built_in">qpow</span>(sum,mod<span class="number">-2</span>);</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> res=ans*inv%mod;</span><br><span class="line">    cout&lt;&lt;res&lt;&lt;endl;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L1-4-逃脱的最佳位置"><a href="#L1-4-逃脱的最佳位置" class="headerlink" title="L1-4 逃脱的最佳位置"></a>L1-4 逃脱的最佳位置</h2><h3 id="题目背景-3"><a href="#题目背景-3" class="headerlink" title="题目背景"></a>题目背景</h3><p>你和等号警长打开了门锁看到了失踪的人员，然而，邪恶的反派居然在房间中设置了反物质炸弹！你意识到你们无法抵抗这强大的力量——聚变和湮灭的混沌，所以必须要躲过反物质炸弹！</p><h3 id="题目描述-3"><a href="#题目描述-3" class="headerlink" title="题目描述"></a>题目描述</h3><p>反派在这里设置的反物质炸弹是一个精心设计过的超大粒子圆环，物质粒子和反物质粒子的数量相等。随着你们打开房间，物质粒子开始与反物质粒子进行合并。如果物质粒子顺时针方向上的下一个是反物质粒子，那么二者才能合并，然后“砰”的一声湮灭合并路径上的生物并且消失。剩下的粒子会收缩成小一点儿的圆环然后不断重复这个过程直到结束。</p><p>你需要找到一个合适的位置，来保证你们不会被湮灭。</p><p>具体来说，你将拿到一行字符串表示顺时针顺序下的粒子圆环，因为有 $n$ 个粒子，所以有 $n$ 个站位。</p><p>例如粒子圆环 <code>-++-</code> ，一共四个粒子所以有四个位置，分别为站第一个粒子上一个空（称为位置0）、第一个粒子下一个空（称为位置1）、第二个粒子下一个空（称为位置2）和第三个粒子下一个空（称为位置3）。（第四个粒子下一个空和第一个粒子上一个空是一样的。）</p><p>即 <code>0-1+2+3-</code> 这样，一共四个位置可选。</p><p>对这个粒子圆环，第三个粒子与第四个粒子合并，湮灭了位置3上的人；第二个粒子和第一个粒子合并，湮灭了位置2和位置0上的人。因此只有位置1可选。</p><h3 id="输入格式-3"><a href="#输入格式-3" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行一个数字 $n$ 表示粒子数量。</p><p>第二行为 $n$ 个字符，表示粒子，物质粒子为 <code>+</code> ，反物质粒子为 <code>-</code> 。</p><h3 id="输出格式-3"><a href="#输出格式-3" class="headerlink" title="输出格式"></a>输出格式</h3><p>共一行一个数字，为最佳的位置。</p><h3 id="输入样例-1"><a href="#输入样例-1" class="headerlink" title="输入样例 1"></a>输入样例 1</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">4</span><br><span class="line">-++-</span><br></pre></td></tr></table></figure><h3 id="输出样例-1-1"><a href="#输出样例-1-1" class="headerlink" title="输出样例 1"></a>输出样例 1</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1</span><br></pre></td></tr></table></figure><h3 id="输入样例-2"><a href="#输入样例-2" class="headerlink" title="输入样例 2"></a>输入样例 2</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">10</span><br><span class="line">++-++----+</span><br></pre></td></tr></table></figure><h3 id="输出样例-2"><a href="#输出样例-2" class="headerlink" title="输出样例 2"></a>输出样例 2</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">9</span><br></pre></td></tr></table></figure><h3 id="数据范围-2"><a href="#数据范围-2" class="headerlink" title="数据范围"></a>数据范围</h3><p>对于40%的数据， $n \leq 50$ ；<br>对于70%的数据， $n \leq 10^3$ ；<br>对于100%的数据， $ 2 \leq n \leq 10^6 $ 。<br>数据保证合法，站位存在且唯一。</p><h3 id="样例解释"><a href="#样例解释" class="headerlink" title="样例解释"></a>样例解释</h3><p>对于样例1，湮灭过程如下：<br><img src="/pic/Solution/solution-cppuapam03/1.png" alt="样例1"></p><p>对于样例2，湮灭过程如下：<br><img src="/pic/Solution/solution-cppuapam03/2.png" alt="样例2"></p><h3 id="题解-3"><a href="#题解-3" class="headerlink" title="题解"></a>题解</h3><p>我们把能够合并到两个粒子放在同一层里，把被包含在其他粒子之间的粒子放在更高的一层里，对于两个样例，空隙的层数如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"> 1|      3</span><br><span class="line">  |     + -</span><br><span class="line"> 0|0   2</span><br><span class="line">  | - +</span><br><span class="line">-1|  1</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"> 3|          5</span><br><span class="line">  |         + -</span><br><span class="line"> 2|    2   4   6</span><br><span class="line">  |   + - +     -</span><br><span class="line"> 1|  1   3       7</span><br><span class="line">  | +             -</span><br><span class="line"> 0|0               8</span><br><span class="line">  |                 - +</span><br><span class="line">-1|                  9</span><br></pre></td></tr></table></figure><p>显然，山峰会直接合并，山谷处最安全，所以直接转换为层数加减指令寻找最低点即可。</p><h3 id="代码-2"><a href="#代码-2" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line">string s;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="type">int</span> mins=<span class="number">0</span>,mini=<span class="number">0</span>,mint=<span class="number">1</span>;</span><br><span class="line"><span class="type">int</span> nows=<span class="number">0</span>;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    cin&gt;&gt;s;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(s[i]==<span class="string">&#x27;+&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            nows++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(s[i]==<span class="string">&#x27;-&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            nows--;</span><br><span class="line">            <span class="keyword">if</span>(nows&lt;mins)</span><br><span class="line">            &#123;</span><br><span class="line">                mins=nows;</span><br><span class="line">                mini=i+<span class="number">1</span>;</span><br><span class="line">                mint=<span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(nows==mins)</span><br><span class="line">            &#123;</span><br><span class="line">                mint++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;mini&lt;&lt;endl;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L2-1-功夫传人"><a href="#L2-1-功夫传人" class="headerlink" title="L2-1 功夫传人"></a>L2-1 功夫传人</h2><p>团体程序设计天梯赛-练习集 L2-020</p><p><a href="/blog/Solution/solution-gplt-l2-020/">题解参考这里</a></p><h2 id="L2-2-分而治之"><a href="#L2-2-分而治之" class="headerlink" title="L2-2 分而治之"></a>L2-2 分而治之</h2><p>团体程序设计天梯赛-练习集 L2-025</p><p><a href="/blog/Solution/solution-gplt-l2-025/">题解参考这里</a></p><h2 id="L3-1-长城"><a href="#L3-1-长城" class="headerlink" title="L3-1 长城"></a>L3-1 长城</h2><p>团体程序设计天梯赛-练习集 L3-009</p><p><a href="/blog/Solution/solution-gplt-l3-009/">题解参考这里</a></p><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="题解" scheme="https://www.gh.zhangkaixin.cc/tags/%E9%A2%98%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>字符组——从语言标准看计算机发展</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Graph-Sequence/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Graph-Sequence/</id>
    <published>2025-03-20T13:00:03.000Z</published>
    <updated>2025-03-20T08:38:30.322Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>翻开2024年10月发布的C语言标准 ISO&#x2F;IEC 9899:2024 和C++语言标准 ISO&#x2F;IEC 14882:2024 ，对比1999年版的C语言标准 ISO&#x2F;IEC 9899:1999 和1998年版的C++语言标准 ISO&#x2F;IEC 14882:1998 ，我们会发现一个已经彻底从C语言和C++语言弃用的特性——三字符组（Trigraph Sequence）。</p><p>这是一个冷门的特性，也因冷门而退出了历史的舞台。</p><h2 id="背景：硬件限制与国际化需求"><a href="#背景：硬件限制与国际化需求" class="headerlink" title="背景：硬件限制与国际化需求"></a>背景：硬件限制与国际化需求</h2><p>在ASCII（美国信息交换标准代码）发布后，ISO（国际标准化组织）和IEC（国际电工委员会）便开始着手制定一份能够国际化推行的一套字符集标准。</p><p>1972年， ISO&#x2F;IEC 646 标准发布。由于当时硬件的限制，字符集一般只能在一字节大小内编码。这是一个7比特的字符集标准，参考了许多国家的国家标准，但主要依照ASCII制定。采用7比特一是因为一字节的8个比特中，往往使用一位比特作为符号位；二是因为ASCII等许多国家的标准已经采用了7比特的字符集，而8比特的字符集尚未得到普遍接纳。</p><p>7比特字符集总共有128个码位可供使用。ISO&#x2F;IEC 646 确定了33个用于控制的符号、10个数字、26个大写字母和26个小写字母对应的码位，一共95个普遍无争议的码位。在此基础上，ISO&#x2F;IEC 646 又确定了21个符号的码位，但由于国家之间符号的形状差异，各国可以按照实际需要进行修改。</p><p>为了表示欧洲等地区各种语言的带附加符号的变音字母，ISO&#x2F;IEC 646 选择不浪费码位，而是采用组合的方式输出：首先写一个普通字母，然后跟一个退格键符（控制符BS，码位0x08），然后再跟一个兼作附加符号的符号。在电传打字机上，可以利用该方法通过在一个位置叠加两个字符达成效果。这些兼作附加符号的符号是：</p><table><thead><tr><th align="center">符号</th><th align="right">码位</th><th align="right">附加符号</th></tr></thead><tbody><tr><td align="center">双引号</td><td align="right">码位0x22</td><td align="right">兼作分音符</td></tr><tr><td align="center">单引号&#x2F;撇号</td><td align="right">码位0x27</td><td align="right">兼作尖音符</td></tr><tr><td align="center">逗号</td><td align="right">码位0x2C</td><td align="right">兼作软音符</td></tr><tr><td align="center">脱字号</td><td align="right">国别用途码位0x5E</td><td align="right">兼作扬抑符</td></tr><tr><td align="center">反引号</td><td align="right">国别用途码位0x96</td><td align="right">兼作重音符</td></tr><tr><td align="center">波浪号</td><td align="right">国别用途码位0x7E</td><td align="right">兼作颚化符</td></tr></tbody></table><p>下面是使用组合方式输出的效果：<br><img src="/pic/GraphSeq05.png" alt="组合方式效果"></p><p>最后， ISO&#x2F;IEC 646 保留了12个码位作为国别用途码位。这12个码位在ASCII中对应的字符分别是 <code>#$@[\]^`&#123;|&#125;~</code> 。</p><p>也许你会注意到，这12个字符中有9个字符是编程常用的字符：</p><table><thead><tr><th align="center">符号</th><th align="right">名称</th><th align="right">码位</th><th align="left">功能</th></tr></thead><tbody><tr><td align="center"><code>#</code></td><td align="right">井号</td><td align="right">国别用途码位0x23</td><td align="left">常用于宏定义等功能</td></tr><tr><td align="center"><code>[</code></td><td align="right">左方括号</td><td align="right">国别用途码位0x5B</td><td align="left">常用于数组</td></tr><tr><td align="center"><code>\</code></td><td align="right">反斜杠号</td><td align="right">国别用途码位0x5C</td><td align="left">常用于字符转义</td></tr><tr><td align="center"><code>]</code></td><td align="right">右方括号</td><td align="right">国别用途码位0x5D</td><td align="left">常用于数组</td></tr><tr><td align="center"><code>^</code></td><td align="right">脱字号</td><td align="right">国别用途码位0x5E</td><td align="left">常用于异或运算等</td></tr><tr><td align="center"><code>&#123;</code></td><td align="right">左花括号</td><td align="right">国别用途码位0x7B</td><td align="left">常用于定义块来隔离</td></tr><tr><td align="center"><code>|</code></td><td align="right">分隔符号</td><td align="right">国别用途码位0x7C</td><td align="left">常用于或运算、逻辑或运算等</td></tr><tr><td align="center"><code>&#125;</code></td><td align="right">右花括号</td><td align="right">国别用途码位0x7D</td><td align="left">常用于定义块来隔离</td></tr><tr><td align="center"><code>~</code></td><td align="right">波浪号</td><td align="right">国别用途码位0x7E</td><td align="left">常用于取反运算等</td></tr></tbody></table><p>然而不是所有国家都会为了编程而将自己国家的字符集设定的和ASCII一致。</p><ul><li>英国标准 BSI 4730 、法国标准 AFNOR NF Z 62010-1982 、爱尔兰标准 NSAI 433:1996 等标准将0x23用于英镑符号 <code>￡</code> 来同时使用美元符号和英镑符号。</li><li>丹麦标准 DS 2089 、挪威标准 NS 4551 、瑞典标准 SEN 85 02 00 、加拿大标准 CSA Z243.4-1985 等标准将0x5B到0x5E视为大写字母的延续区、将0x7B到0x7E视为小写字母的延续区，把无法通过 ISO&#x2F;IEC 646 提供的组合方式输出的字符（例如 <code>ÆØÅ</code> 和对应的小写 <code>æøå</code> ）和经常使用而组合方式输出过于繁琐的字符（例如 <code>ÉÄÖÅÜ</code> 和对应的小写 <code>éäöåü</code> ）放到这一区域。</li><li>日本标准 JIS C 6220-1969 将0x5c用于人民币和日元符号 <code>￥</code> ，韩国标准 KS C 5636-1989 将0x5c用于韩元符号 <code>₩</code> 。</li></ul><p>上述国家的字符集设定由于和ASCII不一致，导致国家之间的键盘布局有较大差异。例如，英国、法国、爱尔兰等将0x23定义为其他字符的国家难以输入井号 <code>#</code> 。</p><h2 id="起源：替代方法解决问题"><a href="#起源：替代方法解决问题" class="headerlink" title="起源：替代方法解决问题"></a>起源：替代方法解决问题</h2><p>为了解决该问题，C&#x2F;C++标准定义了字符组。</p><h3 id="三字符组"><a href="#三字符组" class="headerlink" title="三字符组"></a>三字符组</h3><p>在 ISO&#x2F;IEC 9899:1999 和 ISO&#x2F;IEC 14882:1998 中，定义了九种三字符组，覆盖了上述常用而可能在一些国家难以输入的符号。这些三字符组是：</p><table><thead><tr><th align="center">三字符组</th><th align="center">替代为</th></tr></thead><tbody><tr><td align="center"><code>??=</code></td><td align="center"><code>#</code></td></tr><tr><td align="center"><code>??(</code></td><td align="center"><code>[</code></td></tr><tr><td align="center"><code>??/</code></td><td align="center"><code>\</code></td></tr><tr><td align="center"><code>??)</code></td><td align="center"><code>]</code></td></tr><tr><td align="center"><code>??&#39;</code></td><td align="center"><code>^</code></td></tr><tr><td align="center"><code>??&lt;</code></td><td align="center"><code>&#123;</code></td></tr><tr><td align="center"><code>??!</code></td><td align="center"><code>|</code></td></tr><tr><td align="center"><code>??&gt;</code></td><td align="center"><code>&#125;</code></td></tr><tr><td align="center"><code>??-</code></td><td align="center"><code>~</code></td></tr></tbody></table><p>同时，还给出了两个示例：</p><p>例子1：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">??=define <span class="built_in">arraycheck</span>(a, b) a??(b??) ??!??! b??(a??)</span><br></pre></td></tr></table></figure><p>将会在编译时被替换为：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">define</span> arraycheck(a, b) a[b] || b[a]</span></span><br></pre></td></tr></table></figure><p>例子2：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;Eh???/n&quot;</span>);</span><br></pre></td></tr></table></figure><p>将会在编译时被替换为：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;Eh?\n&quot;</span>);</span><br></pre></td></tr></table></figure><p>如果需要使用连续的两个问号，可以用字符串自动连接 <code>&quot;...?&quot;&quot;?...&quot;</code> 或者使用转义序列 <code>&quot;...?\?...&quot;</code> 。</p><p>虽然这种设计解决了符号的输入问题，但显然导致了代码可读性严重下降。大量使用三字符组会导致代码的逻辑结构难以直观理解。</p><p>此外，由于三字符组在源文件的任何位置出现都会被替换，还会产生编程陷阱。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;Code:1(Do you forget it???)\n&quot;</span>);</span><br></pre></td></tr></table></figure><p>原计划，该语句应该输出的是 <code>Code:1(Do you forget it???)</code> 然而实际上却会输出 <code>Code:1(Do you forget it?]</code> 。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">a+=b; <span class="comment">//Why add this???/</span></span><br><span class="line">b+=a;</span><br></pre></td></tr></table></figure><p>原计划，这段应该执行两行语句，而由于 <code>??/</code> 会被替换为 <code>\</code> 导致一行注释变成多行注释，使得第二行的语句不会被执行。</p><h3 id="双字符组"><a href="#双字符组" class="headerlink" title="双字符组"></a>双字符组</h3><p>为了解决可读性的问题，ISO和IEC引入了双字符组。</p><table><thead><tr><th align="center">双字符组</th><th align="center">替代为</th></tr></thead><tbody><tr><td align="center"><code>&lt;:</code></td><td align="center"><code>[</code></td></tr><tr><td align="center"><code>:&gt;</code></td><td align="center"><code>]</code></td></tr><tr><td align="center"><code>&lt;%</code></td><td align="center"><code>&#123;</code></td></tr><tr><td align="center"><code>%&gt;</code></td><td align="center"><code>&#125;</code></td></tr><tr><td align="center"><code>%:</code></td><td align="center"><code>#</code></td></tr><tr><td align="center"><code>%:%:</code></td><td align="center"><code>##</code></td></tr></tbody></table><p>此时，第一个例子就可以修改为：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">%:<span class="function">define <span class="title">arraycheck</span><span class="params">(a, b)</span> a&lt;:b:&gt; ??!??! b&lt;:a:&gt;</span></span><br></pre></td></tr></table></figure><p>将会在编译时被替换为：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">define</span> arraycheck(a, b) a[b] || b[a]</span></span><br></pre></td></tr></table></figure><p>相较于三字符组来说，双字符组的可读性显然提升。</p><p>同时，双字符组不同于三字符组。双字符组如果出现之字符串字面值、字符常量、程序注释中（如： <code>&quot;Symbol %:Used In Modulo Operation.&quot;</code> ），则不会被替换。此外，双字符组替换仅在编译器对源程序的tokenization阶段（即识别出关键字、标识符等，类似于自然语言的“断词”）发生，仅当双字符组作为一个token或者token的组成部分时（如 <code>%:%:</code> 被替换为预处理运算符 <code>##</code> ）双字符组才会被替换。</p><h3 id="C-的增补关键字"><a href="#C-的增补关键字" class="headerlink" title="C++的增补关键字"></a>C++的增补关键字</h3><p>C++除了支持上述的三字符组与双字符组外，还提供了下列内置的关键字：</p><table><thead><tr><th align="center">关键字</th><th align="center">等价于</th></tr></thead><tbody><tr><td align="center"><code>and</code></td><td align="center"><code>&amp;&amp;</code></td></tr><tr><td align="center"><code>bitor</code></td><td align="center"><code>|</code></td></tr><tr><td align="center"><code>or</code></td><td align="center"><code>||</code></td></tr><tr><td align="center"><code>xor</code></td><td align="center"><code>^</code></td></tr><tr><td align="center"><code>compl</code></td><td align="center"><code>~</code></td></tr><tr><td align="center"><code>bitand</code></td><td align="center"><code>&amp;</code></td></tr><tr><td align="center"><code>and_eq</code></td><td align="center"><code>&amp;=</code></td></tr><tr><td align="center"><code>or_eq</code></td><td align="center"><code>|=</code></td></tr><tr><td align="center"><code>xor_eq</code></td><td align="center"><code>^=</code></td></tr><tr><td align="center"><code>not</code></td><td align="center"><code>!</code></td></tr><tr><td align="center"><code>not_eq</code></td><td align="center"><code>!=</code></td></tr></tbody></table><p>此时，第一个例子就可以修改为：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">%:<span class="function">define <span class="title">arraycheck</span><span class="params">(a, b)</span> a&lt;:b:&gt; or b&lt;:a:&gt;</span></span><br></pre></td></tr></table></figure><p>将会在编译时被替换为：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">define</span> arraycheck(a, b) a[b] or b[a] <span class="comment">//or 与 || 等价</span></span></span><br></pre></td></tr></table></figure><p>通过使用关键字，程序的可读性显然又能提升。</p><h2 id="发展：万国码和兼容性差异"><a href="#发展：万国码和兼容性差异" class="headerlink" title="发展：万国码和兼容性差异"></a>发展：万国码和兼容性差异</h2><p>随着时代的发展，一些原有的硬件限制已不再是问题，而字符组的问题也随之暴露。</p><h3 id="万国码的发展"><a href="#万国码的发展" class="headerlink" title="万国码的发展"></a>万国码的发展</h3><p>ISO和IEC后来发布了 ISO&#x2F;IEC 8859 用于替代 ISO&#x2F;IEC 646 ，这是一系列8比特的字符集。ISO&#x2F;IEC 8859 统一了此前各国各语言的单独编码的混乱局面，将ASCII的全部可打印字符放入通ASCII的码位（因此 ISO&#x2F;IEC 8859 完全兼容7位的ASCII码），同时废弃了 ISO&#x2F;IEC 646 使用的字母、退格键符和符号组合来表示变音字母的方法，而是在单独区域直接编码表示变音字母。</p><p>后来，该标准被 ISO&#x2F;IEC 10646 （等价于Unicode） 替代。这是一个31比特的字符集。自此，由于编码不统一造成的编程字符无法输入的问题就被彻底解决了。</p><h3 id="兼容性问题"><a href="#兼容性问题" class="headerlink" title="兼容性问题"></a>兼容性问题</h3><p>由于一些跨平台的项目同时涉及GCC&#x2F;G++编译器和Microsoft Visual C++编译器，但这两个编译器在字符组上的行为不一致，这会引起一些编译的问题。</p><h4 id="三字符组-1"><a href="#三字符组-1" class="headerlink" title="三字符组"></a>三字符组</h4><p>GCC&#x2F;G++自C++17标准开始，编译器不再自动替换三字符组。如果需要使用三字符组替换，需要手动设定编译器命令行选项 <code>-trigraphs</code> 。</p><p>Microsoft Visual C++ 2010版开始，编译器不再自动替换三字符组。如果需要使用三字符组替换，需要手动设定编译器命令行选项 <code>/Zc:trigraphs</code> 。</p><p>同时，这两个编译器还提供了一个头文件 <code>&lt;iso646.h&gt;</code> 。这个头文件实际是一个空文件，如果编译器读到了源文件使用该头文件，则会自动进行三字符组替换。</p><h4 id="双字符组-1"><a href="#双字符组-1" class="headerlink" title="双字符组"></a>双字符组</h4><p>GCC&#x2F;G++支持双字符组的替换，但是Microsoft Visual C++不支持双字符组替换。</p><h4 id="C-的增补关键字-1"><a href="#C-的增补关键字-1" class="headerlink" title="C++的增补关键字"></a>C++的增补关键字</h4><p>GCC&#x2F;G++支持C++的增补关键字，但是Microsoft Visual C++编译器默认不支持C++的增补关键字。如果需要使用C++增补关键字，需要使用头文件 <code>&lt;ciso646&gt;</code> 。这个头文件实际是一个空文件，如果Microsoft Visual C++编译器读到了源文件使用该头文件，则会开启支持C++的增补关键字。</p><h2 id="弃用：语言简化"><a href="#弃用：语言简化" class="headerlink" title="弃用：语言简化"></a>弃用：语言简化</h2><p>GCC&#x2F;G++和Microsoft Visual C++编译器都纷纷弃用了三字符组，减少了历史包袱，简化了编程语言。</p><p>这一变化，反映了编程语言设计范式的转变，即从“机器友好”到“开发者友好”。随着时代的发展，硬件限制已经几乎不存在了，一些入门困难的语言也随之退出了舞台，只有抛弃历史包袱，提升代码可维护性的语言才能在如今的时代继续焕发光芒。正是如此，抛弃三字符组是必然的。</p><p>此外，键盘不存在编程所需的字符的问题也随着越来越智能化的有代码补全功能的IDE所解决。</p><p>在开发者社群中，三字符组的弃用也引发了讨论，有部分开发者反对抛弃三字符组。对此，激进的C++语言选择抛弃来推动语言现代化；保守的C语言选择保留来支持遗留系统（比如一些嵌入式设备）。</p><h2 id="总结：技术演进的启示"><a href="#总结：技术演进的启示" class="headerlink" title="总结：技术演进的启示"></a>总结：技术演进的启示</h2><p>字符组的兴衰其实揭示了一个技术发展中的核心矛盾： <strong>短期实用性</strong> 和 <strong>长期可持续性</strong> 之间的平衡。其兴于早期硬件限制下的务实选择，其衰于现代语言进化的必然选择。</p><blockquote><p>技术标准的价值不在于永恒正确，而在于动态适应人类认知与生产力的发展需求。</p></blockquote><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><p>ISO&#x2F;IEC 标准文件 实体出版物：<br><img src="/pic/GraphSeq01.png" alt="ISO/IEC 9899:1999" width="210" height="297"></p><center>ISO/IEC 9899:1999</center><img src="/pic/GraphSeq02.png" alt="ISO/IEC 14882:1998" width="210" height="297"><center>ISO/IEC 14882:1998</center><img src="/pic/GraphSeq03.png" alt="ISO/IEC 9899:2024" width="210" height="297"><center>ISO/IEC 9899:2024</center><img src="/pic/GraphSeq04.png" alt="ISO/IEC 14882:2024" width="210" height="297"><center>ISO/IEC 14882:2024</center><p>中文维基百科：<br><a href="https://zh.wikipedia.org/wiki/ISO/IEC_646">ISO&#x2F;IEC 646</a><br><a href="https://zh.wikipedia.org/wiki/ISO/IEC_8859">ISO&#x2F;IEC 8859</a><br><a href="https://zh.wikipedia.org/wiki/ASCII">ASCII</a><br><a href="https://zh.wikipedia.org/wiki/%E9%80%9A%E7%94%A8%E5%AD%97%E7%AC%A6%E9%9B%86">通用字符集</a><br><a href="https://zh.wikipedia.org/wiki/C%E6%9B%BF%E4%BB%A3%E6%A0%87%E8%AE%B0">C替代标记</a><br><a href="https://zh.wikipedia.org/wiki/%E4%B8%89%E5%AD%97%E7%AC%A6%E7%BB%84%E4%B8%8E%E5%8F%8C%E5%AD%97%E7%AC%A6%E7%BB%84">三字符组与双字符组</a></p><hr><blockquote><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_80x15.png" alt="知识共享许可协议"></a></p><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_88x31.png" alt="知识共享许可协议"></a></p><p>本作品采用<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p></blockquote><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="科技" scheme="https://www.gh.zhangkaixin.cc/tags/%E7%A7%91%E6%8A%80/"/>
    
    <category term="CPPUAPA周刊" scheme="https://www.gh.zhangkaixin.cc/tags/CPPUAPA%E5%91%A8%E5%88%8A/"/>
    
  </entry>
  
  <entry>
    <title>记一次服务器迁移</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Essay/Essay-01/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Essay/Essay-01/</id>
    <published>2024-02-17T13:18:08.000Z</published>
    <updated>2024-02-17T13:57:11.227Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>2020年3月10日，我在阿里云通过云翼计划买了一台学生机，是位于北京的轻量云应用服务器，配置是 1核 CPU|2GB 内存|40GB SSD ，能够享受118元&#x2F;年的价格四年，用于搭建我的博客和其他的东西。随后，我又用云翼计划买了第二台一样配置位于北京的服务器用于搞测试，此外还买了一台位于香港的轻量云应用服务器，配置是 1核 CPU|2GB 内存|50GB SSD ，和学生机配置相似，用于做北京服务器的备份。<br>由于国内服务器搭建的网站需要域名备案，比较麻烦，所以我备案了一个域名后就用香港的服务器作为备份，防止服务器出意外。在使用的这几年里，我用服务器学习了许多，包括如何解决一些问题和报错；学习了一些前后端框架的怎么用；学习了一些服务器软件怎么用，包括中间件、数据库等等。总之，这三台ip地址是<small title="182.92.174.234">182开头</small>、<small title="8.210.215.151">8开头</small>和<small title="39.106.227.142">39开头</small>的服务器陪伴了我很长时间。</p><p>时间进入2024年2月，这些服务器都陆续要到期了。在此之前，我是想过要直接续费来续命的，虽然不能享受学生机的价格，但说实话这个配置不高，价格想着应该还是能接受的。然而，由于阿里云技术的更新，旧服务器的续费价格实属不划算，这主要是SSD的价格有点儿贵。其实阿里云官网是有许多首年很便宜的云服务器，但续费价格都普遍会翻倍，这可能导致我又会想迁移，成本更高，因此我决定就用一个固定的相对实惠的服务器。<br>同时让我比较破防的是，我现在用的 2核 CPU|4GB 内存|80GB ESSD 的服务器价格是1428元&#x2F;年，配置都是旧服务器的两倍，但旧服务器续费是1479元&#x2F;年，甚至更贵，因此我才决定重新买然后迁移。</p><p>这次，我买了三个一样配置的北京、香港和新加坡的服务器，之所以最后一个换成了新加坡的服务器，也是因为国内服务器绑定域名要备案，因此换了一个新加坡的。<br>在此，记录下从旧的三台服务器迁移到新的三台<small title="39.106.155.144">39开头</small>、<small title="47.243.91.247">47开头</small>和<small title="47.236.28.122">47开头</small>的服务器，希望以后我还能学到更多。</p><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="日志" scheme="https://www.gh.zhangkaixin.cc/tags/%E6%97%A5%E5%BF%97/"/>
    
  </entry>
  
  <entry>
    <title>《Ｃ程序设计（第五版）谭浩强 著》课后习题（第6-10章）</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Book-Exercises-of-PLC-5th-THQ-2/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Book-Exercises-of-PLC-5th-THQ-2/</id>
    <published>2023-10-09T13:48:11.000Z</published>
    <updated>2024-02-17T14:46:11.784Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>本文所列习题答案均不含解释说明类题目。</p><h2 id="第7章-用函数实现模块化程序设计"><a href="#第7章-用函数实现模块化程序设计" class="headerlink" title="第7章 用函数实现模块化程序设计"></a>第7章 用函数实现模块化程序设计</h2><ol><li>写两个函数，分别求两个整数的最大公约数和最小公倍数，用主函数调用这两个函数，并输出结果。两个整数由键盘输入。</li></ol><p>非递归版。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">gcd</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> t;</span><br><span class="line">    <span class="keyword">while</span>(b!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        a%=b;</span><br><span class="line">        t=a;a=b;b=t;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> a;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">lcm</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">return</span> a*b/gcd(a,b);</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> m,n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d&quot;</span>,&amp;m,&amp;n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;gcd=%d,lcm=%d\n&quot;</span>,gcd(m,n),lcm(m,n));</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>递归版</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">gcd</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">return</span> (!b)?a:gcd(b,a%b);</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">lcm</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">return</span> a*b/gcd(a,b);</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> m,n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d&quot;</span>,&amp;m,&amp;n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;gcd=%d,lcm=%d\n&quot;</span>,gcd(m,n),lcm(m,n));</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>求方程 $a^2+bx+c&#x3D;0$ 的根，用3个函数分别求当：$b^2-4ac$ 大于0、等于0和小于0时的根并输出结果。从主函数输入 $a,b,c$ 的值。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">da0</span><span class="params">(<span class="type">double</span> a,<span class="type">double</span> b,<span class="type">double</span> d)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> x1,x2;</span><br><span class="line">    x1=(-b+<span class="built_in">sqrt</span>(d))/<span class="number">2</span>/a;</span><br><span class="line">    x2=(-b-<span class="built_in">sqrt</span>(d))/<span class="number">2</span>/a;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;x1=%f\nx2=%f\n&quot;</span>,x1,x2);</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">deng0</span><span class="params">(<span class="type">double</span> a,<span class="type">double</span> b)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> x;</span><br><span class="line">    x=-b/<span class="number">2</span>/a;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;x1=x2=%f\n&quot;</span>,x);</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">xiao0</span><span class="params">(<span class="type">double</span> a,<span class="type">double</span> b,<span class="type">double</span> d)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> r,i; </span><br><span class="line">    r=-b/<span class="number">2</span>/a;</span><br><span class="line">    i=<span class="built_in">sqrt</span>(-d)/<span class="number">2</span>/a; </span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;无实根。\n&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;复数根为：x1=%f%+fi,x2=%f%+fi\n&quot;</span>,r,i,r,-i);</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> a,b,c,d;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf %lf %lf&quot;</span>,&amp;a,&amp;b,&amp;c);</span><br><span class="line">    d=b*b<span class="number">-4</span>*a*c;</span><br><span class="line">    <span class="keyword">if</span>(d&gt;<span class="number">0</span>)</span><br><span class="line">        da0(a,b,d);</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(d==<span class="number">0</span>)</span><br><span class="line">        deng0(a,b);</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        xiao0(a,b,d);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>写一个判素数的函数，在主函数输入一个整数，输出是否为素数的信息。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">isprime</span><span class="params">(<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">2</span>;i*i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(n%i==<span class="number">0</span>)</span><br><span class="line">            <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">if</span>(isprime(n))</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d is a prime number.\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d is not a prime number.\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li>写一个函数，使给定的一个 $3 \times 3$ 的二维整型数组转置，即行列互换。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">transform</span><span class="params">(<span class="type">int</span> a[][<span class="number">3</span>])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            t=a[i][j];</span><br><span class="line">            a[i][j]=a[j][i];</span><br><span class="line">            a[j][i]=t;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">3</span>][<span class="number">3</span>],i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i][j]);</span><br><span class="line">    transform(a);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i][j]);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li>写一个函数，使输入的一个字符串按反序存放，在主函数中输入和输出字符串。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">reverse</span><span class="params">(<span class="type">char</span> s[],<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">char</span> t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n/<span class="number">2</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        t=s[i];</span><br><span class="line">        s[i]=s[n<span class="number">-1</span>-i];</span><br><span class="line">        s[n<span class="number">-1</span>-i]=t;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s);</span><br><span class="line">    n=<span class="built_in">strlen</span>(s);</span><br><span class="line">    reverse(s,n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="6"><li>写一个函数，将两个字符串连接。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">merge</span><span class="params">(<span class="type">char</span> s1[],<span class="type">char</span> s2[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s1[i]!=<span class="string">&#x27;\0&#x27;</span>;i++);</span><br><span class="line">    <span class="keyword">for</span>(j=<span class="number">0</span>;s2[j]!=<span class="string">&#x27;\0&#x27;</span>;i++,j++)</span><br><span class="line">        s1[i]=s2[j];</span><br><span class="line">    s1[i]=<span class="string">&#x27;\0&#x27;</span>;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s1[<span class="number">200</span>],s2[<span class="number">100</span>];</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s1);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s2);</span><br><span class="line">    merge(s1,s2);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s1);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>写一个函数，将一个字符串中的元音字母复制到另一字符串，然后输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">extract</span><span class="params">(<span class="type">char</span> s1[],<span class="type">char</span> s2[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>,j=<span class="number">0</span>;s1[i]!=<span class="string">&#x27;\0&#x27;</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(s1[i]==<span class="string">&#x27;A&#x27;</span>||s1[i]==<span class="string">&#x27;a&#x27;</span>||s1[i]==<span class="string">&#x27;E&#x27;</span>||s1[i]==<span class="string">&#x27;e&#x27;</span>||s1[i]==<span class="string">&#x27;I&#x27;</span>||s1[i]==<span class="string">&#x27;i&#x27;</span>||s1[i]==<span class="string">&#x27;O&#x27;</span>||s1[i]==<span class="string">&#x27;o&#x27;</span>||s1[i]==<span class="string">&#x27;U&#x27;</span>||s1[i]==<span class="string">&#x27;u&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            s2[j]=s1[i];</span><br><span class="line">            j++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    s2[j]=<span class="string">&#x27;\0&#x27;</span>;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s1[<span class="number">100</span>],s2[<span class="number">100</span>];</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s1);</span><br><span class="line">    extract(s1,s2);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s2);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="8"><li>写一个数，输入一个4位数字，要求输出这4个数字字符，但每两个数字间空一空格。如输入1990,应输出“1 9 9 0”。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,x;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">3</span>;i&gt;=<span class="number">0</span>;i--)</span><br><span class="line">    &#123;</span><br><span class="line">        x=n;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;i;j++)</span><br><span class="line">            x/=<span class="number">10</span>;</span><br><span class="line">        x%=<span class="number">10</span>;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,x);</span><br><span class="line">        <span class="keyword">if</span>(i&gt;<span class="number">0</span>)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot; &quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    print(n);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="9"><li>编写一个函数，由实参传来一个字符串，统计此字符串中字母、数字、空格和其他字符的个数，在主函数中输入字符串以及输出上述的结果。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">tongji</span><span class="params">(<span class="type">char</span> s[],<span class="type">int</span> tj[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s[i]!=<span class="string">&#x27;\0&#x27;</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;z&#x27;</span>||s[i]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;Z&#x27;</span>)</span><br><span class="line">            tj[<span class="number">0</span>]++;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;0&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;9&#x27;</span>)</span><br><span class="line">            tj[<span class="number">1</span>]++;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(s[i]==<span class="string">&#x27; &#x27;</span>)</span><br><span class="line">            tj[<span class="number">2</span>]++;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            tj[<span class="number">3</span>]++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    <span class="type">int</span> tj[<span class="number">4</span>];</span><br><span class="line">    gets(s);</span><br><span class="line">    tongji(s,tj);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;zm=%d,sz=%d,kg=%d,qt=%d\n&quot;</span>,tj[<span class="number">0</span>],tj[<span class="number">1</span>],tj[<span class="number">2</span>],tj[<span class="number">3</span>]);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="10"><li>写一个函数，输入一行字符，将此字符串中最长的单词输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">longest</span><span class="params">(<span class="type">char</span> s[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,l=<span class="number">0</span>,max=<span class="number">0</span>,maxi=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;z&#x27;</span>||s[i]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;Z&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            l++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(l&gt;max)</span><br><span class="line">            &#123;</span><br><span class="line">                max=l;</span><br><span class="line">                maxi=i-l;</span><br><span class="line">                l=<span class="number">0</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(s[i]==<span class="string">&#x27;\0&#x27;</span>)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;max;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%c&quot;</span>,s[maxi+i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    gets(s);</span><br><span class="line">    longest(s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="11"><li>写一个函数，用“起泡法”对输入的10个字符按由小到大顺序排列。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">sort</span><span class="params">(<span class="type">char</span> s[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="type">char</span> t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">9</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">9</span>-i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(s[j]&gt;s[j+<span class="number">1</span>])</span><br><span class="line">            &#123;</span><br><span class="line">                t=s[j];</span><br><span class="line">                s[j]=s[j+<span class="number">1</span>];</span><br><span class="line">                s[j+<span class="number">1</span>]=t;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">11</span>];</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s);</span><br><span class="line">    sort(s);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="12"><li>用牛顿迭代法求根。方程为 $ax^3+bx^2+cx+d&#x3D;0$ ，系数 $a,b,c,d$ 的值依次为1,2,3,4，由主函数输入。求在1附近的一个实根。求出根后由主函数输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">double</span> <span class="title function_">getx</span><span class="params">(<span class="type">double</span> a,<span class="type">double</span> b,<span class="type">double</span> c,<span class="type">double</span> d,<span class="type">double</span> x0)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> x1=x0,f,f_;</span><br><span class="line">    <span class="keyword">do</span></span><br><span class="line">    &#123;</span><br><span class="line">        x0=x1;</span><br><span class="line">        f=((a*x0+b)*x0+c)*x0+d;</span><br><span class="line">        f_=(<span class="number">3</span>*a*x0+<span class="number">2</span>*b)*x0+c;</span><br><span class="line">        x1=x0-f/f_;</span><br><span class="line">    &#125;<span class="keyword">while</span>(<span class="built_in">fabs</span>(x1-x0)&gt;=<span class="number">1e-5</span>);</span><br><span class="line">    x0=x1;</span><br><span class="line">    <span class="keyword">return</span> x0;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> a,b,c,d,x;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf %lf %lf %lf&quot;</span>,&amp;a,&amp;b,&amp;c,&amp;d);</span><br><span class="line">    x=getx(a,b,c,d,<span class="number">1</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,x);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="13"><li>用递归方法求 $n$ 阶勒让德多项式的值，递归公式为<br><img src="/pic/Book-Exercises-of-PLC-5th-THQ-7-13-1.svg" alt="Book-Exercises-of-PLC-5th-THQ-7-13-1"></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">double</span> <span class="title function_">p</span><span class="params">(<span class="type">int</span> n,<span class="type">double</span> x)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">if</span>(n==<span class="number">0</span>)<span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">if</span>(n==<span class="number">1</span>)<span class="keyword">return</span> x;</span><br><span class="line">    <span class="keyword">return</span> ((<span class="number">2</span>*n<span class="number">-1</span>)*x*p(n<span class="number">-1</span>,x)-(n<span class="number">-1</span>)*p(n<span class="number">-2</span>,x))/(<span class="type">double</span>)n;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="type">double</span> x,ans;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %lf&quot;</span>,&amp;n,&amp;x);</span><br><span class="line">    ans=p(n,x);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,ans);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="14"><li>输入10个学生5门课的成绩，分别用函数实现下列功能:<br>①计算每个学生的平均分；<br>②计算每门课的平均分；<br>③找出所有50个分数中最高的分数所对应的学生和课程；<br>④计算平均分方差：<br>$\sigma &#x3D; \frac{1}{n} \sum x_{i}^{2} - (\frac{\sum x_i}{n})^2$<br>其中， $x_i$ 为某一学生的平均分。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">double</span> <span class="title function_">calc_stuave</span><span class="params">(<span class="type">int</span> score[<span class="number">10</span>][<span class="number">5</span>],<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">double</span> ave=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        ave+=score[n][i];</span><br><span class="line">    ave/=<span class="number">5.0</span>;</span><br><span class="line">    <span class="keyword">return</span> ave;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">double</span> <span class="title function_">calc_couave</span><span class="params">(<span class="type">int</span> score[<span class="number">10</span>][<span class="number">5</span>],<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">double</span> ave=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        ave+=score[i][n];</span><br><span class="line">    ave/=<span class="number">10.0</span>;</span><br><span class="line">    <span class="keyword">return</span> ave;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">calc_max</span><span class="params">(<span class="type">int</span> score[<span class="number">10</span>][<span class="number">5</span>],<span class="type">int</span> *max,<span class="type">int</span> *maxi,<span class="type">int</span> *maxj)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(*max&lt;score[i][j])</span><br><span class="line">            &#123;</span><br><span class="line">                *max=score[i][j];</span><br><span class="line">                *maxi=i+<span class="number">1</span>;</span><br><span class="line">                *maxj=j+<span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">double</span> <span class="title function_">calc_s</span><span class="params">(<span class="type">double</span> stuave[<span class="number">10</span>])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> s=<span class="number">0</span>,s1=<span class="number">0</span>,s2=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        s1+=stuave[i]*stuave[i];</span><br><span class="line">        s2+=stuave[i];</span><br><span class="line">    &#125;</span><br><span class="line">    s=s1/<span class="number">10.0</span>-s2*s2/<span class="number">10.0</span>/<span class="number">10.0</span>;</span><br><span class="line">    <span class="keyword">return</span> s;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> score[<span class="number">10</span>][<span class="number">5</span>];</span><br><span class="line">    <span class="type">double</span> stuave[<span class="number">10</span>],couave[<span class="number">5</span>],s;</span><br><span class="line">    <span class="type">int</span> i,j,max=<span class="number">0</span>,maxi=<span class="number">0</span>,maxj=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;score[i][j]);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        stuave[i]=calc_stuave(score,i);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        couave[i]=calc_couave(score,i);</span><br><span class="line">    calc_max(score,&amp;max,&amp;maxi,&amp;maxj);</span><br><span class="line">    s=calc_s(stuave);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%f &quot;</span>,stuave[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%f &quot;</span>,couave[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Sudent %d \&#x27;s Course %d is max = %d\n&quot;</span>,maxi,maxj,max);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;<span class="type">char</span> t</span><br></pre></td></tr></table></figure><ol start="15"><li>写几个函数：<br>①输入10个职工的姓名和职工号；<br>②按职工号由小到大顺序排序，姓名顺序也随之调整；<br>③要求输入一个职工号，用折半查找法找出该职工的姓名，从主函数输入要查找的职工号，输出该职工姓名。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">input</span><span class="params">(<span class="type">char</span> s[<span class="number">10</span>][<span class="number">100</span>],<span class="type">int</span> a[<span class="number">10</span>])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s %d&quot;</span>,s[i],&amp;a[i]);</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">sort</span><span class="params">(<span class="type">char</span> s[<span class="number">10</span>][<span class="number">100</span>],<span class="type">int</span> a[<span class="number">10</span>])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> t[<span class="number">100</span>];</span><br><span class="line">    <span class="type">int</span> b,i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">9</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">9</span>-i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(a[j]&gt;a[j+<span class="number">1</span>])</span><br><span class="line">            &#123;</span><br><span class="line">                b=a[j];</span><br><span class="line">                a[j]=a[j+<span class="number">1</span>];</span><br><span class="line">                a[j+<span class="number">1</span>]=b;</span><br><span class="line">                <span class="built_in">strcpy</span>(t,s[j]);</span><br><span class="line">                <span class="built_in">strcpy</span>(s[j],s[j+<span class="number">1</span>]);</span><br><span class="line">                <span class="built_in">strcpy</span>(s[j+<span class="number">1</span>],t);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">char</span> *<span class="title function_">finds</span><span class="params">(<span class="type">char</span> s[<span class="number">10</span>][<span class="number">100</span>],<span class="type">int</span> a[<span class="number">10</span>],<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> l=<span class="number">0</span>,r=n<span class="number">-1</span>,mid;</span><br><span class="line">    <span class="keyword">while</span>(l&lt;r)</span><br><span class="line">    &#123;</span><br><span class="line">        mid=(l+r)/<span class="number">2</span>;</span><br><span class="line">        <span class="keyword">if</span>(a[mid]&gt;a[n])</span><br><span class="line">            r=mid<span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(a[mid]&lt;a[n])</span><br><span class="line">            l=mid+<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            l=r=mid;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(a[l]==n)</span><br><span class="line">        <span class="keyword">return</span> s[l];</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="keyword">return</span> <span class="string">&quot;Not Found!&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">10</span>][<span class="number">100</span>],*t;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">10</span>],i,n;</span><br><span class="line">    input(s,a);</span><br><span class="line">    sort(s,a);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%s %d\n&quot;</span>,s[i],a[i]);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    t=finds(s,a,n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s&quot;</span>,t);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="16"><li>写一个函数，输入一个十六进制数，输出相应的十进制数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">dec</span><span class="params">(<span class="type">char</span> s[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,n=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s[i]!=<span class="string">&#x27;\0&#x27;</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;0&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;9&#x27;</span>)</span><br><span class="line">            n=n*<span class="number">16</span>+s[i]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;z&#x27;</span>)</span><br><span class="line">            n=n*<span class="number">16</span>+s[i]-<span class="string">&#x27;a&#x27;</span>+<span class="number">10</span>;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;Z&#x27;</span>)</span><br><span class="line">            n=n*<span class="number">16</span>+s[i]-<span class="string">&#x27;A&#x27;</span>+<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> n;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s);</span><br><span class="line">    n=dec(s);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="17"><li>用递归法将一个整数n转换成字符串。例如，输入483，应输出字符串“483”。n的位数不确定，可以是任意位数的整数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">gen</span><span class="params">(<span class="type">int</span> n,<span class="type">char</span> s[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">if</span>(!n)<span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> i=gen(n/<span class="number">10</span>,s);</span><br><span class="line">    s[i]=<span class="string">&#x27;0&#x27;</span>+n%<span class="number">10</span>;</span><br><span class="line">    i++;</span><br><span class="line">    s[i]=<span class="string">&#x27;\0&#x27;</span>;</span><br><span class="line">    <span class="keyword">return</span> i;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    gen(n,s);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="18"><li>给出年、月、日，计算该日是该年的第几天。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">getn</span><span class="params">(<span class="type">int</span> y,<span class="type">int</span> m,<span class="type">int</span> d)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,n=<span class="number">0</span>,days[<span class="number">13</span>]=&#123;<span class="number">0</span>,<span class="number">31</span>,<span class="number">28</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>&#125;;</span><br><span class="line">    <span class="keyword">if</span>((y%<span class="number">4</span>==<span class="number">0</span>&amp;&amp;y%<span class="number">100</span>!=<span class="number">0</span>)||(y%<span class="number">100</span>==<span class="number">0</span>&amp;&amp;y%<span class="number">400</span>==<span class="number">0</span>))</span><br><span class="line">        days[<span class="number">2</span>]=<span class="number">29</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;m;i++)</span><br><span class="line">        n+=days[i];</span><br><span class="line">    n+=d;</span><br><span class="line">    <span class="keyword">return</span> n;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> y,m,d,n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d %d&quot;</span>,&amp;y,&amp;m,&amp;d);</span><br><span class="line">    n=getn(y,m,d);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第8章-善于利用指针"><a href="#第8章-善于利用指针" class="headerlink" title="第8章 善于利用指针"></a>第8章 善于利用指针</h2><p>本章习题均要求用指针方法处理。</p><ol><li>输入3个整数，按由小到大的顺序输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a1,a2,a3;</span><br><span class="line">    <span class="type">int</span> *p1,*p2,*p3,*t;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d %d&quot;</span>,&amp;a1,&amp;a2,&amp;a3);</span><br><span class="line">    p1=&amp;a1;</span><br><span class="line">    p2=&amp;a2;</span><br><span class="line">    p3=&amp;a3;</span><br><span class="line">    <span class="keyword">if</span>(*p1&gt;*p2)&#123;t=p1;p1=p2;p2=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(*p2&gt;*p3)&#123;t=p2;p2=p3;p3=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(*p1&gt;*p2)&#123;t=p1;p1=p2;p2=t;&#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d %d %d\n&quot;</span>,*p1,*p2,*p3);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>输入3个字符串，按由小到大的顺序输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s1[<span class="number">100</span>],s2[<span class="number">100</span>],s3[<span class="number">100</span>];</span><br><span class="line">    <span class="type">char</span> *p1,*p2,*p3,*t;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s1);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s2);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s3);</span><br><span class="line">    p1=s1;</span><br><span class="line">    p2=s2;</span><br><span class="line">    p3=s3;</span><br><span class="line">    <span class="keyword">if</span>(<span class="built_in">strcmp</span>(p1,p2)&gt;<span class="number">0</span>)&#123;t=p1;p1=p2;p2=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(<span class="built_in">strcmp</span>(p2,p3)&gt;<span class="number">0</span>)&#123;t=p2;p2=p3;p3=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(<span class="built_in">strcmp</span>(p1,p2)&gt;<span class="number">0</span>)&#123;t=p1;p1=p2;p2=t;&#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s %s %s\n&quot;</span>,p1,p2,p3);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>输入10个整数，将其中最小的数与第一个数对换，把最大的数与最后一个数对换。写3个函数：①输入10个数；②进行处理；③输出10个数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">input</span><span class="params">(<span class="type">int</span> *a)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">cope</span><span class="params">(<span class="type">int</span> *a)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">int</span> *max=&amp;a[<span class="number">0</span>],*min=&amp;a[<span class="number">0</span>],t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(*max&lt;a[i])</span><br><span class="line">            max=&amp;a[i];</span><br><span class="line">        <span class="keyword">if</span>(*min&gt;a[i])</span><br><span class="line">            min=&amp;a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    t=a[<span class="number">0</span>];a[<span class="number">0</span>]=*min;*min=t;</span><br><span class="line">    t=a[<span class="number">9</span>];a[<span class="number">9</span>]=*max;*max=t;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125; </span><br><span class="line"><span class="type">void</span> <span class="title function_">output</span><span class="params">(<span class="type">int</span> *a)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i]);<span class="number">4</span> </span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">10</span>];</span><br><span class="line">    input(a);</span><br><span class="line">    cope(a);</span><br><span class="line">    output(a);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li>有n个整数，使前面各数顺序向后移m个位置，最后m个数变成最前面m个数，见图。写一函数实现以上功能，在主函数中输入n个整数和输出调整后的n个数。<br><img src="/pic/Book-Exercises-of-PLC-5th-THQ-8-4-1.png" alt="Book-Exercises-of-PLC-5th-THQ-8-4-1"></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">move</span><span class="params">(<span class="type">int</span> *a,<span class="type">int</span> n,<span class="type">int</span> m)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,*p;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;m;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(p=a+n;p&gt;a;p--)</span><br><span class="line">            *p=*(p<span class="number">-1</span>);</span><br><span class="line">        *a=*(a+n);</span><br><span class="line">    &#125;</span><br><span class="line">    *(a+n)=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">101</span>],n,m,i;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;m);</span><br><span class="line">    move(a,n,m);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li>有n个人围成一圈，顺序排号。从第1个人开始报数（从1到3报数），凡报到3的人退出圈子，问最后留下的是原来第几号的那位。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">100</span>],n,k,m,i,*p=a;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">        *(p+i)=i+<span class="number">1</span>;</span><br><span class="line">    m=n;</span><br><span class="line">    k=<span class="number">0</span>;</span><br><span class="line">    p=a;</span><br><span class="line">    <span class="keyword">while</span>(m&gt;<span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(*p)</span><br><span class="line">        &#123;</span><br><span class="line">            k=(k+<span class="number">1</span>)%<span class="number">3</span>;</span><br><span class="line">            <span class="keyword">if</span>(!k)</span><br><span class="line">            &#123;</span><br><span class="line">                *p=<span class="number">0</span>;</span><br><span class="line">                m--;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        p++;</span><br><span class="line">        <span class="keyword">if</span>(p&gt;=a+n)</span><br><span class="line">            p=a;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(a[i])</span><br><span class="line">            p=&amp;a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,*p);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="6"><li>写一函数，求一个字符串的长度。在main函数中输入字符串，并输出其长度。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">getlen</span><span class="params">(<span class="type">char</span> *s)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> *p=s;</span><br><span class="line">    <span class="type">int</span> n=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span>(*p!=<span class="string">&#x27;\0&#x27;</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        n++;</span><br><span class="line">        p++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> n;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s);</span><br><span class="line">    n=getlen(s);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>有一字符串，包含n个字符。写一函数，将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">cpy</span><span class="params">(<span class="type">char</span> *s1,<span class="type">char</span> *s2,<span class="type">int</span> n,<span class="type">int</span> m)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> *p1=s1+m<span class="number">-1</span>,*p2=s2;</span><br><span class="line">    <span class="keyword">for</span>(;p1&lt;=s1+n;p1++,p2++)</span><br><span class="line">        *p2=*p1;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s1[<span class="number">100</span>],s2[<span class="number">100</span>];</span><br><span class="line">    <span class="type">int</span> n,m;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s1);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d&quot;</span>,&amp;n,&amp;m);</span><br><span class="line">    cpy(s1,s2,n,m);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s2);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="8"><li>输入一行文字，找出其中大写字母、小写字母、空格、数字以及其他字符各有多少。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">count</span><span class="params">(<span class="type">char</span> *s,<span class="type">int</span> *dx,<span class="type">int</span> *xx,<span class="type">int</span> *kg,<span class="type">int</span> *sz,<span class="type">int</span> *qt)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> *p=s;</span><br><span class="line">    <span class="keyword">for</span>(;*p!=<span class="string">&#x27;\0&#x27;</span>;p++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(*p&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;*p&lt;=<span class="string">&#x27;Z&#x27;</span>)</span><br><span class="line">            (*dx)++;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(*p&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;*p&lt;=<span class="string">&#x27;z&#x27;</span>)</span><br><span class="line">            (*xx)++;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(*p==<span class="string">&#x27; &#x27;</span>)</span><br><span class="line">            (*kg)++;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(*p&gt;=<span class="string">&#x27;0&#x27;</span>&amp;&amp;*p&lt;=<span class="string">&#x27;9&#x27;</span>)</span><br><span class="line">            (*sz)++;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            (*qt)++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    gets(s);</span><br><span class="line">    <span class="type">int</span> dx,xx,kg,sz,qt;</span><br><span class="line">    count(s,&amp;dx,&amp;xx,&amp;kg,&amp;sz,&amp;qt);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;dx=%d,xx=%d,kg=%d,sz=%d,qt=%d\n&quot;</span>,dx,xx,kg,sz,qt);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="9"><li>写一函数，将一个 $3 \times 3$ 的整型矩阵转置。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">transform</span><span class="params">(<span class="type">int</span> *a)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            t=*(a+i*<span class="number">3</span>+j);</span><br><span class="line">            *(a+i*<span class="number">3</span>+j)=*(a+j*<span class="number">3</span>+i);</span><br><span class="line">            *(a+j*<span class="number">3</span>+i)=t;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">3</span>][<span class="number">3</span>],i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i][j]);</span><br><span class="line">    transform(&amp;a[<span class="number">0</span>][<span class="number">0</span>]);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i][j]);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="10"><li>将一个 $5 \times 5$ 的矩阵中最大的元素放在中心，4个角分别放4个最小的元素（顺序为从左到右，从上到下依次从小到大存放），写一函数实现之。用main函数调用。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">cope</span><span class="params">(<span class="type">int</span> *a)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,t,*max=a+<span class="number">12</span>,*min1=a,*min2=a+<span class="number">4</span>,*min3=a+<span class="number">20</span>,*min4=a+<span class="number">24</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(*max&lt;*(a+i*<span class="number">5</span>+j))</span><br><span class="line">                max=a+i*<span class="number">5</span>+j;</span><br><span class="line">        &#125;</span><br><span class="line">    t=*(a+<span class="number">12</span>);*(a+<span class="number">12</span>)=*max;*max=t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(*min1&gt;*(a+i*<span class="number">5</span>+j))</span><br><span class="line">                min1=a+i*<span class="number">5</span>+j;</span><br><span class="line">        &#125;</span><br><span class="line">    t=*a;*a=*min1;*min1=t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(i==<span class="number">0</span>&amp;&amp;j==<span class="number">0</span>)<span class="keyword">continue</span>;</span><br><span class="line">            <span class="keyword">if</span>(*min2&gt;*(a+i*<span class="number">5</span>+j))</span><br><span class="line">                min2=a+i*<span class="number">5</span>+j;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    t=*(a+<span class="number">4</span>);*(a+<span class="number">4</span>)=*min2;*min2=t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(i==<span class="number">0</span>&amp;&amp;j==<span class="number">0</span>)<span class="keyword">continue</span>;</span><br><span class="line">            <span class="keyword">if</span>(i==<span class="number">0</span>&amp;&amp;j==<span class="number">4</span>)<span class="keyword">continue</span>;</span><br><span class="line">            <span class="keyword">if</span>(*min3&gt;*(a+i*<span class="number">5</span>+j))</span><br><span class="line">                min3=a+i*<span class="number">5</span>+j;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    t=*(a+<span class="number">20</span>);*(a+<span class="number">20</span>)=*min3;*min3=t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(i==<span class="number">0</span>&amp;&amp;j==<span class="number">0</span>)<span class="keyword">continue</span>;</span><br><span class="line">            <span class="keyword">if</span>(i==<span class="number">0</span>&amp;&amp;j==<span class="number">4</span>)<span class="keyword">continue</span>;</span><br><span class="line">            <span class="keyword">if</span>(i==<span class="number">4</span>&amp;&amp;j==<span class="number">0</span>)<span class="keyword">continue</span>;</span><br><span class="line">            <span class="keyword">if</span>(*min4&gt;*(a+i*<span class="number">5</span>+j))</span><br><span class="line">                min4=a+i*<span class="number">5</span>+j;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    t=*(a+<span class="number">24</span>);*(a+<span class="number">24</span>)=*min4;*min4=t;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">5</span>][<span class="number">5</span>],i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i][j]);</span><br><span class="line">    cope(&amp;a[<span class="number">0</span>][<span class="number">0</span>]);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i][j]);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="11"><li>在主函数中输入等长的字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">sort</span><span class="params">(<span class="type">char</span> (*p)[<span class="number">100</span>])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="type">char</span> t[<span class="number">100</span>];</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">9</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">9</span>-i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(<span class="built_in">strcmp</span>(*(p+j),*(p+j+<span class="number">1</span>))&gt;<span class="number">0</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="built_in">strcpy</span>(t,*(p+j));</span><br><span class="line">                <span class="built_in">strcpy</span>(*(p+j),*(p+j+<span class="number">1</span>));</span><br><span class="line">                <span class="built_in">strcpy</span>(*(p+j+<span class="number">1</span>),t);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">10</span>][<span class="number">100</span>],(*p)[<span class="number">100</span>];</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s[i]);</span><br><span class="line">    p=s;</span><br><span class="line">    sort(p);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s[i]);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="12"><li>用指针数组处理上一题目，字符串不等长。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">sort</span><span class="params">(<span class="type">char</span> *p[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="type">char</span> *t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">9</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">9</span>-i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(<span class="built_in">strcmp</span>(p[j],p[j+<span class="number">1</span>])&gt;<span class="number">0</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                t=p[j];</span><br><span class="line">                p[j]=p[j+<span class="number">1</span>];</span><br><span class="line">                p[j+<span class="number">1</span>]=t;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">10</span>][<span class="number">100</span>],*p[<span class="number">10</span>];</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s[i]);</span><br><span class="line">        p[i]=s[i];</span><br><span class="line">    &#125;</span><br><span class="line">    sort(p);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,p[i]);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="13"><li>写一个用矩形法求定积分的通用函数，分别求<br>$\int_{0}^{1} \sin{x}\mathrm{d}x$ , $\int_{-1}^{1} \cos{x}\mathrm{d}x$ , $\int_{0}^{2} \mathrm{e}^x\mathrm{d}x$<br><strong>说明：</strong> sin,cos,exp函数已在系统的数学函数库中，程序开头要用 <code>#include &lt;math.h&gt;</code> 。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">double</span> <span class="title function_">integral</span><span class="params">(<span class="type">double</span> (*f)(<span class="type">double</span>),<span class="type">double</span> a,<span class="type">double</span> b,<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">double</span> s=<span class="number">0</span>,h,dx=(b-a)/(<span class="type">double</span>)n,x=a;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        h=(*f)(x);</span><br><span class="line">        s+=h*dx;</span><br><span class="line">        x+=dx;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> s;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n=<span class="number">100000</span>;</span><br><span class="line">    <span class="type">double</span> I1,I2,I3;</span><br><span class="line">    I1=integral(<span class="built_in">sin</span>,<span class="number">0</span>,<span class="number">1</span>,n);</span><br><span class="line">    I2=integral(<span class="built_in">cos</span>,<span class="number">-1</span>,<span class="number">1</span>,n);</span><br><span class="line">    I3=integral(<span class="built_in">exp</span>,<span class="number">0</span>,<span class="number">2</span>,n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Integral from 0 to 1 of sin(x) is %f\n&quot;</span>,I1);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Integral from -1 to 1 of cos(x) is %f\n&quot;</span>,I2);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Integral from 0 to 2 of exp(x) is %f\n&quot;</span>,I3);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="14"><li>将n个数按输入时顺序的逆序排列，用函数实现。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">reverse</span><span class="params">(<span class="type">int</span> *a,<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n/<span class="number">2</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        t=*(a+i);</span><br><span class="line">        *(a+i)=*(a+n<span class="number">-1</span>-i);</span><br><span class="line">        *(a+n<span class="number">-1</span>-i)=t;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">100</span>],i,n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">    reverse(a,n);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="15"><li>有一个班4个学生，5 门课程。①求第1门课程的平均分；②找出有两门以上课程不及格的学生，输出他们的学号和全部课程成绩及平均成绩；③找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">double</span> <span class="title function_">cou1ave</span><span class="params">(<span class="type">int</span> (*a)[<span class="number">5</span>])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> s=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)</span><br><span class="line">        s+=(*(a+i))[<span class="number">0</span>];</span><br><span class="line">    s/=<span class="number">4</span>;</span><br><span class="line">    <span class="keyword">return</span> s;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">flunk</span><span class="params">(<span class="type">int</span> *n,<span class="type">int</span> (*a)[<span class="number">5</span>],<span class="type">double</span> *ave)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,num;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        *(ave+i)=<span class="number">0</span>;</span><br><span class="line">        num=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>((*(a+i))[j]&lt;<span class="number">60</span>)</span><br><span class="line">                num++;</span><br><span class="line">            *(ave+i)+=(*(a+i))[j];</span><br><span class="line">        &#125;</span><br><span class="line">        *(ave+i)/=<span class="number">5.0</span>;</span><br><span class="line">        <span class="keyword">if</span>(num&gt;=<span class="number">2</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,*(n+i));</span><br><span class="line">            <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">                <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,(*(a+i))[j]);</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,*(ave+i));</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">find</span><span class="params">(<span class="type">int</span> *n,<span class="type">int</span> (*a)[<span class="number">5</span>],<span class="type">double</span> *ave)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,num;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        num=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>((*(a+i))[j]&gt;=<span class="number">85</span>)</span><br><span class="line">                num++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(num==<span class="number">5</span>||*(ave+i)&gt;=<span class="number">90</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,*(n+i));</span><br><span class="line">            <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">                <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,(*(a+i))[j]);</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,*(ave+i));</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n[<span class="number">4</span>],a[<span class="number">4</span>][<span class="number">5</span>],i,j;</span><br><span class="line">    <span class="type">double</span> c1ave,ave[<span class="number">4</span>];</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n[i]);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i][j]);</span><br><span class="line">    &#125;</span><br><span class="line">    c1ave=cou1ave(a);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,c1ave);</span><br><span class="line">    flunk(n,a,ave);</span><br><span class="line">    find(n,a,ave);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="16"><li>输入一个字符串，内有数字和非数字字符，例如：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">A123x456 17960? 302tab5876</span><br></pre></td></tr></table></figure>将其中连续的数字作为一个整数，依次存放到一数组a中。例如，123放在a[0]，456放在a[1]……统计共有多少个整数，并输出这些数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">cope</span><span class="params">(<span class="type">char</span> *p,<span class="type">int</span> *a,<span class="type">int</span> *n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num=<span class="number">0</span>,flag=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(;*p!=<span class="string">&#x27;\0&#x27;</span>;p++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(*p&gt;=<span class="string">&#x27;0&#x27;</span>&amp;&amp;*p&lt;=<span class="string">&#x27;9&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            flag=<span class="number">1</span>;</span><br><span class="line">            num=num*<span class="number">10</span>+*p-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(flag)</span><br><span class="line">            &#123;</span><br><span class="line">                flag=<span class="number">0</span>;</span><br><span class="line">                *(a+*n)=num;</span><br><span class="line">                num=<span class="number">0</span>;</span><br><span class="line">                (*n)++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(flag)</span><br><span class="line">    &#123;</span><br><span class="line">        flag=<span class="number">0</span>;</span><br><span class="line">        *(a+*n)=num;</span><br><span class="line">        num=<span class="number">0</span>;</span><br><span class="line">        (*n)++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    <span class="type">int</span> a[<span class="number">100</span>],n=<span class="number">0</span>,i;</span><br><span class="line">    gets(s);</span><br><span class="line">    cope(s,a,&amp;n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="17"><li>写一函数，实现两个字符串的比较。即自己写一个strcmp函数，函数原型为<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">strcmp</span><span class="params">(<span class="type">char</span> * p1,<span class="type">char</span> * p2)</span>;</span><br></pre></td></tr></table></figure>设p1指向字符串s1，p2指向字符串s2。要求当s1 $&#x3D;$ s2时，返回值为0；若 s1 $\neq$ s2，返回它们二者第1个不同字符的ASCII码差值（如”BOY与”BAD”，第2个字母不同，O与A之差为79-65&#x3D;14）。如果s1&gt;s2，则输出正值；如果s1&lt;s2，则输出负值。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">strcmp</span><span class="params">(<span class="type">char</span> *p1,<span class="type">char</span> *p2)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">for</span>(;*p1!=<span class="string">&#x27;\0&#x27;</span>||*p2!=<span class="string">&#x27;\0&#x27;</span>;p1++,p2++)</span><br><span class="line">        <span class="keyword">if</span>(*p1!=*p2)</span><br><span class="line">            <span class="keyword">return</span> *p1-*p2;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s1[<span class="number">100</span>],s2[<span class="number">100</span>];</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s1);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s2);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,<span class="built_in">strcmp</span>(s1,s2));</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="18"><li>编一程序，输入月份号，输出该月的英文月名。例如，输入3，则输出”March”，要求用指针数组处理。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="type">char</span> *p[<span class="number">13</span>]=&#123;<span class="string">&quot;Non-existent&quot;</span>,<span class="string">&quot;January&quot;</span>,<span class="string">&quot;February&quot;</span>,<span class="string">&quot;March&quot;</span>,<span class="string">&quot;April&quot;</span>,<span class="string">&quot;May&quot;</span>,<span class="string">&quot;June&quot;</span>,<span class="string">&quot;July&quot;</span>,<span class="string">&quot;August&quot;</span>,<span class="string">&quot;September&quot;</span>,<span class="string">&quot;October&quot;</span>,<span class="string">&quot;November&quot;</span>,<span class="string">&quot;December&quot;</span>&#125;;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,p[n]);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="19"><li>（1）编写一个函数new，对n个字符开辟连续的存储空间，此函数应返回一个指针（地址），指向字符串开始的空间。new(n)表示分配n个字节的内存空间。<br>（2）写一函数free，将前面用new函数占用的空间释放。free(p)表示将p（地址）指向的单元以后的内存段释放。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> MAXSIZE 1000</span></span><br><span class="line"><span class="type">char</span> buf[MAXSIZE],*nowp=buf;</span><br><span class="line"><span class="type">char</span> *<span class="title function_">new</span><span class="params">(<span class="type">int</span> size)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">if</span>(nowp+size&lt;=buf+MAXSIZE)</span><br><span class="line">    &#123;</span><br><span class="line">        nowp+=size;</span><br><span class="line">        <span class="keyword">return</span> nowp-size;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">free</span><span class="params">(<span class="type">char</span> *p)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">if</span>(p&gt;=buf+MAXSIZE)</span><br><span class="line">        <span class="keyword">return</span> ;</span><br><span class="line">    nowp=p;</span><br><span class="line">    <span class="keyword">while</span>(p&lt;buf+MAXSIZE)</span><br><span class="line">    &#123;</span><br><span class="line">        *p=<span class="string">&#x27;\0&#x27;</span>;</span><br><span class="line">        p++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> *p=new(<span class="number">10</span>);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,p);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,p);</span><br><span class="line">    <span class="built_in">free</span>(p);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="20"><li>用指向指针的指针的方法对5个字符串排序并输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">sort</span><span class="params">(<span class="type">char</span> **P)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="type">char</span> *t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">4</span>-i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(<span class="built_in">strcmp</span>(*(P+j),*(P+j+<span class="number">1</span>))&gt;<span class="number">0</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                t=*(P+j);</span><br><span class="line">                *(P+j)=*(P+j+<span class="number">1</span>);</span><br><span class="line">                *(P+j+<span class="number">1</span>)=t;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">5</span>][<span class="number">100</span>],*p[<span class="number">5</span>],**P;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s[i]);</span><br><span class="line">        p[i]=s[i];</span><br><span class="line">    &#125;</span><br><span class="line">    P=p;</span><br><span class="line">    sort(P);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,p[i]);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="21"><li>用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入，最后在主函数中输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">sort</span><span class="params">(<span class="type">int</span> **P,<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="type">int</span> *t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n<span class="number">-1</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;n<span class="number">-1</span>-i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(**(P+j)-**(P+j+<span class="number">1</span>)&gt;<span class="number">0</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                t=*(P+j);</span><br><span class="line">                *(P+j)=*(P+j+<span class="number">1</span>);</span><br><span class="line">                *(P+j+<span class="number">1</span>)=t;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">100</span>],*p[<span class="number">100</span>],**P;</span><br><span class="line">    <span class="type">int</span> n,i;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">        p[i]=&amp;a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    P=p;</span><br><span class="line">    sort(P,n);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,*p[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第9章-用户自己建立数据类型"><a href="#第9章-用户自己建立数据类型" class="headerlink" title="第9章 用户自己建立数据类型"></a>第9章 用户自己建立数据类型</h2><ol><li>定义一个结构体变量（包括年、月、日）。计算该日在本年中是第几天，注意闰年问题。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">date</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line">    <span class="type">int</span> year,month,day;</span><br><span class="line">&#125;d;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,n=<span class="number">0</span>,days[<span class="number">13</span>]=&#123;<span class="number">0</span>,<span class="number">31</span>,<span class="number">28</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>&#125;;</span><br><span class="line">    <span class="keyword">if</span>((d.year%<span class="number">4</span>==<span class="number">0</span>&amp;&amp;d.year%<span class="number">100</span>!=<span class="number">0</span>)||(d.year%<span class="number">100</span>==<span class="number">0</span>&amp;&amp;d.year%<span class="number">400</span>==<span class="number">0</span>))</span><br><span class="line">        days[<span class="number">2</span>]=<span class="number">29</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d %d&quot;</span>,&amp;d.year,&amp;d.month,&amp;d.day);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;d.month;i++)</span><br><span class="line">        n+=days[i];</span><br><span class="line">    n+=d.day;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>写一个函数days，实现第1题的计算。由主函数将年、月、日传递给days函数，计算后将日子数传回主函数输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">date</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line">    <span class="type">int</span> year,month,day;</span><br><span class="line">&#125;d;</span><br><span class="line"><span class="type">int</span> <span class="title function_">days</span><span class="params">(<span class="keyword">struct</span> date d)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,n=<span class="number">0</span>,days[<span class="number">13</span>]=&#123;<span class="number">0</span>,<span class="number">31</span>,<span class="number">28</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>&#125;;</span><br><span class="line">    <span class="keyword">if</span>((d.year%<span class="number">4</span>==<span class="number">0</span>&amp;&amp;d.year%<span class="number">100</span>!=<span class="number">0</span>)||(d.year%<span class="number">100</span>==<span class="number">0</span>&amp;&amp;d.year%<span class="number">400</span>==<span class="number">0</span>))</span><br><span class="line">        days[<span class="number">2</span>]=<span class="number">29</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;d.month;i++)</span><br><span class="line">        n+=days[i];</span><br><span class="line">    n+=d.day;</span><br><span class="line">    <span class="keyword">return</span> n;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d %d&quot;</span>,&amp;d.year,&amp;d.month,&amp;d.day);</span><br><span class="line">    n=days(d);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>编写一个函数print，打印一个学生的成绩数组，该数组中有5个学生的数据记录，每个记录包括num,name,score[3]，用主函数输入这些记录，用print函数输出这些记录。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num,score[<span class="number">3</span>];</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">&#125;a[<span class="number">5</span>];</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU a[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i].num);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%s &quot;</span>,a[i].name);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i].score[j]);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i].num);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,a[i].name);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i].score[j]);</span><br><span class="line">    &#125;</span><br><span class="line">    print(a);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li>在第3题的基础上，编写一个函数input，用来输入5个学生的数据记录。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num,score[<span class="number">3</span>];</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">&#125;a[<span class="number">5</span>];</span><br><span class="line"><span class="type">void</span> <span class="title function_">input</span><span class="params">(STU a[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i].num);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,a[i].name);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i].score[j]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU a[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i].num);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%s &quot;</span>,a[i].name);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i].score[j]);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    input(a);</span><br><span class="line">    print(a);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li>有10个学生，每个学生的数据包括学号、姓名、3门课程的成绩，从键盘输入10个学生数据，要求输出3门课程总平均成绩，以及最高分的学生的数据（包括学号、姓名、3门课程成绩、平均分数）。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num,score[<span class="number">3</span>];</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">    <span class="type">double</span> aver;</span><br><span class="line">&#125;a[<span class="number">10</span>];</span><br><span class="line"><span class="type">void</span> <span class="title function_">input</span><span class="params">(STU a[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i].num);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,a[i].name);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i].score[j]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU a)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a.num);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s &quot;</span>,a.name);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a.score[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,a.aver);</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,max=<span class="number">0</span>;</span><br><span class="line">    input(a);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        a[i].aver=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            a[i].aver+=a[i].score[j];</span><br><span class="line">        a[i].aver/=<span class="number">3.0</span>;</span><br><span class="line">        <span class="keyword">if</span>(a[max].aver&lt;a[i].aver)</span><br><span class="line">            max=i;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%f &quot;</span>,a[i].aver);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    print(a[max]);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="6"><li>13个人围成一圈，从第1个人开始顺序报号1,2,3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">person</span> </span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">person</span> *<span class="title">next</span>;</span></span><br><span class="line">&#125;a[<span class="number">13</span>];</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,k=<span class="number">0</span>,m=<span class="number">13</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">13</span>;i++)</span><br><span class="line">        a[i].num=i+<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">12</span>;i++)</span><br><span class="line">        a[i].next=&amp;a[i+<span class="number">1</span>];</span><br><span class="line">    a[<span class="number">12</span>].next=&amp;a[<span class="number">0</span>];</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">person</span> *<span class="title">now</span>=</span>&amp;a[<span class="number">0</span>];</span><br><span class="line">    <span class="keyword">while</span>(m&gt;<span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">while</span>(!now-&gt;num)now=now-&gt;next;</span><br><span class="line">        k=(k+<span class="number">1</span>)%<span class="number">3</span>;</span><br><span class="line">        <span class="keyword">if</span>(!k)</span><br><span class="line">        &#123;</span><br><span class="line">            now-&gt;num=<span class="number">0</span>;</span><br><span class="line">            m--;</span><br><span class="line">        &#125;</span><br><span class="line">        now=now-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">13</span>;i++)</span><br><span class="line">        <span class="keyword">if</span>(a[i].num)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,a[i].num);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>在第9章<a href="/blog/Book-Examples-of-PLC-5th-THQ/#%E7%AC%AC9%E7%AB%A0-%E7%94%A8%E6%88%B7%E8%87%AA%E5%B7%B1%E5%BB%BA%E7%AB%8B%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B">例9.9</a>和<a href="/blog/Book-Examples-of-PLC-5th-THQ/#%E7%AC%AC9%E7%AB%A0-%E7%94%A8%E6%88%B7%E8%87%AA%E5%B7%B1%E5%BB%BA%E7%AB%8B%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B">例9.10</a>的基础上，写一个函数del，用来删除动态链表中指定的结点。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score;</span><br><span class="line">    STU *next;</span><br><span class="line">&#125;;</span><br><span class="line">STU *<span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*p,*t;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score; </span><br><span class="line">    head=p=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    t=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    <span class="keyword">while</span>(num!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t!=<span class="literal">NULL</span>)p=t;</span><br><span class="line">        p-&gt;num=num;</span><br><span class="line">        p-&gt;score=score;</span><br><span class="line">        t=p-&gt;next=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    &#125;</span><br><span class="line">    p-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %f\n&quot;</span>,p-&gt;num,p-&gt;score);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">del</span><span class="params">(STU *head,<span class="type">int</span> num)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head,*last;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(p-&gt;num==num)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        last=p;</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(p==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Not in this link list.\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(p==head)</span><br><span class="line">    &#123;</span><br><span class="line">        head=p-&gt;next;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Deleted.\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        last-&gt;next=p-&gt;next;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Deleted.\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head;</span><br><span class="line">    head=creat();</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;num);</span><br><span class="line">    head=del(head,num); </span><br><span class="line">    print(head);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="8"><li>写一个函数insert，用来向一个动态链表插入结点。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score;</span><br><span class="line">    STU *next;</span><br><span class="line">&#125;;</span><br><span class="line">STU *<span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*p,*t;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score; </span><br><span class="line">    head=p=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    t=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    <span class="keyword">while</span>(num!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t!=<span class="literal">NULL</span>)p=t;</span><br><span class="line">        p-&gt;num=num;</span><br><span class="line">        p-&gt;score=score;</span><br><span class="line">        t=p-&gt;next=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    &#125;</span><br><span class="line">    p-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %f\n&quot;</span>,p-&gt;num,p-&gt;score);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">insert</span><span class="params">(STU *head,STU *stud)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head,*last;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(p-&gt;num&gt;stud-&gt;num)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        last=p;</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(p==head)</span><br><span class="line">    &#123;</span><br><span class="line">        stud-&gt;next=p;</span><br><span class="line">        head=stud;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(p==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        stud-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">        last-&gt;next=stud;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        stud-&gt;next=p;</span><br><span class="line">        last-&gt;next=stud;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*stud;</span><br><span class="line">    head=creat();</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;num);</span><br><span class="line">    head=del(head,num); </span><br><span class="line">    stud=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;stud-&gt;num,&amp;stud-&gt;score);</span><br><span class="line">    head=insert(head,stud);</span><br><span class="line">    print(head);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="9"><li>综合本章例9.9（建立链表的函数creat）、例9.10（输出链表的函数print）本章习题第7题（除链表中结点的函数del）、第8题（插入结点的函数insert），再编写一个主函数，先后调用这些函数。用以上5个函数组成一个程序，实现链表的建立、输出、删除和插入，在主函数中指定需要删除和插入的结点的数据。</li></ol><div class='spoiler collapsed'>    <div class='spoiler-title'>        【例 9.7】    </div>    <div class='spoiler-content'>        <p>【例 9.7】有n个结构体变量，内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息（包括学号、姓名、3门课程成绩和平均成绩）。</p><p><strong>编写程序：</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> N 3</span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class">&#123;</span>    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">char</span> name[<span class="number">20</span>];</span><br><span class="line">    <span class="type">float</span> score[<span class="number">3</span>];</span><br><span class="line">    <span class="type">float</span> aver;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;    <span class="type">void</span> <span class="title function_">input</span><span class="params">(<span class="keyword">struct</span> Student stu[])</span>;</span><br><span class="line">    <span class="keyword">struct</span> Student <span class="title function_">max</span><span class="params">(<span class="keyword">struct</span> Student stu[])</span>;</span><br><span class="line">    <span class="type">void</span> <span class="title function_">print</span><span class="params">(<span class="keyword">struct</span> Student stu)</span>;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> <span class="title">stu</span>[<span class="title">N</span>], * <span class="title">p</span>=</span>stu;</span><br><span class="line">    input(p);</span><br><span class="line">    print(max(p));</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">input</span><span class="params">(<span class="keyword">struct</span> Student stu[])</span></span><br><span class="line">&#123;    <span class="type">int</span> i;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;请输入各学生的信息：学号、姓名、3门课成绩：\n&quot;</span>);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;N;i++)</span><br><span class="line">    &#123;<span class="built_in">scanf</span>(<span class="string">&quot;%d %s %f %f %f&quot;</span>,&amp;stu[i].num,stu[i].name,&amp;stu[i].score[<span class="number">0</span>],&amp;stu[i].score[<span class="number">1</span>],&amp;stu[i].score[<span class="number">2</span>]);</span><br><span class="line">        stu[i].aver=(stu[i].score[<span class="number">0</span>]+stu[i].score[<span class="number">1</span>]+stu[i].score[<span class="number">2</span>])/<span class="number">3.0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> Student <span class="title function_">max</span><span class="params">(<span class="keyword">struct</span> Student stu[])</span></span><br><span class="line">&#123;    <span class="type">int</span> i,m=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;N;i++)</span><br><span class="line">        <span class="keyword">if</span>(stu[i].aver&gt;stu[m].aver)m=i;</span><br><span class="line">    <span class="keyword">return</span> stu[m];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(<span class="keyword">struct</span> Student stud)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n成绩最高的学生是：\n&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;学号：%d\n姓名：%s\n三门课成绩：%5.1f，%5.1f，%5.1f\n平均成绩：%6.2f\n&quot;</span>,stud.num,stud.name,stud.score[<span class="number">0</span>],stud.score[<span class="number">1</span>],stud.score[<span class="number">2</span>],stud.aver);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>运行结果：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">请输入各学生的信息：学号、姓名、3门课成绩：</span><br><span class="line">10101 Li 78 89 98</span><br><span class="line">10103 Wang 98.5 87 69</span><br><span class="line">10106 Sun 88 76.5 89</span><br><span class="line"></span><br><span class="line">成绩最高的学生是：</span><br><span class="line">学号：10101</span><br><span class="line">姓名：Li</span><br><span class="line">三门课成绩：78.0，89.0，98.0</span><br><span class="line">平均成绩：88.33</span><br></pre></td></tr></table></figure>    </div></div><div class='spoiler collapsed'>    <div class='spoiler-title'>        【例 9.8】    </div>    <div class='spoiler-content'>        <p>【例 9.8】建立一个如图所示的简单链表，它由3个学生数据的结点组成，要求输出各结点中的数据。<br><img src="/pic/Book-Examples-of-PLC-5th-THQ-9-8-1.png" alt="Book-Examples-of-PLC-5th-THQ-9-8-1"></p><p><strong>编写程序：</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class">&#123;</span>    <span class="type">long</span> num;</span><br><span class="line">    <span class="type">float</span> score;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> * <span class="title">next</span>;</span></span><br><span class="line">&#125;;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> <span class="title">a</span>,<span class="title">b</span>,<span class="title">c</span>, * <span class="title">head</span>, * <span class="title">p</span>;</span></span><br><span class="line">    a.num=<span class="number">10101</span>;a.score=<span class="number">89.5</span>;</span><br><span class="line">    b.num=<span class="number">10103</span>;b.score=<span class="number">90</span>;</span><br><span class="line">    c.num=<span class="number">10108</span>;c.score=<span class="number">85</span>;</span><br><span class="line">    head=&amp;a;</span><br><span class="line">    a.next=&amp;b;</span><br><span class="line">    b.next=&amp;c;</span><br><span class="line">    c.next=<span class="literal">NULL</span>;</span><br><span class="line">    p=head;</span><br><span class="line">    <span class="keyword">do</span></span><br><span class="line">    &#123;<span class="built_in">printf</span>(<span class="string">&quot;%ld %5.1f\n&quot;</span>,p-&gt;num,p-&gt;score);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;<span class="keyword">while</span>(p!=<span class="literal">NULL</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>运行结果：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">10101  89.5</span><br><span class="line">10103  90.0</span><br><span class="line">10108  85.0</span><br></pre></td></tr></table></figure>    </div></div><div class='spoiler collapsed'>    <div class='spoiler-title'>        【例 9.9】    </div>    <div class='spoiler-content'>        <p>【例 9.9】写一函数建立一个有3名学生数据的单向动态链表。</p><p><strong>编写程序：</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> LEN sizeof(struct Student)</span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class">&#123;</span>    <span class="type">long</span> num;</span><br><span class="line">    <span class="type">float</span> score;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> * <span class="title">next</span>;</span></span><br><span class="line">&#125;;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="keyword">struct</span> Student * <span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> * <span class="title">head</span>;</span></span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> * <span class="title">p1</span>, * <span class="title">p2</span>;</span></span><br><span class="line">    n=<span class="number">0</span>;</span><br><span class="line">    p1=p2=(<span class="keyword">struct</span> Student *)<span class="built_in">malloc</span>(LEN);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%ld,%f&quot;</span>,&amp;p1-&gt;num,&amp;p1-&gt;score);</span><br><span class="line">    head=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">while</span>(p1-&gt;num!=<span class="number">0</span>)</span><br><span class="line">    &#123;n=n+<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">if</span>(n==<span class="number">1</span>)head=p1;</span><br><span class="line">        <span class="keyword">else</span> p2-&gt;next=p1;</span><br><span class="line">        p2=p1;</span><br><span class="line">        p1=(<span class="keyword">struct</span> Student *)<span class="built_in">malloc</span>(LEN);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%ld,%f&quot;</span>,&amp;p1-&gt;num,&amp;p1-&gt;score);</span><br><span class="line">    &#125;</span><br><span class="line">    p2-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span>(head);</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> *<span class="title">pt</span>;</span></span><br><span class="line">    pt=creat();</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\nnum:%ld\nscore:%5.1f\n&quot;</span>,pt-&gt;num,pt-&gt;score);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>运行结果：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">1001,67.5</span><br><span class="line">1003,87</span><br><span class="line">1004,99.5</span><br><span class="line">0,0</span><br><span class="line"></span><br><span class="line">num:1001</span><br><span class="line">score: 67.5</span><br></pre></td></tr></table></figure>    </div></div><div class='spoiler collapsed'>    <div class='spoiler-title'>        【例 9.10】    </div>    <div class='spoiler-content'>        <p>【例 9.10】编写一个输出链表的函数print。</p><p><strong>编写程序：</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> LEN sizeof(struct Student)</span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class">&#123;</span>    <span class="type">long</span> num;</span><br><span class="line">    <span class="type">float</span> score;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> * <span class="title">next</span>;</span></span><br><span class="line">&#125;;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="keyword">struct</span> Student * <span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> * <span class="title">head</span>;</span></span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> * <span class="title">p1</span>, * <span class="title">p2</span>;</span></span><br><span class="line">    n=<span class="number">0</span>;</span><br><span class="line">    p1=p2=(<span class="keyword">struct</span> Student *)<span class="built_in">malloc</span>(LEN);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%ld,%f&quot;</span>,&amp;p1-&gt;num,&amp;p1-&gt;score);</span><br><span class="line">    head=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">while</span>(p1-&gt;num!=<span class="number">0</span>)</span><br><span class="line">    &#123;n=n+<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">if</span>(n==<span class="number">1</span>)head=p1;</span><br><span class="line">        <span class="keyword">else</span> p2-&gt;next=p1;</span><br><span class="line">        p2=p1;</span><br><span class="line">        p1=(<span class="keyword">struct</span> Student *)<span class="built_in">malloc</span>(LEN);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%ld,%f&quot;</span>,&amp;p1-&gt;num,&amp;p1-&gt;score);</span><br><span class="line">    &#125;</span><br><span class="line">    p2-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span>(head);</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(<span class="keyword">struct</span> Student * head)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> *<span class="title">p</span>;</span></span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\nNow,These %d records are:\n&quot;</span>,n);</span><br><span class="line">    p=head;</span><br><span class="line">    <span class="keyword">if</span>(head!=<span class="literal">NULL</span>)</span><br><span class="line">        <span class="keyword">do</span></span><br><span class="line">        &#123;<span class="built_in">printf</span>(<span class="string">&quot;%ld %5.1f\n&quot;</span>,p-&gt;num,p-&gt;score);</span><br><span class="line">            p=p-&gt;next;</span><br><span class="line">        &#125;<span class="keyword">while</span>(p!=<span class="literal">NULL</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> *<span class="title">head</span>;</span></span><br><span class="line">    head=creat();</span><br><span class="line">    print(head);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>运行结果：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">1001,67.5</span><br><span class="line">1003,87</span><br><span class="line">1005,99</span><br><span class="line">0,0</span><br><span class="line"></span><br><span class="line">Now,These 3 records are:</span><br><span class="line">1001  67.5</span><br><span class="line">1003  87.0</span><br><span class="line">1005  99.0</span><br></pre></td></tr></table></figure>    </div></div><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score;</span><br><span class="line">    STU *next;</span><br><span class="line">&#125;;</span><br><span class="line">STU *<span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*p,*t;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score; </span><br><span class="line">    head=p=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    t=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    <span class="keyword">while</span>(num!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t!=<span class="literal">NULL</span>)p=t;</span><br><span class="line">        p-&gt;num=num;</span><br><span class="line">        p-&gt;score=score;</span><br><span class="line">        t=p-&gt;next=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    &#125;</span><br><span class="line">    p-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %f\n&quot;</span>,p-&gt;num,p-&gt;score);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">del</span><span class="params">(STU *head,<span class="type">int</span> num)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head,*last;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(p-&gt;num==num)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        last=p;</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(p==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Not in this link list.\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(p==head)</span><br><span class="line">    &#123;</span><br><span class="line">        head=p-&gt;next;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Deleted.\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        last-&gt;next=p-&gt;next;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Deleted.\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">insert</span><span class="params">(STU *head,STU *stud)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head,*last;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(p-&gt;num&gt;stud-&gt;num)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        last=p;</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(p==head)</span><br><span class="line">    &#123;</span><br><span class="line">        stud-&gt;next=p;</span><br><span class="line">        head=stud;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(p==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        stud-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">        last-&gt;next=stud;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        stud-&gt;next=p;</span><br><span class="line">        last-&gt;next=stud;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*stud;</span><br><span class="line">    head=creat();</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;num);</span><br><span class="line">    head=del(head,num); </span><br><span class="line">    stud=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;stud-&gt;num,&amp;stud-&gt;score);</span><br><span class="line">    head=insert(head,stud);</span><br><span class="line">    print(head);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="10"><li>已有a,b两个链表，每个链表中的结点包括学号、成绩。要求把两个链表合并，按学号升序排列。</li></ol><p>调用已有函数版本</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score;</span><br><span class="line">    STU *next;</span><br><span class="line">&#125;;</span><br><span class="line">STU *<span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*p,*t;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score; </span><br><span class="line">    head=p=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    t=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    <span class="keyword">while</span>(num!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t!=<span class="literal">NULL</span>)p=t;</span><br><span class="line">        p-&gt;num=num;</span><br><span class="line">        p-&gt;score=score;</span><br><span class="line">        t=p-&gt;next=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    &#125;</span><br><span class="line">    p-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %f\n&quot;</span>,p-&gt;num,p-&gt;score);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">insert</span><span class="params">(STU *head,STU *stud)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head,*last;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(p-&gt;num&gt;stud-&gt;num)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        last=p;</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(p==head)</span><br><span class="line">    &#123;</span><br><span class="line">        stud-&gt;next=p;</span><br><span class="line">        head=stud;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(p==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        stud-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">        last-&gt;next=stud;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        stud-&gt;next=p;</span><br><span class="line">        last-&gt;next=stud;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">merge</span><span class="params">(STU *heada,STU *headb)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *pb=headb;</span><br><span class="line">    <span class="keyword">while</span>(headb!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        headb=headb-&gt;next;</span><br><span class="line">        heada=insert(heada,pb);</span><br><span class="line">        pb=headb;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> heada;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *heada,*headb;</span><br><span class="line">    heada=creat();</span><br><span class="line">    headb=creat();</span><br><span class="line">    heada=merge(heada,headb);</span><br><span class="line">    print(heada);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>单独函数版本</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score;</span><br><span class="line">    STU *next;</span><br><span class="line">&#125;;</span><br><span class="line">STU *<span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*p,*t;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score; </span><br><span class="line">    head=p=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    t=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    <span class="keyword">while</span>(num!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t!=<span class="literal">NULL</span>)p=t;</span><br><span class="line">        p-&gt;num=num;</span><br><span class="line">        p-&gt;score=score;</span><br><span class="line">        t=p-&gt;next=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    &#125;</span><br><span class="line">    p-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %f\n&quot;</span>,p-&gt;num,p-&gt;score);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">merge</span><span class="params">(STU *heada,STU *headb)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *pa=heada,*pb=headb,*last;</span><br><span class="line">    <span class="keyword">while</span>(headb!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">while</span>(pa!=<span class="literal">NULL</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(pa-&gt;num&gt;headb-&gt;num)</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            last=pa;</span><br><span class="line">            pa=pa-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(pa==heada)</span><br><span class="line">        &#123;</span><br><span class="line">            headb=headb-&gt;next;</span><br><span class="line">            pb-&gt;next=pa;</span><br><span class="line">            heada=pb;</span><br><span class="line">            pb=headb;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(pa==<span class="literal">NULL</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            last-&gt;next=headb;</span><br><span class="line">            headb=pb=<span class="literal">NULL</span>;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            last-&gt;next=headb;</span><br><span class="line">            headb=headb-&gt;next;</span><br><span class="line">            pb-&gt;next=pa;</span><br><span class="line">            pb=headb;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> heada;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *heada,*headb;</span><br><span class="line">    heada=creat();</span><br><span class="line">    headb=creat();</span><br><span class="line">    heada=merge(heada,headb);</span><br><span class="line">    print(heada);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="11"><li>有两个链表a和 b，设结点中包含学号、姓名。从a链表中删去与b链表中有相同学号的那些结点。</li></ol><p>调用已有函数版本</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score;</span><br><span class="line">    STU *next;</span><br><span class="line">&#125;;</span><br><span class="line">STU *<span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*p,*t;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score; </span><br><span class="line">    head=p=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    t=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    <span class="keyword">while</span>(num!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t!=<span class="literal">NULL</span>)p=t;</span><br><span class="line">        p-&gt;num=num;</span><br><span class="line">        p-&gt;score=score;</span><br><span class="line">        t=p-&gt;next=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    &#125;</span><br><span class="line">    p-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %f\n&quot;</span>,p-&gt;num,p-&gt;score);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">del</span><span class="params">(STU *head,<span class="type">int</span> num)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head,*last;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(p-&gt;num==num)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        last=p;</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(p==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Not in this link list.\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(p==head)</span><br><span class="line">    &#123;</span><br><span class="line">        head=p-&gt;next;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Deleted.\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        last-&gt;next=p-&gt;next;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Deleted.\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">unique</span><span class="params">(STU *heada,STU *headb)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *pb=headb;</span><br><span class="line">    <span class="keyword">while</span>(pb!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        heada=del(heada,pb-&gt;num);</span><br><span class="line">        pb=pb-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> heada;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *heada,*headb;</span><br><span class="line">    heada=creat();</span><br><span class="line">    headb=creat();</span><br><span class="line">    heada=unique(heada,headb);</span><br><span class="line">    print(heada);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>单独函数版本</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score;</span><br><span class="line">    STU *next;</span><br><span class="line">&#125;;</span><br><span class="line">STU *<span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*p,*t;</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">double</span> score; </span><br><span class="line">    head=p=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    t=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    <span class="keyword">while</span>(num!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t!=<span class="literal">NULL</span>)p=t;</span><br><span class="line">        p-&gt;num=num;</span><br><span class="line">        p-&gt;score=score;</span><br><span class="line">        t=p-&gt;next=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d,%lf&quot;</span>,&amp;num,&amp;score);</span><br><span class="line">    &#125;</span><br><span class="line">    p-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %f\n&quot;</span>,p-&gt;num,p-&gt;score);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">unique</span><span class="params">(STU *heada,STU *headb)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *pa=heada,*pb=headb,*last;</span><br><span class="line">    <span class="keyword">while</span>(pa!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">while</span>(pa-&gt;num&gt;pb-&gt;num)</span><br><span class="line">            pb=pb-&gt;next;</span><br><span class="line">        <span class="keyword">if</span>(pa-&gt;num==pb-&gt;num)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(pa==heada)</span><br><span class="line">            &#123;</span><br><span class="line">                heada=heada-&gt;next;</span><br><span class="line">                pa=heada;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">            &#123;</span><br><span class="line">                last-&gt;next=pa-&gt;next;</span><br><span class="line">                pa=pa-&gt;next;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            last=pa;</span><br><span class="line">            pa=pa-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> heada;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *heada,*headb;</span><br><span class="line">    heada=creat();</span><br><span class="line">    headb=creat();</span><br><span class="line">    heada=unique(heada,headb);</span><br><span class="line">    print(heada);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="12"><li>建立一个链表，每个结点包括：学号、姓名、性别、年龄。输入一个年龄，如果链表中的结点所包含的年龄等于此年龄，则将此结点删去。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student </span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num,age;</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>],sex;</span><br><span class="line">    STU *next;</span><br><span class="line">&#125;;</span><br><span class="line">STU *<span class="title function_">creat</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head,*p,*t;</span><br><span class="line">    <span class="type">int</span> num,age;</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>],sex;</span><br><span class="line">    head=p=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">    t=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %s %c %d&quot;</span>,&amp;num,name,&amp;sex,&amp;age);</span><br><span class="line">    <span class="keyword">while</span>(num!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t!=<span class="literal">NULL</span>)p=t;</span><br><span class="line">        p-&gt;num=num;</span><br><span class="line">        <span class="built_in">strcpy</span>(p-&gt;name,name);</span><br><span class="line">        p-&gt;sex=sex;</span><br><span class="line">        p-&gt;age=age;</span><br><span class="line">        t=p-&gt;next=(STU *)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(STU));</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d %s %c %d&quot;</span>,&amp;num,name,&amp;sex,&amp;age);</span><br><span class="line">    &#125;</span><br><span class="line">    p-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(STU *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %s %c %d\n&quot;</span>,p-&gt;num,p-&gt;name,p-&gt;sex,p-&gt;age);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">STU *<span class="title function_">del</span><span class="params">(STU *head,<span class="type">int</span> age)</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *p=head,*last;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(p-&gt;age==age)</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            last=p;</span><br><span class="line">            p=p-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(p==<span class="literal">NULL</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Not in this link list.\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(p==head)</span><br><span class="line">        &#123;</span><br><span class="line">            head=p-&gt;next;</span><br><span class="line">            p=head;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Deleted.\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            last-&gt;next=p-&gt;next;</span><br><span class="line">            p=last-&gt;next;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Deleted.\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    STU *head;</span><br><span class="line">    <span class="type">int</span> age;</span><br><span class="line">    head=creat();</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;age);</span><br><span class="line">    head=del(head,age);</span><br><span class="line">    print(head);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第10章-对文件的输入输出"><a href="#第10章-对文件的输入输出" class="headerlink" title="第10章 对文件的输入输出"></a>第10章 对文件的输入输出</h2><ol><li><p>什么是文件型指针？通过文件指针访问文件有什么好处？</p></li><li><p>对文件的打开与关闭的含义是什么？为什么要打开和关闭文件？</p></li><li><p>从键盘输入一个字符串，将其中的小写字母全部转换成大写字母，然后输出到一个磁盘文件test中保存，输入的字符串以“!”结束。</p></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE *fp;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    gets(s);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s[i]!=<span class="string">&#x27;!&#x27;</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;z&#x27;</span>)</span><br><span class="line">            s[i]-=<span class="number">32</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;test&quot;</span>,<span class="string">&quot;w&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;test\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s[i]!=<span class="string">&#x27;!&#x27;</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        fputc(s[i],fp);</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li>有两个磁盘文件A和B，各存放一行字母，今要求把这两个文件中的信息合并（按字母顺序排列），输出到一个新文件C中去。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE *fp;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>],c,t;</span><br><span class="line">    <span class="type">int</span> i,j,n;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;A&quot;</span>,<span class="string">&quot;r&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;A\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;(c=fgetc(fp))!=EOF;i++)</span><br><span class="line">        s[i]=c;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;B&quot;</span>,<span class="string">&quot;r&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;B\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(;(c=fgetc(fp))!=EOF;i++)</span><br><span class="line">        s[i]=c;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    n=i;</span><br><span class="line">    s[n]=<span class="string">&#x27;\0&#x27;</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n<span class="number">-1</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;n<span class="number">-1</span>-i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(s[j]&gt;s[j+<span class="number">1</span>])</span><br><span class="line">            &#123;</span><br><span class="line">                t=s[j];</span><br><span class="line">                s[j]=s[j+<span class="number">1</span>];</span><br><span class="line">                s[j+<span class="number">1</span>]=t;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;C&quot;</span>,<span class="string">&quot;w&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;C\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">fputs</span>(s,fp);</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li>有5个学生，每个学生有3门课程的成绩，从键盘输入学生数据（包括学号，姓名，3门课程成绩），计算出平均成绩，将原有数据和计算出的平均分数存放在磁盘文件stud中。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student</span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num,score[<span class="number">3</span>];</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">    <span class="type">double</span> ave;</span><br><span class="line">&#125;stu[<span class="number">5</span>];</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE *fp;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;stu[i].num);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,stu[i].name);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;stu[i].score[j]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        stu[i].ave=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            stu[i].ave+=stu[i].score[j];</span><br><span class="line">        stu[i].ave/=<span class="number">3.0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;stud&quot;</span>,<span class="string">&quot;w&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;stud\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(fwrite(&amp;stu[i],<span class="keyword">sizeof</span>(STU),<span class="number">1</span>,fp)!=<span class="number">1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Write Error!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="6"><li>将第5题stud文件中的学生数据，按平均分进行排序处理，将已排序的学生数据存入一个新文件stu_sort中。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student</span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num,score[<span class="number">3</span>];</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">    <span class="type">double</span> ave;</span><br><span class="line">&#125;stu[<span class="number">5</span>],t;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE *fp;</span><br><span class="line">    <span class="type">int</span> i,j,n;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;stud&quot;</span>,<span class="string">&quot;r&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;stud\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;fread(&amp;stu[i],<span class="keyword">sizeof</span>(STU),<span class="number">1</span>,fp)!=<span class="number">0</span>;i++);</span><br><span class="line">    n=i;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n<span class="number">-1</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;n<span class="number">-1</span>-i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(stu[j].ave&lt;stu[j+<span class="number">1</span>].ave)</span><br><span class="line">            &#123;</span><br><span class="line">                t=stu[j];</span><br><span class="line">                stu[j]=stu[j+<span class="number">1</span>];</span><br><span class="line">                stu[j+<span class="number">1</span>]=t;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;stu_sort&quot;</span>,<span class="string">&quot;w&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;stu_sort\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(fwrite(&amp;stu[i],<span class="keyword">sizeof</span>(STU),<span class="number">1</span>,fp)!=<span class="number">1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Write Error!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>将第6题已排序的学生成绩文件进行插入处理。插入一个学生的3门课程成绩，程序先计算新插入学生的平均成绩，然后将它按成绩高低顺序插入，插入后建立一个新文件。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student</span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num,score[<span class="number">3</span>];</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">    <span class="type">double</span> ave;</span><br><span class="line">&#125;stu[<span class="number">6</span>],t;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE *fp;</span><br><span class="line">    <span class="type">int</span> i,j,n;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;stu_sort&quot;</span>,<span class="string">&quot;r&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;stu_sort\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;fread(&amp;stu[i],<span class="keyword">sizeof</span>(STU),<span class="number">1</span>,fp)!=<span class="number">0</span>;i++);</span><br><span class="line">    n=i;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;t.num);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,t.name);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;t.score[i]);</span><br><span class="line">    t.ave=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">        t.ave+=t.score[i];</span><br><span class="line">    t.ave/=<span class="number">3.0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t.ave&gt;stu[i].ave)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(j=n;j&gt;i;j--)</span><br><span class="line">        stu[j]=stu[j<span class="number">-1</span>];</span><br><span class="line">    stu[i]=t;</span><br><span class="line">    n++;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;stu_new&quot;</span>,<span class="string">&quot;w&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;stu_new\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(fwrite(&amp;stu[i],<span class="keyword">sizeof</span>(STU),<span class="number">1</span>,fp)!=<span class="number">1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Write Error!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="8"><li>将第7题结果仍存入原有的stu_sort文件而不另建立新文件。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> STU struct student</span></span><br><span class="line">STU</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num,score[<span class="number">3</span>];</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">    <span class="type">double</span> ave;</span><br><span class="line">&#125;stu[<span class="number">6</span>],t;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE *fp;</span><br><span class="line">    <span class="type">int</span> i,j,n;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;stu_sort&quot;</span>,<span class="string">&quot;r&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;stu_sort\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;fread(&amp;stu[i],<span class="keyword">sizeof</span>(STU),<span class="number">1</span>,fp)!=<span class="number">0</span>;i++);</span><br><span class="line">    n=i;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;t.num);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,t.name);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;t.score[i]);</span><br><span class="line">    t.ave=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">        t.ave+=t.score[i];</span><br><span class="line">    t.ave/=<span class="number">3.0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(t.ave&gt;stu[i].ave)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(j=n;j&gt;i;j--)</span><br><span class="line">        stu[j]=stu[j<span class="number">-1</span>];</span><br><span class="line">    stu[i]=t;</span><br><span class="line">    n++;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;stu_sort&quot;</span>,<span class="string">&quot;w&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;stu_sort\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(fwrite(&amp;stu[i],<span class="keyword">sizeof</span>(STU),<span class="number">1</span>,fp)!=<span class="number">1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Write Error!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="9"><li>有一磁盘文件employee，内存放职工的数据。每个职工的数据包括职工姓名、职工号、性别、年龄、住址、工资、健康状况、文化程度。今要求将职工名、工资的信息单独抽出来另建一个简明的职工工资文件。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> EMP1 struct employee1</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> EMP2 struct employee2</span></span><br><span class="line">EMP1</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> num,age,salary;</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>],sex,addr[<span class="number">20</span>],health[<span class="number">10</span>],degree[<span class="number">10</span>];</span><br><span class="line">&#125;emp1[<span class="number">10</span>];</span><br><span class="line">EMP2</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> salary;</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">&#125;emp2[<span class="number">10</span>];</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE *fp;</span><br><span class="line">    <span class="type">int</span> i,n;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;employee&quot;</span>,<span class="string">&quot;r&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;employee\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;fread(&amp;emp1[i],<span class="keyword">sizeof</span>(EMP1),<span class="number">1</span>,fp)!=<span class="number">0</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">strcpy</span>(emp2[i].name,emp1[i].name);</span><br><span class="line">        emp2[i].salary=emp1[i].salary;</span><br><span class="line">    &#125;</span><br><span class="line">    n=i;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;salary&quot;</span>,<span class="string">&quot;w&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;salary\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(fwrite(&amp;emp2[i],<span class="keyword">sizeof</span>(EMP2),<span class="number">1</span>,fp)!=<span class="number">1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Write Error!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="10"><li>从第9题的“职工工资文件”中删去一个职工的数据，再存回原文件。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> EMP2 struct employee2</span></span><br><span class="line">EMP2</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> salary;</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">&#125;emp2[<span class="number">10</span>];</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE *fp;</span><br><span class="line">    <span class="type">int</span> i,n;</span><br><span class="line">    <span class="type">char</span> name[<span class="number">10</span>];</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;salary&quot;</span>,<span class="string">&quot;r&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;salary\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;fread(&amp;emp2[i],<span class="keyword">sizeof</span>(EMP2),<span class="number">1</span>,fp)!=<span class="number">0</span>;i++);</span><br><span class="line">    n=i;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,name);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(<span class="built_in">strcmp</span>(emp2[i].name,name)==<span class="number">0</span>)</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(i==n)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Not in this file!\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(;i&lt;n<span class="number">-1</span>;i++)</span><br><span class="line">            emp2[i]=emp2[i+<span class="number">1</span>];</span><br><span class="line">        n--;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Deleted!\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;salary&quot;</span>,<span class="string">&quot;w&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;salary\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(fwrite(&amp;emp2[i],<span class="keyword">sizeof</span>(EMP2),<span class="number">1</span>,fp)!=<span class="number">1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Write Error!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="11"><li>从键盘输入若干行字符（每行长度不等），输入后把它们存储到一磁盘文件中。再从该文件中读入这些数据，将其中小写字母转换成大写字母后在显示屏上输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE *fp;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>],c=<span class="string">&#x27;Y&#x27;</span>;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;file&quot;</span>,<span class="string">&quot;w&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;file\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span>(c!=<span class="string">&#x27;N&#x27;</span>&amp;&amp;c!=<span class="string">&#x27;n&#x27;</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        gets(s);</span><br><span class="line">        <span class="built_in">fputs</span>(s,fp);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Continue?(Y,y or N,n)&quot;</span>);</span><br><span class="line">        c=getchar();getchar();</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">if</span>((fp=fopen(<span class="string">&quot;file&quot;</span>,<span class="string">&quot;r&quot;</span>))==<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Can not open file \&quot;file\&quot; !\n&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span>(fgets(s,<span class="number">99</span>,fp)!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(i=<span class="number">0</span>;s[i]!=<span class="string">&#x27;\0&#x27;</span>;i++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;z&#x27;</span>)</span><br><span class="line">                s[i]-=<span class="number">32</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">puts</span>(s);</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><blockquote><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_80x15.png" alt="知识共享许可协议"></a></p><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_88x31.png" alt="知识共享许可协议"></a></p><p>本作品采用<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p></blockquote><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="例题与习题" scheme="https://www.gh.zhangkaixin.cc/tags/%E4%BE%8B%E9%A2%98%E4%B8%8E%E4%B9%A0%E9%A2%98/"/>
    
  </entry>
  
  <entry>
    <title>《Ｃ程序设计（第五版）谭浩强 著》课后习题（第1-5章）</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Book-Exercises-of-PLC-5th-THQ-1/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Book-Exercises-of-PLC-5th-THQ-1/</id>
    <published>2023-10-09T12:48:11.000Z</published>
    <updated>2024-02-17T14:46:33.605Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>本文所列习题答案均不含解释说明类题目。</p><h2 id="第1章-程序设计和C语言"><a href="#第1章-程序设计和C语言" class="headerlink" title="第1章 程序设计和C语言"></a>第1章 程序设计和C语言</h2><ol><li><p>什么是程序？什么是程序设计？</p></li><li><p>为什么需要计算机语言？高级语言有哪些特点？</p></li><li><p>正确理解以下名词及其含义：<br>（1）源程序，目标程序，可执行程序。<br>（2）程序编辑，程序编译，程序连接。<br>（3）程序，程序模块，程序文件。<br>（4）函数，主函数，被调用函数，库函数。<br>（5）程序调试，程序测试。  </p></li><li><p>编写一个C程序，运行时输出<br>Hello World!<br>这个程序是一些国外C教材中作为第一个程序例子介绍的，一般称为Hello程序。</p></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Hello World!\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li>编写一个C程序，运行时输出以下图形：  <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">*****</span><br><span class="line">  *****</span><br><span class="line">    *****</span><br><span class="line">      *****</span><br></pre></td></tr></table></figure></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;*****\n&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;  *****\n&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;    *****\n&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;      *****\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="6"><li>编写一个C程序，运行时输入a,b,c三个值，输出其中值最大者。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a,b,c,max;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d %d&quot;</span>,&amp;a,&amp;b,&amp;c);</span><br><span class="line">    max=a&gt;b?a:b;</span><br><span class="line">    max=max&gt;c?max:c;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,max);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>看懂《C程序设计（第五版）学习辅导》第16章中介绍的用Visual Studio 2010对C程序进行编辑、编译、连接和运行的方法，并进行以下操作：<br>（1）建立一个新项目，定名为project1。<br>（2）建立一个新文件，定名为test1。<br>（3）向test1文件输入源程序（此源程序为读者自己编写的程序）。<br>（4）编译该源程序，如发现程序有误，请修改之，直到不出现“编译出错”为止。<br>（5）连接并运行，得到结果。分析结果。</li></ol><h2 id="第2章-算法——程序的灵魂"><a href="#第2章-算法——程序的灵魂" class="headerlink" title="第2章 算法——程序的灵魂"></a>第2章 算法——程序的灵魂</h2><ol><li><p>什么是算法？试从日常生活中找3个例子，描述它们的算法。</p></li><li><p>什么叫结构化的算法？为什么要提倡结构化的算法？</p></li><li><p>试述3种基本结构的特点，请另外设计两种基本结构（要符合基本结构的特点）。</p></li><li><p>用传统流程图表示求解以下问题的算法。<br>（1）有两个瓶子A和B，分别盛放醋和酱油，要求将它们互换（即A瓶原来盛醋，现改盛酱油，B瓶则相反）。<br>（2）依次将10个数输入，要求输出其中最大的数。<br>（3）有3个数a,b,c，要求按大小顺序把它们输出。<br>（4）求1+2+3+…+100。<br>（5）判断一个数n能否同时被3和5整除。<br>（6）将100~200之间的素数输出。<br>（7）求两个数m和n的最大公约数。<br>（8）求方程式 $ax^2+bx+c&#x3D;0$ 的根。分别考虑：<br>①有两个不等的实根；<br>②有两个相等的实根。  </p></li><li><p>用N-S图表示第4题中各题的算法。</p></li><li><p>用伪代码表示第4题中各题的算法。</p></li><li><p>什么叫结构化程序设计？它的主要内容是什么？</p></li><li><p>用自顶向下、逐步细化的方法进行以下算法的设计：<br>（1）输出1900—2000年中是闰年的年份，符合下面两个条件之一的年份是闰年：<br>①能被4整除但不能被100整除；<br>②能被100整除且能被400整除。<br>（2）求 $ax^2+bx+c&#x3D;0$ 的根。分别考虑 $\mathit{d}&#x3D;b^2-4ac$ 大于0、等于0和小于0这3种情况。<br>（3）输入10个数，输出其中最大的一个数。</p></li></ol><p><strong>第4题中各题的C程序代码如下：</strong><br>（1）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a=<span class="number">1</span>,b=<span class="number">2</span>,t;        <span class="comment">//假设1是醋，2是酱油。</span></span><br><span class="line">    t=a;</span><br><span class="line">    a=b;</span><br><span class="line">    b=t;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;A瓶内现在是%d，B瓶内现在是%d。\n&quot;</span>,a,b);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（2）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a,max=<span class="number">0</span>,i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a);</span><br><span class="line">        max=max&gt;a?max:a;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,max);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（3）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a,b,c,t;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d %d&quot;</span>,&amp;a,&amp;b,&amp;c);</span><br><span class="line">    <span class="keyword">if</span>(a&lt;b)&#123;t=a;a=b;b=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(b&lt;c)&#123;t=b;b=c;c=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(a&lt;b)&#123;t=a;a=b;b=t;&#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d %d %d\n&quot;</span>,a,b,c);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（4）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,sum=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=<span class="number">100</span>;i++)</span><br><span class="line">        sum+=i;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,sum);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（5）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">if</span>(n%<span class="number">3</span>==<span class="number">0</span>&amp;&amp;n%<span class="number">5</span>==<span class="number">0</span>)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d能同时被3和5整除。\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d不能同时被3和5整除。\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（6）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">if</span>(n%<span class="number">3</span>==<span class="number">0</span>&amp;&amp;n%<span class="number">5</span>==<span class="number">0</span>)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d能同时被3和5整除。\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d不能同时被3和5整除。\n&quot;</span>,n);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（7）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">isprime</span><span class="params">(<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">2</span>;i*i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(n%i==<span class="number">0</span>)</span><br><span class="line">            <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">100</span>;i&lt;=<span class="number">200</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(isprime(i))</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（8）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> a,b,c,x1,x2;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf %lf %lf&quot;</span>,&amp;a,&amp;b,&amp;c);</span><br><span class="line">    x1=(-b+<span class="built_in">sqrt</span>(b*b<span class="number">-4</span>*a*c))/<span class="number">2</span>/a;</span><br><span class="line">    x2=(-b-<span class="built_in">sqrt</span>(b*b<span class="number">-4</span>*a*c))/<span class="number">2</span>/a;</span><br><span class="line">    <span class="keyword">if</span>(x1==x2)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;x1=x2=%f\n&quot;</span>,x1);</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;x1=%f\nx2=%f\n&quot;</span>,x1,x2);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>第8题中各题的C程序代码如下：</strong><br>（1）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1900</span>;i&lt;=<span class="number">2000</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>((i%<span class="number">4</span>==<span class="number">0</span>&amp;&amp;i%<span class="number">100</span>!=<span class="number">0</span>)||(i%<span class="number">100</span>==<span class="number">0</span>&amp;&amp;i%<span class="number">400</span>==<span class="number">0</span>))</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（2）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> a,b,c,d,x1,x2;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf %lf %lf&quot;</span>,&amp;a,&amp;b,&amp;c);</span><br><span class="line">    d=b*b<span class="number">-4</span>*a*c;</span><br><span class="line">    <span class="keyword">if</span>(d&gt;<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        x1=(-b+<span class="built_in">sqrt</span>(d))/<span class="number">2</span>/a;</span><br><span class="line">        x2=(-b-<span class="built_in">sqrt</span>(d))/<span class="number">2</span>/a;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;x1=%f\nx2=%f\n&quot;</span>,x1,x2);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(d==<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        x1=-b/<span class="number">2</span>/a;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;x1=x2=%f\n&quot;</span>,x1);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        x1=-b/<span class="number">2</span>/a;</span><br><span class="line">        x2=<span class="built_in">sqrt</span>(-d)/<span class="number">2</span>/a; </span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;无实根。\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;复数根为：x1=%f%+fi,x2=%f%+fi\n&quot;</span>,x1,x2,x1,-x2);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（3）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a,max=<span class="number">0</span>,i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a);</span><br><span class="line">        max=max&gt;a?max:a;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,max);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第3章-最简单的C程序设计——顺序程序设计"><a href="#第3章-最简单的C程序设计——顺序程序设计" class="headerlink" title="第3章 最简单的C程序设计——顺序程序设计"></a>第3章 最简单的C程序设计——顺序程序设计</h2><ol><li>假如我国国民生产总值的年增长率为7%，计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为<br>$p&#x3D;(1+r)^n$<br>$r$ 为年增长率， $n$ 为年数， $p$ 为与现在相比的倍数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> r=<span class="number">0.07</span>,n=<span class="number">10</span>,p;</span><br><span class="line">    p=<span class="built_in">pow</span>(<span class="number">1</span>+r,n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,p);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>存款利息的计算。有1000元，想存5年，可按以下5种办法存：<br>（1）一次存5年期。<br>（2）先存2年期，到期后将本息再存3年期。<br>（3）先存3年期，到期后将本息再存2年期。<br>（4）存1年期，到期后将本息再存一年期，连续存5次。<br>（5）存活期存款。活期利息每一季度结算一次。<br>2017年的银行存款利息如下：<br>1年期定期存款利息为1.5%；<br>2年期定期存款利息为2.1%；<br>3年期定期存款利息为2.75%；<br>5年期定期存款利息为3%；<br>活期存款利息为0.35%（活期存款每一季度结算一次利息）。<br>如果 $r$ 为年利率， $n$ 为存款年数，则计算本息和的公式如下：  <table><thead><tr><th align="right">年期</th><th align="left">本息和</th></tr></thead><tbody><tr><td align="right">$1$ 年期本息和：</td><td align="left">$P&#x3D;1000*(1+r)$ ；</td></tr><tr><td align="right">$n$ 年期本息和：</td><td align="left">$P&#x3D;1000*(1+n*r)$ ；</td></tr><tr><td align="right">存 $n$ 次 $1$ 年期的本息和：</td><td align="left">$P&#x3D;1000*(1+r)^n$ ；</td></tr><tr><td align="right">活期存款本息和：</td><td align="left">$P&#x3D;1000*(1+\frac{r}{4})^{4n}$ 。</td></tr><tr><td align="right"><strong>说明：</strong> $1000*(1+\frac{r}{4})$ 是一个季度的本息和。</td><td align="left"></td></tr></tbody></table></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> P1,P2,P3,P4,P5;</span><br><span class="line">    <span class="type">double</span> r1=<span class="number">0.015</span>,r2=<span class="number">0.021</span>,r3=<span class="number">0.0275</span>,r5=<span class="number">0.03</span>,r0=<span class="number">0.0035</span>;</span><br><span class="line">    P1=<span class="number">1000</span>*(<span class="number">1</span>+<span class="number">5</span>*r5);</span><br><span class="line">    P2=<span class="number">1000</span>*(<span class="number">1</span>+<span class="number">2</span>*r2)*(<span class="number">1</span>+<span class="number">3</span>*r3);</span><br><span class="line">    P3=<span class="number">1000</span>*(<span class="number">1</span>+<span class="number">3</span>*r3)*(<span class="number">1</span>+<span class="number">2</span>*r2);</span><br><span class="line">    P4=<span class="number">1000</span>*<span class="built_in">pow</span>(<span class="number">1</span>+r1,<span class="number">5</span>);</span><br><span class="line">    P5=<span class="number">1000</span>*<span class="built_in">pow</span>(<span class="number">1</span>+r0/<span class="number">4.0</span>,<span class="number">4</span>*<span class="number">5</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;第1种方案的本息和为%f\n&quot;</span>,P1);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;第2种方案的本息和为%f\n&quot;</span>,P2);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;第3种方案的本息和为%f\n&quot;</span>,P3);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;第4种方案的本息和为%f\n&quot;</span>,P4);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;第5种方案的本息和为%f\n&quot;</span>,P5);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>购房从银行贷了一笔款 $d$ ，准备每月还款额为 $p$ ，月利率为 $r$ ，计算多少月能还清。设 $d$ 为300 000元， $p$ 为6000元， $r$ 为1%。对求得的月份取小数点后一位，对第2位按四舍五入处理。<br><strong>提示：</strong> 计算还清月数 $m$ 的公式如下：<br>$m&#x3D;\frac{\log{p}-\log{(p-d \times r)}}{\log{(1+r)}}$<br>可以将公式改写为<br>$m&#x3D;\frac{\log{(\frac{p}{p-d \times r})}}{\log{(1+r)}}$<br>C的库函数中有求对数的函数log10，是求以10为底的对数， $\log{(p)}$ 表示 $\log{p}$ 。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> d=<span class="number">300000</span>,p=<span class="number">6000</span>,r=<span class="number">0.01</span>,m;</span><br><span class="line">    m=<span class="built_in">log10</span>(p/(p-d*r))/<span class="built_in">log10</span>(<span class="number">1</span>+r);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,m);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li>分析下面的程序<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;    <span class="type">char</span> c1,c2;</span><br><span class="line">    c1=<span class="number">97</span>;</span><br><span class="line">    c2=<span class="number">98</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;c1=%c,c2=%c\n&quot;</span>,c1,c2);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;c1=%d,c2=%d\n&quot;</span>,c1,c2);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>（1）运行时会输出什么信息？为什么？<br>（2）如果将程序第4,5行改为<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">c1=<span class="number">197</span>;</span><br><span class="line">c2=<span class="number">198</span>;</span><br></pre></td></tr></table></figure>运行时会输出什么信息？为什么？<br>（3）如果将程序第3行改为<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> c1,c2;</span><br></pre></td></tr></table></figure>运行时会输出什么信息？为什么？</li></ol><p>（1）</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">c1=a,c2=b</span><br><span class="line">c1=97,c2=98</span><br></pre></td></tr></table></figure><p>第一行输出ASCII码对应的字符，第二行输出其数值。<br>（2）</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">c1=?c2=?</span><br><span class="line">c1=-59,c2=-58</span><br></pre></td></tr></table></figure><p>char是单字节的，范围为-128~127，其中ASCII码对应的有效值范围为0~127，197和198超过了这个范围，赋给char时按位截断赋值，其对应的二进制码分别为11000101和11000110，取8位反码表示对应的数值为-59和-58。<br>第一行，对于超出ASCII码范围的值其最高位为1，屏幕会将其和下一个字符连在一起表示，同时该字符是未知的。<br>第二行，输出了其数值。<br>（3）</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">c1=a,c2=b</span><br><span class="line">c1=97,c2=98</span><br></pre></td></tr></table></figure><p>由于int范围大于char，所以不会出现精度损失。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">c1=?c2=?</span><br><span class="line">c1=197,c2=198</span><br></pre></td></tr></table></figure><p>第一行，对于超出ASCII码范围的值其最高位为1，屏幕会将其和下一个字符连在一起表示，同时该字符是未知的。<br>第二行，输出了其数值。</p><ol start="5"><li>用下面的scanf函数输入数据，使a&#x3D;3,b&#x3D;7,x&#x3D;8.5,y&#x3D;71.82,c1&#x3D;’A’,c2&#x3D;’a’。在键盘上应如何输入？<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a,b;</span><br><span class="line">    <span class="type">float</span> x,y;</span><br><span class="line">    <span class="type">char</span> c1,c2;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;a=%db=%d&quot;</span>,&amp;a,&amp;b);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%f%e&quot;</span>,&amp;x,&amp;y);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%c%c&quot;</span>,&amp;c1,&amp;c2);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">a=3b=7</span><br><span class="line">8.5 71.82Aa</span><br></pre></td></tr></table></figure><ol start="6"><li>请编程序将“China”译成密码，密码规律是：用原来的字母后面第4个字母代替原来的字母。例如，字母“A”后面第4个字母是“E”，用“E”代替“A”。因此，“China”应译为“Glmre”。请编一程序，用赋初值的方法使c1,c2,c3,c4,c5这五个变量的值分别为’C’,’h’,’i’,’n’,’a’，经过运算，使c1,c2,c3,c4,c5分别变为’G’,’l’,’m’,’r’,’e’。分别用putchar函数和printf函数输出这5个字符。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> c1=<span class="string">&#x27;C&#x27;</span>,c2=<span class="string">&#x27;h&#x27;</span>,c3=<span class="string">&#x27;i&#x27;</span>,c4=<span class="string">&#x27;n&#x27;</span>,c5=<span class="string">&#x27;a&#x27;</span>;</span><br><span class="line">    c1+=<span class="number">4</span>;</span><br><span class="line">    c2+=<span class="number">4</span>;</span><br><span class="line">    c3+=<span class="number">4</span>;</span><br><span class="line">    c4+=<span class="number">4</span>;</span><br><span class="line">    c5+=<span class="number">4</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%c%c%c%c%c\n&quot;</span>,c1,c2,c3,c4,c5);</span><br><span class="line">    <span class="built_in">putchar</span>(c1);</span><br><span class="line">    <span class="built_in">putchar</span>(c2);</span><br><span class="line">    <span class="built_in">putchar</span>(c3);</span><br><span class="line">    <span class="built_in">putchar</span>(c4);</span><br><span class="line">    <span class="built_in">putchar</span>(c5);</span><br><span class="line">    <span class="built_in">putchar</span>(<span class="string">&#x27;\n&#x27;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>设圆半径 $r&#x3D;1.5$ ，圆柱高 $h&#x3D;3$ ，求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据，输出计算结果，输出时要求有文字说明，取小数点后2位数字。请编函数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> PI 3.1415926</span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> c,s,sq,vq,vz,r=<span class="number">1.5</span>,h=<span class="number">3</span>;</span><br><span class="line">    c=<span class="number">2</span>*PI*r;</span><br><span class="line">    s=PI*r*r;</span><br><span class="line">    sq=<span class="number">4</span>*PI*r*r;</span><br><span class="line">    vq=<span class="number">4.0</span>/<span class="number">3.0</span>*PI*r*r*r;</span><br><span class="line">    vz=s*h;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;c=%.2f\n&quot;</span>,c);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;s=%.2f\n&quot;</span>,s);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;sq=%.2f\n&quot;</span>,sq);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;vq=%.2f\n&quot;</span>,vq);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;vz=%.2f\n&quot;</span>,vz);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="8"><li>编程序，用getchar函数读入两个字符给c1和c2，然后分别用putchar函数和printf函数输出这两个字符。思考以下问题：<br>（1）变量c1和c2应定义为字符型、整型还是二者皆可？<br>（2）要求输出c1和c2值得ASCII码，应如何处理？用putchar函数还是printf函数？<br>（3）整型变量与字符变量是否在任何情况下都可以互相代替？如：<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">char</span> c1,c2;</span><br></pre></td></tr></table></figure>与<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> c1,c2;</span><br></pre></td></tr></table></figure>是否无条件地等价？</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> c1,c2;</span><br><span class="line">    c1=getchar();</span><br><span class="line">    c2=getchar();</span><br><span class="line">    <span class="built_in">putchar</span>(c1);</span><br><span class="line">    <span class="built_in">putchar</span>(c2);</span><br><span class="line">    <span class="built_in">putchar</span>(<span class="string">&#x27;\n&#x27;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%c%c\n&quot;</span>,c1,c2);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（1）二者皆可。<br>（2）printf函数：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d%d\n&quot;</span>,c1,c2);</span><br></pre></td></tr></table></figure><p>（3）在ASCII码的范围（0~127）内，可以，一旦超出就不可。</p><h2 id="第4章-选择结构程序设计"><a href="#第4章-选择结构程序设计" class="headerlink" title="第4章 选择结构程序设计"></a>第4章 选择结构程序设计</h2><ol><li>什么是算术运算？什么是关系运算？什么是逻辑运算？</li></ol><p>算术运算：<code>+ - * /</code><br>关系运算：<code>== != &lt; &gt; &lt;= &gt;=</code><br>逻辑运算：<code>|| &amp;&amp; !</code>  </p><ol start="2"><li>C语言中如何表示“真”和“假”？系统如何判断一个量的“真”和“假”？</li></ol><p>逻辑表达式中，1为真，0为假。系统内部将0视作假，非0视作真。</p><ol start="3"><li>写出下面各逻辑表达式的值，设a&#x3D;3,b&#x3D;4,c&#x3D;5。<br>（1）a+b&gt;c&amp;&amp;b&#x3D;&#x3D;c<br>（2）a||b+c&amp;&amp;b-c<br>（3）!(a&gt;b)&amp;&amp;!c||1<br>（4）!(x&#x3D;a)&amp;&amp;(y&#x3D;b)&amp;&amp;0<br>（5）!(a+b)+c-1&amp;&amp;b+c&#x2F;2</li></ol><p>（1）0<br>（2）1<br>（3）1<br>（4）0<br>（5）1  </p><ol start="4"><li>有3个整数a,b,c由键盘输入，输出其中最大的数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a,b,c,max;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d %d&quot;</span>,&amp;a,&amp;b,&amp;c);</span><br><span class="line">    max=a&gt;b?a:b;</span><br><span class="line">    max=max&gt;c?max:c;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,max);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li>从键盘输入一个小于1000的正数，要求输出它的平方根（如平方根不是整数，则输出其整数部分）。要求在输入数据后先对其进行检查是否为小于1000的正数。若不是，则要求重新输入。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n,m;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Input a positive number less than 1000:&quot;</span>);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">while</span>(n&lt;=<span class="number">0</span>||n&gt;=<span class="number">1000</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Input Error! Input a positive number less than 1000:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    &#125;</span><br><span class="line">    m=(<span class="type">int</span>)<span class="built_in">sqrt</span>(n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;The square root is %d\n&quot;</span>,m);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="6"><li>有一个函数：<br><img src="/pic/Book-Exercises-of-PLC-5th-THQ-4-6-1.svg" alt="Book-Exercises-of-PLC-5th-THQ-4-6-1"><br>写程序，输入 $x$ 的值，输出 $y$ 相应的值。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> x,y;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf&quot;</span>,&amp;x);</span><br><span class="line">    <span class="keyword">if</span>(x&lt;<span class="number">1</span>)y=x;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(x&lt;<span class="number">10</span>)y=<span class="number">2</span>*x<span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">else</span> y=<span class="number">3</span>*x<span class="number">-11</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,y);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>有一函数：<br><img src="/pic/Book-Exercises-of-PLC-5th-THQ-4-7-1.svg" alt="Book-Exercises-of-PLC-5th-THQ-4-7-1"><br>有人编写了以下两个程序，请分析它们是否能实现题目要求。不要急于上机运行程序，先分析两个程序的逻辑，画出它们的流程图，分析它们的运行情况。然后上机运行程序，观察和分析结果。<br>（1）<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x,y;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;enter x:&quot;</span>);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;x);</span><br><span class="line">    y=<span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">if</span>(x!=<span class="number">0</span>)</span><br><span class="line">        <span class="keyword">if</span>(x&gt;<span class="number">0</span>)</span><br><span class="line">            y=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        y=<span class="number">0</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;x=%d,y=%d\n&quot;</span>,x,y);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>（2）<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x,y;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;enter x:&quot;</span>);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;x);</span><br><span class="line">    y=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span>(x&gt;=<span class="number">0</span>)</span><br><span class="line">        <span class="keyword">if</span>(x&gt;<span class="number">0</span>) y=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">else</span> y=<span class="number">-1</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;x=%d,y=%d\n&quot;</span>,x,y);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li></ol><p>均不行。else总是向上找离它最近的if配对，因此（1）和（2）的函数实际如下：<br><img src="/pic/Book-Exercises-of-PLC-5th-THQ-4-7-2.svg" alt="Book-Exercises-of-PLC-5th-THQ-4-7-2"><br>事实上，如果加上一个代码段括号{}，就可以正常，修改如下：<br>（1）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x,y;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;enter x:&quot;</span>);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;x);</span><br><span class="line">    y=<span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">if</span>(x!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(x&gt;<span class="number">0</span>)</span><br><span class="line">            y=<span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        y=<span class="number">0</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;x=%d,y=%d\n&quot;</span>,x,y);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（2）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x,y;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;enter x:&quot;</span>);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;x);</span><br><span class="line">    y=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span>(x&gt;=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(x&gt;<span class="number">0</span>) y=<span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> y=<span class="number">-1</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;x=%d,y=%d\n&quot;</span>,x,y);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="8"><li>给出一百分制成绩，要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’，80~89分为’B’，70~79分为’C’，60~69分为’D’，60分以下为’E’。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;x);</span><br><span class="line">    <span class="keyword">switch</span>(x/<span class="number">10</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">10</span>:</span><br><span class="line">        <span class="keyword">case</span> <span class="number">9</span>:<span class="built_in">printf</span>(<span class="string">&quot;A\n&quot;</span>);<span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">8</span>:<span class="built_in">printf</span>(<span class="string">&quot;B\n&quot;</span>);<span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">7</span>:<span class="built_in">printf</span>(<span class="string">&quot;C\n&quot;</span>);<span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">6</span>:<span class="built_in">printf</span>(<span class="string">&quot;D\n&quot;</span>);<span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">default</span>:<span class="built_in">printf</span>(<span class="string">&quot;E\n&quot;</span>);<span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="9"><li>给出一个不多于5位的正整数，要求：<br>①求出它是几位数；<br>②分别输出每一位数字；<br>③按逆序输出各位数字，例如原数为321，应输出123。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x,a,b,c,d,e;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;x);</span><br><span class="line">    a=x/<span class="number">10000</span>;</span><br><span class="line">    b=x/<span class="number">1000</span>%<span class="number">10</span>;</span><br><span class="line">    c=x/<span class="number">100</span>%<span class="number">10</span>;</span><br><span class="line">    d=x/<span class="number">10</span>%<span class="number">10</span>;</span><br><span class="line">    e=x%<span class="number">10</span>;</span><br><span class="line">    <span class="keyword">if</span>(a)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;五位数\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %d %d %d %d\n&quot;</span>,a,b,c,d,e);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d%d%d%d%d\n&quot;</span>,e,d,c,b,a);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(b)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;四位数\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %d %d %d\n&quot;</span>,b,c,d,e);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d%d%d%d\n&quot;</span>,e,d,c,b);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(c)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;三位数\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %d %d\n&quot;</span>,c,d,e);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d%d%d\n&quot;</span>,e,d,c);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(d)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;两位数\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %d\n&quot;</span>,d,e);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d%d\n&quot;</span>,e,d);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;一位数\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,e);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,e);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="10"><li>企业发放的奖金根据利润提成。利润 $I$ 低于或等于 100 000 元的，奖金可提成10%；利润高于100 000元，低于200 000元（100 000 $&lt; I \leq$ 200 000）时，低于100 000元的部分按10%提成，高于100 000元的部分，可提成7.5%；200 000 $&lt; I \leq$ 400 000时，低于200 000元的部分仍按上述办法提成（下同）。高于200 000元的部分按5%提成；400 000 $&lt; I \leq$ 600 000元时，高于400 000元的部分按3%提成；600 000 $&lt; I \leq$ 1 000 000时，高于600 000元的部分按1.5%提成； $I &gt;$ 1 000 000时，超过1 000 000元的部分按1%提成。从键盘输入当月利润 $I$ ，求应发奖金总数。<br>要求：<br>（1）用if语句编程序；<br>（2）用switch语句编程序。</li></ol><p>（1）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> i,sum=<span class="number">0</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf&quot;</span>,&amp;i);</span><br><span class="line">    <span class="keyword">if</span>(i&gt;<span class="number">1000000</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        sum+=(i<span class="number">-1000000</span>)*<span class="number">0.01</span>;</span><br><span class="line">        i=<span class="number">1000000</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(i&gt;<span class="number">600000</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        sum+=(i<span class="number">-600000</span>)*<span class="number">0.015</span>;</span><br><span class="line">        i=<span class="number">600000</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(i&gt;<span class="number">400000</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        sum+=(i<span class="number">-400000</span>)*<span class="number">0.03</span>;</span><br><span class="line">        i=<span class="number">400000</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(i&gt;<span class="number">200000</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        sum+=(i<span class="number">-200000</span>)*<span class="number">0.05</span>;</span><br><span class="line">        i=<span class="number">200000</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(i&gt;<span class="number">100000</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        sum+=(i<span class="number">-100000</span>)*<span class="number">0.075</span>;</span><br><span class="line">        i=<span class="number">100000</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    sum+=i*<span class="number">0.1</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,sum);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（2）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> i,sum=<span class="number">0</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf&quot;</span>,&amp;i);</span><br><span class="line">    <span class="keyword">switch</span>(((<span class="type">int</span>)i<span class="number">-1</span>)/<span class="number">100000</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">default</span>:sum+=(i<span class="number">-1000000</span>)*<span class="number">0.01</span>;i=<span class="number">1000000</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">9</span>:</span><br><span class="line">        <span class="keyword">case</span> <span class="number">8</span>:</span><br><span class="line">        <span class="keyword">case</span> <span class="number">7</span>:</span><br><span class="line">        <span class="keyword">case</span> <span class="number">6</span>:sum+=(i<span class="number">-600000</span>)*<span class="number">0.015</span>;i=<span class="number">600000</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">5</span>:</span><br><span class="line">        <span class="keyword">case</span> <span class="number">4</span>:sum+=(i<span class="number">-400000</span>)*<span class="number">0.03</span>;i=<span class="number">400000</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">3</span>:</span><br><span class="line">        <span class="keyword">case</span> <span class="number">2</span>:sum+=(i<span class="number">-200000</span>)*<span class="number">0.05</span>;i=<span class="number">200000</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">1</span>:sum+=(i<span class="number">-100000</span>)*<span class="number">0.075</span>;i=<span class="number">100000</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">0</span>:sum+=i*<span class="number">0.1</span>;<span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,sum);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="11"><li>输入4个整数，要求按由小到大的顺序输出。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a,b,c,d,t;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d %d %d&quot;</span>,&amp;a,&amp;b,&amp;c,&amp;d);</span><br><span class="line">    <span class="keyword">if</span>(a&lt;b)&#123;t=a;a=b;b=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(b&lt;c)&#123;t=b;b=c;c=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(c&lt;d)&#123;t=c;c=d;d=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(a&lt;b)&#123;t=a;a=b;b=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(b&lt;c)&#123;t=b;b=c;c=t;&#125;</span><br><span class="line">    <span class="keyword">if</span>(a&lt;b)&#123;t=a;a=b;b=t;&#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d %d %d %d\n&quot;</span>,a,b,c,d);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="12"><li>有4个圆塔，圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2)，圆半径为1，见图。这4个塔的高度为10m，塔以外无建筑物。今输入任意一点的坐标，求该点的建筑高度（塔外的高度为零）。<br><img src="/pic/Book-Exercises-of-PLC-5th-THQ-4-12-1.png" alt="Book-Exercises-of-PLC-5th-THQ-4-12-1"></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> h;</span><br><span class="line">    <span class="type">double</span> d1,d2,d3,d4,x,y;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf %lf&quot;</span>,&amp;x,&amp;y);</span><br><span class="line">    d1=<span class="built_in">sqrt</span>(<span class="built_in">pow</span>(x<span class="number">-2</span>,<span class="number">2</span>)+<span class="built_in">pow</span>(y<span class="number">-2</span>,<span class="number">2</span>));</span><br><span class="line">    d2=<span class="built_in">sqrt</span>(<span class="built_in">pow</span>(x+<span class="number">2</span>,<span class="number">2</span>)+<span class="built_in">pow</span>(y<span class="number">-2</span>,<span class="number">2</span>));</span><br><span class="line">    d3=<span class="built_in">sqrt</span>(<span class="built_in">pow</span>(x+<span class="number">2</span>,<span class="number">2</span>)+<span class="built_in">pow</span>(y+<span class="number">2</span>,<span class="number">2</span>));</span><br><span class="line">    d4=<span class="built_in">sqrt</span>(<span class="built_in">pow</span>(x<span class="number">-2</span>,<span class="number">2</span>)+<span class="built_in">pow</span>(y+<span class="number">2</span>,<span class="number">2</span>));</span><br><span class="line">    <span class="keyword">if</span>(d1&lt;=<span class="number">1</span>||d2&lt;=<span class="number">1</span>||d3&lt;=<span class="number">1</span>||d4&lt;=<span class="number">1</span>)</span><br><span class="line">        h=<span class="number">10</span>;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        h=<span class="number">0</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,h);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第5章-循环结构程序设计"><a href="#第5章-循环结构程序设计" class="headerlink" title="第5章 循环结构程序设计"></a>第5章 循环结构程序设计</h2><ol><li><p>请画出例5.6中给出的3个程序段的流程图。</p></li><li><p>请补充例5.7程序，分别统计当“fabs(t)&gt;&#x3D;1e-6”和“fabs(t)&gt;&#x3D;1e-8”时执行循环体的次数。</p></li></ol><div class='spoiler collapsed'>    <div class='spoiler-title'>        【例 5.7】    </div>    <div class='spoiler-content'>        <p>【例 5.7】用公式 $\frac{\pi}{4} \approx 1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\cdots$ 求 $\pi$ 的近似值，直到发现某一项的绝对值小于 $10^{-6}$ 为止（该项不累加）。</p><p><strong>编写程序：</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> sign=<span class="number">1</span>;</span><br><span class="line">    <span class="type">double</span> pi=<span class="number">0.0</span>,n=<span class="number">1.0</span>,term=<span class="number">1.0</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">while</span>(<span class="built_in">fabs</span>(term)&gt;=<span class="number">1e-6</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        pi=pi+term;</span><br><span class="line">        n=n+<span class="number">2</span>;</span><br><span class="line">        sign=-sign;</span><br><span class="line">        term=sign/n;</span><br><span class="line">    &#125;</span><br><span class="line">    pi=pi*<span class="number">4</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;pi=%10.8f\n&quot;</span>,pi);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>运行结果：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pi=3.14159065</span><br></pre></td></tr></table></figure>    </div></div><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> sign=<span class="number">1</span>,times=<span class="number">0</span>;</span><br><span class="line">    <span class="type">double</span> pi=<span class="number">0.0</span>,n=<span class="number">1.0</span>,term=<span class="number">1.0</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">while</span>(<span class="built_in">fabs</span>(term)&gt;=<span class="number">1e-6</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        times++;</span><br><span class="line">        pi=pi+term;</span><br><span class="line">        n=n+<span class="number">2</span>;</span><br><span class="line">        sign=-sign;</span><br><span class="line">        term=sign/n;</span><br><span class="line">    &#125;</span><br><span class="line">    pi=pi*<span class="number">4</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;pi=%10.8f\n&quot;</span>,pi);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;times:%d\n&quot;</span>,times);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>“fabs(t)&gt;&#x3D;1e-6”时执行循环体500000次。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> sign=<span class="number">1</span>,times=<span class="number">0</span>;</span><br><span class="line">    <span class="type">double</span> pi=<span class="number">0.0</span>,n=<span class="number">1.0</span>,term=<span class="number">1.0</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">while</span>(<span class="built_in">fabs</span>(term)&gt;=<span class="number">1e-8</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        times++;</span><br><span class="line">        pi=pi+term;</span><br><span class="line">        n=n+<span class="number">2</span>;</span><br><span class="line">        sign=-sign;</span><br><span class="line">        term=sign/n;</span><br><span class="line">    &#125;</span><br><span class="line">    pi=pi*<span class="number">4</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;pi=%10.8f\n&quot;</span>,pi);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;times:%d\n&quot;</span>,times);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>“fabs(t)&gt;&#x3D;1e-8”时执行循环体50000000次。</p><ol start="3"><li>输入两个正整数m和n，求其最大公约数和最小公倍数。</li></ol><p>辗转相除法</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> m,n,t,gcd,lcm;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d&quot;</span>,&amp;m,&amp;n);</span><br><span class="line">    lcm=m*n;</span><br><span class="line">    <span class="keyword">while</span>(n!=<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        m%=n;</span><br><span class="line">        t=m;m=n;n=t;</span><br><span class="line">    &#125;</span><br><span class="line">    gcd=m;</span><br><span class="line">    lcm/=m;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;gcd=%d,lcm=%d\n&quot;</span>,gcd,lcm);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>更相减损法</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> m,n,gcd,lcm;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d&quot;</span>,&amp;m,&amp;n);</span><br><span class="line">    lcm=m*n;</span><br><span class="line">    <span class="keyword">while</span>(m!=n)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(m&lt;n)n-=m;</span><br><span class="line">        <span class="keyword">if</span>(m&gt;n)m-=n;</span><br><span class="line">    &#125;</span><br><span class="line">    gcd=m;</span><br><span class="line">    lcm/=m;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;gcd=%d,lcm=%d\n&quot;</span>,gcd,lcm);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li>输入一行字符，分别统计出其中英文字母、空格、数字和其他字符的个数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,zm=<span class="number">0</span>,kg=<span class="number">0</span>,sz=<span class="number">0</span>,qt=<span class="number">0</span>;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    gets(s);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s[i]!=<span class="string">&#x27;\0&#x27;</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;z&#x27;</span>||s[i]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;Z&#x27;</span>)</span><br><span class="line">            zm++;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(s[i]==<span class="string">&#x27; &#x27;</span>)</span><br><span class="line">            kg++;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;0&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;9&#x27;</span>)</span><br><span class="line">            sz++;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            qt++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;zm=%d,kg=%d,sz=%d,qt=%d\n&quot;</span>,zm,kg,sz,qt);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li>求 $S_n&#x3D;a+aa+aaa+\cdots+\overset{n个a}{aa \cdots a}$ 之值，其中 $a$ 是一个数字， $n$ 表示 $a$ 的位数， $n$ 由键盘输入。例如：<br>2+22+222+2222+22222 （此时 $n&#x3D;$ 5）</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a,n,Si=<span class="number">0</span>,Sn=<span class="number">0</span>,i;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d&quot;</span>,&amp;a,&amp;n);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        Si=Si*<span class="number">10</span>+a;</span><br><span class="line">        Sn+=Si;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,Sn);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="6"><li>求 $\sum_{n&#x3D;1}^{20}n!$ （即求 $1!+2!+3!+4!+\cdots+20!$ ）</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> i,Sn=<span class="number">0</span>,Si=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=<span class="number">20</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        Si*=i;</span><br><span class="line">        Sn+=Si;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%lld\n&quot;</span>,Sn);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>求  $\sum_{k&#x3D;1}^{100}k+\sum_{k&#x3D;1}^{50}k^2+\sum_{k&#x3D;1}^{10}\frac{1}{k}$ 。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> i,Sn=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=<span class="number">100</span>;i++)</span><br><span class="line">        Sn+=i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=<span class="number">50</span>;i++)</span><br><span class="line">        Sn+=i*i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=<span class="number">10</span>;i++)</span><br><span class="line">        Sn+=<span class="number">1.0</span>/i;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,Sn);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="8"><li>输出所有的“水仙花数”，所谓“水仙花数”是指一个3位数，其各位数字立方和等于该数本身。例如， $153$ 是水仙花数，因为 $153&#x3D;1^3+5^3+3^3$ 。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,a,b,c;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">100</span>;i&lt;<span class="number">1000</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        a=i/<span class="number">100</span>;</span><br><span class="line">        b=i/<span class="number">10</span>%<span class="number">10</span>;</span><br><span class="line">        c=i%<span class="number">10</span>;</span><br><span class="line">        <span class="keyword">if</span>(i==a*a*a+b*b*b+c*c*c)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="9"><li>一个数如果恰好等于它的因子之和，这个数就称为“完数”。例如，6的因子为1,2,3，而6&#x3D;1+2+3，因此6是“完数”。编程序找出1000之内的所有完数，并按下面格式输出其因子：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">6 its factors are 1,2,3</span><br></pre></td></tr></table></figure></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,s;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=<span class="number">1000</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        s=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">1</span>;j&lt;i;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(i%j==<span class="number">0</span>)</span><br><span class="line">                s+=j;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(s==i)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d its factors are 1&quot;</span>,i);</span><br><span class="line">            <span class="keyword">for</span>(j=<span class="number">2</span>;j&lt;i;j++)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">if</span>(i%j==<span class="number">0</span>)</span><br><span class="line">                    <span class="built_in">printf</span>(<span class="string">&quot;,%d&quot;</span>,j);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="10"><li>有一个分数序列<br>$\frac{2}{1},\frac{3}{2},\frac{5}{3},\frac{8}{5},\frac{13}{8},\frac{21}{8},\cdots$<br>求出这个数列的前20项之和。</li></ol><p>分母是斐波那契数列，分子是斐波那契数列中分母的下一项数字。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> fm=<span class="number">1</span>,fz=<span class="number">2</span>,t,Sn=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">20</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        Sn+=fz/fm;</span><br><span class="line">        t=fm;</span><br><span class="line">        fm=fz;</span><br><span class="line">        fz+=t;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,Sn);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="11"><li>一个球从100m高度自由落下，每次落地后反弹回原高度的一半，再落下，再反弹。求它在第10次落地时共经过多少米，第10次反弹多高。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> h=<span class="number">100</span>,s=<span class="number">100</span>;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        h/=<span class="number">2</span>;</span><br><span class="line">        s+=<span class="number">2</span>*h;</span><br><span class="line">    &#125;</span><br><span class="line">    h/=<span class="number">2</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;s=%f,h=%f\n&quot;</span>,s,h);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="12"><li>猴子吃桃问题。猴子第1填摘下若干个桃子，当即吃了一半，还不过瘾，又多吃了一个。第2天早上又将剩下的桃子吃掉一半，又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时，就只剩一个桃子了。求第1天共摘多少个桃子。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,s=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">9</span>;i&gt;=<span class="number">1</span>;i--)</span><br><span class="line">    &#123;</span><br><span class="line">        s=(s+<span class="number">1</span>)*<span class="number">2</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="13"><li>用迭代法求 $x&#x3D;\sqrt{a}$ 。求平方根的迭代公式为<br>$x_{n+1}&#x3D;\frac{1}{2}(x_n+\frac{a}{x_n})$<br>要求前后两次求出的 $x$ 的差的绝对值小于 $10^{-5}$ 。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> a,x,x1;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf&quot;</span>,&amp;a);</span><br><span class="line">    x=x1=a;</span><br><span class="line">    <span class="keyword">do</span></span><br><span class="line">    &#123;</span><br><span class="line">        x=x1;</span><br><span class="line">        x1=(x+a/x)/<span class="number">2</span>;</span><br><span class="line">    &#125;<span class="keyword">while</span>(<span class="built_in">fabs</span>(x-x1)&gt;=<span class="number">1e-5</span>);</span><br><span class="line">    x=x1;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,x);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="14"><li>用牛顿迭代法求下面方程在1.5附近的根：<br>$2x^3-4x^2+3x-6&#x3D;0$</li></ol><p>牛顿迭代法（牛顿切线法）假设一个接近根的值 $x_0$ 求出 $f(x_0)$ ，过该点作切线，交 $x$ 轴于 $(x_1,0)$ ，用 $x_1$ 代替 $x_0$ 重复操作，最后得到的值会慢慢接近真正的根 $x^*$ 。<br>由 $f’(x_0)&#x3D;\frac{f(x_0)}{x_0-x_1}$ ，得 $x_1&#x3D;x_0-\frac{f(x_0)}{f’(x_0)}$ 。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> x0=<span class="number">1.5</span>,x1=<span class="number">1.5</span>,f,f_;</span><br><span class="line">    <span class="keyword">do</span></span><br><span class="line">    &#123;</span><br><span class="line">        x0=x1;</span><br><span class="line">        f=((<span class="number">2</span>*x0<span class="number">-4</span>)*x0+<span class="number">3</span>)*x0<span class="number">-6</span>;</span><br><span class="line">        f_=(<span class="number">6</span>*x0<span class="number">-8</span>)*x0+<span class="number">3</span>;</span><br><span class="line">        x1=x0-f/f_;</span><br><span class="line">    &#125;<span class="keyword">while</span>(<span class="built_in">fabs</span>(x1-x0)&gt;=<span class="number">1e-5</span>);</span><br><span class="line">    x0=x1;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,x0);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="15"><li>用二分法求下面方程在 $(-10,10)$ 的根：<br>$2x^3-4x^2+3x-6&#x3D;0$</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> l=<span class="number">-10</span>,r=<span class="number">10</span>,mid,fl=<span class="number">-2436</span>,fr=<span class="number">1624</span>,fmid;</span><br><span class="line">    <span class="keyword">do</span></span><br><span class="line">    &#123;</span><br><span class="line">        mid=(l+r)/<span class="number">2</span>;</span><br><span class="line">        fmid=((<span class="number">2</span>*mid<span class="number">-4</span>)*mid+<span class="number">3</span>)*mid<span class="number">-6</span>;</span><br><span class="line">        <span class="keyword">if</span>(fmid*fl&lt;<span class="number">0</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            r=mid;</span><br><span class="line">            fr=fmid;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            l=mid;</span><br><span class="line">            fl=fmid;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;<span class="keyword">while</span>(<span class="built_in">fabs</span>(l-r)&gt;=<span class="number">1e-5</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>,mid);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="16"><li>输出以下图案：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">   *</span><br><span class="line">  ***</span><br><span class="line"> *****</span><br><span class="line">*******</span><br><span class="line"> *****</span><br><span class="line">  ***</span><br><span class="line">   *</span><br></pre></td></tr></table></figure></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>-i;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot; &quot;</span>);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">2</span>*i+<span class="number">1</span>;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;*&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">2</span>;i&gt;=<span class="number">0</span>;i--)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>-i;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot; &quot;</span>);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">2</span>*i+<span class="number">1</span>;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;*&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="17"><li>两个乒乓球队进行比赛，各出3人。甲队为A,B,C 3人，乙队为X,Y,Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单，A所他不和X比，C所他不和X,Z比，请编程序找出3对赛手的名单。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> A,B,C,X=<span class="string">&#x27;X&#x27;</span>,Y=<span class="string">&#x27;Y&#x27;</span>,Z=<span class="string">&#x27;Z&#x27;</span>;</span><br><span class="line">    <span class="keyword">for</span>(A=X;A&lt;=Z;A++)</span><br><span class="line">        <span class="keyword">for</span>(B=X;B&lt;=Z;B++)</span><br><span class="line">            <span class="keyword">for</span>(C=X;C&lt;=Z;C++)</span><br><span class="line">                <span class="keyword">if</span>(A!=B&amp;&amp;B!=C&amp;&amp;A!=C)</span><br><span class="line">                    <span class="keyword">if</span>(A!=X&amp;&amp;C!=X&amp;&amp;C!=Z)</span><br><span class="line">                        <span class="built_in">printf</span>(<span class="string">&quot;A-%c B-%c C-%c\n&quot;</span>,A,B,C);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>注：本章习题13~15所用的方法，可参考《C程序设计（第五版）学习辅导》第5章习题解答中的介绍。</p><h2 id="第6章-利用数组处理批量数据"><a href="#第6章-利用数组处理批量数据" class="headerlink" title="第6章 利用数组处理批量数据"></a>第6章 利用数组处理批量数据</h2><ol><li>用筛选法求100之内的素数。</li></ol><p>①先把1挖掉；<br>②把2标记为素数，将2的其他倍数挖掉；<br>③把3标记为素数，将3的其他倍数挖掉；<br>④4被挖掉，跳过；<br>⑤……</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> notprime[<span class="number">105</span>]=&#123;<span class="number">0</span>&#125;,i,j;</span><br><span class="line">    notprime[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">2</span>;i&lt;=<span class="number">100</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(!notprime[i])</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,i);</span><br><span class="line">            <span class="keyword">for</span>(j=<span class="number">2</span>;i*j&lt;=<span class="number">100</span>;j++)</span><br><span class="line">                notprime[i*j]=<span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>用选择法对10个整数排序。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">10</span>],i,j,t,min;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">9</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        min=i;</span><br><span class="line">        <span class="keyword">for</span>(j=i+<span class="number">1</span>;j&lt;<span class="number">10</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(a[j]&lt;a[min])</span><br><span class="line">                min=j;</span><br><span class="line">        &#125;</span><br><span class="line">        t=a[i];</span><br><span class="line">        a[i]=a[min];</span><br><span class="line">        a[min]=t;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>求一个 $3 \times 3$ 的整型矩阵对角线元素之和。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">3</span>][<span class="number">3</span>],i,j,s=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">3</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i][j]);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">        s+=a[i][i];</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li>有一个已排好序的数组，要求输入一个数后，按原来排序的规律将它插入数组中。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">11</span>],b,i,pos;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;b);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="keyword">if</span>(b&lt;a[i])</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">    pos=i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">10</span>;i&gt;pos;i--)</span><br><span class="line">        a[i]=a[i<span class="number">-1</span>];</span><br><span class="line">    a[pos]=b;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;=<span class="number">10</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li>将一个数组中的值按逆序重新存放。例如，原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">5</span>],i,t;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>/<span class="number">2</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        t=a[i];</span><br><span class="line">        a[i]=a[<span class="number">4</span>-i];</span><br><span class="line">        a[<span class="number">4</span>-i]=t;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="6"><li>输出以下的杨辉三角形（要求输出10行）。  <table><thead><tr><th align="left"></th><th align="left"></th><th align="left"></th><th align="left"></th><th align="left"></th><th align="left"></th></tr></thead><tbody><tr><td align="left">1</td><td align="left"></td><td align="left"></td><td align="left"></td><td align="left"></td><td align="left"></td></tr><tr><td align="left">1</td><td align="left">1</td><td align="left"></td><td align="left"></td><td align="left"></td><td align="left"></td></tr><tr><td align="left">1</td><td align="left">2</td><td align="left">1</td><td align="left"></td><td align="left"></td><td align="left"></td></tr><tr><td align="left">1</td><td align="left">3</td><td align="left">3</td><td align="left">1</td><td align="left"></td><td align="left"></td></tr><tr><td align="left">1</td><td align="left">4</td><td align="left">6</td><td align="left">4</td><td align="left">1</td><td align="left"></td></tr><tr><td align="left">1</td><td align="left">5</td><td align="left">10</td><td align="left">10</td><td align="left">5</td><td align="left">1</td></tr><tr><td align="left">$\vdots$</td><td align="left">$\vdots$</td><td align="left">$\vdots$</td><td align="left">$\vdots$</td><td align="left">$\vdots$</td><td align="left">$\vdots$</td></tr></tbody></table></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">10</span>][<span class="number">10</span>],i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        a[i][<span class="number">0</span>]=a[i][i]=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">2</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">1</span>;j&lt;i;j++)</span><br><span class="line">            a[i][j]=a[i<span class="number">-1</span>][j<span class="number">-1</span>]+a[i<span class="number">-1</span>][j];</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">10</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;=i;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,a[i][j]);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>输出“魔方阵”。所谓魔方阵是指这样的方阵，它的每一行、每一列和对角线之和均相等。例如，三阶魔方阵为<br>8 1 6<br>3 5 7<br>4 9 2<br>要求输出 1 ~ $n^2$ 的自然数构成的魔方阵。</li></ol><p>奇数阶魔方阵的生成规律如下：<br>① $1$ 位于第 $1$ 行第 $\frac{n+1}{2}$ 列；<br>② $2$ 到 $n^2$ 的各数，每一个数存放的行比前一个数少 $1$ ，若前一个数已放在第 $1$ 行，则这一个放在第 $n$ 行；<br>③ $2$ 到 $n^2$ 的各数，每一个数存放的列比前一个数多 $1$ ，若前一个数已放在第 $n$ 列，则这一个放在第 $1$ 列；<br>④ 若当前数要放的位置已经有数，则存放到前一个数同一列的下一行的位置，若前一个数已放在第 $n$ 行，则这一个放在第 $1$ 行。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">11</span>][<span class="number">11</span>],i,j,k,n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">if</span>(n%<span class="number">2</span>==<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Only Odd Number!\n&quot;</span>);</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">1</span>;j&lt;=n;j++)</span><br><span class="line">            a[i][j]=<span class="number">0</span>;</span><br><span class="line">    i=<span class="number">1</span>;</span><br><span class="line">    j=(n+<span class="number">1</span>)/<span class="number">2</span>;</span><br><span class="line">    a[i][j]=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(k=<span class="number">2</span>;k&lt;=n*n;k++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(i==<span class="number">1</span>)i=n;</span><br><span class="line">        <span class="keyword">else</span> i--;</span><br><span class="line">        <span class="keyword">if</span>(j==n)j=<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">else</span> j++;</span><br><span class="line">        <span class="keyword">if</span>(a[i][j])</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(i==n)i=<span class="number">1</span>;</span><br><span class="line">            <span class="keyword">else</span> i++;</span><br><span class="line">            <span class="keyword">if</span>(j==<span class="number">1</span>)j=n;</span><br><span class="line">            <span class="keyword">else</span> j--;</span><br><span class="line">            </span><br><span class="line">            <span class="keyword">if</span>(i==n)i=<span class="number">1</span>;</span><br><span class="line">            <span class="keyword">else</span> i++;</span><br><span class="line">        &#125;</span><br><span class="line">        a[i][j]=k;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">1</span>;j&lt;=n;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%2d &quot;</span>,a[i][j]);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="8"><li>找出一个二维数组中的鞍点，即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">5</span>][<span class="number">5</span>],i,j,max,flag,num=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i][j]);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        max=<span class="number">0</span>;</span><br><span class="line">        flag=<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">            max=a[i][max]&lt;a[i][j]?j:max;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">            <span class="keyword">if</span>(a[i][max]&gt;a[j][max])</span><br><span class="line">            &#123;</span><br><span class="line">                flag=<span class="number">0</span>;</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        <span class="keyword">if</span>(flag)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;a[%d][%d]=%d\n&quot;</span>,i,max,a[i][max]);</span><br><span class="line">            num++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(!num)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;It does not exist!\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="9"><li>有15个数按由大到小顺序存放在一个数组中，输入一个数，要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中，则输出“无此数”。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">15</span>],b,i,l=<span class="number">0</span>,r=<span class="number">14</span>,mid;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">15</span>;i++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;b);</span><br><span class="line">    <span class="keyword">while</span>(l&lt;r)</span><br><span class="line">    &#123;</span><br><span class="line">        mid=(l+r)/<span class="number">2</span>;</span><br><span class="line">        <span class="keyword">if</span>(a[mid]&gt;b)</span><br><span class="line">            l=mid+<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(a[mid]&lt;b)</span><br><span class="line">            r=mid<span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            l=r=mid;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(a[l]==b)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;a[%d]=%d\n&quot;</span>,l,b);</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;No Found!\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="10"><li>有一篇文章，共有3行文字，每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,dx=<span class="number">0</span>,xx=<span class="number">0</span>,sz=<span class="number">0</span>,kg=<span class="number">0</span>,qt=<span class="number">0</span>;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">3</span>][<span class="number">81</span>];</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">3</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        gets(s[i]);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;s[i][j]!=<span class="string">&#x27;\0&#x27;</span>;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(s[i][j]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;s[i][j]&lt;=<span class="string">&#x27;Z&#x27;</span>)</span><br><span class="line">                dx++;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(s[i][j]&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;s[i][j]&lt;=<span class="string">&#x27;z&#x27;</span>)</span><br><span class="line">                xx++;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(s[i][j]==<span class="string">&#x27; &#x27;</span>)</span><br><span class="line">                kg++;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(s[i][j]&gt;=<span class="string">&#x27;0&#x27;</span>&amp;&amp;s[i][j]&lt;=<span class="string">&#x27;9&#x27;</span>)</span><br><span class="line">                sz++;</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                qt++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;dx=%d,xx=%d,sz=%d,kg=%d,qt=%d\n&quot;</span>,dx,xx,sz,kg,qt);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="11"><li>输出以下图案：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">* * * * *</span><br><span class="line">  * * * * *</span><br><span class="line">    * * * * *</span><br><span class="line">      * * * * *</span><br><span class="line">        * * * * *</span><br></pre></td></tr></table></figure></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">5</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;i;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;  &quot;</span>);</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;<span class="number">5</span>;j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;* &quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="12"><li>有一行电文，已按下面规律译成密码：<br>A→Z a→z<br>B→Y b→y<br>C→X C→x<br>$\; \; \vdots \; \; \; \; \; \vdots$<br>即第1个字母变成第26个字母，第i个字母变成第(26-i+1)个字母，非字母字符不变。要求编程序将密码译回原文，并输出密码和原文。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">100</span>];</span><br><span class="line">    gets(s);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s[i]!=<span class="string">&#x27;\0&#x27;</span>;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;Z&#x27;</span>)</span><br><span class="line">            s[i]=<span class="number">25</span>-(s[i]-<span class="string">&#x27;A&#x27;</span>)+<span class="string">&#x27;A&#x27;</span>;</span><br><span class="line">        <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;z&#x27;</span>)</span><br><span class="line">            s[i]=<span class="number">25</span>-(s[i]-<span class="string">&#x27;a&#x27;</span>)+<span class="string">&#x27;a&#x27;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="13"><li>编一程序，将两个字符串连接起来，不要用strcat函数。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="type">char</span> s1[<span class="number">200</span>],s2[<span class="number">100</span>];</span><br><span class="line">    gets(s1);</span><br><span class="line">    gets(s2);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s1[i]!=<span class="string">&#x27;\0&#x27;</span>;i++);</span><br><span class="line">    <span class="keyword">for</span>(j=<span class="number">0</span>;s2[j]!=<span class="string">&#x27;\0&#x27;</span>;i++,j++)</span><br><span class="line">        s1[i]=s2[j];</span><br><span class="line">    s1[i]=<span class="string">&#x27;\0&#x27;</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s1);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="14"><li>编一个程序，将两个字符串s1和s2比较，若s1&gt;s2，输出一个正数；若s1&#x3D;s2，输出0；若s1&lt;s2，输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相应字符的ASCII码的差值。例如，”A”与”C”相比，由于”A”&lt;”C”，应输出负数，同时由于’A’与’C’的ASCII码差值为2，因此应输出“-2”。同理：”And”和”Aid”比较，根据第2个字符比较结果，”n”比”i”大5，因此应输出“5”。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">char</span> s1[<span class="number">200</span>],s2[<span class="number">100</span>];</span><br><span class="line">    gets(s1);</span><br><span class="line">    gets(s2);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s1[i]==s2[i]&amp;&amp;s1[i]!=<span class="string">&#x27;\0&#x27;</span>;i++);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,s1[i]-s2[i]);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="15"><li>编写一个程序，将字符数组s2中的全部字符复制到字符数组s1中。不用strcpy函数。复制时，’\0’也要复制过去。’\0’后面的字符不复制。</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="type">char</span> s1[<span class="number">200</span>],s2[<span class="number">100</span>];</span><br><span class="line">    gets(s1);</span><br><span class="line">    gets(s2);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;s2[i]!=<span class="string">&#x27;\0&#x27;</span>;i++)</span><br><span class="line">        s1[i]=s2[i];</span><br><span class="line">    s1[i]=<span class="string">&#x27;\0&#x27;</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s\n&quot;</span>,s1);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><blockquote><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_80x15.png" alt="知识共享许可协议"></a></p><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_88x31.png" alt="知识共享许可协议"></a></p><p>本作品采用<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p></blockquote><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="例题与习题" scheme="https://www.gh.zhangkaixin.cc/tags/%E4%BE%8B%E9%A2%98%E4%B8%8E%E4%B9%A0%E9%A2%98/"/>
    
  </entry>
  
  <entry>
    <title>一种解决 Docker Compose 网段冲突的方法</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Docker-Compose-Network-Segment-Conflict/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Docker-Compose-Network-Segment-Conflict/</id>
    <published>2022-09-06T02:25:32.000Z</published>
    <updated>2023-10-14T12:11:57.153Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote><p>本文提出了一种可以解决使用 docker compose 的容器其默认网段172.17.0.0&#x2F;16与实际网络环境网段冲突问题的方法——重建网桥。</p></blockquote><h1 id="0x00-引言"><a href="#0x00-引言" class="headerlink" title="0x00 引言"></a>0x00 引言</h1><p>为了方便校内举行算法编程比赛，我们在学校服务器上通过 docker compose 搭建了一个OJ，平常使用都没有问题，但有一次在学校综合教学楼B区机房组织进行比赛的时候，发现登不上去，ping服务器也ping不通，只能走WebVPN访问。</p><p>在和信网处的老师确认过B区机房可以正常访问服务器的网关后，我和老师确认是因为docker服务造成的网段冲突问题。</p><h1 id="0x01-学校的网络结构"><a href="#0x01-学校的网络结构" class="headerlink" title="0x01 学校的网络结构"></a>0x01 学校的网络结构</h1><p>我们学校的网络结构大概如下（仅作原理说明，非真实链路结构）：</p><p><img src="/pic/DCNSC1.png"></p><p>机房的每一台电脑会连接到机房后面的交换机上，机房后面的交换机会和这栋楼的交换机相连接，然后与学校数据中心的主交换机连接。<br>学校数据中心的主交换机还连接着互联网。<br>同时，学校的数据中心还放着其他服务器。每台服务器都连着它所在的机柜的交换机，机柜的交换机与服务器管理交换机连接，然后与数据中心的主交换机连接。<br>然后，服务器会因为docker服务而在路由表上加入连接容器的虚拟网段和网关。</p><h1 id="0x02-故障原因"><a href="#0x02-故障原因" class="headerlink" title="0x02 故障原因"></a>0x02 故障原因</h1><p><strong>简单来说，就是机房电脑的网段为172.17.0.0&#x2F;16，而docker的默认网段也为172.17.0.0&#x2F;16。</strong></p><p>比如我将OJ搭建在服务器172.28.11.4这台服务器上，正常情况下，我在宿舍或WebVPN访问时，数据会带着ip地址例如172.31.0.100告知服务器返回数据的位置，服务器接收到数据并进行处理后，准备返回数据，这时发现要返回的地址不在路由表上，于是就向机柜交换机发送数据，让机柜交换机查找目标地址然后一直向上级交换机发送数据，直到找到路由表里有这个地址的交换机，然后向下转发数据，这样我们就可以收到服务器的回复数据。</p><p>然而，如果我们在机房电脑172.17.1.2访问服务器，服务器接收到数据并进行处理后，准备返回数据，这时发现要返回的地址在路由表上，这个路由表是docker写上去的，和机房的电脑的网段正好相一致，于是他就会直接通过路由表所写的信息，将数据转发给对应ip的docker容器（即使这个容器不存在），这样，我们就收不到服务器所返回的数据，就会造成无法访问，ping也ping不通。</p><p><strong>解决方法也很简单，就是重新分配docker的网段。</strong></p><h1 id="0x03-查找容器ip地址"><a href="#0x03-查找容器ip地址" class="headerlink" title="0x03 查找容器ip地址"></a>0x03 查找容器ip地址</h1><p>首先列出所有容器</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker ps -a</span><br></pre></td></tr></table></figure><p>接着，针对容器，进行查询。例如，我们想查找容器 oj-backend (6ada6469fe6d) 的ip地址，输入</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker inspect 6ada6469fe6d</span><br></pre></td></tr></table></figure><p>IPAddress后面跟的就是容器的ip地址，Gateway后面跟的就是虚拟网关。</p><p>我们找到所有我们需要重新分配ip的容器，记住容器名称，例如 oj-backend 、 oj-judge 、 oj-redis 。</p><h1 id="0x04-查找网桥"><a href="#0x04-查找网桥" class="headerlink" title="0x04 查找网桥"></a>0x04 查找网桥</h1><p>首先列出所有docker网桥</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker network <span class="built_in">ls</span></span><br></pre></td></tr></table></figure><p>接着，针对网桥id，查看详细信息。例如，针对 docker_default (4969db1ebd36) 查找输入以下指令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker network inspect 5bc11281f0ae</span><br></pre></td></tr></table></figure><p>Subnet后面跟的就是网桥的网段，Gateway后面跟的就是虚拟网关。</p><p>我们找到我们需要重新分配网段的网桥，记住网桥名称，例如 docker_default 。</p><h1 id="0x05-停止容器"><a href="#0x05-停止容器" class="headerlink" title="0x05 停止容器"></a>0x05 停止容器</h1><p>进入文件所在的文件夹，输入以下指令停止服务。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose stop</span><br></pre></td></tr></table></figure><h1 id="0x06-修改容器设置"><a href="#0x06-修改容器设置" class="headerlink" title="0x06 修改容器设置"></a>0x06 修改容器设置</h1><p>我们找到 <code>docker-compose.yml</code> 文件，打开编辑，在下面找是否有类似以下内容的部分</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">networks:</span></span><br><span class="line">  <span class="attr">default:</span></span><br><span class="line">    <span class="attr">ipam:</span></span><br><span class="line">      <span class="attr">config:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">subnet:</span> <span class="string">&quot;192.168.2.0/24&quot;</span></span><br></pre></td></tr></table></figure><p>如果有，则修改网段，如果没有，则复制上面的内容在文件下方粘贴。</p><h1 id="0x07-删除原网桥"><a href="#0x07-删除原网桥" class="headerlink" title="0x07 删除原网桥"></a>0x07 删除原网桥</h1><p>我们使用刚刚记住的网桥名称，删除它</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker network inspect docker_default</span><br></pre></td></tr></table></figure><h1 id="0x08-重启docker服务"><a href="#0x08-重启docker服务" class="headerlink" title="0x08 重启docker服务"></a>0x08 重启docker服务</h1><p>使用指令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">service docker restart</span><br></pre></td></tr></table></figure><p>重新启动服务</p><h1 id="0x09-重建网桥"><a href="#0x09-重建网桥" class="headerlink" title="0x09 重建网桥"></a>0x09 重建网桥</h1><p>进入文件所在的文件夹，输入以下指令就可以重建网桥。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose up -d</span><br></pre></td></tr></table></figure><p>此时会报错，这是因为我们虽然新建了网桥，但是容器并未连接到新网桥，我们不用管。此时我们列出所有docker网桥，会发现网桥已经重建好了。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker network <span class="built_in">ls</span></span><br></pre></td></tr></table></figure><h1 id="0x0a-让容器连接新网桥"><a href="#0x0a-让容器连接新网桥" class="headerlink" title="0x0a 让容器连接新网桥"></a>0x0a 让容器连接新网桥</h1><p>使用我们记住的网桥名称和网络名称，使用指令让容器连接到新网桥。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">docker network connect docker_default oj-backend</span><br><span class="line">docker network connect docker_default oj-judge</span><br><span class="line">docker network connect docker_default oj-redis</span><br></pre></td></tr></table></figure><h1 id="0x0b-启动容器"><a href="#0x0b-启动容器" class="headerlink" title="0x0b 启动容器"></a>0x0b 启动容器</h1><p>进入文件所在的文件夹，输入以下指令启动的时候，应该就不会报错了，机房也就可以正常访问了。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose up -d</span><br></pre></td></tr></table></figure><hr><blockquote><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_80x15.png" alt="知识共享许可协议"></a></p><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_88x31.png" alt="知识共享许可协议"></a></p><p>本作品采用<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p></blockquote><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="科技" scheme="https://www.gh.zhangkaixin.cc/tags/%E7%A7%91%E6%8A%80/"/>
    
  </entry>
  
  <entry>
    <title>复现 第六届“蓝帽杯”全国大学生网络安全技能大赛 初赛 电子取证部分</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/reproduction/reproduction-bluehat2022-pre/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/reproduction/reproduction-bluehat2022-pre/</id>
    <published>2022-07-10T02:54:46.000Z</published>
    <updated>2023-10-14T12:11:57.263Z</updated>
    
    <content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉，您的输入不正确。" data-whm="抱歉，您所填写的内容与哈希校验不符，但你仍可查看此文。">  <script id="hbeData" type="hbeData" data-hmacdigest="4ea2c069520a1aafdb9230a59879258e2ab6e1440dff4e2f4e844b4ded492ffd">40e65372b53142ce66afa8eee6834c5b0fb81dabf70cab732463966a4c6504d11a70220dc45fcf4b075d7b054cfce884c16b5fd9ca3c8ceed1ec705dda6919149cf9f41d5eb490a518bd489d890ee74283b211b7f8801bdf34bb29bca29dac9a8e9f998c53384367b2801e02bd6161041bf38c75f40daf069106e64b643bf5ee9bb16758724fff7a207027aa5e28272671701cb60521e17f080f27bfa75b6074c9a68060898748c6cf50584cf208c84fc460812c54fbd630b1c0f24c8a3bf9bcc942eb3c2d2f71691b17110f32c7a3a04e2ffe25f4fe55df6696a52071e569a1543ab4b2779b998265ce2213e779c74b1422a812f260e9aa0f47b8d92801d2969b0ad5501524d9fd8cf2961734ec6546a222670ee8d478e58ceba5b6cef5351ea70fb93ca0278b2a4f3d43d928fbadd34e486f1d9235db60960ac1e93022920b91f1afd7a7d13730375e96270412588c3afb510f0c0fa37b6f89f6489450b241c156ac044f204f9032e3a629e8394c426a94587839072c0c8097db3a49df2b74693125796176f6f46517ad279c2a3dd6ac89dc358eabc13a74b47d8745ab5e27812c83a8259a9d3b14748986114dc4a2f3cc9b6c7cad1511514a5c545e8ed83b68c1a0fc27af308d258fcd0b221e3ee90d80c91b2d08cad7da01706a2aec00d28d81948edb23705307e6c5eb1c927fdf353337a6d4afdcd068ba430ff1ee1adce22cb84988d2bf15b2186a9b45846e7e7b71e7bd024dfe70aeabad51091efb88ab295b58dc2789d81f46c980946292aa1d93899191bc12842cca825821a0d0c470b4f1d084c207a3377a0a21255ab194512406a286622489836199e120301a6db0b914cab3e8acc92eb2b04899447add8cb441ee815d46691b98f42aaa6c422623a063795e1842c533eb731587d92a0a4f59a703ae340aea2ebbed2a59d0b3239a33d9f4efe33527587e24c54a6d874539fcc681ed3b1ce421e680bea68a0654f980c6b1b4f156be2f2b01d85e506f2e0ee4aca77b06b463514332666eacb9f0dfd05bd67d79a202d1bf6d9db6f052c0d141fc8638e0090d5f4ef01ce07dc01437905fa04940aa2d530800807976408fcbaed6a49047f82682a96d573faa8df373b252e5cf2b86ae61136e7ab4868dafa5ac1ab3c6d2bb2eba9e6c4afb5ea6d4c1a494a6f2b9e6300e953bd911709c5d9be6a0c42a2daf354a4e024efdbb125f25f1ee6ad66ab70e2ca5e5c148733e2311daad13f05cb0a825988ef979525d112bbfeccaa4dfb087e073831a42c4984615c475a1a8156c6ac300368a4e1be3589b0da48ac496cbc188604198480fafd6ec4c5954506cb8b18eb8edaa6aae406235de8d80a296593dcb1d274e0aacbbb4f1f5328eb4c171c74fae101000cec10f19f883b087c852a38b8f90b0f7041989d4459bbcffacc3f8a83447c8b163d18cf6b72dbf6d866b7bffe9c79d5bfa2fec4bad601cdaeb7d8bf4a133deb5bf82421079926f20db4e3dff45eb4bcb386194d06f8b19309497fbf2bdaf20a0e3f8fa282f1f999dd67af50d0bcb2b575d7d591a2440ba97626ef269efeaf659c5928f9a5b6e3ae071c545eff8303ecb3866722b6e20cc9ae4b69d181f5bc033fa26f4c9ba4442326263637191fbb73aa88083e6da3bcf2875c3a324b0a70139b60aa40a2847213a555ec9c50599be361a077ce1761059ee7384d3920f256f272ecb4d34356ea585aa29c81a67e02a468dff3a50d02d4641ba74013b553f7359282f3b39b58115ea8c2d00f599536eff0d86c9c8cbceea201c420c268e577d4810638b45d7f14dd41102962d5acb13250e5c32577142d4b21414b11f10c5f5c4ffc6c08370c6e1897a79e6d0a4ac78491cf91d1a5e7bba492088609a19fcb92ecb1732bdecbec037ffc0190b8f17dd18a9438e2fd1ea51d52a817772edf9802cca9e88b2016b1a6032b0b955409ace9dc65a0c8d8010f7a9af896dc4c7e3db2d160722cfdd80176a3470c70aba2b5a8be58012f8f925badd6a8452b0a46930aca8db7398a966aebb6ac256f6fa214657438007c108c5c4be21788fab0666c47710a84cad34ddac49e8d6b1ac1cdfd4f262fa9f015b04f8b78844638a06b1aee3587417c51064da9a8499ddefcc6549524858facee5a58b5b737ca826e063b8cffc3b709253346dfc23b49a92879784d498238fe01c062e44abd7e2da6f44e2e730f5e2571d95bd1a85ceba6ce9d7979310c6c64e1f4628c2228c0a7d981a995b1cf5567faab3421207f633f5c2fd3274fad76cc2cef90655c74f5ef065a56f7481091683d5c33d41dd215e0fe5478fdd3b2e32a1fc3176083547e13633a728742aa3dec5dfe47fe4b484e82bdfeb2466bf4940f9f780bb4600a362ffbaf6d387fea8572146ce54a10ca9a4cfe3e4bbb02f512a34454da73d55a601decb15c5f38da78bcd343df82870fc338ca99e817ad0676e1ff248bec126f34f76bc098900f05fd41791c0fba37e34a042c63919c5f92d415fd65454615ffa0a2e850bb8a3f9ef57dba6e0eb1b76415c3968d6c9beecd4172a8577b5feab74e0170085026dab709fec7c11469f0b842a55300392e1eff4d41f9547890eb2a149f39b339f7fa6e86b0a9e865fc09c539c45ee5228e490b96a6fbb79d275397e43425ec253d7861864ccb13d49213491b386deeeb6a598c4afaa9e5ee07349d81c17cd4b20e5b558ac0b2a5281f55f0b4b06ba9e23f4f37f3dff44dc4e237814584c3ef2b5b44057022ab28d55b72ebdc24ea6c330bf0d30ef75486677ab07a85b7580348a8cfb0bef906b359c2ad771711683864f6f1a0fa240431fbe9ecad097335c74ddd21966b18b5b5366a6e07fe4d9c9f677888822c388b982b05159682a09202eddaab7fafe4227f998645e44d6be882da52ae0bf11b724828efb11d1d10cde697c4fcce4900a3c679f245c1cd44042221693a81a0d05364ca04193d824dddae3d11723b1828a89f800a1cccb7032f50cd096af3e20e7109de57d7330bd93de522bcb7b0aa48cb11f2a94d2f3bcc51a5ebf9331a344b13997e183246f567ce2cbcf91f1d47ac5432be7ac4e5d3c201b6465d566eaaa525d6788f5abd27738121d25ff8ed06dada4b045b522b7708d575724008fe998d1466df15cc2f5b406513857a0f20035dde7c3bf69c176bee247c5b55cb2f388a6dabd6909143ca0b7da070800fe3479c93857e9f362ddd21f0410c85fe33bcd2816996321650b8eff777b5b3758acc213b9ca5df3812d8dfcf0d45777775b1f5d3423aec6218629940c302257ba8c72e2379134e532a21450f1bb175c0e68259ef15e9cce61e3c8bdf0a0e065d9deccf99b8aa3ca3c42ef93f9b7adb3992c144b23772c2dc83def51c8b99472d5ba7e71cc083cdb69e896db087261e772da994df45e631646e057998cc2df09681a6343fa941e33e594fdeb175305c2e222c6111482da98b6e88596b07ae2ef018a6839682ed6e41bbee1f298540d5ae4c919564aac0205600eb507bce5c649b8dead0dc07a61d2adce917380f01bcc15491a5a08a7cf3a8d773944b936dcc2003fed37b97807f2661bfccedfa72496f3c82911a8d3ff84db5b55e891c1e73ca398ebcb3b9dafee3461e6f050a8daa027529b2af8895b8617a226139ce063bc8440b4922f1b983afff6c90133e81792374676017460268c816186b827c69ba0425d63f4837ed98c18071ea5c0506ffc020b055400f88087c1aa50939f188bf189137a50cfb2f9cf532b1cee9c9ff5f704320ca6f65a4d5dfdf5b831d33e03c3a0daddf75d385652d55a169e19a89349b80dfaad51749d718505f3d5d9988ba9286a08d000026e173466e9356bbd1697f789137fbe7e13b277b74996f263a91e60fa26ec11e0ede39f77b944a582455e0f590ddcc533d2ef0354ad5bfa198abf466c2364ffd9c4afcd2e8ad4b3107a908fd520f1fccc40eaa1d4fc26da55f5d6d183432eda018d32833bc6c444a3ae5a9f40c83add428e391719fee5541f0aad5eee4c7ed2a8e81461ad0a0e86396b9818f4f4be23fef429b3253fe812772f4be45696c1ce15d60d469b59ceab0f29fa5fd679b3afa60d38262262f897936e7f01cb059673855721a70ec8d9b84dcbb3e17b9509de0a3ed93b27db82f5fb85926c77af15c98f1834e7c8b714c3515227f40406be24687b766d109d2767694b862b5b94144287c4b7e026b1d0e768033a0324935146d4b8b79e9b21658506a4d679c9ca089789ee5a8620822cdd3e2997a55a47e857f3cc116ac30147508de0e0db9a1e46b6357a7b9c3c37660f2452f6d8e3ce264da1066a71b54f855461898e102b37834728e86c871603ce8135fed1b47820d75c96c1b3fc9fd340fd46c15ebfcebdcc6f799c64f270f07f346366d44537bef1ab5403e6ff254dceef2c7c9f775139a573de94a2d6c5a8adea4921543ca72762d9225f0489832e1995b47f1484262758ba30037dee47436e91b951ac077c737968cf025acf417e4801be0bb5c6b30c97d97a72f756d90156c647bf01cc41266ac6c7d095e43817689f37654415d7024882b46cac09646fe782fea9d9d6730159314feeeb48a7a35224c23e2c62513fea0d062bef949caf67d529d8f39813ce5678f014dab5fc4dca6e53b8c836071a1d3b7543521e60c704a633e2028fe2d1ba91d0fd66fd610892b365e524857938a4397062020e817fa2f79ce26be04bde9b4ceeac30ecfc0027c8317e3463d86389dfe293406f5e272dcbcff0edfa5efd195ce1fd8bfac1eab07ab158adfffea834376b0a7faa5e468df7199b421c6b4962d5832d594a5a44243cb049a7c883c3a08f2fff8ed45f0274705cf9d81bdbb07ce2721540875eae4284cb8515edcd357458d33bed07c2e6cb12c8fd38f0d592b7fecf24e9680091a58477efefc237e6db298f7932eac00e6ca28e108ba6d32a55c43071c0e8d052f82066d2f63f28d95a6aa7677f841c4bb08ebeb5c5323351fc599a3e2558fdf1b0670ba551eb85b5d93cde603747a4c973171f2353e6a0b6062dec8f4ff987469f15bf5451669d045e0c99ef6d9172a272081a1a365b903ea26d6180420d0b09fdfd773c1e81fc9b46937fdf3f88573e37422ac817dd4c37b6b41bfb1a2637c1247e3061409bb226f2c550139997f6b1328eaf7eec581108694aa2ab4228507964c91fa9434cc88297237f073be454d22470a891f0b064f57511e3ec3ecf83e7803da2ef748626bc7c1c071e99837d90c9e25ba95c2311232febf629fb09eadd2820d8dab03a11fc3f6c7a17239dbee2acfb42f8ee8ceb53d68113411ea14f78889d45d8686f3eb9aa89710f39fbcd541cf47d08f7d1170ff2664f490f52435695b5ea2914bbdcda67ab5ded80cbe3d02447bb12f5e603bdfdf2008f12df1160936998e0b2cea446bc6b40204e1c7e9d1732d7b2960f8fe7bf2034b44cb4f5a09a1149c8b33fcd5317e9a8374656707ba3bb4e9314adc9628ef96a8cdea28d3587edbf4c67c88e2a463922bd6e461a5d24f297bda563f5f434139a1b48e2e3f7ba9c34999af4ea7a9b28421902996956ead95a31b4b63616bdf204821ae0ce17b6cfb7f07d53cc356896b3b33772dfea9e6eadd24caf81fa6dbcd8e2d1aafdc3fda66820e357abdd4780148a048a08c7e5da92ae32f5c8ac029c8a4eec8ec426cb39f4bbe803de9fe9be7089dffad0ac7255981a680a5574b6dced3980f11b507dcd21f6cc5469c1a01a250c1b9935ce18292ee6850c121338a40c9f4f2c67ff949e242e95cc44bab14e6f8461e33c1850f811a1808bb8e88cb0f07298ac74cfbc2e39dc63b9dca14ea882a82bdb33eaa3cb903b9e062fbc31b2ac329ba1b62c35f0254e70aac2ff78bdce46b93dd575124f4489a1a514fb3a7c818f3090744069739267cdfd9a5b2f72e23a209e7a591aa71010e82b5cf6203d1c440bac5b2654744b530f5ae143e0a21f51e7de9814045d89d049a816593045ae45a380e1c8ad6e79056172d4bc95146bd8f19baef9bcabb332b10246eec3af5ea75fcfee407c25d1a4aa8968b772f51a008a9d7b721d3e6bdac536425785ec1fa952ddeea0cd34f5a7d62ccd30a26b3ebd792aa657782a10206dfbd80d1045dfb8d5d29842ac2f1930cc906814c8262da857422ba9f137e1a85f4d1db30708a10408c64bfbe27cf50615e2f232157ed8d2af3b6577073ed402f267b9385662a71388693d40e089920351c3973b96ac5eec3dfd1fc975ba4f2f1008d62c6f2a6e3adf179387a43dae877ca8c40d831a136f2cefefa81079f57ca5bc2d8a7fe96fb821eea695091a4a2ff213f6a34964896827942bdad4afb3081a0edbb4ff7096888d537e7b0b3f3e408000d6976147de795b0622d00e5a153587817217e841977c6dfa9dde30f439aa116aa467156b5f0ff63ac78b5c2815f111e4325a3de13ff865eeba2deb87123066abff3c93c57677500b9f77f69b7f64571e14859c8d7901693f1445768baf5dadb07105eaa9a5be4bcc00e56b72758a264c4d7e7fa063a0dff6aa741626595925d284b0226573b9c5e7b12848ee3e1155bc5dc0a916c2f9849be9e90b1c22868e5ea690cf83aea7085433d4bc99a122fc9982ab429350a912ea750e593bb8fdd7f0c03b2dc479ffe7d5cfacb6f0036b2fe65e46eba3239fc4cded2060b737963187c42dc11e536cde57a98f57d2325d1b36c0dc300c15abece7b6a09388c20041a56c71864b024da3692db795611e3f1aaad5116f9ba80b89a63dfee69ee2fa2841ee23e6c35f25293da3021e1438a244b218bed645c38369bc8512f323d71c6502a48fea5883677d4395f1f3b18bcad3b2474b5abd4a6b6046a0e66d175e9994db232dbc310e70a03e3a178a0552dff20f88bf530aa9bd16c92be972ffc12046d7f1f42c164f73573d27310f3c0f854c5586aa224945654d2789172b141cf5571df563253c1c72d49ef28cb4eb81fb01220039d2d2f629405259753d7532a737466b297dacc9d1148389dc152c8780dd042d731d8aa2f0d16449ffba01f898eaa16bc7f5e0f348e9ed61ec13928eed2d16092c36a72fd9d4628b8a7733d9a509d209f26a0c3fc52d2f415d6974244ef632c0f2ec3ea10141f05e2ce635a22c1cc86cfa49e51f33c9a7219af23534ab10497a2546989a544c959b39dc93c0f5fa106373ea0de398809168ca5ff8e97eb6e1b7966db071a639ca17adb4248772aa76e74cb5c4d2ff15b60068abafdc28dfe77a543783b6d201be079e22cb021867291e94ab7a46855aecb3e987c0c8ffe595d9d55cbecbbbb0db0a0e49e40b188048c9a5b4cbe57862a71b73218be4968d67c51644b69d65704491bc24c6fcd9dc8ca8613edc59f446c05c4327c947299c71a9e466c35d6103d1d315022161ff9a61444e0b2129e46ad4f9385586796023a7e57192e8d6b214b4b73801c1fd669c91016400f61e6684f8675d7f2fabda57b483216fb18e983d2374fefc829726c47b96e0fea87c0526b826a767698de5dc8e0e9e41d0a487976bc0735c8a20e8be301c1ab893f50d3ea777fb464542c8b2ec4cb177f1b57135a2fc23ff8bc3ea791541c8fc03af7f481ec7df1d06ec0a09689b4e3792e99d114ee6b3048d6070190fc6ac3f2f5fdabdbd774e94ed093ec3445b3ab3053ac50fa7b8ef9ad30a38b0d63d7b93a7942a2bbb95547468b34c20e632b966d96553ffc27b4e4d7cdb2a8f0d62cc61926b8c301251d255357650f0a49353c5d2b5bf9080eea1d6d3a340651be13c7469385f47f4e70454df672f70d5011e6337aedd730b7d832438bebc1b42339bcc630f3bc18ffff99c33e0e42ef395444c53c0eccc854b560cd2eaba8674cbd53a01913a7103b86ce406de6e0f960569b4e86faeb5ee7370fd58c0b9d97d5b87aaa4d18efdbc36e280169b13ca5b18219b343e2d6bb322792c8bf4ab3c5aa33905f35176a79c8802c9dd79a88220686b00067e4407dd6ba8f85931aa18bdf4654554a084c837fc1333b1cafaa15d1e54b5adc6668827d96e8496e3c621156c0bb80707cc131cd8e1ab6649bdb953fad10a3a02ebc9de325b78e725dba0f1259405e455c05c4665c45110290635186f414afafef6d818a40f52eb9ab4cfb017e92ebb989f40a36b9b991d413ac895021ea4f421f4bdf78664924cc1a467dfbcef340692ae8a0aa55e65dfe5a5d8525b2a67166d4957ab3e25d58ab5c4f6c949c60375ede3e30915202b84e09ccc6723948187574b72a5681eb52e611fbc459f05152f1eb854c97f52bb537833e63549c2f6360dabf178e7f5e2e968430ba98cb288a9c0aa4ad2c717c89b38cc89fb19a39b898eb3eca23d9ea57125c3743e7abe80fc796517615dc7389f3e105435e17fcc6798d4fbc473bfd6085cfeabb9662f548f76d50f41bd7b9dd263135b5bcf4dfd9f1c797fe9de78c74bf92595198ad587c858485f2bb9e8215dc14a8dabc3a56da91ce84283ed3b889f2c9c88390345270ef3b3810ac8464517690338a4c5cf691ccf7fd9b1ad945138fd53780a8b86c4214b5e89f553c5d0e001e2beb5383f53ff2246dd492edde6ae78459e21d0b7a8efc12b1034f5f03a57c7fac9d1e1904d2fefeb9de9e66b66db652facd84501c8ae459e7b81c6054fb05736264ce6a01405a44ac1085d64fd2ef6f34a09228a17c717ba6cd034a9accc733cfae9293870bf2588070b72f8cc798b242b9949a763e9a732e48bda26042a4b045f0bf88c34ac1fcdb77a49de1aec8199855588cb6407e09409955320de51155bf9f736b3d8cf7e1d0047546c5b0a5c38d27401f5c69233a20a3e9ae824724a1a61888258806a84883c7577c7b6cf60dd1d8b87bc3a634be5d76f12b822958c9330222e44b6b73c98fddc0850daf172a0c1c03c5e561971070dc9a9cf889f1328233387dba59a2814f0784e8e2ffb405ee3bce6f662d1c29937a052ea58b68697473697edde059d30239af8e52e2eebe62fc62548c5bbd34064f2b8fb52c1416c699c2a739f814145765660ede8a2fe323dd189828f507432de6d8c11b446d9f7e85444b469fd92ef4d6baa953200146ca7500bc316d2e51fec1c2b45bea351caa714fc0a0717b342de5c30d095afa863eafd078b00435b39af4f50880156697e4cd046acd6525c300c18c80deca64626d073b1a3c40859186c02da6b560777d5bade6a01f077363a8435e159bf00a3348da2328d4818446eacf39795b26629993ac167210a495ce52fff972ceed4156d481af577de748a1589c4d5ef1081316b2ea77a4a816686a94553e4fe799222aeb2de805069b57a40a56a87edb6677812c2991b7d9cbc6934c5eac65388345ecc78ab2e62e56aea30602840e41c4fe78c00c2f01181930b210e228202f79a7e7b4e63fb0326ca60f4b04fa7f33ff1b7eb2dd03cd0fe16ad94c63762524ca06f54cf5c280a1acbe4e3f20b42fefee5376e7ec6a75cef15ac24cbfdbd6d1ceb04a2cc02d7f10717d597a7ebee60fa79c8f52a837b77f1328323a5654bf4704e9b33fd2e10fe47e08816dc1a69aef5139c4dac391cb23f08c118d7a7036f9bc5d3e09c5ef6be0822f8837f80ec50a0b7488f3d7c4a92e91cb7e3d7601765a02fa62b4568d3f6548cbc2b9744b384ea3b6c437b693d5cbc7d4ca388c5880a27f89080cf6a046ccf8dc6426c62b960bb79166fea8b5c8663c941733737461f46f599751d1200a39b0e6012eb47f418f57683b55b83f1de92c8ac9886ce42bae2ce78d38712022c5b7803f5f253cd48534c5ca9522bfc875250a036a8f3adfe686b7e9889ca7233a31deb963f0fbf4dfdabde22c831ee45a7c2a1317a8986ebcd1a360a32c57ea767df708bff4554b4367b62c97bcfc0431c03e49c126eebfe07c245e0eaac74765b72d8a5cb9ef926f4f5910dc01d202ee4c999ccea1eb3966920fa47d583954d9b30ccbe262ccc7ff386574ca260eb7c2817aa8a9d9c85d45dfae705c5d655b934bcf9ef2710ff9ba1c0f92c4bcb490f26d7087e81e6bbc37dc9ce2a52adf468810ae0008c1e2b6544f17a0dae43b76601e2dcf9586e5f4528b5fc5cbdadfb512bcdb01912e20d436fbd093891fe5a9162dbb32a8b7c4f8c8ce31272305d12ee20ad1ba571f90fbff1849a87a8ac4e20d6bb9d88d2b31d847bb7cbbab49e06ced00be66a7d1c387a4c1086e68189add0b18b9d4acf43e4df2ce62e75d0c3708d75f1cd7245e1ccda2c3a1dcc401b482c6b51e2bbdf0c3ae08097804f0a3f72b0df06580940b4a75ba1aa245dfa559223b308db55240419000ac58912fd7a1d07d69f5329acb72dbacaa27d1b9d7843fea9c1ed24eceed597ff2eb0ac1790c9983f7cfe7570cef5750ae8055dd9dfa6d0c2eda6827596e009fbb3ba5d1980eba9b6eaea10adfd7e4293a265bd68c9fc71fc6975d5a13ddeb7b0fbc8af4926223fb2dc3da019fdc9276ffddad9f07ab6cd5c7bd7457dec1b54c9ad8af3c4cba4ebd9137c7347293025fcaf70246aab83070d01a82601f6b0379b7518bf3076684bfaa1bc2f2ad60204116cc5e2328870dac498ee0377d8bb2a7b858d106c4d3a29cb293aaf683e433faee6370114163b4f54ced992a27a234c8425b0328998a51adaa84c2ba5c52674ad8873a0006ff0b05449a0efd7aadd663a1d1a2ed69a91eba631a1a7e32d89318aaaa82c75f1ed531bad1d8ee4db5e6e8947b61f3ddaafe181f119596ad60b51aa6e1eee1e6866e0b7087c989404f2c1e1791f80dfe549caf8ec2128cb94c64ae1ce6cb3b50e5cbe309f34d858f751ab505ef3f592f75bbdaf112aa72c16d05d201c8c57ec38777ad0285e7cb41f18f67cf21a6616d56e371731c6d0c4d27c33be98cc63d1a3528acac12b77527e2b213cdb167d8936edb725e4d515d3fe1b765030d8073e086444de479b61bc0df2e2b61108fb8341cef22b4e932d0ec0999ead78ea7a04bcbf0d915c4293029946c6596dfeb3cde9b66d8529a6780e1838b02e0ee6d4bc139c5276c65d49901f7c637610fefe502518eab5ae1095e6d0f22e6df37d6030387b2de723dbd9524c692874c088291faa5a38c5732dab3914b4d63d2fef3a3f9aa42dc297c62828d41218d604307d965164874cb281636e405a3aa9e56e3fc5246f8f9bae583b4c4dd335ed7185afe4ff8b56521b94712d4a53010c1cdb6fc122c48f00a41dfd64e3c12fb75a96b49dbb4d2d46cfa4da22b1b69574cbed869078aaf5619c7f13bcd90540ebf23bad800d594128703f8c8397a5d5cd926fd85d73b742b4f747a7016608819b6e1e77b3fbfa5f8f11fb1ff7ab8190e7917a20a7d3ef0500abaed6246f2f28f9f6bad7a96bf39e209e38a7f1097a8cfbf2b9d2f9cbdea5d33fe3368457984b0db64be85a5bdb2d2d0d280ee6641e2310a7ab6b6149838e4ff56a70674c7dc89827900ee0d84d41b53a99fbdd11f0e1e8e3247ad1561fc84b4664599b4bdd991f5ae6ff7143aea3f1bcdc9342bd31dcddde0c4e23d034f9abb31a1f154540bd3faca9c4bddd7f2451dd3c53a3b7e729edb0f48c6e16327ed55fdefaa01e836c1e4dd4f2c56f5e219f70fe89a7ba6a5112362039ce257f649c0002124b0e2978d2d063732e2fcb2d19183f454fe7ab39d46f6fb1addd09a4ff6a48a22d7a39d34cc25f23e0445ae1ce6912e0c9627dde43a51917561af031f5305a4932161f404026cfcb277d0cc4629e69a4b55102343c52fead27b318695fb5fc7f09fb97bf767595a6b4b64c66bc6e581373eb2e8b397e413d257ef4057e037d15600e27cb5ff520608df8130be4e6c4afa9c6b7ae2a68567ed897149dd2a38cd3e852a70319cf1ac1667645bf04fe8800abddd598c1f36f0dc24429a9e4f39939ebf196a51a9b42f33d5caddb5be3c0b277c18ce60bfb2ff46cb09a27b01e996e4b80a9fd4e7472be0f67b050c76ba379ed29bfba5b09236ab90f675bee89f8c0008baf1eb8a2d06cd839dbf3d12532613c2040d6cc803339a64a5a0adb7d36d583ff88fd23a2a9badfc1bf4eb7bd74f3839b697df53f422313fcf3357604333a6974cec0518b06ad92dc6c8be5cc55451c514cbe7c2bfeb43dd13e89bf41622d03261a71c16d5cbf7483a8c4ae7f5d03022713cd4a38df32ce12385af9fdf121d9c77a38890b9c21c087de04501941aa5d5fa0300fc7f33d05ad5a494673b1f6b7fd0cb3a1f084e47016139427215d66fc1b754a8418b56941d0bb60a1aa79fa0d10fcd967c4adaa341cd378de4a259728766ef0e4731beeb20bb48c81a21be2298d142da1cbd1bef7ea29ee88ceeff049695e1bf5eb1c1a10d85618abf6d17e828968ff4ae105e511ff11d54ca2979b8806a485d3bccc07ca5421970951f901cb900713ea27902554ad74ccdd95ac565db6245a91d49e9d5e511d422a867933a3637fd80772f69a248fffe99103758168ffe646667f8572d15f1877d1dd0de29fda745ea779894c38c0da03c2cf9973ac1f35b62ac2b2e7f735f3d74f8bce4ef487ce635028e782b4f2e8c4ca0a2017c41a2225a7ac4c93cc311953cee016b5c14f4e225eb2276e024dc17b5c7e67d2b25cb4b6bc040e01b33419739e8fd7c1df83c8439ca3ca9da9c821c307c79e1531879f38dc350cb606dcf0892371db80bc2db352ba8240a7d1544226eb12a18f73ab9186f225aa02da0d6d01564c7d5262f8c7ac2a9e5e721c9b8442962a548d1b3fd7ffbe52ac10f9cc1ea98750a5a65e9799a9c736fca3fb440e203d1b3d05279cd261a6877cd5624497d54c1b5cbe9c48d5b01dc8917ada8446e951d8fea095620e4e55984923d52e41746f715ec933f7f49868fe2960e3fd47da2e566cf2d4d942f1b8d692be9f0eb1f66945641f28e89bd6815d94606c67d89144dc9e4b32ebdda26d8e62d10a4081d7147d34a886d54dada7478d777690a9644145b9e41676fdac8f88585a2766164c3fa1a7930ace9c9da4e9e35723b9a8066a5d6200ddfc2da58ccdb220d2cc29357c6e90a95b4648d07da716a2b87b595a78abacfb3640a19758ff7ac9fcb196e4ee0924ffed0b63969196c5405e04bdd880d2915954438aaa56959d059650d94db10898497719d86361b6e65116792c9bff7eeeccd7caae43a6bacab8b5be34ddff69aa03c1cdca451cb0c5fc5f8feefc2b339f5dfe9e4ffd5c4b247cb582529bff6bcbf89f66d9a074306c805fec43bfec00984692cec8e480673ef3f9a78d20f4e0a1e70f62edba68dea7044b8720f84697106b9a84cfa5a7c7aada93ceb056a765cee0f106e1fefc9798eb62624af72c81d3a2935229383c354b466f6c8207b41fbaa27a77a308c2529d9aca89c95d4db932bc097245581f68ff8c6bafbef0a418fd0f0e1f3b11baf19514c8aa82274e22b8d2dbaa8d70df01d2880e18cbbbfe7cb247231ff2552205a5fb2c510ef9c9772e649151105c90aaabe61398323ecc168085f350eb70647d5c50c8a3ff066da560e84e2b27e45dcfdc4bafd071e20da1c9d33fb74beea72ad6d571decd5e015ad2c045332c5aef655a56e23bd8b0fdd2756e3494a8817091c00bf91c643399550a7401a908974addc1a691b8b9f2099aacac470f251c6666c0180caf87e8faac814ad2136139d0574600a6d6cf9dcbe07c7bc4d93bba984e8659a4473a17f80581becdfe08ec253b6cc7dbb5ae6ebbfecfac7d5167dfb719d28844e86e1b1f4b9bbf081137a791ae415296859f7d644ab477b2524d9edc25e2a7d033c343ff7d830bbaae62938f80781c907e7906009f17121ae7c54a0e885dd50cd8828b20cfcd1a486cf27c09c30c9aae3b01a9aa135daa6a5d063cc67c5629be5ae224c373a08b6e993f6567d7db20eb1848778a87ba19d0277181645079e3da4f534497da577d1105e387f3d003825c232d954dd56eee1fe325a98d1cd48a20603edf3c4ba1bf4cc9d5dee90f4f73e85646008eaf2b927bbac87c92e761c31b37b583ee713f1be4f3f1fde6fefed18c57d1b9eb9a44c2a82b3818ee0d2b43077484c17ff0a51a5cb9a2cf136b0155ba4596aab120255ec96400122ce310d43cbcd35fef1dcaa5dd1c44d05b6f9f1f3ac400f0402182a88ac59e0686f46bde74172839e57774016f1c5e1d2baeae3d2cf83bd35848ba551e43df77df27c998cb900c64f1d1d2246e9fb322349c344311d2c845ef7deb337eb65045b103d5df9353489e46aeec27642be777cd52ac6bc469c396ece60d7b922882789a580c3965c60d299744e6d219fc5b7b244cb5af89e8cfda6b6365f514e17d1231b5127d5e1df2613ebd9a2c8a2a75d56f7e04b828c964cadc033ce18412e63c84377d9f2c93131c1583a76535a744f34a7e57d7db8320eaaf614f994029429d5d47c7a4bbe8373d8c3d47bec28765851c117aa61b846f1bd2a81dd0d65a7c476f76f93938edd90d9bdec082c12e038d3fb5a4c13d70af0ec1ef6d73ba6695feb7254048b8e7b63dce9dbdeb9fb018a493f2977e60c7efb04e545c091b1c21f65f786becfcc3331806948f097a0084621e11bed32a25608c6badaa7101e6b7de53a53108f3bd4a12eeecc560bb3fac9e45a83b0ba00f38975800d997eba2886e18dda6d33e1822e56919dd4acd5b2da97935f9059c082916f97565548f594b52dca2ff0917b0c05adb626cfb486ef7854a4b97689b3c5e21ba68665a28ca4be494f2eaa841c472a7db21f1a04da6215e746a74296cea308babe4e86f4b17897cedf66384359e337d2bd2bec50bb6944868c2e1f881f09af58ee571d9516898df77f348f4b8c7f38f6a9306d1674a30ff9370059c4182d611ab0582833c519c72f57cf5e8933e4119105e5aa3130dfd6c3e644b9ec894f9a42d71abcb8713ca2933073ddde044fc20feb935bd3b672f8ef29851b148c30bfdc73c1204423dc2eb72a1270330eab3620bc60441c488b8f9692549766f1f543be75d4e4093e98951285aad3e33b4b02ba167d782234b89a23678d3c5f25c8d4872933edd6bd3f6ca019998c948795ce269b1e1749a50df06929c8c67aa88f75c0d4447d996485722c68ffb8fa1b1380efe99ae66fad458cabb5250ddc3c67dbf91ae14e9013b41443a80ff51aa9cf670d3017380489e45a844ce434052a37d21e70cbda034460f982810683c02a9e0c5822c535d5b32bb8e43cb9f3a5f569c3fef7e78323193c47400f42dc1e608cfe2c5205fb1661bdf957bc302fba53287465e4e0b375ac51c594c8d985a1f8fa436321cb314924af38df90d23bf8530ec00bdd7a38f21817d6e7f6ba37221972856db204a0748904d0d292427c8250d9ffdbb265ef7388f95281973f1188422ce9ac861685cbed9c45a6026ad7206b03806cf67f6f116c685b7336b086058785cf2166a48f53ed48fdf4f47b5d2400b42b3ef85ba121d46e22328979d7a998b32aa3d0f5ed5a547997b5a08da2abf46d20e7bb139ac6f655c1bc15af8ee1c796369cecd3ec0622b85ff1045185599f673a5849494473db28407e80e9ac6e36e67c0ea1d2feb106803eb703317a197c28548613df62e7d14eb7e2b3bf314086ea41a435593e0e1985b86659a3996daa3a240bbdba12e85a006b6be0df24c2ad237370007dd1e9f43544c3a537aba1f79a1db920dee3cb7cf964ae9fc02a1041ad4b7624965a2c17cb6094934941bed68765b802d77bab69cc4066faf4e7cc5a78ff0b31c013cdb26a3dce9a01e5ccd1c8f04ce979f20d8ddcae7d761447b027ec06bdc23cbe71b92927a2a37344cc5b44839eb60f70817a465e0f1482ab139699bc614038527648f5ba839f223da90ac2af869dd6b58215654307a203ae4f2ffb4f317c4cc902108bfee72357bdf98c955ca2631749fa22519cf8b2f2d1cf5bbe16994630ab0fd8278b817151d2fa388c0ae77d0813983504eeae4e68a5400fb94130bc8a02bfb8c3f2d0d4837256f369fe5d00964db0e12afc2193abe3a80b801a92059983f59e18c9592d81d39c8eae6e7cab1bd14709b9a496d7e0c739e339c8b1686e02d440e4d7f4b8ecb1c16df70abda41f13f9a6089869339725c0ed37fd3989d5acd4bdef2308b4eb201d43731a81fc18d1a1d328e46fe7142807b28c91e728d70d9dc1ded8dd311890e9620b25a9f976433874adeae44374f887b57eb00439d2690b7cee875c6f4d649838548a485c7b1eadb478178a5c71f6aa171559a91b50036cbc4640b2154f5345ac444cd0c9580fe696d1c65933d6f1d569cfa8c30d3a874c1e5de2c69836053a456aa9a09c2af9ae94e2f885a58ad2e31b8a7aa1fe66a07d65a0ed1bfe87769e54380b13fb6f376a9e7142e1c925df07de90ee46f218d1d2e3b30fd67e9a52a5f32b80d5603947532139f9ebc2d161fc2290d11ca6b0f27acdb0cf9ccfc70f8fefc8283520a28b75f287d905a3f27808eb6c1b53cfa5633e918bee90e93f1591eaff4d556c08f27ace300a32c643395b8fbdbbe5489c1c9559fe48f112bc402eed272572d71d9fcefd0550a0e490407ab917febd0676970544f8e648d54ae409eefc4613f958c4f4e4f761fa828fe1e12876c638618ab1fe54e20af442f5b4a01321fb88ab4a4512b6c29dc8cc3f87e8074facab173864a4e99a98b32a45b9d38d88fa464944abfbaba307d5f7082e6d83c174abc0b5496ae7e3de0b5b584e6491e43374917ac993018aeb29d2ea4b37e58b5089763d5e24e9cf86826de56ed89ca0b6c897f9eae7ee36f39698399e864ba84d966687d774149b7b32307be88f4e62172178adbe578801e2ec3eb2c0242300fe478f2be09b377331b4eb40d49525113b5c0dbf36b1aca127eea461197bc7f2ab1963ad42918cc992e47a1c52f543853b7c7295d2b2373d949479a8ddd99d2719bf6166df3c64dcb1065d1e45b20f662474997451e421cff517bddddc09b6e3859e6ef1233e9b33b474ed19d2dd056976e26e63941994271e5215e11665c6497f1f093cbd77f3dec3cd7abdcba0298c181f865057166cdbcab9a1717575ce9bd523abd47b4c256189b3ed2deecce1bcddb3f195b74a3003092c7ebf95cfd08f58c0bba0d40936682dfdfeb991e0266ecd25942db94a1e2a37519d409a4655ecc4a4b9d0e2514ce33b6b5710ce67524ed8c0aba5b137c3d4c9cdaaaafd9496e9a26d1453069317231c37fe95592d0cc2b7bb10cff95d9c962bda02d264f5c75a7f8f4eb2ab093d365d88097b834f20eaa9f31c286dda234df8f3329e13efc0dace47b073651b6640e43d819e06d04904276d2ab39e661930a306b48815fc7ece7696310633eb78c204c65e4c0e9484f17a2d07912eb95240df049ec236afa5fa86e6ffa89dd721f9a9f1387e49019ca5fde8a126400c9354335a741bef5e4427250af239d864dfc5182daa1da772199e5db32ed19861564493c1d09930adbd6d6fe98a5f0797c5f82535cf07d8110c2c00a5f7de7da010bf12a08ea9582bc4e2553844162786bea39e34bb445a399af51e9a6bc398e82be686be0379ac72288773bf4e6e384eaaf6f0f16356b6413f325cc5d636ff5ab4039ea45c10adc175ff5c94c0e860b90b8c279416cfead63dc67fcab918f5aa00b8b16f049207a28842f2e2dc1b9167bc7c2546dd457812c93db2bd02cb5728426e6b1d7b3c3f922d3c1e950b135beeb99070d53576ccde9fba124dc9298fa79b024c3b6377b83c9ec3a85280a3667ba386360c8cd9fc89f18325ccfa355bb7a56db891f4edc373647f21c2b84ea68d2f7b2904dd9803cc9f38319390e1bc444ebe7cb54d3ef05aa6d95809d4f4681f79db3276713bdc61fed96c533e8b7dcf86f373a6a0b422a40967b9319646cdf49e72b76a91f8ca7908b7cd035e70bfaccfab0ec6a5627bfd65e4eca888919e2b769e3d1cf75f831f9d6b70823eb8eba373106faaf30fd2926370988e4dd8ce422f24bad363bae11ec0ee33484c13f2303562c5592be7d6a8b1573a9bbbe87c4eeae824bb3f9764f753ffb7e67c16358191b318cc4d8bfdb368638b7efcc08c15c83dda66972959d2d1026e53f863dc8a0ab709e0c1e7655f05cb2e1b9386cb7311a92ae10370628f9d67c784212d9f8d62d8fbe06e452d88200f8e381df2252cb472ef844ba427f917ab12117cbf9ae5e8413b02ffe1c85c9e571a2577ebd008a9270d1e3171318a868e8e2d56f619394f62bb749987201c3a50dfb11c563faa4e36d786536e9daeaafbd59e1a76f36a65db3efeb96b3611951fe52011109408cafc575666c886f0c425028e3cbc16075756dd566498805447e22d83219cb22bd6cdd3a34c58dcaf16f7a13dd798886ac87f43c4dc8f73e3731720d1ed35312f6401dece56a027eca2742276530e14ee56d34b1e77bb3c88461ab3dcabf77deb6c1119880a3dc0fed5d0c481d9fdbc019e0f15ce0bf2aa322e9012e8f0d666a1f08614beefb8369b4303ccdfef2ec9ca8c7d4d3b552b99896b504f89310fea9eb82dfdc158d17f9da367bd359bf74244598cc3ceeb9f41a6ca696ff25630a33c6a535e1ddca2aea28147bcbce9fe847c01d21654bb82e62da3738321d26b0220be488126d7c73bd260f9ae36744e6bd6b859cccccdcfb61868738aa7a310fd78df768bdc36d02876b2a6cb28c3ead13f60d3366f9ccc3be59a8f320c7477207f9c6126ad9eba1df74b167a6f31d51f2e3bf44e62f92d131b5e7f5eeae7fffc4e26ade70665438d3396b525cbed9ff5d50190c5806df9068fca9e26eac4c1ba78558b1eb9662d9508e22f95f9d38d2f5b6abb3e2d67c4f0ed4fc7f1e67dcd29e28d9dc603c12802aaaa8c24c8d44bad2370b35422ada5f2c5d995b3f0ec4f6b641c958c25846c985a4785dfb4d7a42bafcb71340da7f7f6a32a22de1b98d7f3db45f01e212f4e8bb66a2b7e4d995f2622380c819a0c0add79181a4493ef4cd1d139d14d277e7d7a310c9347d1127538a750b31d6a1965ab5fc1c98960721c42324a3ed49d5d0b025260b25ae2114a55bb6f2504995712897510097c057a23759f9173759d8eb1e84260063e0dd4ad25d0c4b14bfd1c08c739ba1122a82a8b0d7c7ebc3c72be6cc2a5892bf7f82f3a3f130eb602600570c114acc3e707ce282f8b22e281922d8e41ce99f601053a09959029300b8301ab240433b36d235c657791cca4629c93f21e4c2aa7894566ec55e37fc6be83a1d372c65e8d1f6e7cf8133cfe3e1960c4a9e0c5db77503e7e3b925488aa95c15bfb5830162f5af394a4fff81c74a0b7df685701cd4557931567fd0fdb35f47bdb97f76990a2e1937033c51d4d058452cffbf0fd8e3d3afc02cf1c872147491a06a41ab41854e7a4b31a495cc521f3489332a4d1be320c53127729d1d0578f266eda63f20912a1cede647fbf395ed298aac3b25f35af1d54bbbcc58f9181ec11b89ce8e83c755561fcf38f335767bd5f4e54a00f814f9174c22a99cdc828423740e693b3eca8165dd4f75aac3fa23dc7b3f374207616cad8e0147e094aafac53b13a0099f352e96ebf8f9394566c0288e4d4ac91202a9bcaa12e36168c56ede55e7777feac95d9dd88445e40f7fdd50748e0b51c425dcb2137d17d1fcadf9758865827b56c4e4c91530762d4496357050a69e909d63fc17604cb4a30d5a412082c87143caf1f62c9e8d192a9696b6a3264ebc568a8d592762e63808aa534800a81b7d2943aff05f0f4a7ae98a07bc2429c93a55f3cec5a655b5a85f23269d1d61c97d29d42405eb8165b2f79e9ce1502135c7099936e9baebdf5ffa21f2e2719234f6e83e78956a7d1f76cf076bc6fb8205001becb3509d7059f0ea586516c027d4d98cfe377ae25f35d09a8671ea0fc5c22112a9e233940640552fab619a67abe0436b0fa418e764cef07ce6328d02247249a35359db548c6464a3def4b25e68c7fce271011867c7c57a3477770cb3f150f344f3280336a12688063651041a0b168b8f5e516312a828442919b124c7fa8abc12d77e4a2dc7c5f249203383b50db3e8dbcda4d11a5d6a293e374fc76dc7d82a8d68d955636c700e6c7e84541e456308c4fd670f57d079c7a983634e6109c0aaab7772f499b5b32ed531f3324eee273acf4334c1b06843251a3f1a2aad139bdf7b5b4bf15cf37cb3496d16d1578a8b0e454864587bec13ae0de3d3a806b9ec8f0eefc9ef780563ccd031189436109883d48ed8c28ff933fef1aeafd65e535c8e7f3ea11456b2ab812a37d2a2f631cda9c1efd3ec598aca921459ed4993382f5b435e52210ac2aa5d51e2689ce88237782f358b6d1ae8d22fc3e0f8ea775e089e61898990c0a547b2842ee23de2cef1599ada8a2224f77a5a3fd3a7853400e7bdd648666ae543dfec1ee2cbaef64eb33d8d1992c74745d678be7559f50090db9cc080d1d290b1c1cc3ef8adc4ae583d4557a770566e822242ab5fb27ac6d0b9f231e42e655d9bf6d2cbff005f0b91837fca3864fd57dab5b250e14c045c1c64d833801d668a475630e7d376d951e67662994199a1a9fd303ed0c826796b58932df7f7603431eb03b520471d0840ae49e7878b2e5d943727b541309f34ca65b9f9050108b7c77c74838586f27b45f5b1567bacb20e9b03d75d65b204b3c48f412f81d62e2521d77ab5848be7b15409335b984827005610756de030b9ec93b6b2f8af9920532c25059fcc244601d56c28e0f792e9cc07bed93dd52871a477e6dbc238dfe4c77f5332f0e3e27cb74de07ad6075ec2cd9eb338faad47943db8170425275f54fa451a2a51cad4ac863d8f63044784bbc6a7eec850ccb326545ff6c161ebf6fc17ea4612e5359e22b454b31d02c32f4614075d1c3da9adf0656d93492ed9d168d12fd6a74cc5b4cf76a632bbe545bbfee1fe77b57e4e164ee75204b41e75644ac7354d6e8e3bcf31b71bd174f20d4d995104766f982f204e0146d40ab8eeda3f893c618d7f7e0048f1a017ac28b656dc70e174289275c9d5bdb20c735e5560720e7fc65cd3a646496c3a003275bc77e30f9313c710c676daa56063285529ebfd888193692ea5063f7f63b276cb190b79ecfccb23f736f07a984b6340efd0598bced3812137bdf470e488c3c7bc76634ff213f0f769fbc5d1af23b759e27621c62871b57a18f2aecf9834a7d8f50755d219c971aa953f4dbe067235640958dbfd5c86e5df0cbec940ff5f6dbddbe7052b61780836414c0c64eec792547b431fc4fe9b53661c4dead6a90c187655669ed844698ed912f83a049efe2d84d879992b753fcf0c90e29e2738bd116858831a3f0fcad5e0960881850a69756c0a11f1a5444619c054c231160428a48e6359ef730677c85327599ab915bbb75c3eb32989bffd1692b58f0c787a2b1a7201805ace0e87d977ce5faeb4ae7fd12ef38b8ba67c5e5bd4d68a733dc3c3031e9db8fa134b105f4a8f46b4043b2409aa82e616c3a2d2ad7a80083d518fbf1d374ed94f71dbf14741ed1cddeeabe9e747ac66b70afd4c8dd9231ee9828ec10b836890d1c7bd9175f0147211306d1857a1bb600b457877ee5d7099f524909bdb7acbb1e7a56a9bfb8b5c3a6a4529f6f20c85a3ce8225377c417cc1bd64dfbbb3e24fe8b577c5140463cf1852f369db830f2680ec36c71ec4e890601843eae9b70cb18acf4915c7585ecc59b15f2c4e445e9a7772f9f01950304e2d2fc8d6e3712cd3ea805880dcf0e0fed22c2f24daca07726d0c6a83f6125dba0b4ea45a42377e147b17bf8277e47109e6683d3688ef9b0133bea1891721246f528eb43a7781caf3eca5eae7fa41d99e2487a1c58c55f9aae8df3a54028375e3774e2e30c17ad62b0eed734b0e4a92a02a55874413a79fac051979e796fb96445b75bde21ad88a2d0629288e1f2ce9d6765ba30d4c26e6b54dcfd823559816cd64f9741c072bf8d43feea8ca09e3d8014041e7b8cf7aa45226bffd5a25c70b97f3ecb771591aae2591a69b309a82eba2fcf9267abc1c697f8a5c4ce9c6c02512ad45a4b0cf3d52c6faa1d3499bb5381ec64fbfbc04266f93e4e8f624e2e7db7cb65d26a6d14a3807b5ecc977caeef0549ec6d6d3578b77cb761938dd649c7880b2990fe46d2080897e7b1c5e41c7c46eb243d24b0e2bec047b1046561eedaeb07a7eca80a26b599c4b7ed2bab62ba6bccfde261fce46d780f074b230639e4e5de0faafbc4130915420526ec1fc98a66a5eb95dfeaa70ced669bb01ef1059b097687ea6392ead73c635f4469c7375d1a23809b7304b6a9e525a4beacb78c540c1df630b1db24cf75c853fcb67c71a3c62438cab383628ac22053e22dd13b921751ffde451a2b2e28cb944e207ae856670191123bb9458ef72006b595ebb9b439f8f45fed237fd043c8be3cff5b1020f8ff46f61fe0621da13c19f266db621f45efdd8f61d7247bce733a1ea20155e133f137fd37d18e3c3c87b370c9160c822befda5a6bf380216b7c8e8212ca138b805577bf202d0e9c7b6b78d632349f5bd163490352546425933b50b1d7d79eedd22071fb2aec4369f500ea97d12ae0087f8264ebd2e4d1a8e474548935ee7b88704c8ef7149025362ba33b8ae7d8bd442136f0d7585c80548052fea1d4f917e916c4e624611faea416b8f38208689cd0faad7fdcf7fc5479c26c7b687c020ac66cebdbc1d283025e95ecef92f2cbde08e09f9302b17ebc13fba78dca7bcf601a69e666425af52b68898df21a1ab48492b6b34954d971a67e80b9ac4bff193b03897fc74eaa4508a3850a6ef55ac67af742dc97defd2ac17f97d739eb99b87da4515b7ce0279a3b63ba9b25639122874f5aa7555b697fd1ac0a56348f1943034be290f3fff6fa849af70cd6e3e175b83031ac3613ed867ce6f0fa8c8fa6d32b7d23298ffed2557dd4677be5c1da0872f9c2284ae2c41fb84a5993b40ad5a2627a2cb22c690d206e9abb3057ebbc528af7606ee6354603bfe148f57d5e5fb701d7c7bcc59422e30a8c92ab311cbd66f6a318b4dcdebad0d312509b5ab65a46511e002cb42c8d251acc4320b1fb2feabf4671090f74ec29b570abe20589b609c73c7d07bd84dc66500327159a0ee0d4088b1eef109841d0dddd6f2579145c2f5fedeb1b6166c2da19881f75d2e95ce184974047b80816061e473d9114f7be1b7f2e247923f5e995b2edd37e68823b6834bb727ae27b03a535f859ed27cb80bf4f95d840d3f75ec57ca0dd3563030d005f4a7ea81e0c3b861417bd02efb62b48420f91844e326e030f5bf3f62a475fb6af9d4567d692ee0af3e803766c66a0e708a4166af1df64cac325cc21084dcd3d43b13c9d8e9bf1a40488e1bca7444f365fa59c57e4f5a4bbb5e2f722d78f769f1b277d5d07f7baf4d2bfeef954d1da04347eec00952e5af5309636b67795a9c2e1830f4153ebfb20e861b3444b384e26924460d9c04ec8e72c179913d3f9eb44dcb2bc4aa81282fb12c2696361d053793c079f5c69ea326ff1bcce03348b8fec04624b3886ecc2fa3670cc5f0a6c79e2a6ea26e4b68302daa5c27748175a812a2950eb4fea4b12e40a55677993990ff7a7e5ae26b07f863bf9a25671bf285522fc35568c680f166f972a7a4eff9b1323bdcc9a1ca522d73d6e3161d73b3ef5fdd523ac477906fb33a0ca92b155cca198d2b9dcb98dcf9f6722a97e83d1c08e294089ac1534fe9d74d0e098daf3144c2ae898317b10ab774bda1f1cd34eb79e3865c813dacc2f9109a842435c86fced034c6234bdb947a652aaa0467455ece9c833513fa317db3534e5483b6520272ba35f7d9dced6463249e218a4a0bed19258eb2077c20d8eb9af94f1d02e35fbf9a35544a1f1b7775ca5e89fc95b6000914c4c29f9347569a5df54e0978b04a55bca09ec6eeadc8e276fb7b43077ba436c73323d273a077c53f0d87a3956fc1da73445c5e9a55ce85a29bb26f4cb0e56ac560c37e73bc13c90fcc7450ac662cf52cdba06d706da2029748e7c979f5c1784a8413eebf2c521233cb01e7dc5ab12692e13cf354b44b751e73e78a293047e4d2222629d5a35652e7c036024ef61b0961e6127061c582e0073b739978b047fa43b2e6bf508cb1c42f3f0549e7b6645c4a2e91e41a80fa335bf1abc26f136dd55eb6bdeee54f207dd571c2456688ce663f85c78d1a9a36fc8dec4d8b1bbb3db5068c912cd6ff23defe2352a69931379ba269a6d8994ffe1d9f2c0621e20e254bf701f7c3dcd2680709a22ae88b59c88b1aca93b26f183ac97ef150e413a682a85273b6fda9d72c38c5b6b8906e1a6d7adc46e9d82efc7de337bef906731345d2aaa300db67c12d4737674d8d76c086434bfa78fd3c4e28f19960089abbae095d0ea89b799bd6eaf3f1b6f683d3a04c04b99b0cb7ae9dd590922dddfeb6d76ec334be09effcc8efd635d27895e901f1a7453178f6d9604a586e7b18980ecdbb78685e2a3a83fd703f0a1a12d73d89450ebd50cf90e41985da96c19095f4b7d0e4136f6ebe3b0866a0a520cdffbd304e6c148cd520da9efd457261404573c2870105c36f0fa5d0ea34def98c3c947e40b2d043792105f651a104b4d526065bbecc3ab30e39c15f51f0de9c95e35898dd0c45d75a7be2949f9d3af7a0d2c02e04dadb930a93f37b0632b320535061c1aab4dd41832e1f5b53948fbba8255641e1d643e15caa95bc2b775bbab83b0a2d75a92a76cfe5f3d7aa99a99d7edb5fa805ad5da43fd9fd7390aa8fad86fbf479b84323b4a5069d3b9981043b0692a117e8ccd14c7fe923d5555b0d413eaf9d9f700aa9a2aacaa3bba0612fbfa063ade4525ab5d9273ea5e51d44f3f97ab16fca1ab4504f2dd835f71e6c98e6f0e9d761b7a37b0fc4ea8e28a259738594e846a0c1323769270f83f3a9cf800a45b708e781907bd2804c45084e1d0b2bdb6e100ce07c5e7762de92588282881b4a4cfd7530c5dd88db7bf170061502fa5a91ccbd4c6829079b09f8446fa2cc726cdd3aa78eadee805b024edeb656f281ca979618021699b30cb9a47c8f91c855fc6a1ce50664cbc60388d65952267de79fcc2cdc2319ec51fa675a765174dc1a296193918bfaf1fa58bf3b32b93efa36933d2f918234f685b4dfb35b1498e97e6f6ebd8c5c91ecd9b4d4d3a36ee879690342bd1b27ead4c1389da9a8e104ec039b337c8713b7bbc88ac97fd05960b12f9c6e3010045b5d3965c6dee7babc9710e80e8c1e8f7558de06d9ccb7ad056e51d83557439f7706c1a6a249b6a3c236a1b5d531ec5328af005334bccc29c998f392c46df1cc5d887acc57fdf53984db30abb31af965f54cd542017999d60526d9cc9467a22d9f82a0c52b3d813a1bc382b33d95f3eceab51fddf776af85cae9596ea5ae898c69030166f889b1bd46f4c5b834d77ec63c2496c25c1a6094188192cb4d6bd90f35fb6cc679d418904ae7e6c6f97a34ddf45ace1702a800edfb5e894df9fead6685a55c75248567461f5461b2d3f896088c298c901b951dedf6e8b1ce9f2e2a81625bd5ef662686c6472843193a1dbd9c132412a4cdcedfbea9aa323c16f9998b2101cbf2158afd9b77d33e9c0f8d2e2a173b43c3c93ad3cbe902b4f16b37ee48981a007098b22cf96e1d6d3d574682974c688d8ab8eb1c087697a1bb06add4c73c035a7a84d24ab17e84c660612fbc162a50a34caa3527e2bd4f511fa30ce393d88de568f8b437a7cef2dcc89c1fd25ce232496b96b7508c96fc5828edf7e32cae5162f3e9372423e3791c021d58af017501f350cf3a6b17939c27485efc45b251bcc63d97a189e311363aed7ac59b83ca92ba4ebcd520f6bd42d86aef2167d8c155539cacf47dade327f6e18aa8435671e6a2246aed992e6229a8d2fadfca18cf1744629b934bb6393207f9a8beaf326a3abfc85f24bd4418f4a68a3742ed0be6d316af7ae31262d8ad8091bf9666508d12da645b9bca87ff318ab1405da4d99b2fd5c607b525638bbd1bb95cea28a6d1f86d9c092793aca5f7da1af8606454f3dac0f9fdf166328d92cd55e5add8002b8210c61fdcd9a43c9ee3a9d206e5188c26b03c86ba1224fbd48ac4e50179099f85681a9f370be495e343b0fd87b7845612b39153df2596a9a1051bcc73049c0ac7d4003298ceada8ab56b226491cb45a94b4c824537ff4cd05a0879a241c9c708f850edaeda5d9423b82cfe0d96b411c9234492543f2e845eca6cf8f30d9fba7016b226bf7b70d83fdd821765c113e8919461639ae79b7256b1e9e2c24f6a19ce8746510c8204f72c54e4823a2ccf09d835f1ee3c518de3745fc66bdd51cf7008c0e00c8169c4a66800cb414928608aa3665e0f354b81eae1541652f01166fdc57a0feadf46c5c2bc98f247bac15eb1cf269ed93bc3665abbc951f8e80fa1962f5f7ac3b35e6b77e47bc1c9a3060f0837e8900de99fd0a4db4a6096f689f33a3868b863e8c976b05e8979071660ae5e05d6abe1e0d4c4db5c5feed6bd4e440e941d52b24859338838ffa1d4f142d69964785d6cc3b1bf5405f47329690c47cb814b69d884f23dd3decb0704a1c01fe2c14750f8d96ab1828f72238486fdc0f8fea472e8b60230400d18a74faf32078a1efd4fc50d6ba93a630f1fd631f627bfd1386001567d6cceebd6e8d026594def314529493f64b0a7713296aa0647dece1286ad649e705d579395381bfa011c23b4ce1268aa89b68cc14d53da5498264b38667ea59ad8123921a7d93bc6836cdc77a18cbb3c10d4b44d853c01dda5c3e042355ebd92ed7b3fe8fd95a470ae450df88f44a2d1ad121dcc54fc559a4678d0df844060ead0d73fe1544c01c9e8ba2713416d78ef8d314dde66ffdc0c28d7ec3204590579b894e027685a989032b3d9fa66153dd8c5a986eb0894f4718acae422c2c685ac351c733a48c629b063eab26fa7472b992dbb882705d5517c4c6fede3257a50e2ac803723eeb31ec98a9f6e54d53450e271094197e4ebde080559a1dbdbf299a28025161ac18118eb3398550ccab37e190b7800caabb86cc5b4dd8d5150e5cb540673ba2d47ff061aa2ac107666deb1aca7c3791cd4db4be1f5307668a811f1e549f81cc599270fcd68df87c984425a8519f10444017deded1f6ef10b52a2ebc88a6a7931730f905ea8b905711c6103d5a4bf78e562d171f947872025d8cdc0381ae6ffb6cad7d0536e6285523966445d4cc81058e0138952338d528c39e0f9054588235f9e26ae5af87296014a4b01f67b737a9617dd92de8a3bc1313380bab18e037980cd70a947cc527796d0fc6409015a196006f7c272a7a43877a2cab9e34fa384ec2ad5f57ae134c2bc8c0e80605a69f719af5641b9649c161af8ec8a145483de65621b22ed8ee616c9d27fb300b0e9a910a3d50ae71c0c4c7b402256182933002179f5faef26e3311b0195910d9fdbb474878f5b86e5a65b1a495aa433fc2521a68e610b749a0eec3b51212f1ff47286b9b676b120dbd736d90705488dc212bed67f5205b3ff8a7b9ffbf838faf88bede85c7144d41e920acc897dc23aca74fb843b4edee86eaa4f4f60d221e0affbccc8f481f70a6b32d6acc7537b9afef5bed69f2d7116a770587cf0e96cdde54e0666c94c2090c7752d374663edd6c6a8631c025e74d2e972a92c2e5faa7794d755549ecfce5faf848733b03899ae020b9dc8328a3cfa02dbd255471902a14a5934fdebc8ead185f81e405db620544abb54443275627f6b09ca1a7330993fcb08161f3852d23b24ec62a9bc91a28ab026f3dfc5cd5bf557f119ce9f1af903b717fe7cdc530b2d85f200cc2b7eed63c160f5118b79bb1c219115859fa1eb71112a8b82dc273cd3f9f5fd7042d1d8684ddd09a9a6caf774812d2546f7fe572c712ba8afa757ea9e12413e42451079e6d2ea291bbb2e4ca0402568d5294d7b3615d8917d0d641a69329e8de42dce6deb5a8a41592d07bafa13ceefc2d73317492446024faa7dae668f25c1d5f123b96eb1aa6b28f8acc923de44217c26e3e44e43c36d30260469362d14cf33e0f72ed06ccad22fc0fc8e3478d070cce0ea97540b1d2b846edc2eff83a3d15f3aa174451a8fe48a8cbdb150d6d982335e21d47d7752b6755e05adc2bc66a9f2e6b6336fdd3ea9cd4f52dc2213e1ea6fdbce1ff0dbcbe4fc55068bd5d709e054cf40dfac82656ef42938a135f6891ff31b2c20878cf1cce1de59f60f635211ab9ed3238a5b73b0d87a6c0257e5b0c592ceea668ff3f52b55c9d3e5af8c4858ecbdd5f35f3ee09dc4b07dedee656fdc026f9a21702b7430dc74e9d40501c1f3ee2614a0ac30917d57b0acfdf2cfffb456454cab20b5f23eb90a919efc259a7192c0f09cc2a0aabb0100fb6ca9596fe5ae7d9c79e0ed3637bd719b53ba0eb0ee396f0f1186124202c570ea9114e7de61d9f39b8d24a5c2ec4f50094efd9af13e40756548d12475d277785a2fbf59f51539152185fcc586f54595c657895d0a253a381c6628ed9ec6dcfeabc1fb22c2d1cb80df357263e7c4555342fbbb9f0685541280387ee0b8a773b99a572c868ca0767c1610db25490700559d2a7de8913b57b7790d6747a109f2fa338fdbf9dd8ba58cd93ead5554716e6748bd2d68b77ac61024722b02222e8442eb0c1cad41307b677896b5ab5a0bd14ab195cc20da9175648deefa995bdcfe8588bc7b7b738705b760ad120a762110d51d162dd00b741cd015bddff95e295afe3796c4b374920083bfdee42897eb8ef84824e0a7b4bdf200fa08a581ac8bf6f78d4ae496e4105e185d997da7caf011adb3ee03663e4cc756e286a6c7e6466ab067e826c71add4a7f7cca54953f75355f645eef5cf44b31cf4a12d68e001528762415b79bd3b9d822aa637c7337115310ed29df8007b731f1cb51f1a710e0d87177c0fba487e0df9e6efa39d652a17841b635b4d88bf251dea8b7c1b720b76e89065b55c28e2d4d4498b02d079b8ba066342b0b24fdbce335693e5334bfbb79e88bc583c403275e5882557044d562013eb9b3dc56e2f41d8f7aa8e2cb1748a27ca942971a3ebc36470c57bc191a939785cf15ea7790a296850a9486bff5da5bbf622a7052edc91169c3feae0ad3f2bc0efd555dbe2a0ac2f993de347c5e4bebddd7d6702a43facbc4cafee7bf4df7a6e236adeb89cc0721ae7b58ddd5fb0062c0cff2deb296acb00c61048da47bf66d2e7cb4c3a3fcaee3c9450d3e19b8d2ee9b029db83e127b819ce9148af40881303b32abfc48aaa5d75ffac7c066c8fe47a3444f47110783c7ef192393b8d26a14356e7311e5990a1ad1eaf1336e87b6cf2480c4641c943946773da621d3184091bb52a72998a553e421c82f41bef8d92e4d2ff772d68e6534aca754f53081b6e366c2f4ad2ba7f040da284d7a6d82f353b9b56914e3a8c99d87541ef0b326f218fb8bd8ae418dca5710e8e874e5a4d8e3fdd08f2bfda8240880e61c9bb15c23ed4c425ddffcf8fd82c316baff0b5b5439348482f52bf187f263dee09d713b55b73d8d75d07b5f67605c60031871548bc1743ce7782e78372ed7ff6431b5df5288b8e2a195995358ccff06b5cf0f4b12c7ba8269470ac904f8dada502d4fc7ef174fb2a0b4ca22f00d23d087fcc528e3a548849be7ee45aa202759e7094a94d084b0526273da602b2c20ad01af4688d57817a9209b0ce64a87a8ca7d41d73caf3cece8b6f3c17a6dccec49672bbd9c6ddf337208f68b2b75d06c1330650f324c4c5c5bb983a5b239619aabfdb0a1c5eca725045106dcf472e684b744f5270a8b0745f0fccd8ab2be45999f303174cffc03a62bb4c83a2fc2f91b7ad9602d3f3558725d311960394bfe703a11ec1f03afbd171c3b47795dfb343c8de0a6eb8e6890dca6a1e859e89a93c43b4b0a7231f1fb6a5743435d9eecdf0c48a5f5c756294d761ac6c4e7a103f126ebc7d33ecefcd2407b0a37da5046b84c6267d3327acbdb93d72d1be713d86c01ddb2889410dc80027a997280ddeeb124c7f7bce8b38490ef34124b1ffd07cc266de17f83857061630f2dae54a46f5dd680bf52e3f683ed624464650b138562804e26aee97892bee3749f227729bd686406e3ac96a7f302a90c7b6062d5e8ca543544d15aa78aa2eb2406064bb60201c4a7c3150a9a21561efcc4d71a48a82487bc179d1d5af244af16e43ae5d036640db96799f35817cd520b104acfb10f6925425b3943bed7ed15461966d389590039c66377462eac7c6db44754e133744706cc71557fea33de73e1cad9339495e677160d88c8ed46e51362bec78d9ee4a0a1a06ca78cdeb913fc8af3c262d6bae052a72b135d932ac78d93fcb09be16d9361ee439e512259ea39bf58955e6ba2022b76c12126ec8fea2bbf4be269d71f1d74313f6dcd87093aa6a924a2fb4532d77a9411f5ac4866f6db2909cc5e6967ba2c72207324f3d8bc187449e71247d7ff86bdd8b1975be5a3cab3f3a7db631d53617bd9d1f38937d861ce53e2b0c62d1cefd4e5da70e873a2105814cacdbc3bed1c43c5521773269acd0fad6e14df46f260966ee9eddca28a33341f703bb03252280b36793499c5da61ce11109d021631dffc9c35fa60efed13a9e652f447d8b31a1be2831a0b3faf094acf52355e58d14f7d54d513a1b4d34c2a303129b47832479540a74539d1f79c118a6470aa5a65840c560fe8166088b7404b44333b9ec6e404068c79f33a177850545992124213e39c30a674e4db447bd4c576e0216203cb376f49b097bb0f3d607c844dad82d33a2297f374c2bea5262c8dc12382015d6a728ed0280a17ab4a21094eedf8c3a920b25d18bda291f5808981c7a8fab2d652af6572bb944744e06be6f9c5586a59346619e50ee0386b0f06341874bd7fc1f956260eff68db04a49c835f4f4bf186cfd094891c6ae0026bac9d88f6ae8c9787f2ef9d4a1e42e8081b210027c8fccd5d3c4d78ae0a6085e461f585d578d1ef849d443569d155a7efd485819b392a3032c7e09a57fabd4b798096c74ac46cec4b06b88c682c71d27da109fc6b2cc040ee90cf58e649481a27aa9d7cb272cdfb6c38d29b0e55c9ffab16692c0794e26bfe1f6f9940c0ebaee0cc8a5e0713fe28eeafca9a2a5fc33b5614899c2e40e94120af4976810f7a9eb03fbd9f417bb0b1ed2e46d28c2cb1a7572d1aecb4c089c15289738ad451c59c667b761fd9ab648c706d1bc7befe49feb20b2373f925c91d52b2de223f85bff3fbab382c38d50aa1d87693ff642db547e43b5d57bc649d61e84325fdd859e94ac0fcf475eb09ad204f5d226fac490964e0d2ee809e427e865c6dee08865cdf69202e183b286990e39c7c22fd74aeae748ef4c02c0dbaeea4afc401a61bb60de4243ea34c5c6b2ea73f2c2394d8f54c5ebbea4507d9a9c21b9199c400528b0c7cda7a96cffff195c37e0aafaffc3c010ae2e7a1084320b9dadd670fa00d9be1b30b6cfae7417bd12978ec36a6f78a9e99cbe705e2016018234533d645e3f97194aac0dabea61b18da837f7dd3344b0b692531b549c4c9aacf7dacdcf3513dd3fcb1350e5bc605edaa8b5b489e3ad253ac574f748b7247217cd646c2dbfb20d81bd7cbe2c630510353ccd76a20dceb98ecb7cfb7d9939e13c36d7888b874a4f599c82abecd1ce19e4f1e0fccc02ef124be3abbf8188c7388fffa93be3543a26657d7d245e079a0bf47e1f7508bf9abd235d8a189cb51a9d32a94bf91892357dd1a08f40f07be2ec28b5308d19ce32b8fc4946446942f1681cbdc243f2a8be41af15f9b52ad49afb747788e50f45ed132d6f1a220b6c008e7cb1293394fb099e85d1f722bf6d973870b8ba25a8eb6a9edb682b777788c9d223f607cc5ff888ea3dd822ccf1331f4fe0e3d8e7e15fa73ca75262a157ff58d0a823b7d5fcf3e9e5709c83f6beb5a1d3292e1cfbeb1d4caf6b8916a8f1fd07bb0871870e4447c1163faa716d3a0189149e85b45eb7950e79973009ca14e98c537d9260b729189a02b591a6e83d31d16b6cdfc2cc77ef35461cbeed8cf8d8e156013e3e4a28474b0fbe459a2e2567871f2b34afc2d77c2af909330d5efcd25fe85533424280f941a6f6fd9d653484a3d7ffb1b9488779e7364c62fd294b47d95e88b7cedf7a01be7ba2292b0a32faf25d7e9da3fa60aa8d7373260f46e334acbbcfe99e07f4ba50a972d0deed2e1ca7bac94e00a1f35b6e0dff2f6d95e1287a5e16e47a01c89386e9704df8e3780c82cf90d857f8aeaa850e4bd2d3dc919d4c55234f5dc03bd9377ca48e8108117a8a39d8c8cd5cf1eca9d9b1c328847a00b28bb64b271de6c6afdc8a098442a62c7a200ca338b7cbae8a0e771c656bfd65a118118daf57a081e0185eab53a229a9670abc7106f931b6ea89553016c0c63c3edfda45e57e5b4424012bd632d21c3ff70df317f43b8e0e383a3691c446104ad721322b4743ae61beb00625bd8e3473dd5442fda0ada4fd48317a9db31978ca5c99f4dce50aed3c08dd5c35b8cf05f27feccc99fcf219f1a5f54f2434fd9a7273903990d1facb130496e52228d7703a3980dada339afe691711391c01d7520ad8c922cd07854bdd5372cb5f14d1678802e4d998cdc62c2cb80d264d8238a930f4bf12fe5eec0dba1da2923ebb11b56171e49e9f4c86e0dbdcb53f6262ffa155f7b8dcaab1a7cc86cd4dc40a84f7352ca16a5278774b4e7facd24c196e49f2217357fa0ca03c08562aafdcccbeb184ff3f781eaee634696375c01d048cc706c87c2b4e5531e691e3085223d78f2e04408dad93319007334f835805f57b7e0323ab1772a6771f536841fc7821d62a4e135f2d25e2d93c4dd828e334bbeb0f231f75ba5334d48d67ca3887df464303987a5cda9d073f53a0385b2248da3ec13379d96e63a6ba04cb0d826a2eb90a49fa576d296d910dbbc2ba4da09aff2fb723658a69275105e1bc5f60cd74d8e256d42621ba321153d43766ab956337eaf77b7e63244ed7f9eef7292ea4f8a142056aceff960f17e0ee18e98567cef34302836277d5fd1579f97c05f9677eaa16d2d9d92df66a7a0475aa84a6ded04b28b676077422429be36ac3c37f56e41e6ad19af8d475c3cc08d66d6173ecb1a3ed3231d2e1fcbe59e8580db5c3472130d33fc5d6d131c7d2e2e82f327adb920ab562eed60160c2dda2c66581226975ccf549d6e74f1fcb7be498514842d1700d996360f0756b64c864d7128c5aaa62daabb47c5ec02caff1c32147ab47c1f94ec19eebcf570e0acb63125260cb984a3e939dd234eeca9de8a62dd2eaf17d6a2840ffbe979df66b69eeb744dc6875554a3767b8e4b171b4decd8b1ba228be34d8ad60a10998303a9a2ecaa77ab09680a2f7923811e63f99e6b27bc5a6013ef8a91d6485b0102e8d864bf4bd5263e7f0676a44f60b8a27b87c002ebbb14479662c19a0d039c7612cbdb21a25e528f884ac81a25646b19c1309143639a22b82ed42ba81308b396f6f4c0ddb61d178cb25ba367b8e4f13e157ba8c76cdaad82152b876dfa08d5cbee6397c32779ac0c859ac0bb60b1a1ab18c30f72a7b9949e54abc1e0ba10f94dbe15edec76e7a89356f032afbef6edee895c9e6287226f0809c437e90bae7fdfaa62fcf0b8c49780a4a7071df534afe86187f752072834efa43398ee6f51db2375ce24b556f207f1c922d919c6d71722942988804f56fb44dfd695a5cbf005e5957688b52d9f3f02fe66ac0255fca721f7ef0d118052f6944a5f2a8b40c45d99ed34a63fe918f633e86e4f594d2a4ef9728ebe7698a4ac988b34d889247fa8db1dd4f6c172bf2e964142d94c233a32a3ad232bb75a329104f8cebe800291d38a46e6cd17fec4096351691f2f5585dd8edec38dc6dc7cdbb201ba3453280ca5b26b37e1a0b96b6a3d72f8beae226f6b20c6e03eab50068b819feeb1fabe2de347ef013e51897ed592bc77078c4a0ce3dd700f339d17345d4d38a6c7b2d9bdcccebc8b2a32a16ec3d794956439e7310009d9c653cb321438728fc48a4290f41049bc5d7ddfd69cfa920a519d2099c4f33c43ee216dbd3e7e2ae9ce24677f69862020f925a4f6437e86885d2f23c4c4a6c9506ea8a63d5aee49438d0f29575b7fd4f890bd829e28f0de13f7e7891f5a2283345d913fa9a3534157e2dcb85f9658b783e45ca6249d904eea01fd6dbe06f902cf47c1593171cf8275f5926d304ab73f97b6e8a1c4c9caaf78d32dc38b6ac7bddf0b587ec870d668ae1dc2b4c77addd5d77a2ae1b6bab5f416b4b91944d95eb432e8c6ef1c4583e62f1f4e93cc3c70bf9282a4f390ae49724aa6f963434cd4dbba849ed838fe4400b1a25d5e572abb210ee91781d1f800a87148293beb8c0475de50d9a9eff3981ccf4f149c399a759e5ffdee5d65115777965abbc6b94c6a9cdc2191b4e2b980192977b2c2b1db175083d0759db7d9ce79426ca093cb335d10cc86ce305d6dd90a91477149e4e94ad18ed7818a43455a81811f95abae42d063b5d27698912ec6a3aa3aaccdada58a5fdd7bdae9df61f1f985e28755eefc8f1475755d028448067234290a2ad547e1217b5e6a17cff0140d835f822b43dcfcf9c56b55b17423a527c11213bf543e7e7d374027b37c43c3eca4b353fd27427fb3b44864504e11554ee138cbc901109482a6ce939bfc997accb6164a6394ac0867ed5fb248a126cb2289dab1f2c9f792eebb42ada847e1150ceb92986de75d55a764f7499ab55051450623d5f110cf46ab20ca75c65c55c33e98a43532d18c8facdf7c464dd22bcd0ab48c2557c73a7353a5a3b4044b7715c53d23c03065131ddab1c67c90b863872fc83f880df1dd6622314478fe5155268bb319f673665581683ec94126cedbcb29d12f65089d3a011cbeb9a507d7602483e7d55becfc91cdc0e0a8025b854fdb0c55efdf5a5903718788833da995e4c3a4ccb68a7324d5662e11f5b2237524e4ab7834eff05312d4b29376d40b46bc65c8857c0ee332cb623d1e4a068fc88796eaf579c6294e4e2ab58c860f35282627e428dbd20b1c504c15948ac369730978c4f5686da21839923113fbe4452eb9c4b2a4edc1b5c17a295a6f26a5b252ff98577d14e23025e356da843e3c4bf63d81e6d26c0abc59eb48a51038ab074c73cda44da9fdd7e6f0f3e7e9bd001112d305a62633048e8d168f8ca03ca701f8c23d398e3ac44d8079bc8f2b5fbfc7abe444299751fb293658f1aa80e56d7e53906a574458e62ec75556a8456d191197b76fd01d4afbc8c1f74a3d81b9e704b3d70752cdeb5e29a2007d93456d45e02742f978db33cd59d5c036e33662e93b7459f12b3038fd5325d9348a77f82e33640f236b3639c3dfa156b5d5c29777c13dec7411de02cd899fc5f724b21c907295d3ab07dc97179c204437cf6e18e4e2da41a2edd894e79597d4554dc74d7ac2f01c7931e9195188d3c3310cc957f0906eb12d257ffbe29243f3c3aacab0fab1ced645be60ff662130f789c9fce29653786cbb66b6b371b6df87121e49bfcde26afa4d1926d63dbeff8f17363e79a56e3c4c8066a2868541679de338a98b01dd38d759e3adbe4845f2aa9de83849a2ef160c424a712de6915600250e474ddd0284567f4db6f0137b113b942680aa2493ad6c0ff75f6298e97c42a941a669bba16ed40bc9cc19a75d9f5fbef8e9d22db3be81dab191100340b5940e837dfcfbbbca69de21873945e5d500856ecc281c55644fa95d196d1b194e5e2f4ef2f13d670cff3e6bbbdf30ba4f61931f27571e82e5475b8f1637795d7e1707bdcd29a3f0917f6d086941ae6626fe78cbdd4f9c59022c27664517c7bf6e0446cd5a106f98e1ab170f5e6955fe6c3736721fc93a31881bc371a2020b1e5740c3927cf37dde071759f5bc5b1ee1de6dd324ea2f4ff85b1051215b75cc30e7b7876cda1d77fef40256a705394801ee4a5403386dae6ed6f142b09d069eaf1e46f15f87ff0e6897d005af2f277257f023dd5cc49e90feab27daab2d2872e4ace33ee71529e1d8303f744fee3f7e2460304177f0ff79b6b26d8f58c15dcbea75263d45ba5cb6e9811422f76db84f390527ce583d2aaf9d26c943622125202ddad7d9b4f926764beb8a293839e0d43633141c296d43f3dd38dbda47b205df7346db70fbcf5ebf7e7a8a90f5b90b64e0cadf058851a90f101eba49480e79a141833777f2fcb36eec80b8cefba38192e27a56ee6b4c414212e78bd1708dcbc9f741a04bd41c0d640f65cf57a1a4d1000fe1b34fe40dfeebba5bdb7641ef9d3764c2a418eb429ec9a5ce43c2a30b4fd1e9033351ec5fb27191daf23ebcec086333269a4907d03b7c1411150d2b45e818e0ca0d9bf8e2adde83f21e1b6984250e2bff70956e5ecb5f4bb363c13f4e9d8bd45827c8d093b97a4a41c3f7fa52796fce7d02cb25d377570950dc5ae27e3db659bd1fe5ba733f39019d2a8d4c6af20cb48da86a4e8a8a9b3bba2b622b04d0b8e88319fca9b4f6b8f68f4acdbc1541df1ea7c77b97c3884ddd497af20437423565749a7403bd694c3bceebfbf69fdecc946e1ba45787eda5b961b5653df3bf0c00a5e4c0c660aabc23ade26740bcf73bd9a31ffcad5f80badc0f9727df888a611dffa40810b6d22baaf2eaa238e41152e9ff656af4c72d12cf151765a71161906430c81c76ad741246798d3bdc60233cf0464dcfca73e6c0b38d1e04a89a089c2513a9fe35a883fca7320433ba0d05716a1f2c547d1da553b9e3724664b59b066f871dd443e5085e371f9bd47ac02ae2da2f6b40f901458d103baf1be2f6c24416d297757f6d2dbc77efb3ccb2a3429fdc984de2cc4d2ea182890363fedd7d3111740c5b5b58491cc516f9ba5eb2b93948c916b313ac366c2cc5eb129c922487b1224945bd5b8fb36e462034a7950cf12ef6dfac2cc06033333534ccb3d38060de1296f67d295254def8c0b47dbf2776680f12f5a16c4a2adca67e4d58d9a5e21b91a97b0b6c7c40677fadf0dfdf48e1036331e76ce9e81f7063d7b575e8cb1d80c5ce1f41accc174916035d75d89582f76a0e5b6dcdee23f83c375d7a3451bf7281ebbbe03fa13b670a2e8e09bcbd738eee022fd6da656dc245d9b3dd508c273ed3cfa224422f86c63c3180c47c5d9b9b911cac0edce7482ec7681c2a0784945f73cbbe3d3b730ccb8dd2bf436c8db79dda1a59e327af6e987f5a7a31ed86eec8833cf2ba5952e1f154672ba29f5221b11e6a766597cdeedd0d26d286db12a6e461f9f17eec0aa5554792196d73edf607b72c49c30ce35fbc81868aa6d83dbe70194705994a139d000d60d2d800af9633a1c33fedccc16fe24eeeba242bbfbb40c0fdaefd7bc0ea6df0ef2ff734906d3562bd7cbfcb3635e17e8d223427b35ae3450fae0b116fc8d871c87ae6643e619202285cdb2d518fe6a53033413fbb675155f013765d87e406e68f5ef7e7dc9f6e01d93b0d751c8c2a6641ab3145d6c964d85598327e1fcc3f0de50f507ef8be37acbe17897167aa5012c1c2760cdc656b122788f707ca1fc3dde32f575d213650b84093b8f99c8cee7f5916e2def32a85263dbc48a3af35232c5306e8c1b1f5a9b72480d43a810d840ebd831f52c94dae2ce530ce697747a95096e0945621fb21017dc0d95f871f35ffcc015f699b8d7294e3155178e878a45ed7e2e3dbbdfb6fa99b04ee224459ce9d32db1a754e7e6f5d271873310f57f163a75b4556eaa3075a4a23d56fe57b27c0b356329693f98f444a3ff888d51b3d661681878bcd1256daea104d2abb7546f219fb972905d8f4ab7940b562a35153417822fa900ea7dd449dff414eaf9db330146fe3f81d84115652090554c9c6bd924c0a0e0551769c614c7edb60cc1b522c20c925fd35374a2c323ec7493b376e9f3a252d8bc55bc9e689830ef5c09d4930302d1233c422dc8d4acc16afebc66ba429d38e0b242ce1bc0b40ffb0b0c8f7a2644ee4b954c0405e6530ae18fb653d6db06f092863955ca6af36b5dd3f2548e5573b457939fdbd54d502ee92b6288912223b28923598ee3e860e109fc288e9922ff91bff6a74a8341738dba8d7aaf08dfcd73e0444b5722c7d93059095317ae49da943a22bce81b07bb6fbbfe6d70196e5aeeafde0bd0ab6622891455b243ffed9971a8fbfb708641546754c0cb53c9bc4c181b9adfb65223ad381dfc3381939e3ea5a3df38586de063b29e04dc8540f26b38420f2e249a6662ef3a683a76388f6a8a743b2999d12b591b94e241ac71d9ea685fb9c11600960e5d506083b67c50ec3c51b9e9ebe37fe1d4e5eef4401b93f55ddd2ace3b0a89a6ec266e26f16efbd1a3ed5ef807599bd3ea34e6ae69f71f52e648914b88a30e0ec1a0d6a54bced421db0661a96e951b82ee0291713cf62448c1a3f0a10e1381db86f3cc1fb8e22c682e3d9ab59ae345918778d06aa5499d041c7c5cbdb833b729cba58b271ea4eeb4d0c92c8a6d111cdebd55faa2ec309b0c8e1152f86842e10e0d0023c1cbe945ced15d4081215c70320f389584cfe91896c42cd3b271e813aac622564e72330dd7931571eb94d5c9d7e2ee5888405d10a15fd4161357f82a5cb7e7daa553a5bcb503970de674055716620deebbf0c55f8fd52f14d931aba67efb363d4aae303eb05015d1cbe58cd51b0ac97eec8b1836b16edf31e78fef3d4f9ce3db53f999b63dd8e6b6a0be8f70843f79c4030f6991659f1600e50cf05d938421a9e3df7ff7bd974dfbf514b4a8144d3aab0902bdf5df89dd057f61052a7bf8b488111b244fa8b82722ea6848cdf8445788dffc6c0f1ca83eb3309dfa85c41d741b5decd3296fd9f864967114fba8591b2979e7a9d098d777c7e95031e70348b99bef6c52ce533fc20ff0dba399a4d4d45899f9139cf9900952bcf7e02b76993bb002bc0e108d8e62e823ebd82d29244cc8ad663dd4a095ece55857eeb48f684233e537cea1ff7253b5658becec5c54549bbeb556a16a12ab6ebfc3b16b7f0f737639abe792a0417c3554f562a66734b00f75b8e47368e87e4828d827f4f7d9d14f07a610cc0238df19a08a306849b2011129d139ffd03b347c4d38c94a72bca96c6ceafa6dc4a36740fb05908b912c95bd0149033a36617bb36a83f1d825b3129dab3f8283d96c6e5709efcbef507a814d1ad75b66804f3c78647fa25b968d616bed405947a6fdc191a50c311920d9ecd61e206bd273ed5cb512be44df2e9f6e9e25dab491a75e83899d0bb2ffb1944b719a969f85351580316a209e00b278b37915fed71a1324fab70056a8509335faaf347b500e97c2cba16cbe1dad04ac9774170fcc5dafbaf29a1a5a299341399be0e9da37d899297bae072045d1d27961f86267cd0ab2a230581da800d68ae3ed8b3e856079f36491220e797e5a6528878ec936385dd1f3a57192e1994f98b122da05dc4844c9153d08008c453549c2fdd2f46880c295c2acd73cf03251f667df6de6aad485bfffbabc4cdae76db8463dba58f071ea015e7d6dce4e70e0ba61ffb9296389c4cc582b864d37ff50ecf24235c6ea44ce709cacbf234e4043b98440544cd523ca01048f09f84e33d6fa9927738d1df5d8868392638d8e80f2e6910b121fc779c9a4a0e1e0f2605d4aea951bcb7ecb2d8d30a272226242d9a0b313c8210150fc8f3385584d1d1d6692cd535cd2b26f7e55a1a1f502071a9875a01b8ae5ff2085c6b6da131a5dbd9190a0dc44a0bf24c0fbce10f615270f62a0adac2e39d8d7171f39feb603e76a0e34a9afe9e74b02a7f35d41f9159790093779d4b5c1557962920d8068761b30f42131d0d6d907ee01902a2762e910aef2a953e66f10d366370853e3b64a58f13109a836166451a94c07964507cd23609b6fe03a5ef9adb7e375a0488055cabe96afebd4e0303d09aee81bc77db17185db08a44052e1c67afe2cbcc99f3d6296244e312d703847e504537aa98260b81ee360ccc8d0b39e3ac6d75213bdeedda655602d7178d122dd666fe9f55c8ee5d40fbe8e7d249b9dc4feb0a662e85e20f5eedb3aa064e3eefa319678de1ab9016f34d0117b9c0320404a7e5fa1a76df103e9d24b5be93f4d8a3e3439213a241362d02bb12145180146109a5da41d4b5d7ca702586f905616e1e892001f2f501a29e008fff8d82efc1ea811dcb904c8a3620a4366d3d9e3a2bc765ba8be7da12bc68d0d3ac26eef81bfbf058f8d43051b6c9c54fed5bd1b896ba50cfc24029705d1924a9107a4ed51e895092a74ca40c8fd7d2450f58d3c322287029b859abe7d6ee4951145464adac0a5b148f8fa91dca120cf636e76de46ecf986e24d0de8dabd9a64d4488bccab7ecf4ee10edac0d6fd189aef541f5a3d7daa279abf391c4d7e151d4083be64b2917d6d456a3ec89d1a3aa9a820747e02ac855603a148446809ab60b210c8941bda4512fef11849d1b49bc49f29f23f980a16a86a2787bb28758e560e856ddf747ae7c12235c79305b2b8a88d78cb6b07b57eec7e17ec1389eda6dc0905bd8d328e291e3c31a3e70fcd27da0e3509b653c7015984e1adf11a55a6fd22623c6abdb0a32fb2e3cc65700319820e9b31aafb2f14891fc0bb62025821e6da1508dc42895ddc1e7471df9953ab4e1eac32ce045438196a0721e2331bd915a39374595976c04a886c1ef197a265b64c2e0219f809bb13e35db271e06152a94a63c132c1d9f3ecdf85b845036148dff950911da8d545b6e51d6e190a92065fce28b630396a7194343b18a791c4fc42a6301b6b8c54c209e05fbd79a390bb5aa3326fca8b6d176ea713f6e082f143d97a56b65ce7ba3dd9dc4b34fde5f83c6a3cdcaea517dbd46a96964a8432147898f84047fdd772dc42b2b49de3705516a5f05370f5fbf67af997c0756708f055ae167ffd827fc293febedcd33fa42949b5a7e5ce6088ba3d128e6c9832a0a59054faf7e285a47790db566ed6ada621cb03d1a4b9d3e414ee99491a71ef620ed41028f58bf055b5488749d5b13956b9ee08abf553ee167c7de35a84c6470ffec696f9eeb25dd032befcc4861b4d31a9307aff3476ed693dd9980575ac4f21a742f81e0f6d7065104930ebdcd3ef07a25415890067b0bf822fc4538504f2c0b24f267c4acfe8511fe712ee53e0776d6749612629332deaae4fc157c653bb0b4130df96cfce7d9f2a5c2efcc27d3fa37f22e876e5aa30eba36b25e75dcf9268c35e40471f0c12adc4b6c7c8678f2d56ed0ef14570c2ca569b4ad09c8a49c34b2eeb2a37a078aa4d58084da0faacec819b1d1cc9dee4c2347cae5c282b966922db9153089b05d02b86f5eb3646c890a3286f0939a005d4be8957dc3a26efa00b85dd82dd3d5993bdb73f440eb5a8300c85068366c6e3b8a5d3a70d691ed5c0832d1a7b1df94fd1862805c80919d359259d9ae188156ffce7a39f0781673aa15bdefd4cb92abfc2cd60ccd24514658fc9893d19cfff5324f1031ef7c546cb98159a988daffde1bd711b0d2eade247fafb30ea6a77a7e6423c4f35f8ec5601edce338e61001e64cd865096888ebbcf262e0fcb2d836f89c99f6b90632847b874e4f6886c0bf36fb2923a976facdc5d45fe10ff1377ff9faef1ad6de37db94ef70243ef6761620af75c3fdd2a4297029d9ca4bcd8706505f519cd0f7727a5dd7466ad126ed6a49a6add32a2662e6d9ab1b3e1de19927bb6e024d13a2831884ed717efaea0e912cae6864a8e950981573fd74fffe08d596e6783b755a9a7fd966cb74931082f05db93ef1c75e61f2dc6e2cd2c9e3cbf36be74dc24c9e07a3cc08140d158504b6a0b38674275dacdce04cc237884ff040d007cb4c2482682ea77c3a7e5fae83ae498a3320bdeb659785b01ff92fa850630bb031fe3e308b973cc6b38d53e27f98a806b81e3acc7e15c4ea832bb42bf4b56cef2a5427e2c311d7c75d069b5b8a435cf80971c79b2d878d9144cc6ef0dc44adc1367343560428c1a23844b7cdf8754864d04b3908785c3497fab73dacd204340cc6331b6a868f947c5039ae20f5d52669c3fb00ea654a4a5edbe0833d5d15f238e28b8745d55791e8b266280f89180cfe0791470113f8fc4c19280443f0176cad77fa78893f882a11926d0f6b2a865ada69db405a9de181d3ea26d8c42cea98ea5342f3cc0e294f8887d03942ddf77114e708774fad7b0c430e798d007b1e794f46116eeab455f933253740f7463dbef4c6367e6ce76f368cb361b9353f95b11b76d3e257ad6b0b0da8f5c99569c64b7c7f9c147954e84cd27b662e64ec2d31782782a44268b600a407d0ef5cfee658f001cbeaa833d705d76fde47ec54b1bf7b87cca8217cd6109d6887a5aca53c33609c5fd7ce2461f3ca4abdb20041f58362384293e2de082973af14179ccaaca40e7d12f6f5fe9fd859b1d51b97ff111d1d0454dbe629ee9c517a7527d6f40eeff0d8a53d2d3b796a7b35067b0f649709d9696515fa9ce0cd869f67d73e780eeb37a5a8536384e43a904d513a4dea186fdf340845adf6fd39d71c9247ebaa44dd7024050e223e2ecd3913cda308abc6022e0e546f573dcea2b54f07608c9ae5b926de0e8d543fa9aff4ffe78a68295e038cc029d269c8926ff969747f1cdf684ef5f1e8777d5f0b68455623344d7f66737f575cbe0255ba475c581971b01133a35e2a173122eafd9fe14e361e1e955047239624e3e5a4207b3d781034ec395d353fc7a64b86ea03c5e6b8aaf7f33b05e07ba613cdea7137cd8172af9fc125157818fcfa9fd0a461b51c53799b4d4856de3a824aa8c686fc9db88c13921ae4b062d6e533297054088ae6321d0e31eb9a6544d8c7bdb8ffe0634c502fc93c365979bec336fae5fe0fec09adf97e1a25a33f6e4235d0967549f23030da9c08d6c54fc8e49a8688e4641119d81042d5602e64b0e4d360c831b0819a251431846dd82f342fbf2a18c5338542cf09a03a7f3bbb5594056f105b259b56615f941b5805ecec66469368121b18cda4bb9a2b12f8dc33660ad14ff995999933e53103e03f245b318b15a31b5440d7b75c4a6d4a1e98dd5e378c7712c426e1abc6ef676de3c1311b466b7f9129e817ba44217e35f9871bb54f67b9eb7fd99ad85f0a14ee36b6e63048754bedb42941042d8f08f3e935f92a96975b11e270d0f326ed2be2cca0ae33ecca453a78aabaf506ee4eadf18f0366ae4c232c57752928dc1aa3889265b1a6f9fa7f9f574aa85c6dd47546c8f71b080461bd177146c87d4cb3d0fe889481472b218671d053c3bc3f0aa1e8a38c762fffa2f995971617ed874aa5f08ed7ae4e68a2ac17a8d882e1e6e1287390502e8673f7b87cb45cdeb1524372bdc642d393002b535a94e50d32a25905fab60af61346503bf225b28b2875e494a9442dd8d3e7316fa9e6751178b81524517aa58ee52b54473531e732935f31bf88178dbf67c4ff57d2a5ea5d208e238ea9d6bb2e67fdf2c8219ba8936fe1e4f874fd95bbd1f4614564ccb9c69375d57982eacbdeb052ce9b5ae2c22ddc89936d6158a0e5772a802fbaffb6e7646257e97c516610d389e757088e5a623d9e339d96351be6435ad950f578a4bd4de798d7244d5ca1fa703679e682edc38cb1be92af3a5e7a3f8975d803076ba5c4c1f5e063507b37779021069045e3fc888d11ec02296a6a97ea28526a255e44b49003b0ac2ac2847365229958f971ccb1f23adc4d25ebaba96e7b6d7f95f1df92c92759c2c67e1d5fb0ca05090cc244263a45b2e8c6ed59ddfc99ac3a29bf565b8c18d9ee5c7ca99926d6046fa452a03caf645deb301b1bdb94ec29debed8d0d03a1b7428808f0315998e0a240d829961581d6d071fda300d667e0ca263c1ed204e9e6ae3edf3cc3c869b931d1ea09fb3e43ad4be13ef0869a7bcab6e9c4b3f646e055e2b3d5c50e9d687f8999e9bdab8c29fc26239a89bc98d4cf5e155754866c6a142a9c4c33945e5b8ff2378d5224f3fba41aa9aef6eeeeaf40ada2856699cbea46ae8a578265b4817db121b8211a003e0ecba2227decf800fcf94617ffbff559e339f7f72b97f26ded27699cce33c7e5bdabd70da5049e2580ca23c028a23911b108d3d90e523dc75ddbac26877529cc2f05b9c2d7d77fb2f5fd4d6387dfc2e4336ed413eedb5926917b9e8013325d7c3b726f313bdeb80d5cc45929e3563bdd7f479b236e9e24302f59a440dbef75015516046119709a2652fb766e2c5976283f6c4d304e283c75e2cb577b77bbbd7b32e7fed89283eff75182166b8b78457bac8ddfb4fc30d56f18ea80b98fa89a2f80ef7d475530a002417a6f23215f6943617e2e0bbd8450f775a97bb7fefbf9d11fc467af050605aaf1ac2972038465a4ebcf7e05f08ac22de18633ebbabac70d5385ec370fb1bfdd6b061d7bfe424e332bd50a916fb72e9e03346936a9194508d327a926b04a8bfb7ff1f03897439a05f6635288a4c9e435a1b6da3c132e311dccd3035142d36435fb2080e624db4375529173ff5b6c0a6e67f84a4e8b2ad2e774d2d4a2e8370e3ab0a434ee4b1c2f1012830ff5106af6f1277a36989650abc3e3d510c182f7595c8c580a354888bb7dbe4cf05cbfd4ab44a6f465ce1a76c5c1f65e42783e7db307e96d092bf82c97db409680a4171f155814ffcdc6b2598090dc1b58e3619ea76ae5a91e5ee4f586c03f252e97cd49f0a470af908169876c269b6216c276a0e0806f65b56d17a1584eb61553489f377a02503aa0c7bddb89ee6c37bc255f28726929a253b7ee0e7a389d3e13a9beaa3fd9cd74f6d8371f333232a942506961d3f2e602e1617dc12ff6289428619ea73f11b5a00d5cbd43afafa7292db04d67efb7a0ed4db52a14a830a84d9974f8832aff6ef01d2a3b6fb82e9e6269bd1e15aa3c3ef76288e4a96d77b0cd4b28ab55c77703c6aad901221fabe5e207af8339699cd98d47a58aabe2026d54138e07b4ca94024d04b8c61da782da6cc8c6f32374d71d663807127dacf7a50977cb2be92a4bb5622fb38d0e3e1dce88330320fb38c04e7dedd6eac4ca257514f4f9c9c5e502579bcfcb146c681219c5ce003d457c254a12ab96563c52a84b906981f7bff228cde2cb3877ca8f7a9fc1274c258cbfb442a83428f729203f946445fd96c54cfa065a4598e14097408ccb57760af655fa2853036fab7bd912951517490df8a8254eaf70808ce81312d192967b9b0f2c38ef050e24fbbb31f590bbda39f4c2b79c27a9fac823339ade5de0d1cbb3d6a96cfdf29abe84d3db778302f5243b62dddce80891f7f3853bf40ed033a379a3fd5322e7cd7be78b0f565117ea3be100a6126811b1496627bbd84dbfa0308844505d36939c23ba852da18699daaf0604703d3fc3b715a6414036badf9bbb53102d486e7f4cfc8c16f62378e4761894be1c3b84954a922e4fb2e9ec05cbe4c87b9c6d71e6ca745d354ad402426a9055a03f21c34941fa6e33396db1bb90e45e366a7b4b42106f3dedc21a242f99694c0298835edba3eac5c0e60a68058698482e21829b03e0250627fdb7896da5e66f61dde2b8e81b0bd41144a0b548413432a320d937ee8805fcb343c2c1f592127613c179c8efaf41ebbc9298225bafe9024dd6e005d635d71634fecc29ca9e45610bee3c557895d18e207aed7d3b64894969d7e050fa287fd688dc50acb238002a35c4ecee1b8411193fb36967da6805cea83924beaea189dd1f48d0efa699fdbdd3100a6251322d59f1ec76b002a956003ae9a77f1976bd0273df4af1b062c9501593fa08d489dde2573900311f1e565dd52781225614587fa3462351b83048be72a5e23bd0c106629cc62eab404b24059d225153b4e70e43d54f20dfcb8604ec4ea8d10b6eb4178c2fb9cb5641add350e8e91142ca75ec677344a4436fbd368de79cd99896480f1f45bc2601bc31cbde272e7bacb652049f742af13dbb1e261791846eba72fddaeb838a845a9b9ba2a84e3405664eb5550cf292d3f0e955c9b1d27d82aec20bd6ff6c3f253f9dde09f26fabf54280280b8157749dbd30e706445fc69711a5b855511347bb1883bc91b2cd772c1f81acf126e0d9f06b841abdd8c24a1d9df56e19901714f287ad1667ed54a9a77e1a1dae1b6ca02a2ec0a8d38ab4a52ccbddc4026e1af58329db5dec62d348003199da4caf7806bf2ca57f3edcccfc029bb195f447383d68d9eadd24f2266cc91eb7cf16287a438c6243d15c7efc7709c61ec136bb9127bdbbefd4d757ba9cb24e088a34cdcdba0c05b3049195cdf8e7668e98ce2a1468169f65b630611f5f973a42d90d3486ad23b950dea215d2bae04ffa21184d03addaf1be9e0ab8e856880b38ffed56c9bf59297f2a09a0a64fc54c05798cbe539baa71ac9576dbd366a75a16b409e14e1c191000163d28c0085213a04e0235edd961e82adcb4a15374afced8cebc28f8f72a6c600ca89be35f0e3f502185642aeacf826ba3d163c760b6b8c48bb30630a0b7109f6950cf42c743efe0fbc64c4e28d6294c0e7ab75942c82a74a8092282801e324302f7b6a430079551651ca8fb43acc698c63c588ce87f90aadb3730f6bac02c5d9b616e06cca2408f23f060e6764da35d4dc178df037779dd3db3e20f0b1308bdda7844247bf1d61c6d03296cf866bdfbaa7aa8ed70bc574e77ce0dae255eaa076733aa32d1f6206832449f21383ce0158759f8677a8841bdc827f149c3d42557c227632ef6956889f49563d007632ef93a789e180b00354a86b2d76a13016b03dd065a58e7cb36bb24533b97d8f548aa1ee54023b85598147d5b4b095cab05032c4450ac91f8c478a5e0759b11b0664a1a0f884fce21d82d4fe38760681f9a19d39de4a3cfc3b3f0403a524e8328fac0e37a7311d9049016231e70a3fc57532bb7ca19e8a7dd89e972de15aa84c64a8f126c1f2dad5a4706c74fe5174344cd3387fc7ab2764a91245d16917f46585af143b3371dc0c74ca5ab4e85567f431c05cd0aaf862dcb6d29d6ee562949d8f556034cb39901941f226833013885b00bd128f97ca8cd259afd64ab2e623307ad9f350fe703077ae25f67e565bccaf5f214230fbe8db15fc1102b0012d849a4678e82074d1b60204f47989f46e21fea22ea3ad299eaeb469956b4ce39a160f591df0f9ba1902a76d84d03cff91f87450b57ea9ffacf61c9d3844d6694d6cad27ac07e08114d45eee3d59661cd534696b6c310365984644e99e6db73a01284dcca73965ff448e40a4e8cf72e55e65792b3f5c312813874038f58cc4ecc31b899db2f928e04f9ace9d43a40283efb037ef3396819d3ecc58c463b84773e102441fb003318e24a6fac3d18fa3c36e4226375399e3e1e0edbe1d8a8b1e8a478fa0797daefa58859881cb756d4dd1b55cf5c80519fb037eda5f50ee679dd04452f1ecc30f13939002c290b9ad146de9762599cd86873c11edc7079d1f5e5c7e6135c1eebd9a337d6400e00fc174a5410fdfaf31303dc4cd553c2fa051aaf3b8fa5edcd2ece69663593d3c46618aa5a142dec1e89211644b77773fb7acb3d67b1414257ef0f60fe078605d6781b25ec2e5ad21b92818de6d33c5211052482c19813b18a5bb1488dde596a15a7ac7cdb27a5199a3c5bf5709a40d02c6a1e3a7e9ec61e450ac254fd445871552700355552ed749738bd2be53ed541f2dcdd2a9c52ccc586cbfc2181684e8497c5280e9b0e30f01bc06addec048caaa52564f20e441b8986f1c01e7d8a4680b13bfad817a7e4e4f50efbb77b72f117aaebd0e91b5da525fc762dfcc3e47b5978e5bf072be54d1e6cd58d547f40d2b230cf48a1510a12d5882beac1ba8bec570ce5b9e71a1a0582da28e7c79d01b3b3aa59c5dec6d7375bfa07254c544c3d419f7c206e0695a1394a34be0e71a80aa09c1de33e05e7c2a454891d56fb2502d79559d041c3897bd3e5eee489215eca64465767307a9d723b5b78ffcd1de57996f911b8b59bd1ba5e2d2b0ad666996e862a1f2247cc36339b3e1717899f071508984206f24040b0427a97dc76709a673e</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-wave">      <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-wave">密码为我本科阶段所在院校中我参与的信息安全社团所属上级社团的拼音（不使用拼音符号，共13个字符）。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">第六届“蓝帽杯”全国大学生网络安全技能大赛 初赛 电子取证部分。</summary>
    
    
    
    
    <category term="复现" scheme="https://www.gh.zhangkaixin.cc/tags/%E5%A4%8D%E7%8E%B0/"/>
    
  </entry>
  
  <entry>
    <title>撰解 CPPUISA 2022年暑假第一次作业</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-isa2022shm1/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-isa2022shm1/</id>
    <published>2022-07-01T04:31:31.000Z</published>
    <updated>2023-10-14T12:11:57.414Z</updated>
    
    <content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉，您的输入不正确。" data-whm="抱歉，您所填写的内容与哈希校验不符，但你仍可查看此文。">  <script id="hbeData" type="hbeData" data-hmacdigest="d11ed99ac3834cace1f03651755159d1986a20ab06ffd88b3ad61d326833d7fc">40e65372b53142ce66afa8eee6834c5b0fb81dabf70cab732463966a4c6504d11a70220dc45fcf4b075d7b054cfce884c16b5fd9ca3c8ceed1ec705dda6919149cf9f41d5eb490a518bd489d890ee74283b211b7f8801bdf34bb29bca29dac9a8e9f998c53384367b2801e02bd6161041bf38c75f40daf069106e64b643bf5ee9bb16758724fff7a207027aa5e28272671701cb60521e17f080f27bfa75b6074c9a68060898748c6cf50584cf208c84fc460812c54fbd630b1c0f24c8a3bf9bcc942eb3c2d2f71691b17110f32c7a3a04e2ffe25f4fe55df6696a52071e569a1543ab4b2779b998265ce2213e779c74b1422a812f260e9aa0f47b8d92801d2969b0ad5501524d9fd8cf2961734ec6546a222670ee8d478e58ceba5b6cef5351ea70fb93ca0278b2a4f3d43d928fbadd34e486f1d9235db60960ac1e93022920b91f1afd7a7d13730375e96270412588ca4c8cf2fd8516532cb5d5c0b45339979bc87c4e69aaf687ead7575165cb1ad1b0ed523e2fa9b905fd0d8c19a5d33eb5a4acc51e91c995a413f54efed956606673a84541115226bd1f3b998985fa032a0727fe61f4bc2749cd22daf7e67082613ac9e15c67769f9075dd10ee1163031b439752e8fcf637bda5cc1061ed29f88344b79563b54c958dc9ac6cf82aa8848d962370937944f5be26856fcee29978974de0a08f12a9540abf21053513fcf4808f09bc7dfa5d604b0b7f9897fd6678e1a5d3161dee249feb69274617c5d953a3e843f583ee18d611c99c6a101638ca294ce8e1d3c2af7100fe71de7a6a1683710e6919a20307697a1ab825cbf681e934f546e3d5198ca65c1bb529a99c375104e4c4775bae7826ed22dbe303e87c929181eddb7f434cf8904503d49d6881b5ca75998bb9aa929d06b3cf4de81aa3dfd4ade7f93552fd56ecfa5d04f664d8653c21ddbdec5eed901af222ef65dad53e711d69c0c0a48943c1e1bd534d8d888e8dcefa4056f52560e1d55206898b5e9bcb31061b0f2a952839dbd7d0abdb4b763578de37e2bf3485373872981fb3b0d393db5de54c07aa9f4e7a5495c2a1baca1eeb4ab6f33c21689df72e8e889db339330c03c3ad5e444f799005b56dc58f6acc4f5444a523ae123ba21bc97a63304eec5484b8ef3cfe24fcf3401fa4a50fb03aab17ebccbcb3341965f13a6823744d492ee628f1f338fcd32af829e7adf59cf5f22bf20b0bda5a00b5cabc4ee4810ded5d6f7525382a925c02bb93def742d5f3f9ed76c51a4870769032c27b6e8d234e7bee43fc448ac52720394befbbff355fc4cbf5513cb8c7604e0bfeb589fb5d786fbb8fcb13894b96f9180759677e1d78f4ea05d9803f9f97e57cf89deec931de84a03db82ce7abf901fecf9ed3195875bc031c88b4cb0a3f337a185b3b0ba1e64f1b80fac927022665970fc7e9e4401f40de19312228eb075b3c1c7899e1d3a4e7e8ce3159e4ef658d3f4d6bc926f3c64592a56a25a9408b9959445b77114f68de2b7f8914ed426a42d4286c6de7d5f6b3018a682cca14e3d8160db34d285722393081152de2fd9d6723137a4c579cb863781e5f5fc2547be8092868594c6d327cffea047d8da105dbf1b19e0a201b9787488a98fb02bd828373dbf1489857639f587adc6887a8180ebcd98acd36e4889daedb68e5cfd4a9e3d89a7ad2feca9cbdf2e20bb59619cfb700806ac7f9d903af9c10e0ddd9e3623c8a6f7b63af04e22ef6851d4e863f178043b618b5cacf5804d9088b375b5e73d10b3b2c2eda80d9adfe3500d4b0ce43575d48c39f7292059b9abfa929c298c0cae1527404964cc0f2840be0b24eb849cd24879791986dd0db93e24b7406a212d7a61df4b746f39d5b2ef897f2c311df9151789d25a1f037cbd9f9aa570b6827cd31a04cfccc3830dc73b67feaa438f1c4cee9a1a3f73cba1ac95cd36670a215600267a26625f331d06859f8bdfdba38b50870c6b62cf286b35efb39bb23b350a05a3db52b66b7d88c1c71e6785b642516ad53704e4f1369257808c156481c6652f221f34e5059bf1daad38138345047e1d9b021169fa11965110e51af95c56ca8b0b6a1a02b17a2d8ed66735973d53fdce2c2d94fbab922bb554f604d0a000f092e6be325a388ae8bae4ec1372f715f459354bda668354cf60f0724d65e9cce063d49f1b3f45d5b2fe8dbbb056cebbdcb9a55ba7358d00d5f3a7f0a1f88db99a67b4b8211bc6e2cfbc2602483811ac0f52154ed86d1a5aebc9a63eebd094310d6ce2f74e73114c65db970a7271b90b0fccd3e90bb3cb791477cb93376d4bb0e3f4e6301130d7105a66564d013f50882a707c39c41790ed8850831e78f2ec658c6d4150fc73031137542074c7f223f94834184542023a4e31c6649f49e74a80d4db385b68fc8631e7578f3781575f8fb0cebcaf787523f078b0c4a9a43f5d3d885e125edd7f1c7c3de9776ba2bad582309f563ea63a8b0fafae90dd48400f761de29d8deaa36adc9ca13a6756e9645e986cd9bbe891fb0c3a1598ea456453a108ec36930876c7dc034e23ad4d7a874642363ca1185c327ceba98a551ef5c0446e3f9f54ba1e8be864dcaf7331767fcfbcccb95e637caeca9d4524726f1023f08b0553c24990686fab5d1cd676b1c3c5b6ff640603eeccb59814dd6933d5a711be78f1ca3e8dfa253106194def9f536beb81864f3ac0708b3acc684f00e6fd8cf0afce1ed185403ba4ce1aa87afa97cba9b1aed5ad4da3ff4cc9cc8dab18076b3d4150262e46f6e66bcd48b149e9d90e9212a600aad764bb738a7046403591ae1fbad3cbf5a359e76cc638116d2774c4d9f23b38f3a217d91d6e2749f19a08a88e27f0d13de0db8a5a8ccd9fbb667041d7fd0dfede2704d58c202110d68273e49f2defa51cc96ec84f5d9ceb16f2d565a55768b97cee4fd6b0513cfce3a5ceea4761014e889076989ded79a151d6c0c659e5f18876031aab356f68b362d2fdbc1d1e4aef0988186f780aa435dc7b196f899cfafd0246541953b5d0bbf39f1c82271669a1d2c04981920036ec228cf1f000f1ef6b6d76af5ddc22ec89fa06aa0f37f2e5b4d05ad2521c2be377610460b133c0ea0e4e3fe0e7c15d5253b0b4e3c6fada68e815d7432f88bcc7b57d7d6a3bd84e11cd9b67675bbc6fb555180617be4370927aef4ae989020e0a1b1409770e4a337e3864169d5d05b8dbc964a44c3ca64d838586bd4d011a90c94113092369d67fec5359e9d51cee48314dfa97db805909ad0fd5e883364c877ced1a5990612f365556eb7755f9e014628c21f714b36d30dbe23f69dc63c3ecd8cc8fbb7cbc73f0d8d84cd28c7a80b87644611adc8bc3f4dbecd064de18e7264c5f041f6a85b71c06c1afae79dfc96a0dc49d32f680e735fa312ce2ee25127c4b4f60b74e560ba7c0ae64b8a698c7c50b79551cf255458f644b1cec7c9ad523794f4f9c79b5230d0817f91ee8178d99f80cdecc9832216aa427f2047f2a148199ce4eeff9fd8cb57d8499010cf1e67be947518c217a0efe7c5006c724e2e5ae3ab833bc126add77eb20dc6730af7bd2356ac05d0e49d5535b7a9e0820ca81e97be28b064563edd277de704ccfb848014421f3f4e74b8a1023c7dcb9d8343345160c4b67b13e57e1d1cd28fc6c629491a91c5a52f54067f277d6e6dcea51a421c0d02753c65f3dafdbe283b2ed2f263bec29efa6e0533b141994a678bec13745a87ddf96384065c0c9c296b8b3f3ca8c3367823b0822e4a4c5929a76491934f85b57ff8feed164f8b4931df8c5bceed449c25a6e2f5134889e2027acdd88953762b58916181da36cdd985a150aeebf56a2746309da4a4330cb1c317fd766945fe6a4338fae56634a2265f23ecdd40d7e3a1f1c4a319ac6f1ac1a0c659b0267d5fadb4d255a1bc573f118a36b8fa87eb390c035762b8460cc833f1068550b39a48d6d2728fe43101855db4e4adc0b0f05426ae655094331607cc2dcc5e08e1db3cd2977fe228d441596ee81272981321270129aec870481e46247a3d224b9da29a2d1b077b31f82259ab7a60880940dcb3a06956eebc6741b439caa2dc28769e5b8b0cc4e92a9141450ee5071998c15eec3ec7751b10d7ef083325835614b39037ad00af1137163da951018034c1d86cd75eb0686af819b1fe708ab0723d0033015d2bd9d6eb4224e2b3d6f8930db538ec56369d4a54a863fd849774d8c3870a098e6a255073419b178da2df9652da047bbf7b33c875fe34bad70f8a95cc9fa7c77c8954502515bcb0192abd8404d34261c035ed8102f44a4b7619a6b0e6dee23b27227b83742f4266605c971caa0e9818fb8dd0613fe2a64f52c27d414823eb234ba533eb606dff14e4af903fe46a0ef141f9cb088d5967897ce0a0dda9703d3fbd42eda52faeadf02c6905192e457e632564a4fd4fd7296ce932a2670b68d5e1f6960c461633c33373b9aa261782deed8217631ac0fff2cb3cd6fe35435cd0edcc55d01af3719a9a361040d9c7cc863cef2f7eaefbcda9d571727bf2b65e8547677b997de204382d6917a36c2ddad5cf1448e79824ec46af7c4485736338887834ee4d812865ad7994a59a0ee627253c40a52f74b76513a52e5e23cd432abbff3af90b9a167eba9ba101eeaa92b7bf055b49b95f518b802fd4064ba86c039c605661b90f3f2f605170246678558aa7e68e8e04912e18daec313a89d3ad8c615ee45431ed1733863acbc60e5aee36f1245f076761ec94c889daedea71f808bc098a3fcaf3b484d0f6474b044a5017085f5f7c82a88bb34b58023aa72e3cab13ad73966e9cd36b2fa67acb2323cc83911c27c0feb19b574e3b9960b39db9270e74c2f0086910db86925ff90c401840027be5b8424e6693e31a98d56970ae7a2878c394cf15c3b0a4a6b6d57f2e9f2356df4767ae8e6c4842c98b12a77f3a5c2a69de9c45b6f6a5f8703b080f1acf818b9123ad81646b6a758800db708328f92ec5438f32c43222d80edb79357ede56879d6b7203fa32a5487da97dc0179fa21d0a3e81f803125dd2b6c73be86a0946dcfe8199a35896f6d273dacaa35e1fdc827da5d6be5a8f8fb9ac5a9a0897878425650b61b94038fa084c7489a8ada6316eac9c804679081f198b6c97f48ec2d6aa821cfd384170e23be0af145188065a2b00059ec4f4d3926958b8c88de129af697f2599b435ee88a71363d605af97f62f94e80d5cbc555fb99dcbea58d905f546b7fcd3cb7b4ddd8d7075815da6ec858ebfc0592b1ff61dc97f2a3a5a8f8c79e3cff70f06922efb91a6f25ce221546d7957522b4f295490cb00a73d405d3c0777084445ad973b8d1a1c30141534a837fd36d78a54b72ad72630727b56a8bffc4b5dbb287930dce24caa762791aaa59546e565589a8df9abe54b30e9ec4b3c6072aab349e4bb1d731f5c7e3a753732b24d55483b164ac79417f260c92fc3b5cb15c47aab84c1e6d00a19085c3333b16bb0d183e7f6cd3dd2dc575045b0196d6b77d5f3a1065ffe82f60ed0d53af404532d16e47b8872938ba050b05c8e6bc75499dfc6348b9a55df310818810208d514e7b934f7fd1716a970992b8d7a4774ac88b823efee95fe2789277c0a5ec627ada2416a6fb3c5b6f0d43be3a54e0307d0b4e74349e34c1877e84c24a17e3c2ec4a928cb91c920721f6c8fb4a2c8b383726476de7507b2e67077e82edafe28c8ea889da879a1714d0301f3467488d9a96962bdc03311be5212695758614dcf5ad74b7991141ca2487292e883da4b5c0d7ed76c7022e5267471cba1491006580ba4d1fcb35512a4994524e4eeaf5839e1ac1c77a1ab6e148568629cef74db90e94fe8a3377e6b07cdea72a59b9f7eaae9ed2be5ec50cbcc2d782831e13cbc62a45f60b174bbbb81d9a870b514f2bac9ea89c2186977a57f6e5148aee697145d3debd3fd42b8694a4d2da9d13a21c5e988e92e087173e2050fb184bfe4c7ff19d1b82a287a9f178bd65d500c6aca490c0af71876546b8dd346f15676073b92c5c09ad7f848282ecd79b62f72bab11dec9fa9af6a2424bab71f246137268793e3a6ec20001b972ba75797a8f4cf4d4ea0a54aeb0bbbefcd5b8b6adde4a3512bea259e3d93314e922901ad31a7bdff58722a91eafc92d8b81b0f7e2f62b58e31ab2f1115593d94882d0457c2733bda5bdfb918e0100d3065a6b799c412b20bfdaf648221b4e493098a0ad2e8ae34dd8a33886167629382286da92d26a87b3086819b94e2d4c6d618f6582788faeae99aea4b788b5a7e7b453d9e0c9c4c7647a93bb1596565a42cd343536ab9c37cf055ef06a683bec3fb2ec86005c1338d7441cd1d10ad4553001861b3f444c7f31a54924e10099824edf87f91a13be0f75888c2791c16e012b7d7db6f74752b13c021b65264338ca31c0fae34154258e1556e8c5cfff3bce5e3bb23404a975d4bd5fedc2488c0d509f7c4f705b6ee4f6385243548d0706f96d3176e8a2e00942bc17968c59a32dbaea252c0d5db82fa0a6fcc8c9142b83e763c5c8146340c4cf5af4b70b0cf012304acd161b2c587aaca2752f4da60b0a126ef200e75d4cb9356f48340fcc0a206b836865375980859ce7a90890100bd43f2ff6097c5721f97931fcac61cdd6c0be4a2f62ad58cdd97c9c8e76ffc11bf864d1fc9401b2950d16dc0d967ee206b9dfc7a401c9b8ac70ca785af37813368b3e049dca7b4ba1cb05565bb7ae33272bed5bd336cb646a32ec5878b1b9a12df1363021be715dbe49198af1d6b7949046b6fd270a8d30a79e0190e338d456d0f58e003b2917414df0be262ffb3472a46cef023223e09d6b2d32c88106af3d9594fc3cd8953a2e0d88c2aa83f86d044c7413757b021794c99598cc45a1bff4f8ea22e4c9a2c861853f030dd08dd5f2dafb27775b5ca1868f4f039519638aba8bd318824dd422dc343473c3f755e649e9b3f147f84310494812cb4e1ad274382c3b386bda501e3781c6ca83cb6a1e0984289f2ab5a442aba7313486c3cb2fe66bcf1b54570adf8573748350ec415daa1ce01b1639457398176a1f49e7de2a9d75a41f164f7bae70235499e5387e88588690a7ad9d7b92c4046ccdfc1cedf8ac2e6cdcf6a33b1f7803a2a6dea2116a945594f92dcec8449057794b094eee21f52859314ad6630bbf51afe927f5e959ab11d8ec107e7290cf4a0ad88ebc4a5069bcda0719fb9fa59e4087093c04aefb429f5ea240b88f016b8c5cae25b5bf931a3a0cd2156dd370a93e4d33938aa3bfcf74ef63edaf55f706ae61f2e12a54874b04192eff203a1aca92759cd1eb6c12fcded5da22a1b1a640f53081adfc9f35f01f71dc327bf03e63f48009a99ea4acd47ca096ac94efa5ecf824376ce2f5ecf6ea856973e97e2e211f3c33ded17b49c2779eb01234b55b20eec33e0ee85d20f154b0f4470f2d7448234be79bbef7265001325a40de460c035dfc744c59585ab5960d7987898df5907ea1478f5ef04acb3d3cb10b4c763570577b375057e9f0980aab1ea7074534a8ef5dbecb3df0f1887fa2bf0c5260603768f47d732b9ad224cbca58b2edd5373f8bcf88dfbd9bc5deb680754d0662d05e958bbc249c936e7c12d4d9a98a3b4b37600074141a7d7e7a8b32e33b41d4f9e5032afc95a378d67bb32e2e953369b7ee4bdcfa3ac103f053ad6c2bba53b6b9e74cbdc1f2eb961543b6e60c9f295fb2e23ad4696e8bfa23598aeedf2c65f197f61f7a91f0b37baff8850fc4ad9bceea886d8ba46c5e8d86fe670dc1816e93acdc331d3bf97d34dc19f8dcb95e74da2dfbd7f0ce779e5ee189a30aefe1e06367bdea9a4324b42879f78535814e4c7dd657897999b3fcac0f9e095933c7cb9928d5b386259e935a152c3437fec0049dd1e50625259affdafca580f862825fa14f5b2b5b2067f282f48cefb3a85ae20ea7bd05f0150759bf1aa66f9c2d7a8ab8d28c85656afca9444f60ce5c9fa149a4b8147b450e7a278e8cb4941eafb18ddd77d5a5acdd0efb66de51ff7518f564592cbae3a742375e88d4a87bfdca28dedba52e2aa057a71f707146f5b99e37d50819edf98a62f1643780d51821f247d6e45a57ef1965c8d8ccbe394dd8f4e1faa961ff325dd6eff1aa1f4e48492d68d3fd561d2eeca1140e8019a10935dcc9526165be226a828c81aae6cd211cc6d54ee21ffe40a806f5be8d8975584ebfa3969fe0b968094b29d1c0b2ba07f4448588b85ce191cc17177b9918ea4554e7a19078027ef355629b91a345cfe56dc7c1b11c50419faa07157d65d00798d35ba127fa6a9ccc1b56e0aecb4643c0f3dfacf7d81a1ed17449bda3de48cce3a8b008ea83211219d9b43e03c3a73cba59a8cf7fa0b788cf608e574c6527a32dd0d51415d43acaae9e07dc0276f17c63658ba221bc71470c991897d198eb339014f74fde11bb66b8a9e7477ffe580fc966a60f0ea683270a7055d6acf3d3046f00cba23165fae11e5fa1686bb10d5230c2ab181074f2ac642b4d354f644823f7d93c959b37722debe841ab00b92b8e1b677827bc57325c06e75c8feb57e04549e4f71386d4add389654761a2aee3e5aadc71724ab2965d68eaa2f3c1ec31d5f1ebdfdb581ae08a2c9ae5e709c7b08ba5ff2b87a67679ca97ab687078150bd9be951a8b0d57acfd53b393fa0f3e1e1bf54613e8fae85c12b86ebfc08bef1066f1543a82795d73d323f61d28b3d57b8aca610972288991be972e02d789f4f1075aeaf81e659a5b3d929ebbc1c6047a228b3741119428c96c6ce16cd7c84aa730dc135907b46167ee247b94b80c569c104baddf339ab9ceac63fc32a9ac32507d71b165faedf7071ba15d177e3aedbaddd8539d7afc12b65ddfb6edf502acdaba8094eb35f6e0f4eff1aea708dea538c748aadf830efb9c320648e8e923f33a6d11621ed8bcdf8645858a5e75eb740e8da4dc3c140c5611a236f380dd0183b37de79167af8749a85ecb391eb0ca806b32a788211b21e5a63d60f7b6ea17c108a7ab2eaf00645872662ba126b6bb59fc3eb25ea051ad54d7630093e3fd97a62b131d829a37315e7ca70edd43d36caf9fca4a7ee496ff02d138360aa4671a7e1aeb4b5fc593cd77a7930676859ed8ce91fbdd0066d96a14f8e1a0f41fab28580455f37698326289cf057499612dc57541d4cb0672dbc84d4dd4a171532c8da959483977cef1434471ad6f444067fd261e1fdd6be8d022071d74d200f4a3ee8edfc9d61a10257e49cd220f726ce3e60416a515e928507c16879c56453b1ceb1b7b8347ee4b5b4bfe9d77b0b01b0da153e27d366c6767f0cb2f86812ad42d3218881df06734b48907aa66db73e3c3e5b2f395cb956a3cffcb5019002d9ec0b317c42d623ccebad63bd75f64932ed2ce8e472350f64139c0dc924dc6ed8b596c56924432458f2ad07ca6e81d0ae221ba2feb4a268afabab08b747539a80a790a71674ae3a3914622ae5848ac03808d85cd42bdc8fd872da2cfbf35cd7f3ab8bca9f7fc1fde5eaad48ecd2a99411aa7738e505431dd4ee5aa2d73baac080ab7fd1832625b7d01af0b58948f0d6467e7b980b1b634bc8963793d44035fbce5e8e03cbc4905eba776ca7dd550708212333bc52729cf5f9f225ca3c2e189d7f0605f4cd60520c62aea1f6886e5bc579db2443f2e8431d54a44766e8a1b1d54f8fc83450cf4d65e8e618bd64820ecc0de25293cf75b38969d59823927a5892b73ce3e9211f44402f4973bbdf8154f8e8587556a879bba85bbac17f6c3fa69b0fb5abe120daab6c9218c5844acf217a0fc78f0b62ee784d4d50bdb11263723078e1e97bcb4816456726a48c435feac9748af78238caa8d0508b903bf44487eb8627b01993a0092d5c98ed60c23976daf6dab56984a1b77234d20ee5636001c9494ebf6a123e23e34c5649f72556b1aca65fa6ab4e9da159ed483423be0d47fcd76969ed9115a5e5d1951d752c3f4f6ab11de27f990fee3ba9af4ee3f901f195396882d0ee26882bfef4378931c7ac383462b50ce9ea3e666ea1b0bc609eb77b2a87a6667a6c39e46dade6a71f14a5ed0886c2db8a04139da28b1d10e66fc7bc55ea32e2d7d04876dbd2df91abe247f20d61537c32cd105fe6fc1c0561196630295da005c866f66eebace67bef913eafa66741a2162c66e06b6b5df09460add9cccaeb4caed1b4bf747d7cbea2f84e068917cda320ba617426ccddcb90b3d5df3c7a26cefb3c56763e26bbe541ab5e34383a87d9f83c16c7014b41ea41829e1ea156c7fed431013fa3a5a0ad90cda987dca25a3e4267b09b61103f5f80924e03c097f54d80e8d35c367403465753626fce286367cb90b3eb9522205586441410802fa250353c752c32dc028aa2bca99ba3f493dfd6ffc7b2ea4d14be1d735f1ec2b7edc3666ccb847136657f86614dd900c83348c5d41fd1e417cddcbac4aa65805cfcf58785ea35682d64fb0f450a769f57a2e0e4072d2d131d2c47423ace0e991887c40e537a3a6cdccc7005105e99ac4f4d25c7eddd585e2509748f84412595f7181535a92104037e2ff653eed3e40654efe5305503055988ba7580cb18698d31c4dc15887848a771c21f70873485bfbb924476ad800332eb17c5e9ab09f016d2ab874a961f90ea6d50e142938654e5835dd17e26d78429cd96e22834a787cab2c0250a89c046364baaea0f569ffedb3196d5aa7040963f4d1799fea2097ed95c8696e27d9138f85968f75ab4e2478809e9214ece2902d1a5b9dedf5c88026f3c7ddf6525a2546e1d1344741544b962357129fc3e0bed3d691473934a78086046521d0ce272f2866ff4a88238851acc3d0cab37d08f4e81ae9113b9e8699f5ecab14833dd19ac68bf6f7c81b6a48a09aacac89dfc18d5168ef800c8fe69c665890c7332cc373a709234882b42f1bd227ca57f964a0eec1b5a561383e9c1a045bf146e66858239064883d511f9d2c486737583369f155df61e83206338935229049987876cbeacf74620dd444d0ab62167663894391fb61cf2071682f0750b9a5247f94cd2a0e59c2d823a93efe578f5c51880ec2a3cbd8ef41088d3053e1a28c09f3c98d9ca368b0111ca11b9481fbedfd927d09d44c24311a14182fe44fe18e157fc52196430994aaf172ba1398b0f25fe73543cf25634fbe0babf6a81629f55c62edfb714a80df73d0c7b69cc9776ef0c072c6d738746715303b0a5e25e05a4f860dcf1174fc6bfb78d3a2049aa7a80cb597217f38cbd6024a40a7818908a79330fd7cc057d7c1214cd12210a62a2a529485933306d700c1e8dd48e8517c48664624bc4957a7cb249f674eeaa38d647069e03936a1c5fb7de9db08087a51e0beb6ce497daa81e60a697dea0556a664ee086aa212775cfde2a51fc8017f815d97e9cccdff2f2b67638d9b0fda71de5636befb99603d8096c203dc4f23a3bd5e72ebbf6abd8f5a3e02ad4c9947e6601ae0a496a9d17abf29da2be231a43a1b41de2f5dc66ef5fa740fc64c4a74bc907e2a502691511f3d8b8b4b03ba5f1fae39174a175ead5fa44ec08978522a5b7586f85029a92840b60b16d529c21d73fe57ce7b04f2b7999082dc105b2cd9c419253a33671227111cd870fd45a8e8d51277b61d157098062da1ba9efd519abc62e6d15444a9041dc486a396f0f90d1af2a6a533278e44e0a54850ca02f822f0f306b320d633e5bc0242d14e80c942f7b66e7ec84e15bf3e8652330966a5cf502ec05e398afe95a58b5e94ab67821803e3a0acfb5ff40d5501612e3b3f0f70b9d1a6f50d3702903ffe7ae0beb9c80d8033877d7889185e2f0ce11fedf2b00d97799d8527afc0fe1c60ef1ee60b9bff725993e4c10a83aba5f171fc9c14eb976fd04ce33ac4ea002b77b7b4bcc1e56b1578ede1b5d47359cb69d71dbb0c36ac674ddbcf6ac5f8b99c2280a2333b0e38fb850eced90d9eb91fb089c33c77128c98966c64248b9911d41381af4051fe2ab93691a174d875edb897a89d3640f6014d7812ece6d4e8f4a7a78917761858544e3bdb5e15be2da087c72479c0a028686e722e3b23a73fd983fa250d1017968118338fa4463ae64c78b1acf39cd2ed8a33fc7389f286f49a878d140fcb73d5bda6e08ed6d364fae28a0c573a1529252d050f33faee118f5238a8986346677f8bd0a7cb0d0acea0b3747d9637a44d981b39b36b34a7b0b2f54c4eb1377de11e9f366e7ed8b6a98af3e00f4a5083f6a64a7f2a56fe9f82a89bceac89ebe8658bd4f5d35087a5244c5b4f3add337c06b0a567b1f218db7f7189907cee8b3ca9c9c2f36cbf744ed10bc61e7aebaa615b0ac6e01dfb7890d732fb0c0b76ca4a588ceb3fa977547911cf4a01140f6a7de717dee8391198eb740e7ff98ce83dd549e46435acf0bf1cf0558307d7d851d703c59c37966d97efaf08ebd6b412079856759aee020753af56f0200ff03ab0ede4607a59fb1165ad394d4abe394ebe8253e0ee12e66a45b527dc3a4823c65bb96778d285ceeafba4789afabeffc7068756b07020759d0e80cc2f7f4a5869561c93f7c0042ee978297cf00a9f55a1d1c9650854b25f9732efdfcf24fcf48b1b763393d2e346ec2ef2deb568e0fc00863d301a2573f084fbede0595a44b67fc0e96fa21d448da5c8c51ab715221137c1cddacd46da240d57c4380bec60239218623043f198d9b021736add9323c6bf559e28661baf701f5b799bdf246136fc43526bf7c1147a78793b696bc553054302f7c4f05f56b0f318bb6be24af421c97a85c97e6fb379240494f54329d8cf23d9a8ae87430a5ed387f78e52cf9a90fd3dfcf672169d70a6458185477df324e18f29172422653c825f6ac423e96faf2d4a5abaa2c528fb47246233a4cdf30ffcd67aea91fd7876db1a99bc7171108e5851ab86718d92cee861742716b9a4751614531842d7172ff8ee1b286c09f1893346b6c6ed5afccb852fec222f34b7b8a6363bdfedc5704ea7bfb19a85018425cde9d13e67166a554593ce60dca5e9d72a55ba3deb3f488a899765390a193fdb840689c72ccf584d9899438a5ad411706b8105e2db3268162c4f9f60b228ad73aad076d1a4b1e9bb616c3310bd8b169c862688a500a26acb94a5ccb8aef0084ab366b7512fa81fe863a0e37bc3b20d753b6268a4d1492ffbcc1eea45037f95b3685f5c73d1b08b7cfd8dd9539aa7f5dd851257304390d28df20c55f8823457c4a8050904c8fe85fa88f4038cb9e341ccf82a4aa50374711cc9dfd5affd4e7d8285cab5bf57851be1d84ef023bca00473ea02bcb62d514aac25c3db5c9c32a4b086539575b49e889061a5e74caa65c446edf04e5e2bc6e2ba865127558ab620bff1e2a1368a2da45630dfbbec812456c02aeda54cfbbd5dee56bea68bcda5d0c2209de2af8d021eb63b0eabfa2c1745d16f5a1e18e7974eb031946e5c245ded34995d8ba63697ca368de49e68362a5185387de7af41280d750bc6b9feacd0b6e5b9c2528cd8990a2f9c8766994b6d3a5a7b2796760249642238b67c53b89426e16fae3be057b61e0889af414cb04a132a1523fc36a6c157d9960cb4ee146dfd550980491d8648c1e5db21bb674b2bdcf1b7f00ec23826e4522fd2cd7f488897190d7d6793c64beb781b9703fa1cd40e976b31ffa20f6fbff38baf4863531f2f16c6b0473691ef63474e16b9e17b9a55bcce5ffb98c880cd58bebdec899ef6f8e4b0094d8d1b11515a4eb48e86f143f33f0260fcbe9e8bc1269bee6a4b423c3dbe631ad5376cbf061df6532688168628b91ff292cea927b4265873c04deab2ed0cffecbf7bb8b6aedcee63b3951d1dcfe6b8b877b9078e9fc3b1f71b27438d2eb061f37b8063ac2851d760aea00edf89cbf87a54c181a3fa46ab3de1e37509600b7e0f576549c680e66cb9ef2f32d9caab51a3b6aea23cedfb131bc3bb2cea9a04e484590804809134be11adc9863e30156f9c56e5bdd1d2387966709fd31de998161be31281f8557ecf64bebc0a3ae5a7815b0357ccd71219f4745601e6463fc92fc6d521c572b3807dad980b301231dcd578b1aac5c1821c528b480d6ebc23c731f84831ed9b15b1c92b5a5681708270e2b64a5218bc9f0eaaa4b6e39252027b5ce803a22fa6562203d99e48664a72d1a01b5b85e8f23162f1eb405e2dfcb5d6ffcd127e44f74a94c2fb80276bc5621c9ab95f8576a7e06da51d99c33d6b6df10f922faa38e977fafecb592b758197a068149d9b627b270f5d3f408260d8e5c43c595658d631213d14a115fc205bfe038d464fa1d2750ca247b3fbe64ad4fa0cec6e6aa962d193023b7716278da40a4c1669ba5342e684664ba44c74401451cddd174fa9e53a396e583fc969b340e0c519383dfb30effd03a05284480ce319f28c315ab1b5487e854ac37e84bb4b45d83b46ad1f005be53421c830104fe8fc9ef84fb4b775407a215d9a9ca0ae283b676a5942866498296f8387990c2ea54ccbff46e2221a80239a402f5a1ae904de6b9a64c8891cbec90ebdf2ef1499b67e26219654790fc5e50fdc02ab07e6c16e1192d8568e55322b4d5a1eed8522fe4fa73c98c911373e87da5222f24c9401e01c5609a59d86bedb424d68a720c07fead9573e55c793b7759cdf4b776e03210e18ae7edc94ac90e158d8d92f8132e0e3bfd6b6423914d6e8655379bdf84ccc7f75bf83b898287ba68dd8a6ef4617a93e87d74b0ccc18264d3987ea624af437dd7a0459425ffcaf1cd7fe09d8ae8bbd5a89e7856553a985664014edf07b5eb95644e08ef2c732171671a66e000f1f7e3228eae07645227add53fe069bcd5cef63daae7ec632029cee9bf37adfb5b835e38fab5c27b4dc74c7f4ecd3295c3adcebbd91a394434f43db3e64c1730f58156e9db2d9b28861208cedb0004c3e04783717510dbbef5251013644d3ade74fd12d9759ab1763139ea371351c342d47f6780de03945a0a9b1303a879d9a5562ce75985043348e66193dea0e29cbd9595b6d78d8e512fe0ef92e06d03e394324244fcdc6a9e815bc563f86cdd36ef0fea7a30a5d9415574db74d418d450c558e186e1f92864d17eb08acd87eef9e1db99bdaf3649bfa0e08faa657be6ff8258be88962b2f8a562f2b360368d898ff339e975ca0038f87a404d591e08d48078c160f41738cc9cdba7a84089ba3370cb69052941f046cf53e7d615a3ea37dcaa2589cf0e66e376d9ad3fd443098236e2558a870b4d565c98371b30750633decffdcbf8a4dc0bb66906a7e9bbec959b9e2e2e1508d30e62d4fbd643409a0ceb634ecb800807e021204f5f0bad91e65592a92f55f0f7e0d73af3f72c5245abfe7b73d2cebcfd0085689220b37a2a147716ddc103f77b225b0b82f3e814853d58aaa2bdd8bff6a296575eb8d4dbe38e64dbc349ccc9040fcf5da529c24a704732472bea9aceee2d975d2bcc2d47ca77ee1a6e0f4c1eef962ba37aec0ab593cac0cf546e1da390b4217072d7af77e855e59aca8b95bdfc658f03cfac468a2d67dbe021f94c46559ee1fcfed84efead52f11889dbecfaea1f321f41a4d3d03255a882e30f4fada295224e9e4a947104ecd277a0bb6632026659f3b656f3080ce6773384a9f5b00e7f79219d9bbeb2c08c8718c85149900ea3f2ee4de7218168384b2567a2a6d55f9896d33c32a5b48f42029232101cbe8b98c24afeda1909edec157a5c4b634449b2776cf73182392d1ee81c1325eb623acaa59c8ec7b04eb46cbf9cb6481ae3d0f510266a63d4ae6e263082aaef966b50add717eba6c0822dd08e497be4ececc8320bacb0cb47487a5587262cabf98981790584e6fc155b5a9b167241fc402df6acaacffcf98a9b85eafeb13b2d524951942c3b2023d6bf9ba143308219fb7f6627988f6e030f9c6ed25c36ae36f076403cb3b6e3c517d11111f61abfbdbbf2489cc89ef079e774b2e3c2c8a014dbff004b01900bf7199a79ab1371364dfec9458c54d18c31506c97c95e1cd80034b0732c5e525453bc7eff6b7d71e8581cf6765d730498c58959e90086df225c55d9b1d4141a151d07bca2c7e7afd19f25215187930755af7f1175d2ebfa9f265e7af79d3b8ad8e12aed16bbfca3e003663c4601c2ee0a7326bd61bc56d2218ea63a8c59b33628ee66a68242795aa0038c20f871876bd4a40b9eaa97f91f57000a6e1a3101e5589849dbb5ba1beee9a4c487ab05a04c7896a3d20ef1b52245d97caee84b7bdde73ab71e6a10c97bb131b71bcd2bfcc22a34ab10322bdbd7902e15bd75657a957327ece1643169b50531f9120d7429deb09935f553baa0072e55ec7336ead5e2849dc89c2a875e79b194befbbd2005db349705885bdda6d39cb01beed04161cf0cf2b400c72ebb98212c6781e21e7675fa68f1e3a8a1ea325546a93b707f796ce1dfee1277a4e879e0e6a66f3bee9e5d840895ce79f56d5afc8f9a72b7a6369ca072ccb94fa34482ed68a675e68bf773646542bd2bfb9594e8d2c237ca87425f02977152e761b119681898a135692f18d7fa18568e16627fc59bc6c39153e619883e94b630c6ee004afde9f58b2dbb991451e7a8e31df056239674f9d8bd3fd8191829cddcb609b07b2ecc9b240069e3f2a0c0a07c4831c28bfdb82c128984302b73df7e20fff64d7feadfbd94ab7df09cd8b4c459078e6f6e99ec078218b8e8e5ff0f1cf0a4bcf54fb99fb1045dc15ff2556a988585625da28f24cec45a80288eed93aa15ab545300f39318a299d246c3925d1ef57cd12be11564e44d915798d5f0dc0752f488e6004d2a117e02d60f185377b91796098f97993966c9684fc45852a1d1004b8603339f30707118a610ac206e4c2b3c27404dfdd94e65218f6218841f07a13e6e2218d6ddf2d3e69a59209de39462415bf3bee3563d83c78d874aa17d9b83d09fe774a591011dc480cacd592cac98bfb6d03555e32b71529e75ff5a4d3fd7c9f1dd8fc8d54c216ef56c92f957c535db33dcb8326dfbaa66b07324ef038f2b211bfcfc5cb281049ef0e355c97bc409afe11e86c253092ceaf0fa9bd907adc46b7467d875dc416ab074dbd843059856a7b5f663624cc1f9556c3fe126179106d7c22cb2bb6b48c48d73ee4bcb91f32afa7cf659e8344d2668cdf8cc13579085f244e69130fb236e5951f8538e3bfc3637625834abace84aa00cd84a73009d824280f7951a1fa2b6c6a43207558ab74424f19a97fc85a13ada1c3431e6c9eb8a446389f1164f4c1199884c6f2392be28a4bac26846f4d47ac8225cbcf7611fbbb69351199723a830e1d191dcd696797d6ee513b4f11ace3739bf3b17aeaa1d653e673c5b59b2519da9b1b1881741565496f6d9b421b020efb6fddf5f021b26d4ebac4668f9a3065750fa8850565e7acc43d1768ccdfa81b2e14ee9362d61e4229cec3a7e248cbe9e8b426381308b68f7f80578eaafce2e5857359528a1b5a8d9768ad71f6a2394a3129bc243dd76062c4dd9c7569ad4cc85eda3a18ce346f94b6a9b56e7423c0cdab663b344d913dcd6769b0fdb14c68faec498680384911c1c264ed496768508bf995df724700e411ed3bfe75ba55afac46b004c08312282b53a4d45f5944ca17f40cc60fd41fe0beddf66549511210109025a92b042f95349704d161a6c60cc17d5f227207d6c62f85471cb47e13f5cdfb5ea987cedfcc77175e08416cd4724c795813498dc8fd270e781da6df6bc55e7e79bd8b5b8f34c37f35003906335ec2edc793e97a374ae9c0088841a347fcd7c86489f6071355ba9011fa3925774072e4aa4c630588bca216cb3d7b53716fdd9a73aae76e39692e2be465f39eb0aa84c7469af3628b06161796517b3da5b8039131322e465d2731496b7397437e3b19840627d24939eaf9d9af5c346e9ec2193b83f5f520ecc1826bb10d5d29c39faf17b4b09dca52ebdc0ceb79a05791fe6cc979c0d12be851852aa60a30c689f393e1aea0890a6e7794a0206a4822ab23971c57fcd98a5b1acac0fd0584eabf3cdaeb2507807150c551425b6ccf566e340a865795a7f06854f62e112cb963d9cc57b6b8a139d140e6fedda798e904c5b7af82f3f238d4a40f117361297d89a0e532ebc3b4757e038f421a907bb3bc19ac6437980c0078e074837506a461e936d32da1af3692ca9d85e9712ec9bb676868c109f5c64edd34778acc9ecab76e02dd29c3da0861fc5255727d0171805fc66494a213a9ffb9902f377fd0273bd9d1215d9452573876f05692ac98d0fffea82f14f838ea166075ff36b3f9e3508d90c58bf0389ef077acfdd1d7067ef83473370064f0cd61dab7e59d6e3cc079cb7992ad20f0e0669bd2d0fa8672d56cca6ae9f3598bd0839a712c00d48b47a0abd3214b77048540fcf9e6879ef265997aef72e28186612f1e481eb66b8f92ee1a1f87ba5bf0208554fed8db608e0dd51bd196543e2de84e7dec334b79fde01b614821c561edd287beaa131d86033c0f0f8b9d3d045fa746cf69098299d2fc9220ac8b61f679103a7231ed79cd57c0f42b5a2f58a274b43174069949c18ec4cef0cfc0061fd4e34e013ddd1f95377085ee53c74b5e5dd204f65fa2555f0b9a01f8b9707fbc4203f6c5bf1fe61979252cd5dca89da189e6ef0ad84385b86267293254451871740841ec594a9e4fb5410541111417d359b86f6380ed210e147de9e1fb04349006b213413ccc19bc5322ec5928bad7faa94f8b0ce47e391a5d3780bb960f92b885eaea50eaa44264420aa9565ba2cb82c445727534bcb2889e4c09662e008544f3fbc0a6dd282c2bc9ae90cb8f6473c223f908a484c064c93e413c24605282ec665130f701bed7af7a840e403b74f4cc826eefe676b28e770458991fcc9c93ec05b3b88110af9f1e962c5f9ac18b5d7bfb1cd16fd88083a788408cf60fc3aaf47fa6dbb447c8573f23291f321e67a46725595240369e3c0b55e1187ef1325ca3d2a68cb624d75100c8ec0105dbfe4d836c572fff515a054f3708956ce67c9a349ae90f2f35afeefccfb17ac7290e9c9c7189a7376968aeda44170abdaed0addf7437900c0e07bbb2ce728d75d63c8ef06f10b89927f0cf6848d0d4c806fa640003d019692d0adeef80505cc6a3a10b05a0914bc5faff568878eeedd8ef1b6043cfe3d8bb8e1065dd20232efc807a3ea90db7c3ab83c04090df099447a2f448efcc87c8c3e66aebabc8da20ba6b855e5f4bf80a46efe341efa618251eadff6e10f63735159934aebc05288a9c0bb1e58fb60ca9e7fade318e1db49d81ebae8a035c9b61dea9928a9dd5f6b6d7ac2ea4dfa098164945ba93d88c5a2378b4f43ce7396a89c2c62c198b6adefd2102125bf0e11e0aeef23c1fe789811f8e601e289a0a245009c60342693b4a04571b202b82d5f7a7a55c2f4121ec8d43f30340f57ce41902d2797828f1ae817a14f864c117d94eb2056553925ee47b51a2eb95fd5bba16e23820e27a50cfe209ab6d469fc6337a1191c2ec74e291650a7240b701e1d134a8dc22b77b84c55062898e1a6da4ceb779e6203867bdee381481c822f090fac692c207dcfff4efd241daacf9248380a2527fd4113b6b1326b836e8c2bf0b5863fa3da65243ced7f4cfb01e93935bc6060195e160b7254f00f2b07764799cb3d37653ec4848aaab8eaf383cf83629fbafc9e65b6e014f55f6a45536bde9f33b99481a0a8928976912f4bca623d21ef792500ad1cf66917016f69aedaaac050ec2d5624a733b98d3d51c27b3e976a224a2433207aef4b1e053d4e2a268f1680bf05fdff0152104b24c4f3d6a5d49d010d22c4039e07988b6d0d3a9ed965461d99418dac57b11e2b294746abcaa60e9015cc1a5a8882cd43cda12f8c7de5b581361f5467d747caa52b1316b4956057f3814c5fbdfb5ad7ce45ce2cd26f67729082f58b584be7d195e31f1367cf1dfc84a4b53855f9e3600c97e7b9802fff6b1326d059a4a27d9a87f843817dce0afdf6b31c052b96fbbcf6298071d57271ef044a7ddb24f9e0854a4a7d3ea239d128b003d4bf42d5d8c134592c67571dbcaa7cd8648ed8066fde1430529a38f7267540adeae9849f7b99e0791428f63a324fceea7ae7dbecfe0c5cb80dfd9cf6b55a614d7e1b1a55e01c2949887761c877e0fc54ad04392425558c370512bdb787abbd40ba715b272da4e35de0f3e820b98a494cc0f152b22ebcf5c7e220fe52c5f2fead9cb73c85dbbde76036c08b5a3a8da63bf4520a1e73f0dd6b65014472a4ded8be7e84013e1caf65c2f038b373f1b88108801aa1f3cbfd0d1b39b70cad7a52d70d835b8b32269cee2088622163d88b9309f8053e49323f98084c187c05e3a51f5df5616de8e2784caef63e9083dfe742ed3e48bf5334ca76d24bd7dd8bbb752545f2727625ed13b7e96fe0236cbb037b655800d7345e10e9fa0fc4a0a29b21bdc81084e2880698b02e40262b84654a43321c865fa00238fa2df34e5542e2e1f0eb8c80f3f3b1e30ee3b104f1604a2d335f6ef136932423ab7d9a148ea80e90073222e77780bcc02b91c905e42dbf004ee8420da557f07cd3a16f516df3ed2ddd3bdad5ac8f2f1b3ef8f6ffa14848f74b5a18098420825a7d3df832dcac6a850a45baca8999bc2c7c81b21cb3e70e446bb498b090ed3020aef6d81f1dcc25e050cfd6d792c370c8f6bc7ff7fe2b39e2038d4677dc34e6a30e2bd3c312384158ca0f89c71f5157bf4adef07aaf4af9eaf87f61a2261131926e78b0f5418e0729721f1916401e40dac438f6a84fc5dcc305619473b22f1868d3cea05b9624c75b2582d881a54e974ab347c12d06d0b27640a393c09a0f47a48010b65f0e592a868aa69ea81157bf23b62830762f48e7917fcfd41018d56473d6eca2927ca89f1b16a474f691df239885310a1db1dc8cf63aeb2b8c336be60802ac0ff6eafc79bc667c7bc158509b1af03a93c4bc84abce28950aeb729c4e7912a4ff3052380016357b9ac2eccbee3bd391f3b7db8e7db907efe8314e0490164c0deeadd2a4b06a15417d846873c7d2146756039b51a30e4a9c9fb905d19f4e855fa0daeec6b144562fe0498a5d19d7275e38f959d1af13f7c3ef23f6c1498b44030c52fde83d931eca3758186361331101965becc9c0b624759e49619b3e6e4b1a137aef3d00040f459606ab9220100d0cb819a6392e42a23ef2a25979123891faf86231364efe8e264be2f311a0d9434b8fbcee09087c62a64e4efe5a66b219f0d8a65a879e673df583defcaa4a52e38480299e6db8d57c6bbd8fdb4fb9bb71f76e2b81e782ada95a4b73f01b93b2bc259b0b881f294279e4a24140951b0090d48957846cdece674fe3d4b88b51d6534e7bf5801fda8e2f1a1e560732f49ba75e873cbb5d0437c6986efb2d17c34b4fe5d0e8af9daa5170f880483b84a4a6380c59cc4f99cf6612e0a152d7b76930e941266b5d1c6b1e73d9733b394a1fd043dbc5c7e79461dae845795ec30fe00ae19f5ce2c9be8c0cd6d184720076ed3a40154a8597b2c4ab29c7f07b91f9e5f0c0b8ffa71af028841614837fea17dab9203529a7c2e48b14a419300e98742a637dac5f5a8f28bc5baa2e60e845c1712ed3b2c3c3a01150e66f0b551de665e7c8af418ccdeb3f45c7fb1290295f4681875de9dc94ac3009dc8d13dbfe900207208a3170fc59321a7c5e2297d4bc409c500df71143611dfc4b0d685d4bf722b0a3d8fdeef38bda12e404578857e22b8a5890f190e7a42589fcc2339f1f631659c8e7672bf046cb65f67accd6ca5e9acabfb7c3db505a154ae1e9ee8e0ad9435ac254020cc510af48f308cbc3df9fdcbd467eeb2f060cee986905765cf3c993ff2d0335a6cf2fce8c9544bf0a93e12f830446b81b0077ce73212c034448311b602ea3840a347b8e9a3968a0a579a280145c10f0d42eb115019902a88ac89b5163cccb42430a90d08062352fd3827babe48555a7772f77d36b2c7cb9340407961a44cb324301e0cd2df781b40771320ad74f6c910ea64ec35b5b498d756e214f4e795539ca32aecc778944d8a440e812649f1b792441049c3536dd9a7b3f8b087fc0db3186c0dfb92c7a8458ba88d49e9fefd6167f7f5270c9c67567019c0d7a682f2b34f42b71f1bdc0e9e75902713b0bed70e2a15a6ac4cd29798d45d25759846e15c9bb94efd8828092064eb606d2bf0fac229a38fdfa21b3e32c6e5a31506b9434113b5a048ac42db6252a2c4e7fb489aaa441d22224e9b560f15376227d403081b594c4ab657306dafe95571a065f8600d7f563772b92ef4b2ab6b5328f9c27510ffc4187f6d5cdcb39d333a6e4580c7567f8e138f91306d7f78fa9f69d0025d26ec5352bae5d4b336d38a4fbca6f5f0e0c186049af70b9a6df79dcc4bd4b5947d547414726f7da95ec727eeb2262030f406f4909f1e156391186f3afce7ea25d18a262db5f86746229b388393eb45f6b8c90a43fd439553e36ffbae326a14860135691a2b249d4650e90a20a986eb7a9d645e228fe385960220c6647a028a895b72fa89f57b4c27731f23aabbe310542d76ba54add37b39db9283872a09c66beb82d3cd095a47abe36890f4baf31ccd2a7b384b55b153411dfae9f51257bcb8510db96e6e1d825198e0cf5256603b13d52d0c3710179efe9ab1269075e9e2f11d8b00303f7261c1e3df438965f2292808c3741e72d8e655755c18de51d5690611138f32cd1051e7d1fd136641131b0d0c76027417d8746b766f7c98c4b5da23391dbb7d6e98975be57589ca490d9f1d95021adf3968204f98352aeb27f240b4d0451133af36b110a57c6aa9f5ae00fa57bc1508c45a71074704164f42823fe16b256633463231d236d14b672bc5a3d2a09fc248186709cfc7d17f56c073b8d8df870ee20601097ac0ec7171babb3a991a142fd4eb43a55aa92112cd43a9a1b25aad5547394a6a241af6bc1d5769f27879e8760ae66b5eda2c00d8fd70e258baa77fbb964650e9ef786780cead99e3c130af56183538c413f0e4d9d22f431ae00c221043492a221cef9e9f0c0936f5465ceb81627424ab1686bafd45c1586fbe04835377964a9fbb00da6aa81e20557c2caaf89361bc18bad2c33d2765ec8266e2110c254108f52e28f1a890a79d346216f7fca7baab9b6679f189bd1e1a2fcb2f2ce59d75b48fada3470985a82038c4b26f6280ef14874ecb7f22ac502bbfac66e75bf0525364d915e92280995625471ef5f15ad1aa01ac928be249b50bd4d3993e63f47f780ed5e4b95c1a5f06218b8022f3a9cb364b77e8161ff6f2253aa318b657d582df3a8a3135947c33d9a2a2a9dd8351e303e8bb9676106e4e83d175dd72c9f8b99a6605fd6a89bb15b0666b9c4be5c27fcb4843928546a291bf0950307fe0db62ea95e08a24eefa4b8dfdcbf118bb59d36bc18d9170604537776e0c389d78214d599f1c44206bc613e5d0bbb8d2e9c52a11cda1d38305e916fe42afe867f13f3fefdcef1a6918e34bdeec866658e48662b7558b536696aee5e7f9ba81df53a653d956b17a98b8be3f97a08f7fb34c13f9064b1365dff32a00cb9f7c9355f863e7f6a4f0c58304e1ac7157f5429b690a514ce75f51327f6d5906457a2ad8c35bbaaa426ab0b88f01d01a18b020b0b2ac0452bd98290af87a642116a8003e8825b1a65db17cfa71ce0752b6d059de5fee6325195340db3f55053e5da36d95258db8b1f70d8341a53a6001bd10a2a801b7a892b6219cf9ee5ad456421bf75d48ae6404a8258af7544ff810c3558296b18015f9bb737e26b8d9e5c1385359e327373aa35a74dc37bdacd60a765a85f875db49e72a5fa1ad6544d9cadc5d19dda5194eb3d14b238cac4feecbc849772b1af4051b4275fea0ba621253495846ad1b8fe3905f5e898c4b68ed740c260478bcad83ac466cc4d1f6dea8a376e982c4f9b875615c8cfa80e5126e4a092cf9e96adc1bb066e3d66591c5a8a59dc4d444cfa39b03c53aa3ea8f8644986b2086010c14298b287cc32bf830dbc4ef010c29534762ac4717696a2d0b4ce95df65f34d479d7eb68cb023ebdf456c9496e4fb82500ec5cdf672b57c808088baa1f6313bc315a4b5d376234624e1941d64641f0ca2c8be4a71deaaaf66bfa6962a38d0453e8f217d3b2e77a6781c2cf12adeee695eaaae2602e5ce1052525cf599e7df860988e2b72fa0b63204428021bbb4a4f7d6ffad3af7286c7c169095a498bb477f464ad80267d52652b0d7540f56ae274d6c87ba0be2421daefa7f12835526ce3d02d4fe11f11d1f3065b1f2914d14174efbb8632a2bc2dec83a49130cd752cbc8012b8f02869ef493557201abcb12243e983c825b90399d7b210d867d257b7ea3de3c2d44f4accb9d31985960d5d3c6e298d07edbcccac7a2cc70d4d88655b4805d52c0826c8cc02793e05b417310aefcdbd51e4849f31042b8cbce41f36b5506459b159add60a26bdd260eb1a4d95edda334f65e1dcde2a0b64b87f0041a1e82bbcf06f9753548b8e3e87039bc1ca80fd19ddacefbfb7ba066b230d9ceaaa8b65024a16a388a7686f01d91c4adb02fc952264a3456563c0fba9ca22dd9cb9b1ea70ef237901d3921ad927bc73c2d8a02ad8c73382e46dbc84467b40442f4971ebc1102c7e9f26317dc6f575d609d8dce6f516bea6743b3871613b2471ffb2890d064409367b9658c5a238bed04317599baac0a866484db3b51ccbd011d998f25eb95cc8b0084e2c00b5da63a73106af63fe0ed041d45b7b2a5843851df9fbfdbf91d4dc647c1a91cf93358ce936d0ea71789171739d5454f642653cdb98f7a838d39a1359f36ab2ff53ae07ada1cd838236aa59fcefcba1894ebe681aee56c80b70c80e1c89bc43071a91a7813ef78ef0594d8c1f125922a8629e74aaaba6a0c47687920033af4eb1eb5ed6414b9aea9fedc2a98a56bc43bf83412dcd7f3d9835fd963e77c32f09be0d1550e14cbcc2f703b8da1c1ffde3c638765b54a8289a2410cb70a2ea51effef3291d3a3eb221793a466729b7a51c099a3437562a265f1cb8370d16ae714daa428bb2b4b1d81343e64bee6418aae9663993141609c102085eea392e190e5ba9a8a8057bb3d7332cf3606719f127c5a127d2781b5ae1b96054d1b738f327c6b65447f55f0fd0bea0954b241f5099e83cb323cc967bdc940508e75756976304b2edad1735411ee1f308cafdefc29b739b860c11d5a02f410abfb58c01d356b96fc7b255326b0509314f7587e5de40ebe0d9bfdbc99935711327d0f2f94f7a42fac71ca00c0f3b6db502db674076778f192619b45a6064cea25c06ef78c1fa7cf3f590a43ce8388b453063e4ed4c55187944d51ee6aff0c49a43bcd8868646cc20f22c2c2881f10f0d9b9bb4ff34f553ed625ad6b9e5114dd0f7b3dc548b6f03fcf68467b7c1b64e44c6c100df1099e71274ff3c523968c2136aad20d42d3a81c1e2f2f13d938da4a964fb013c90a25b48685d0225537f0d83f661c1746339512943203ad931b37f8c5c033dc7d0ddc042433ac594730dd3ea08b78c9a78331d76a9149bf424c04767b0cc40522380d6c1023722921c4745c123507bc52e790301c82b6f67142a2ed6769369183555b487eb2db12e05f66f894287448ddb46ba8bbd15a6bac5480935a58ffa21d8b5d39b7f703a64fd5fa450f9632002fe8eb5cb57461237ae4a9556bd402ba295d34527dc4b84ff1261b0a7edc8a14b8ec852c07f9706148f1db79b1e524c957941658db300c91e601f59849baafb77e442a05cf5b7c3c4f0dda12aeac7a98ecbdc7a7cdb268bcc6aa12d737135f6f0edcff5d56115a20389d4f21d79ac1c87bc793db33e49e6973c3c83ae38124532817fad7e5a31144c0e8134dc6d2fcd6beb3acb94c6f4f25aaa00ac12f424795b6592d5cc0453779d1e470e5b715a425f1a98fdfa532476c16239dace600566d2164f0ce7fda40183fc79b8b5251be599041dd6f95f6b29c57f16afd378d01e7f16726abafdd5c4655391f72cf13c456655f629f61bb51b312f3ae254dc8fcada67c7f4524eb0f9add1e23d8636f95b23835cc653f1c13da3e28282058e892e032850ae3e3fa356ab970cc91aedbc475d13e66e03c774e3b05123bc5174cdbef8c8a8e622d192b73ad26f50ebfe2a6cd7c7f0d05417b9faeefca50997f206ecf72ae86d144b14d44e68ba7481713a00910006183eab7bc769b43e29293b427f6bb6f4aeb7101db055b5385fa416db9abb06c83fcd5f803a0f1a749cdefca9a081f4176cf024ba868cd88eb050778911f0c2dbe0c0ec6b11e125ce4c28e309987790ea222e821a3eec8936200d237a46a60a9a5829b105a2b77cf28979f9a54ece34af40fd073e277bb7c31cdfc6d588ddd2f4d432cf08f2675fdaf36c2292bcfed8d12019550d7fa64230fa476f8bb1962928f68fcff7c33714c5b43e6fed676ef1b96384ee57b4c9634e69086c8f14de597960f3dae101991c69ab2a39aae01962c09d11784f98a6b84b9b26d148ab6ced55cbc3caad3a5767c257e653f3939db7f1415ade08eb907ec59edb3fb0f8b49a99895a6fc743180f80b6b5b0d637d2af2de08a9aaa82d355f8653d8294ee2080ee9694f4cbb147dce1f8a28cef6637db74173399382222680b80e756cc409435e4a4c0aebfdef367256c402096080bce17d49457b738d59f62c4d8611da6b6fd414db09c8b624445370670225e3517cec60be7cea2c7a3838ed31accb4279f444f6b37a7292eabde6618408023e0bb0406de1d1d371675404622a65658e7e98242de33ba9405f018f326498e1c6717ef38dd1f8001122df8d59102744f02aebfc22524e84b17e036565bcdc112c0c1a835748e7c802040bf091f65a9530d72e90c8245fdaab9d3fe4c48406c0bf5ce76f7379d7213903295d6832496238dff9ee2c3e79a9f2306c5e7dcc5486d6cc332071a44b0bd3220c9b9af731848a0aea2b09236dbaf0a7e8d35c91dfe4126a20da1c803fc6bd335d8a2e008e448879869bd558c2b3d23891172ff27719a5a5dae40702fd5bbbc3862f61650240492a4dc38e73bb47929f6c60c79329100dc1b6362c611512fa9fd844fcf66fa73580832ac05cc61e87b364c1e860c6ce40423e3b5ae417765f51b278cd2071699a28191774bae4fe65b85713d8e245235dbf1a14c145ab5326cdcb219020321aec2f0820a5d39448f29b3be46e3b12b48c162726e3c8ee29ff1d894c25d10490349ec86038381f752522e9dcb47ad419a1c63899623a315b81e477dbc336626c76fce8851eb5ef52b351154a9b2b6f0b808913cad3a7b515a4bb6349a434f40251f749682b93921f0ef817421c471653e147a770f9ff16cf9769ee5762a83f82a06e1f78d53e9ad1cc245acfbe33e7b800bac98d6073eaced19ca274efdb74dab42fa52468da062a5889ee3437f1167ad920d59f555383e3efab1e5279c81b70f31d13ce954243555bebe64f9d0e16baeb8d5f7d0e6d8db9bc94180a64199cc926cfe2ec695431fcc6a952abdcb74b97f7f6c7bc15065b4c3f4b1459220d76a28a3c12b5660f0df1f97b3b6e079db210fe9471a8c8d162f2df4a2177dc1aee8f1fbb9f80a637286f2ad18e199353e84c2c8adf5b2ab01c732473e770db1a0db9513505e53c1e2f8c72163da01d3bb8c7ce052348f20e082e54759c73036f25d016fd9e0ee3aeb8bf26c37c75ae707ff884edf7e46fcadfbd8ff3be2c6751afc4a1f20975c2cc5f70acd68733acfac77245e0af910f28601bb059d7aa930ea263a824629396e97db7a634654c1a1dd88225963c9eda7978aeec8c828b7c6730801c6cca5a9b52f0f4eb0540b1351f5ad94832699fe0ce56ebab1844d4d71bc3a6b8bf2a02e6e80cc798023d498cd107b3b045827bec87b6fa5cc5653e4a1b6685d03744879c262ea8be61a55ffe626b3633eafd3fcfff1e0041858d81c51e446d4c84defd6c66c432d3d4bf83c0bf11e0a367b79a714132c669f2e62de8b743e8a79dc28495c38898eacedab40de33a47998f21d918718f5ee1ff52263f20b68fba0a0753af7f90e22bd0a0f74b12702d87451bb5f53654d4cf7fbb7afcb125863ec5479414f3fb11496d5cea0c58ffb560617a5759d0df115ad2b1e1a63cb149adf221684c41235688a57a81c4d8b730a8cadab91bd608f74977230895e4f4f1e0028aaa63d14727637bb11cac54ca45bba0fa392a72c68e9249a417e9e93fa78f4900e5c77b3c95c88da4d70d31f1148310981aab92e69c432216696e1a2a84ff1ab41218f9ec941d60d8286767b65bbba3ab79251feec4ecb1246cdd9cab9e53a31a3149905999ce28172849bad1301d9654e2f06120cd31cc7e53721b7969cd70245731bbab3bd59d8e9a23cbb2bcf6b766c06ddea1582e57b0e6a65854fe4afeda0805446a719506620c59aec5f3258f94f1b5d46c33a5e18112a77ef1f05d5c25ccb090e86078306ee98bd55112cecb0fc23a8c739877cf8b3f20c8e3a9b0637c0bb0ceb2d83d40848d32ed036bc83dc22e64691b5435aa77b5b28a47a163a5dbff6e61a5709cc3413de5f3a19eaac879bec76668c3c2a0f5f621d1bb53ce0224cb38926a1d6b176ce6462f5f07ae0ba7bc32c8075fd5c5cdb8799f782b0260695a85ad88df702676075fd6980dc7ac3ea09f742e983aeac11e5ed84b634edef29ef54ff852ba871e693a36dd6b1c70acd58c86e6841fb8907a0305ccf17b752ea173b6fd8cca9e2db7d73250b9053fcf1a2c5f569cd537cf7ed5bc675a574e8105077bff555342b0b2d13ea817bafdea7812be1d66865139d308d877d8941d92cafc2d4036842f0d170975e2f0a2420153689fd16860e72b5a890453b32132e6331e8c1d2e38562c07880d38e14282270c2bd42293c252b1757de4e9a8b5071e0a7be26d71246070ae0dd879df145f4b364339058966c43aaf0a3fd65d839a317f82242714014069e76e5c10de4dadb653c825f5a09137d6ae2d0b5f6ad643dd827be9ab3c84a82bd6eeec2b8480186822b851c328877848286daeb03073d73241ebe70dcf8d3508204f083be15ab1576bf5d04311a107fd99c96d93100a5ab635ab471ff52622e7660067e7b5c31310f300490a1ef59a48bb32971756509dd0d15962c68ff5711b64d3aec6e884993706bccc04d3e97b86f481901c9e7c894e32295335d634a3b50199eac024ca0039859e4e3d31d522395cae9be6486e921475f675f36d7574294d2c3dd2a779a1c3da4eabdeeabdffc5dd979387e5dcbba9a8cfb3c5ebf5275188b79490fd33d97533e81d5fb5603e69858a65dd054c4e444f997059e74e789f81303324db447851be71cdb39103df0bf5cc49e3f942d64c7dcad6c8fc48b9fdb0168f1008b37bab24e318f7e03e1df024ee2480c6db602741d93b2371f4373a6b09842a2266c16cbe77f31b7dfe2358d05d7d50ef0cc2833bc8d6a59be0d2422396dcb71666fe91cb513bf8474a98f90b3e4b9e87e6b5d778d295ab5fa68b005cb34038fba118292ece9bc46c7c45d733dfa98356769fc345fafade2f406615369fd3f18ac42ee758f08860e705a4521df1431300380d735d34fd0661c504ee1c2ad2bb4798a69ff2d12698467c620cf6746217918deec79a3785d77febdb5316032e8bd479611995b517faf89a3c586f51811e7a93b237a7667b8ccff39fd02e32f7c062ac3023348c7e068e9e23f2d053f20f8c61b324f5559c53deec9386765b7d4970beda9d638c7d12bd4fe7cd57db846917009a99482bef3a3d61cbd09e3de16a51f74f9538900c8cc5344cca382b9096404dc97ec1fca1bce1e3667319538bb12f2282f40a04b196c9f3c9af2eb20b4e80e6ee062477e701fb7298e78142160e13ce62a2099b10dd5a30b7578a7bc50fe99c7eb6a21911888cbd07eb9d478ac44df19ad061b90c8051559d0c42c83fff0647d0e4aefaabe23417fcfa429df849642fb4add05434c72d12cd7bcbf8a3274a88682f3302f4fc8a6203da8183cf88cf4d0b1364473017b2f790587e18c1e2de7b12b18eab7d269c633f3d54c6cce53e057e900865d211cdbae6e78ee015fcad1e08f6cac574d9666699f47a77f8eafea450688642be8e1b5fe1ef0ed58517f3ad44a46fe8c40d62797ac5bf90e6e2e2bca079aac544b02a2c20e739170e3d66c02d3865fb60f8ee4e19f68221359ed9f88c9ab59b8d95654497f5ad8d12f7f58502f258579fd415bf8d6faac1f653f304371832013a43b50fbcec2041334630d83a26da43ba1b0757d2ef5644ea5081ea09406e083d85e66c22e1f6776e597db27902ef4e270b9ed8dc863803d2b9e7c2541cba905698195b68f90ccce4a3e9b69f93197a1027038acd854e1fe48e10d293939e31d579fc8e9e2d41a77fdcefbee8aebd1e92b504b2148c86c511856255f52b87a282d742d1cd174dc52189b06787101d1476b1b90952921a1b23241eb0c8c271600b93012bf529797b18c0488f1b3a3147b8384ca4687f3407923a5ff231f703bd1fcf531b49a552d641e749881a27e745c7398c70d073966c0437e22f1d802bbea1f037b6108eb946b80a1d5c790a86c360904b06020995b9d4d70d4d95c451d683a07fc8631e8d90c33153b946605f590c3733281a8819f2cdb9203bb1ddfc2ad61dac850188389c20dadcf8e45ca434f8c7b960ab884cb46505224154f4b731617b9898c63654bc0b83ff6438c94da60fa7a82ab9d6946b8549460974db3c2f671056d2f76b30ffa2e6f185f9baa516abf933466f7808d85aefb68f3632b9ea50c95866a7175cad7f0995dd49beb6f4d437768d833ec0518a3953da3d41a25286ef47f5f5f9574d6d1fe3451448847bd0f70f57a21f0e014715f4ee1a9050b0100f580df03b65cb26bd778753816e5180058c4d29d1f868ad8b5733f93ed9b6979f7806ca877dac3dafe7d6072e09d3630e619cf6777899db8829f2cf4f8b6fcb1f7900bfdaba5689a37b65b0255c322eaf3f403ab0e0999a62f03bebcec54d583b05a171b13e72dad1ad07822bf8c94d93bd1cc0fe5bb22305d45f88c4532361ea8f061e9bdcb28d05fc8bb7b531003de7734f554549f4d0b8fb5cacf723f003d6693cd52a721d5024a0f249f7ebd6807c16f4935890131ae8609ccf596b11fe03d51c233a940d6d6eb82458bc533386583047dc8679b38f00de009450ac62e5b0cc5eda4fb538074d98a1e9d6620af45a3e87a93dc2fd2526cdb41a353017a6cac357d0b6dedc847203a88b134bfc06306d762a3e66aa2141e2a217d1bb8116b6e625bcfa0f1db90ca3fd34898238bc818d0bb59b422f7b6c2bfd2e865130d8ab066ea30c974aa7aefee0d013193496eb52db5eaf356fc2a3c917c78947111ad45e2d76f5de65d0517e69aba33eb26d96e5761c00097fd6926d73e29d82f066935dc3c583ba33a4909393557d05d73fb1b8499ab27b64e99306c421ab108cc75a1de3d5713d012a19e409c7ad6781b575fd9b561570c8b61f74c5abe693cf598f8dc484aec4112fe26309e2f774b0b219d736fdbbca3c97e9de3ae9b48ff4afc4ada7d2faa28dea0e4f7855bdb06f9c281b964d033d4fffc9ac6bc36249ccf1cae44001cac89a79f383e78e4c62df27a882e524ebd46774cc69ed3cf80083cf058375235a4c038ce52e9aae9781a48ab78863bf70a6bfd13e81a04bf25c0ed7329732257ab78b1157b87d14dd3b68a0b5800579a7df52273b4df906310fe8a2d6ddfd5b50ed91ab573f0252bdaa962b5bae1e0d58b9d7fd68de6a6bf506d7ee2f35f2b9e7d8144e0cc114d7089606e15636fe948c07b231d4b4cfb8a65f1261b0871d69e5d79eb2d6c79b3a8962eff49ae5f47440749f7bf24680145b28eaeeccbc97aa252d41493d926c7ca7cb027b55824977e75fb1e7e2a92964bfc1d7256c7bbaa508b201c571bd22fb3f7abb700e48e16a934e05e2eba846982ba65f1880f37de55656f51480d890605021a31b05cd6e3665518e3b856217e560cfd01ee53a34377886e19051d08fd685bf5826c6eadfbba9ad5fd640bb364dd56db66d4a6d5c0e2ae0d039f9f6a05c52d6e1e1a77d26bba8668d0fe177a5505b9dad545479cfd5afe21f11f3ea2580153b5d237d2389cdf710c03c981a2033c75198c28aae2dee30f01d0240e81b2e388906f7ecea1abc5ca545083ff5385ff496f4a51cc7fccf6e7d0e4212e3324872858a898f9061ffaa006f806dfa46fa5f80d1d54863e61c572ec5fc0d00938f68172542ddb99b8c9510262f7d54f6535debdca3644a369d76d93f39d1d275b1135ad56773d7940b5a63141865bf54423ed2f448c1148617ee6efefacf2c9e5860124a8889bfd60f8417fffc411896b0a086cb185b2919f17738a2bd1ece0e3a31a1789566db4ae4a41f6a6fff47ca79bc0c9f15e8d9db42c8344c5eeff2c0af30d56673aba2388fe9039e20a1f0e4dcb4bcf75aef80e2b8c621886598cf0b0ab0b4eeaaf52d9b5d4aa8d5184e160a1e4930893354744de81c33ee7df73ea04dcdc1bfb12a4cbcff22a67a30feb676d0aad3b623d05ccb3a551a5696857513ce40082d312518a3fc5cc5341ff48c7e0d387e7e2df2d3b2941934eb0c3b7372e849984f006c50ceae12cf5d58aacabe5e90e69ed22cb6561ed96a22492f5a2cf9269856b8a7aee6e0ec1dd3169e4a56bcaf3509cf8f1943f78e81380484ca151a494e473ed8c1d2aa6fb18d74b9c328ae85dabfc241743ecdadc299c593878c9a4ceb9770a770ba9970317d6cf0f1f1aa4dfc0810ac100fde323ba3901c2ebf3904cce41ad285d0ff7d24389d4e1e97a5886bec6261622cc5d74267eb9f1bf608c98f3d26fc728922c47f51fddf43aec3517abec9b465860eb2d8e0b41158006aefdb0a4a569086c535fb900cb466136e3936e8d7f51a443c9331697a19bdac72e6be282dfb88e49afd87c19be1bfabfc907dfb9c380bd2a7a13eeb2e1a44133bf06312cdc3e9a061054850d352553649ac711f2c5b349e064be4ba23cc7b95c26ab178d8e092d45c0dd58128125826421922979ef02200ae94f16d46d4923e13153eefe595bc35776c6c81f285e56bbaca617f804fa474c48981576aaad35919723f0a997b6a9dcc2bf506397e5ffbccff9cae2649d24880cf0b6a13ce610168ac38ca3327364af3afc57ea2c3efe1686b164fe015a9bc4d23e837e5f05f7a58fc860773061f325f468b89910cafc1a92b79611606c2f7824f051817c48801da9a0de9b4e2f59f5208e2610073faac38344c3fa40869f20f3cf18f93e37710e1595e60fbd6362e09cc46538c976bde46e2c001f2978311d4437b7160d10b6a2ad3fd224443782750ab1fb2454dd156540ee38bf6cff597337326adb3dae48d313b73af70c9e6734aecb8ad07c8674ccb3443e4e7693002d1bf0b59dcedf8666065904df2b716bf25aed8a0adc252a098243fd5fb90768f1ab2ebe5edc10939874f81da06e91ac0997f8cdc027718e6fc20a7b0e8471f07d46ebeb2717466c24e310e2e7dd761f789aa0bc5c28a57613d1eeb7b404f93991d62e663f06a9b427bf2739a2959001b7c905cf8b7e7f445d9afa8f2f260bc1bb9f74312de24a3bd451705e6360621e140f4b3b25e156b95256c1961ef975d1c300e665a3f20687f96452bd0eb26d8a409e232b3501aba4eb418e4fe7477da5564766f3ebfe88bd7b0c82cd170896f4872d81a3e843030d864b19e3077bc96408add56242a3f46a919f9611f7e61ef4597274d3a7bd768e1a0014da513783b8227e0504b4fefaf154d37ab2486df5043b582707441ee699a15cc6c4257b08c952e08bfaf9af5f9be645a1d6c9ed7b7aa7fcc646b87b14b144d4e9600692fdd9c131fb86809b407ae9c29bea4c9eaadf4572af663bb386ac4d5fd5ca4b3969f4ad799be485be874c6</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-wave">      <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-wave">密码为我本科阶段所在院校中我参与的信息安全社团所属上级社团的拼音（不使用拼音符号，共13个字符）。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">CPPUISA Homework 2022年暑假第一次作业</summary>
    
    
    
    
    <category term="撰解" scheme="https://www.gh.zhangkaixin.cc/tags/%E6%92%B0%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>撰解 【Pwn】栈溢出基本ROP——ret2libc</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-pwn-so-brop-ret2libc/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-pwn-so-brop-ret2libc/</id>
    <published>2022-06-29T16:28:19.000Z</published>
    <updated>2023-10-14T12:11:57.418Z</updated>
    
    <content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉，您的输入不正确。" data-whm="抱歉，您所填写的内容与哈希校验不符，但你仍可查看此文。">  <script id="hbeData" type="hbeData" data-hmacdigest="a06986b025ebdab46bb7d49fc36d583e371461d36229b69f5bf22e6c2b618ea8">40e65372b53142ce66afa8eee6834c5b0fb81dabf70cab732463966a4c6504d11a70220dc45fcf4b075d7b054cfce884c16b5fd9ca3c8ceed1ec705dda6919149cf9f41d5eb490a518bd489d890ee74283b211b7f8801bdf34bb29bca29dac9a8e9f998c53384367b2801e02bd6161041bf38c75f40daf069106e64b643bf5ee9bb16758724fff7a207027aa5e28272671701cb60521e17f080f27bfa75b6074c9a68060898748c6cf50584cf208c84fc460812c54fbd630b1c0f24c8a3bf9bcc942eb3c2d2f71691b17110f32c7a3a04e2ffe25f4fe55df6696a52071e569a1543ab4b2779b998265ce2213e779c74b1422a812f260e9aa0f47b8d92801d2969b0ad5501524d9fd8cf2961734ec6546a222670ee8d478e58ceba5b6cef5351ea70fb93ca0278b2a4f3d43d928fbadd34e486f1d9235db60960ac1e93022920b91f1afd7a7d13730375e96270412588cac19f11c2ddf69a7a5626f22fde06e0b6bca5ae5780666a19c6e9ce3114dde13d5aff596ec2d4c28693d2a58154ad0eab6121dafb3706b9767e992fab9c0bff919262167fd4e268c247efce85b523c87a42e78a6e96634dbcd0177d15d0973abc056b9271f549200b8b26137830c18d5ec31dbd68ee8e692b3217338dc25d40134d0c83935cc497e0630908eb0eec49184081313e5ac7fe5bdd37f8d42dd544873f9a778448565a3e932c0fe677604f5d1901111f70544d23129a3332671f9c6985d6b9f5a93475825f955245972740b0f9be81645d9d74c6af2e790bedd7544c6dc3c5f4399660f5c00f25bf0a45100c87cb5fc4e5ab8b3225c0117c35070d0baa696c28bc87c297c41f44906f1d22efc597ea31bb414c22e6800c91e5afb2315d38c8e92443379cb60c2a9aa4b7c619a6049c80ce35b76bad195d37bbabb0808a4dd4e1c5a41295a47f58ee4c59a1d9cb8d7df4c4993e0d4d53a16746b9bb5466a5cdf0cbd9850b178ca9eedbdba59f03806e4fdb29be1ac308e72dc1a4aed3417660117f632429f4afd9d92c70141b48f19457547d388ad9e48861255441f405e0f61771d0614f42eec4af394390e0ccc90a6736504ae761690778f886d19afed84d2650369e201dcf9c46d8d3d5f046627a6ecf274364e604ba705ea53fb085a1de71edbb28fa5b16e293024611ec97ebd11f47ba1db93150624fe96ed3cc777c1e2a13de7ad29ddafc075955cdf8cf3bfaaa187bb2fb385348eb7edb817dfe8f6d0473f5489e5927ec61626acafabc1e3c4969791854a43a632f7dd46b67f4ab826887c0e4acd1b036de99a5527d7d7d456bd5b92c566a8fe9bc5d4e81ecd7eceb0c6d63fd043fe2fa77f832d21a211d862662921636b4fbcc02de2c4c269d170a7ed3ff55458bef68c110d5f099b7eb28b2d0fc25cc3067561fd48b9999eeb0ed1140fe137148baa365bba66e7ff9f2966ec8747320b36e69e48659aa7e4bc0d9fdf71a050cfc69da22e5c9d5eed05e1e9837ce7c123dded0462235b18fc1ae39665158ecfe23bb627ea4b690d2b1d91100ae29cfd6dfd3b7e2bd664e353f863f12907505d62208cd59dd86a8d1544f5e36afeb9bf65143afe96efe02febe2f57a6ae5826fb1b7d568739241fb8032021310baa904166eebd158ba344d5c46b884fb6f3e3902184f979f2ed4d8ff5f9a7a44335a66af96e7309a636741b45be5cb78c44aac63cb83c4aba01f8b9ea1e82c9a489690cedb9711e8a85f67294b3364c0f900381b9b3873979cded39f6ab7ec128b9e0b4b3d7f7907d608e09035fef7ef6aaff970c50dda16f235446feaea0a5ceb0d14dcd8dc0b6a933db5641eadd321b7dafc73697b56d2e855ce86a8ac9774243e98db599b9230bcf6f04de5f12c6699639b5b542f26a51f7c071212813b0d33f4210c40ed7e2aa8ce0b00e0837ccf2ff7a50d4caa838baad271aefb5212f45a04f74c34542a91b02032dd5f0012779d57815b0a8ebd249908280c135a568c493e5e63a89f6253da0fd526b0056f03cba53252a7a9efcfe55d0627be37c14e27b3859cc21a3679df9b2810908dc4fa6f3084080d0b09238f213cb57e92fe32b4b6620f82116d5c28bf5475bdcfd91713fbed55bb759b4ed6902363d8c786dfee2904cc972d7cdf795fe203d16aeae266737e9fe0203bf7a232900fc93976a92543a7259a15c77658431ef49d2c2ce682f6609d1ff0d9d0e9f5e2fe63efab8e53a2158f1d0adecfcaafb995ad8b545d28a370923a2257444f3fbccbe95b426b74821c97d4ef05d3740cf5f27c9b5ade72dc2e37f68857bc4977828da6460db20dd7ef77f4b9fda629d90fe1cc9a376b5968ac532a752321b623f3e94ca5951ee6d2838c02cfb4428f2abc4a405f1e9e3525a52714b7a3a2196728cb666f55a491ea972d6f3349f564159fb64e86e53603ff0269af609eb3eea013570cd344003e7eacfab6adffba9f907f55e1d307abdc4431733669cc1c6bfab051ff438bf191bdafd8a4abcb2b5d1604b35d3c2255c4bc3c07b48bbbca659d54866e5f47aef801fd8081880ecc55594ba5a703b12f457ab25db48e1d890bfea9a138a243d9555a52ffab4df2bad9e1fa19de07ac4937da5de71c3bafcc1573340e5855c38d7b9f2d5f8c06ba4baa3a426774ffe5400525b046a450ef8c7c881ab220c0ea028add49a4c5622ff5bb37bd05919535d821939eb7a39e460662ad21fd16c5eacb73808c7cebbae1cdaa15fa967c0e6356392dd4dcb12b04dd46508e11f93949efa5d96e07b8d99d3e7365b999b8e89b792eafd401a2f25f2a2a5fd575f1e9505c3fcc1456120cfbe56001c2f4a36c0cad84c5bac56d148ba9e2d35c6c40fa4e9e80d142192b13e5f59171226258be3dbaaa6ce21bd8a830fec54cc23bcad39bd37543d0855355586c740e8d03d12f228249496ac01ce223db59179608e63c7cb6befb42569826fb886cec420f82b51c6843e4bcfaa201017b8ac7152c1ae3100784b20b62758ec90229d145d5d61ef22f1482e2ba937dac6a5f3eab0f14c8214dc3b7458677b820bcc5ac3b032fde4a3f5340d09ae3cf6b2bac68dd6154fece46b581c9a78da79c187da6fd97759dd10a0796939cb07c3564240e48f3e9d0e9221498779e5700dd2009a7381b6031b49366af714a68c979839b4c9c36d5e6bed9dcafd25f12b5191eb1a03570b941a3909c598b52a1097a35417e4ec4717b2057c74e5c8016ee2dbe1811b077631f4d67b8285ad93f02e18d5475099ca5d68cb6920f56d52a0f9df5dc71bcb2c852a9c4a3faadcb3b256ed402975e9491c01049c20d3fd140a4d882d55b07a97e16dba980ccd099876a6a8309b93e258ea4f6973f6ec4743421d564f261c193bbba9b37055557306c01e767ab22d9c32a3a993eda95ea649418b9ba9b2d0b4db5154b58ca322644eb761779e4f3ee0c75c3de4bdb997f3cbdf46399281f89c0553399ccaa7eed9c763766e8b89a64876e676ee26c54b6ec8da1ce5b41cbada8b09eefcacffe14c58f1cbf895c765d878b0571c19b72557ab1a2de2040a5da410d51c86962451e82a85b871f2c78ae99bca5b71e2858ed6567407deedbb9a11acc99c573610f4a74728763fec08ed42fc5682ef0656a0ebd2bf7b37ab6ce47aeccc5f3a013a02fee29796462f12f5992016e066298aedaa3f0826fe659fd80a38d0bf0997832decc3232187795d23c870c069cfec78cc355aec8c69048eb2c017b05ee6ef7c25a9893fffcc76f462ed843b00191f121aae36c94b5ad11997ee5b9726440f418895c98570d65898bed7642beeb458e552b489ca4aa79c011c08acc298b8add4c510b16c5d5c89fbaf47495c3287e67cd480efac6a1ea9ba6ccd4828f0536eb082dc301efc1640aee690d33726fa7a2a951f0fd3f15328b28146645a2207824356f6678b355a979a28882fdb26e63c1faadda59c449e49de90b64edd8a9844015ec1d6c7d4771adaeaca6c458d855b2a902e3b75d7f68fb03a9e6a71e359e3e2dfe7988173f301a0a667de580b84a1ede2d1a4d49b932ac9c171b07c8c7494d446f8afcf4a81c252eb7669a253049c745a40931811d2ba02682de34692fb339c07363297ee051cf9f3dafaceeba7d3f5851ee2efb8a0a16d70ee78dd3b513de059b7d0ce74914c84742030db2895e47b54dec3fd602ffcee8dd61438d564149e2e1a0d53691f6fd23a499ef65eb39aa638fffeeb463da3cf762866be7e355188c83ddf66b3c949d84691c17f80d6b0762ad26417fbf3c55ce6690e310507cab82f37d5d8c091b49db39ac9c9c1e0f29b64f0c8a7fe572ea86bf3f6266993f17becf2ec9e245d787083cc94b47ebd6287d00bd8ca2d00a7cccf7b0b2fff6dd352b1e832dde5a61863dccd30f47adc42fadd8c5de496b667807d2b76fffa82e841114676a5e01be8b826e0c222e23eadbfd21d32a1d3d8fc37fe0259e2a741a503965f8ec73e04d2b118606fe41bdeb98b9a7a80cc1c03be9c813fb530e4a042b5b4b2bcbf0ffe70e0e5f317e46378b41ae645df698e339bfd566cd6ec332fd61d1477a6b166459deeaf9bc71080b77e6622d06725ae9c12455afcde9853c16fd1278b2715ff1ff4af6973cc11c1e05669d6339cdffb2f115e074ad425c5956549cf11e1963f839c123243973cd99ec664985306b74ac56615519c517cc2cd1dc0928e9ddd5f01ce58ff3ea09fd0f9f3a708da5476dc0de8ae81d140dadbbe2a01edf070aa3c011ca02466c0e2986949abf148865398aef25780176f53c45a06d3f7f2bed456dbc980dcd672729e862fc1a7759d923c769a03fed9a493a62b9508092e1902e9be1d56a927f9bbb73ec8eeb83665806da10ff658a29f115f22e5095e169b156c49eb30fc97119ecbf0e7cf45ae3a8d63849a62d2d2d40827899d1ac67aa4626e54f38a2a50c85c043cc2f1f1d538987a7ef38916161aaa1639412b192d0cd24ea482f78b8462ce4d2a381789a6c8c540c83c633036c1fcfd65092ef2ff441d89678a29fd18cbec202fb4be48ea3dcaeb675793b49598827bdcbc30d0e8beef914871977c6daba5fcc8956ab856aa13ebc92fec663d809a3be4172dcfdcfcab68fccef16bd1d050678ee0de43c1814fcb36964e8e7414493f9dd292ef53646c688d5d5f438968a94db8126570ba3cc11ec53f307a79d98d1dad64825c72e8152209385f6102192cdaeda9f52f28f22663b1693d1a6267032e6d7e95d904b2c5aa678f6136b57306c86a4bf4488cbcba3072360f7c5adc8d6af8c5c9c87a584323cb36d9a8b70ab41a65c923cf583bb8cba2c01d7f0b6be6a31bc77dc617cea3f67247eb9f39c33f4cc98ea8204aa68a18a904e386cc2aeaa150a34da6f26028ac1c8dff26da4f856e67acd337e717fe65ee6c5f7fdab1f208c4d1912d4a0d5ac4c97e1c61ab4cc73ed436ab1e52f5fc691a04dd8fdd69d348164a246318ea8fea93f1c4c859f9bdd369a6daca0faffc788c3c5bdb40c71cd3ad5ae338f399994de4cd414e3f6636820c3d1dbc4ff278ac57a99dfe980208483ac143d78a1cbf66f3e50616aef21727c598022a0b93ad49f73714e441ce5cc46299b1b5dfe268983c7ac6c1e4bb8fa9d845115bc5fc2c952473bef5e540f9aaf45dac426218e57ea4cea8797ae6b70ae77c1ebd2d67f7205eb90487d61e64b207ba4802c7aa781757352ff03716eca059a5a478f8db4b7e036cd171637bf5a56b741e12bd4409f78b20f3700112e1bf58c6a869a28c2503001641054197d5fb7ab6ca1232a225605db5184a6b1c2cf76bdd6e9520a84a684da3f37210102474780abea6999a5e6436b376642fb110e4e841f6d856112b69dd9857af34992598043a980c2e093ca8b9fb2570f3e8f39b90fc60e3e7cf21288b70db09ef3b66b36b4534462225ce628c47a88a807131fdcdf32d0f9988cedc7744b8fd898ca125fd94dbf8c16f208af78f011a173b5f9f602f56a7054fc7a408fa09a60af3d9eacd2eaac0f7cabc0a2f6b66055bda23b18873ada9b047ecb12af3ed3c7de0a0fa967bd3fef6e983ab937ab21e1c59f2c34eca8b3a351ac76334574327838110e9a0850997a2f622eb506cbf55ba470bcce40280e3ab1e0b855ffcf42f5242dd7e3f589d2bea5d12100c478507f87487240aa487b4802c2b0afe8cc0b7f9be1a3165b4c2708ec5a7cb08f000f6d62e68d8c92f6bf8a67ead5c90ba199a08bc3ede064b8331db44204f871824fb264366034c651af9e70ceeaf052b48f17f28477d1dffcafa4fd59aa56ca01b9d960360c51a4d342c96d4e924809f72e39cb4ecd982e0da4d62460b42b6ed7dff921e0348d78cc9696b951f5338d2f115607e1827926d896db2aaa3845139d7d21294e0a7d7abc4451b6343e666f84605b2f9e6bbc148e72b81bb0ba4b2e0a1f01fc108ef456d4453d304b2b5767337497ae2da8f6a64921f1d1af5613557527386abacc2047d6b4991fc7ad0e1d23ab4572eb0366d0f337ccea304f9f2230fe2bd759a1a09967d5396b0c78235be2c89e36de63f9dbdb9db23e4c147b6d2304778c2792ffbc3378212aec67b910f5e5c9ed3430f7bb70ff49d41081b47553352dbab39b156199991558950ca1de6243377ca223cdc2dd0bf4d61eed7651cd37d898a9061b7a69883ce2ae3221d7e12238f56b0a606b1056a19c362568e4a96d6a04553279a19cd2473f154b882b8b87fcc975f74abc416ce137fd3345131e1764e18341c983bb9f7756c7264601398fc1ba932ec7583b3a4faa0b51c764e1e1f8233e10baa8e8b39bd54cee0db9c69851a2577d949e5e0757966032a312aadd43ae5f18c7954e1aedb87ec62b19dba434cc25c6199f2c4c06f4407db389519e05c955fa36db0ad38f289fbe9b9a617a0836b0b06751399f0935cb18c81edcced36ef351643187844199f0120c3c6afebc3cd9b7c6cabc8ec6a6dd9dc2815b617792b317c6a30f6da54c737ef4a87387177f4bab7d7f0a143b63b6f3d17e8d355c71578e16fb85e400dccb901c638488d83822a203580bc573411cce11e496d0763cb11500fec4ab8bd676857de4c5734cd8b77e2f992748d18451f4d98d56397b73aa490ea9def4adaa6fbed50d401dbc00ca9e9709ac0006c6b388753cf2de5a9c2f26acc838e22bcf2e317d14f913cbe290c05981a3448686779328873a1baf408500c2dc08b82ebacf58a4d628a9a1ddd1d19129e06bc0f9f6aea392256db21d046c2685e505a569c7b2df02812ab9dd9447eb2bae4ff47d13a3f52dffed9a65853fbde88d53bf9b944ff8b4eb126dc120bd9ffe7e83694f38dd1c0095224e1f131a255dc052f4e9f588b98b5304253c73908618466cc63f60f2e9e33fd180fe432df8880ffc4b2cb626babb45be12a05f931eea32532640bce046e24a9758b123e6cf041d934159f196fccc577ea255dbd998b92ff27e2ddb74aaf4234778a33b2172623b9c411fe03ffd1c20158d3d718b516a894e6f1d4f3bcc04a04e308247f5eac9f77b49b9b1dc6504b9f63ad68a0724eecd48c576b12c75e2999358a496f8c45d256190790300071d87f666422d5d588362eb9c943f2e630478a4cc8b8b4a549d0a807216f9abc1264db9027978dc45f60689f103ec08c10fcaab7bda5a9899f770ca1fbbc1d8acd6f67b9ed34c19ecd0b015e9509f8ed16f78b9276d359edece33bbffb27728ea5e50691cc41cd7aedc3e3106f6ab0c7628852ca6d544a79b548c52cabddeac1d52a919a92e97822c33ed376bed4cb265c9ff3042b45da09d107286f8205955fdef22700b9d132e0b923e0d053b08a1aa669c1e2cfcc409e50803148af02ad4fc550aed460094963405df6cde9c2382dc042d319275fe67af13920e75afca48f18b49e969d71ef5904da6b5a2e1d3b28124a6f026304aa4c3c08d567b351fd8b5399e3b379c30387a983ea767c78949df7c2c36bf6785226074675d88f8b1e50a12971f00f319c5d1418d4e8a507360bfc405b09aa13a3e818f26129c8fc42c90b783c54cc43cd96cfec78e02bdb352417ab765be7de49810f9ec7cf578fcebf203c01de0acce25e54a6799f31349f67a0a35dcf83fb2a4e8712cf2915a1aae16678ac90d500c7cbf20c87383768a75f043741ab15f9791bcbde2b9e22ef547ea74630489b792ed3721b7f05708a84cea5857e89b76da947560026c8d4ca830187c6af7d92f157c6b74f0d4afe3ee82d3abf803ae3d337652353dfb505fe46b2a9b1cd4dc43da59a30b6ae64b776214c124996dc0a3d9276de890ae01f609f4a080c36d0a335190753ad11eb6f43a0e2963579c678c5fa1a41d57a31cad255c4fa87505131ec54db339f897606d2f051c6977fb8a44cec8ae3828caa8679faa7956ba1b1f2b75836a5864c155c0000f4f448a2a7470632ebcc6c668951c44f6ab86e42cdc375cb99383cb70f5d1d44a4d23a285c1260baa8b604cc4f3a233219b3abd0169a0259a0d5e4d5902dd9ad4c3196ec5b1a67dc82e8e22af8443b006388722fb510e3b59e58ef600d423b1c14e34a93b923680d36318f2a0e0e1514677ec03a1a723b253a90eedc917066c282ee38fe7e906553ffedeb8403df14581c535500cbeee2c59924aea4854ef866d720f9e8e90f43d7d48ab3f96043e44835c0882dc2fb567b9c4c07f1ca9a36e821024473d9684cf80244378876c83e39956eb6f54261822476d52286082dac285b62e7a235be6bd2aa812a8f556461f91abef9a572b9849cdccf2803ed2877d19b9d192ec8744edc2fbf53d5fc768348e60a0daa82844ea7ba10b793cc1c5ccf050ed8e53194de8a142503535d05471da13906665e759ec811495d7fa419c10b92c85a9b3eafcc0e9435cac6a15349d883d058695d05e03a0812b988a593e2fbec0e4b62c077685869afa87201bfbd8159b0d8a1281909707679687755fc6cb0b323c62e66b0e2f63fc8746b3221c050c966699093586e6f1d6e10b0423a80d9ab4ff332fa2d39339dc3aa71d0b6c7dde7ead4fb0dd59a71b3809f20601746d515d1ef5c54175a142badd19a48ebef562974a8b4a019e14e3121bf695e19d92945f2979f7d77c20bd794e48b8394e2b7d4edd675e9d7fcd291ffa4097554451d1d8df93cd345480c59f72266488a388035f898e70a75da566e71cb78e144160ef709c3e4001d9cab5d76ec39441555a4a789c1c914171550213d82673c71940ac56a6d0326936e4c2b960bd2dd4c948a226bcd2f0a1ac4d438556b127dae601545290a4a8ac51d19d175ec695c9cedd0db14009d544c077f793e706d7d27ec208a74acb799e856698c3472194ea5d4ee3a4d7a9995f9e60e389981668b906286fa6d9a91a241a4697e98dcba7b9152dc998d836edee848e96d651440cb9739fbb93c793b018306deb0f2cff1d30b816b6a599c7da356e435ac279a486a4c2e915c3d0272e04cdd36608ad7f12f13e5720f70b7c8299f9bec98cd4baa8588a8391e3d83010a4c2458f75a4d7b7c5047c3200a896d47b130ecc654282cc3b4a00ee1e45e4c5d164f252570cd68be2535a7158db6e4fddf96991d1a440b64b07909b7a9913fb9c49946333ea002fbd3be7d46bd858289a58c281cccb35a9c1faa0ec15a679d14ec3b5507e839d513df29c5c842cd5466d8e0a197af9af75cd9337e9af43a098178530f6b515743da4886c332cf2bda81daef5f8b07bcebc2ef1be889fb5222d8e398907430bdc4cef1abba309f855feb996d9c33e7ff4be2945cd644d7738099883db0e019b542329221fd9100f55c6c215668c7873bdda686d83a0b954ca5a44d58e2d733d4cce5a06bc1ea9d5785f6f935f01aa768296907c59151a5d8a7ec7625d541ab6cd92e75069ba25985338376a3a233af9694403f7962519c5c428161d70af8dc76b162f1b7f9fddb322910456b2fab6db5a95b2f360aa0e23dcb6ab44673f059fee4a78282719c99f17d6b865a1e429272d0daa9ef69cb2b9935801d60a7678d23ab1c29629360fbc4d07fbe4e10c99c91ddd35dc32d2cf6c414620a25ff500cbd9c68b1d6e92f307321a4695b1d0d94c99923b43ef022c115e29826db932f7d56f745f3dc9d379a4f0d09cc77dd9e71a0f2d3e3df07a65df3f1d0fc1ad1b1effdd752df617f4bb1efce87ffe6f603fa93aec17cad297a46aae99bcb1e9dc1bcd8ad339527f5468e91ed5999d10f32f89735b0e392f6ce188d53a54e5434e897ffe651371b06fa8cb60ff82c54d3db67a55b80351cabb060d697738fe0dec85ba164124c7409cef3bde765a660f6c3e7304a730b50ef759a2994315c84bab2ccd774d58b024c4b351a0906fb48fc9f3b7e915431545e23743763691d87789f75d067f8630fd7a57c9abfc17490722fa623c5443081b2efad5862c8c97f3f7c661dab87b580bfaf53380480c293f1529fc7af924620c98ed55c28349529cb3816d8517d7e68c46be21d77aaab4d426e388d71267694dfebda169ecbb314923f881a2bc757f5cb124d98ef2f45bc16145cbb766365447e445918e47d4a9e97eb1da888a8c325c44282812017376bbcc1e162679e4e30fd74855222878b5138cb5252eabbb3b9701874db30637109db36f01fe16866ce9511fc59befbc6997db29e48bef0ae0fa030ce3edd8e733b28a833f9cdf35d9f6d0213aec4d6cafc75b27340f2a0d2dbb768514d7efd30fb60543c5ea99c337fa1c838b058d6fad014d04fc0b95ee70e95a89fb4b1817821f9d6ef0b1204263d1b632bdd212ace9af4a724d322dbfc7e958dc87044788e49ddafa54cae20f1a559d98a63d8a147a85f03a294ae7feb3c823edbffffdeaf387a5e40ed2de13c03bf1d26414eddaf32a7743c2e75531ae2e76ca981848ffb2a1e7a02948c4cd10e65482d2c69a3b1df49536e15c60cc87718992adbf4946b3db5d99d76f5ddcd74dfcaf39993d95ad96955236d2cea8b22b269e44417a39ee3dd148e4fca94de8c2a0f65a26c49228004f96b01786407db34cb80ea21ae3db718584525c1cefed9a89105cd112c7c6dee6d25f35527d837f8151be4fc562f0f7ab00552bd0e83cc547488509cbfbf37d3022e6a0a39cea9ce168d1ef881208b93430a106b1514028e6f6a866b02ddaca44719e4f182d705eb801f02db5ae3c773e23da0468b4f1455616674b7eced9ad8b12746cf6aa6d8bd83a16e4fdb3b8e6b11081e4fc77e847b81535b0fd3ef7fd3db96da54952902b24fd58eb5cabe6aa1897360b162bd50451aec9b75b3f72e95eb099a4ce2d11ee0ae082c0b2e8e86cd5df2360d62e4fd631d63e38dfe573b0432b879275758e3059a744b26d20e6f7d63f82363b4ab54b65919b4ff84cb384d10ff0fb427a92295f4aa56208151b4b0f26fab32607eccebf0225ecccf35f9e1c11d24d08bdf5b3c73093ca98084e04cdbf91f3093869409dfaae766e109669125eabee4760d5cad5eaf6b5b35096f32f6a4bd3db9947d4f30e8f01195e4a5105c8ccf9956975afafd50855307d7038f26f01e9397963acf532ebfd12c3148d9657e0245dc21353ada82a741161748180fd45a32b512139d7c65c9fbb6a1b7b040a7ac7d7441624490e2a032583235158dd86cb3f26cfdd359b7a26c82623f590b827c377e0fa785c3250a094d3b4cc6608f4d7eba17f3bab93f5c2196445b192c5b08ab10ad9f510b5a8ad1e775fec279a3d49053c9dfd4dd72c9cd371810cbb4d400e231870360f76ff80d9dbef6d914102c7900ac1e63eb5e3aba328545c146f6e5c50e35bd34d2a14434ed5dbab57ad5ebe9cbba454f87c9d9446d66ffd1239f2db9ac7d31dd0992efd241a20cab8e6f6b5ccce23e3008f4efc42825ee8009f9487a3835829c1d5d78298668675c204161ceee861e64843f0722d80672c0bb5c612ad5425cfbfea780c79d69c678b6deef67b80038315179c98e80ad7ade607c24d0181e053d4991996849c8a76f3aea53e23002549c7f156e9f631ce74a6e7e5720622a216f6f70c83c0668985ab2faed2d06755f1e1230dc30cc0a7ce98ec5459e4ea5bf0a5fbf1ef268c38ab621f9bf3e815af4affbc75e733f4a46910e9f8a233f835a8d8760d7fe26fd4b5ae257f72bb503becb6736cfe16a0b584b5b4115ee6eef182219412a006a9b41a7943dca5caf02bb67892b735b0c3a8098c6c8177d536348c3d31144321c9ae828d0d518684d7c911bd30d8b89145b1faea6901ee5a6703d9019b687edc4a3055abd052a77c1862356f5b7d5d71de10b7c51dab7489abf00adb6c396bcece444c681cbb2c8a3eb3aa56cc09027890baf92e5767d12557049a64334332a6db6eea098e4a9754d9d0b9a1f639020f23bdd9b9db7280e9c9a2501e76b367620b72400e7e29bfeac927e3dca7e73d74f94cfd81e5481546d12db05fe97c91f6f6ef918c8177cb91a9ffca17155fe3e226ae6180b8f5e544510394488950ae7a7b73b721fe9e45d35fd7131e2206d9913d1453506fc265e10e32621f0cf7a282a2df1e46c5ba78e6c57732d3fe99ac5611fc07f1a15e4239866e87481b9a6a662831ff443febb5ac6872695a3be9ba8bff4b78ac7ec88bb1e62ba1febd91d143195971827c4d9c695e79bedc5a721208002cc96a2c02648e7307667e97906d242f4c62729e43cc7340245c0b2ba25d89ecd9db298f378cda5f56ad5dca2d47e3be6e4b87b4f219d152814df365bd551f1316f0afa5330c9212ee8c952c793f9351924947ca15ec5c1cff9ede95ef1a3ddca1d9ba77427e854c4803964f9a525e2656f577ca9f9c63e7881d694960193350e80d078b454f19bce8f1d08c1385f531d876330159bc388ea88b1c24660566743f10e489c5e44deb3473151261cfe32643664aac3d33359aac76b11fe66b05ab27138fbec6b41491c4d256561fd88275703f1c789ca1abb6e95f258ba753efd285c7891923d6dcccfb9db6d77143cb0ba2787c6c93285d3ffae7048435a2328e75ea43d3dbd92c0f35f65042e5d4b2e221a93884425139cfaf0de88866006182e8b27d1b59d67e4db6b8b69cbc7ae16741dd6064b3f3b682c1419c71f1e0625844f8ff9d54a36def695e4eb1f4f2797e1695e779195ff6c9c993e5dd400e6a794f120a99fac18011da2b588aff8342b295c928a08409a37e07dd8b855bc79fad1d836d6f937d2befbb3d4639ea2320cf9605f5da398dc63c1aadda81ae2b5a464106a5e0e0b19f55e936c43c1921f9a9b93d77bb76ff8edda291be9dedd504a570e821cb818ecc3b948f9471e9a1ddd94accfa21d516a9856102e8962939451faca8e05b9d70f59e7bef8a7e42e7860661abf5c13d684937dae564b46404346900a07ce8f08f169a0835c92782efb7eb415adafd293df3c5cd5ef121648c796c72618daa608353d8e085ebdc7f5482b310433060f4aab0171a75594238c0450c8ae79d5c76cfc3f0e1b12f3cb6b47b64e642e8150260b3178a90be092fb617a83a8291f65c8eaffb544cdc6aa7a2ae6b3e188e1b0e29580f7215042d61c7831874140bb872d37ba9a4ae2a9f971ea74f9244d5752b583710ca0549a1817d302dde4cdcef227eeffd75be3b3331bd32c9badb987f7f729088f2c407026fb0cf7267ff02a64ed8744a8f2f59520207523f4e605f75b29540225f60c80590d11e7231d676b3df112f3bf29d8faea77bdb4c880dab015a9c460ca86caf58c5f51203da89ba41492bfcd6b02ae1f6b8687a744e2c1618da9a7e6de4addbf077f6c6b26769365ed3c8b5bf83a56e6992b66a85cb1a3e811b381d06ab954d97e70011b40f5c520deac90361f342c0580e0b9cc45cf399b93148e3fe0af8b5bf5cf54b2449e860c0f489d0fd24d660dbb05eba270a36b4d01dd3a62258f9d7e18f464c45dc8848d881481888de2a960b7745850bf632e4d51d5f81fd891396e811d6a8e65b40b4fcf273b0febc81898d1a571b19d2e607e741ae6ed13407c16d0dbff67d411bfb5236cb82c1548d3d481c313bb4095ad5e3134e186d9be7c55a76221d31f83d98fca6036c5feb6a9271cd7f72b3d544f1046c38c6a9f2c65b89c968ecbb480881dbe2862c297551db0631b14eadcf67035003787a5b0b2a5ab9ca58448229e3e1cc2d273dde1435e6b81bcf232a452cd39fc3732b64831450acd2a68c58d3fed16e6b2df986bb103ad55e087d7e848bd14b4be24f6decc1e85a5c6d4f61f3dc0d4ff1213d4c83b0b7d27233fae197b0aa08676fa7bd66355fda894be65083511a60798cf2183f368587468906dfd9c740b3595bfc346440bc5ac317d12ab02ae7c1d2fd5c890068606a666e19e73be3dab356adb386f813293f9d73180ddcc15d47293324fe4fcce54298f30a05552e66da7ee4e9d655e6d794219f5f37c23ed97f582ef5ecd0e586deab3c7d0dc91be08e10eaec7fdfe35bfdd3d52b04e393a573afdccfb09947844ba408a19d4c81c18c31d6a0e71bf1ae8e68bc1e3310ff9604a4e6e632a59c51e31cfe99db38a44e09b4580683a8d6b9896ec28abfd4f811472642facbefc0cf1a8a36bb10d26f1d30f8a473b9b2ed62c12bcdf552f3b83651aa7ad4a1f42eea07f49472ca3bc4d1e859ea0ef11af3e77d21a93cfd6f589d4e722b1b165e8a697b55bbc25ec931f5c20ee065380a7c610b9b86bcc5528a949ab6e8e520fea2cf83248f6a12faf4e9d02bba74e626e553ae8cda408b76c9c5040f067ff377eb4c2e8ce24e2e258e122e4f7719167b77923dd7048d1b76ce91660fe816b3f7da9334de9849bb7b36731066e4c4ffba2bcb9389b5e814c95aaa8ab0ed34176bd8540ac5f7fe419cfce790183158f9c2110e61ce33f01bd1c40c397ab07ae5f54a47a3deef262a5e88352394937fc2d129a4e801b03166af954923206e94e3c07ba900e6c3bf3840ce22a7b8cae097f4edce9c592e171f74429121911fc26be029646e29d2f4f95ecb7da1f55abeb963841cadd3b63e12133eef8e0f11a788fdaaf4fe20144416dad9c38d5056d11a29a542a2bfb832c11d6dd0123771952a26978cf531b2f0a9977dc459e2b17a27ab8d2988fad9db043dd8632f4a2f49c8ee9ffdb208dffd83355bf1f0ba9469da19dd229ebd5b17c75ed9a1573205e6817685d33c3fd912e8a8f887d77877bcb8f580eb55a6d6a2ab30d25bc0f438a0283026aec30a09cfa4f2d8720bef63569e02029930609f78ff2d6854cfdbcc1cda085b8f169bbc3fd058169762180ed46324ee9107a458e8b3fb651a6a22792a4795044fbfda1b9adb25f6a2112d878574c0b2bf1db99104b54e39649446a57c29abfecd387020e702cab5e23dfda8d0c1b788683ad9894dc36d4f3e487132c13ac57e7e5d618d12d44307534c23b6c457742ad3f3382e8b682235e8d5759f6d93a780992b58aca49e681e19e31f82b39c43571f650cd6af60d5b18f7ad5b748e574cff7f73e8ae004e97baf2e1b43773613f411576f71109b1b5beb82c5dc2cef2791af14be10efb685fe6c831c956f6618834c67f23cfb143bd4f905621a1a6840471f5b20008c985362e1428d52cd99fe24e7f3edb91a97020273ea7c58ea69ba62554488b94226e4e9c971510b7498c2101b362ad9e0dbea60117feb7119c285b55d94574dff8ecc00314fa4346e4f88dac0ce97687baaa9385e4664cb4ee0c43863a16cdc8de7499220f43771599e51ca443d9e4783434722432a3645bb68abea048e82bc1f2152d32b4bfa4c741e9f81a10d043b163f705f25c731e7c976afa62a3d44e9323b816bbaaaa966a6a241d38400d4bb8f04665cde48a92cff94608271ab8a5d3be197f574f63f40599e8804328ce9aa295cd7e5af134c1ed22b3f213b276a0be47d84b803d54b6c8f85fd60a4deae9ce3aac7d4423736340298f3e965dcbc98b18e85996e731c98d7be68f03fff74562b0ae26919d79edd76109a9cd212eb397e7e0623103ba26d0488a653e01744f3ce8f2d8e6da5ed791227b91f89cf7f709825bb712b1762ce2e725bfabd6c0fb5b129a41076ed91c412f8fb8052262812d79f42e282c4445449dbf8ffad46f90d24a02aec08167116f03f395aaa625b87640ecfbabdae2bfbb9aa559f3c7b47d8e3ef9533e204ce1aef9746600e85337b927cabbcdee0f22a2f4ebbd1072073629410fe47d9dc535b95b9adad71ea6111c81338555515c9a3c0d430f8ce573ffbeeba242bba28c8fb9dda7eff046710bf3184ce0f1bd6c92793067bc833de1169efce21fbd89d06ce5d3056fd64981f8e15d563d84cdce27fe5d8c0dc223ba4959b0542e3d3a5e2407461f21f2062973a7f10d2b0839ca7adcea30c3cb73e3167b1140077b1ffee60bb1b5408459c4c54987853682b523f28af3b2ad2a8c68223e5c519c89b86f6db24f6d47eef1c019dbf6af39cbacfca6e0ffa813dd3cad10b07c75fbe73edf4e43e216395a37e624e64ab955c3214e278d337814426f10cd10f91a7338be01e0aed37467d4f09c76ebb9312de632d5b57e2fb7dd8d518c0d167543c1db857dc0b32ec5db09db76771045ebd2a00811548cf35d42df05aa47b3601084271ba50f3a2d6bdf70140d7679c295139f983028b3f92110bdb011058630c026ce88d5a1a26ba9ca6870934f6129439a391817c3ec5dccd429724e0aa97935acb333d9a62a9a771a055e3d10c05c599d8ce4292652816ebd421054dc3b6bb805eb7a0a7bffde98101ec38edbb638c1e0a4bc49dd8da7f7119cdfc53b6fe5afd84ecbc50a0677d8c5ac3f5542feffa4525139915b3aa97b036cb59c267e28e031a2abd5fba1e57b58bdedce2e762379c8b9249808636a1a438e67d10b034c07c898106f97866dbc6421d7b60eea52f2a61d1a8980b60f13143907c244331c8541fba8babf024f524be5c9995e4e3f0c9ef10dc0ddc84a988b9b7e41606d348712db2c204c40cecaf3d62c7fd2c17dbffcf4af67996a4dcd1e658447e9ac6d0bed6e0d2c8055f5bea80ae739baa622ff1d73d8768848e8d44047442add488ff7477ad4ade0b1e678d4b0ab8efb2b16dd8797164ec775542fe003b170cb3ddc5002665c209b56dd3115064e4fcd17b99864241c2848d8088208613c92fc8be2c5caa5eaa54046932dc519967d37620b606dd269e7f24e77ee0677a7d6d47dc765023a964ae8dc66c10f6bc439d6a239d151c7d96aceb99f776a98994c312b49bef5ba310da028f500b1764a107d689712dc69a23679f243778f7259d282c24872992e66060ab857d20cb9f332ee1923518f75646e0158ba2c46735319fec84f41d9c9dc94bf6036e333d92c9b8c843592afe0c594cb988150a793582126d2fdac92eb391c165a411c5685cf07397b1340244b190b3479b6d84d851ab0599c0635ca85edd89d89ea7349e6be7be070457d438025c385737dfc58f0923d22d79984f38b1b3d575437d6db91a7dcaa2eeb3057acbb04f8a4411d3a23d2ad5faf534db981e3de1beea3402a396976dedb878decb81af2613c882e301367cdf4cf60af68997f22ea33094511329ffeddcd61c7ae9af2b346da2165812817775662f7ad61796e5b6e1e3adf6891797fc7cd301da3396da3555e7ec715a95ebb57ef3c72048b2f6ddcb14acad45f56e2f1307f329e3af8c9e57cfe099a0f39c18dc315d8662fc35413442b98d9ee6a91dbcf52ca97562ccd29ce54d57b8ddafa62bd0ab442d2430e6cf7fdfedcf934cc47be8bdf2a2560f72113b19a5ff2ee7b22b98b334a78c12fcde61a3f29457ed84e03eeb08c63f77dbadd91e1c8e9040f5fc35aedcdbe427dfb312e0af9f3a8cd3c630fb11f101f5519d30544d51aa55ef0dc407bed5608416e59f48baf70ee1dc8a49d6d54fbeae596cea608bd65214952dacab4ceb664d60c3399a4c55503f51887197c1b77b265ac34c97b4eaf9e56a0289180c60d13e43faa08a913624b7f1674858d3206a3d999888ec329396bf71b84b0ea1d66a40c8097e4ecd19b25191518fc841a70a5a41bcd202224457fda3a7e0ad6fbc63c9b9b0db018f87b9c26abccdaf11d842f7fdd35e24016a3f191b12a5176197fe750cc1e65a1df1c91e4868d8d85be0a1697957a6a921f24f9d5e3c25b0559179dfdb61304105564a8ae9faa75b59c075ba792886c4afead7a025d26531fde78aec5ffc3cbb00523a085e1b4bd46530795ca2595ba3ae652ca23f61f3b8154f9c29298651f88acd1cc32730b7607d3212765f389e040f3c945938e5be7eac7fcb87638fdc368b60dd09aff2db9f6986c116ccf720aec28a8196896e7bc7e1ecb23c161033c7a368a8609b55ce1e7c1fe3397e4e126f10190dd23efe78e698f939094a4fd751de15d9d7ca8971c43271b4a14d57ec8939f67374d7ceea7fa20bd338b9279cccae6fb5f1401c9057444a0b903652c88155bafca1cca03de79139c0871b44a50e30aa4d7fbd7750886316cdb93436c1163faaa8dc2ca8474c799815ea12fb24dbd067e02555bb7197045b7b2401c930cbc4934a6641beb082350c8bb758035f574204b1ff556cf7696c45c74787619f3e578343cdb6fa9ef124045e98e8524ec0d89c5a09dc3427e69453385a012ade666f17f123418382df1e1982b2e1debd3bc2a50c35ac2483d240667d6e85870ccdcb40dcc11e41c9efe8d8f5b648bcf63d6385ca8aaf02daee1a5a74a45b255d9d58b4d689120545a2407a94c2294804b983c8a7808790de3bc37e1d994044a3b70eb1ec5a497ba97f6d58bc7d3f7aec6e203e790866e3f19088258d679b2c00b7ee238aebc20e3caee911cf3730783d73155dd35a862626977750729aa03d6fc545635dae412f591b65361351c55622dee85b706a94b52968584906da811f01bd2439599d55f7ae99b55db580d4b3c5b3c798ba55df9ed72a5ebdf35ac28fb943756ebcc1e7e1e87e360e73849acb8d30c35422edccec5f347948945650f33fceabfc5d9425b311477acbcd6365c027eb847d03cd6df19097f3bbe168b5ca3ac9a8f0e3ca9c2cd77a65d0947e87cd34e82bc54074ed6e5e4dc39485b8c2fa1e52273c35316fc05f90b061dc9406eb8662c32f0c0d879904edcb220c1c052a64952db15868912e35b80ae1f32adfeac2e1bf1938470ea518acacabeaa8c7e7f525dc2b9f803476370d12084f985dc1f4b3f79d91b4830b86faed758e08ac649421a4c545a7a901308e14de1fd6b8c9dc718e37566e353cd1cce93d25b3dc3aef7df4ac17bba5b7e1e055eb341eaee0876c9e3d6612092f4f910fce4237426b20cc5853c972cb0ecfd311e22d7e4711c639b2f2519d5ad0edfc55b360ec187c46b4948f9184fd1501b36137d4a36a8d3fce9d1b9720a015dd58589787a67f3e96a15c4fb2d504df1fe0007febe939db9d4156fe6488f5ae6958455a73c7635315ffd7a5daf230c8fb61f5cd7edefc8a10c0e19684b2ea79ee70732a64989bbe5dadb638393c65fce0203b18734e5a92465032c56f598f761a9f9bf9594c29c92a64f88579d91a69fe73288b05b2759baa249bc53e921b72c01432d98eeaa6d7328efe61dbe82e50a7cb742aa00aa1924470d86aa6bf0b9c6b558d4773e5419bd0b7b6a8c1268d6450455faedb6a68c1a678f240ddaf4ad46d64b380142bfe95cb6cc4e0b98f9885ab02</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-wave">      <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-wave">密码为我本科阶段所在院校中我参与的信息安全社团所属上级社团的拼音（不使用拼音符号，共13个字符）。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">【Pwn】栈溢出基本ROP——ret2libc</summary>
    
    
    
    
    <category term="撰解" scheme="https://www.gh.zhangkaixin.cc/tags/%E6%92%B0%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>撰解 【Pwn】栈溢出基本ROP——ret2syscall</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-pwn-so-brop-ret2syscall/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-pwn-so-brop-ret2syscall/</id>
    <published>2022-06-28T16:28:19.000Z</published>
    <updated>2023-10-14T12:11:57.426Z</updated>
    
    <content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉，您的输入不正确。" data-whm="抱歉，您所填写的内容与哈希校验不符，但你仍可查看此文。">  <script id="hbeData" type="hbeData" data-hmacdigest="d45c1f7535217ad8f43455e4e4af434466df7834c41be75c62e44dc1d5a2f679">40e65372b53142ce66afa8eee6834c5b0fb81dabf70cab732463966a4c6504d11a70220dc45fcf4b075d7b054cfce884c16b5fd9ca3c8ceed1ec705dda6919149cf9f41d5eb490a518bd489d890ee74283b211b7f8801bdf34bb29bca29dac9a8e9f998c53384367b2801e02bd6161041bf38c75f40daf069106e64b643bf5ee9bb16758724fff7a207027aa5e28272671701cb60521e17f080f27bfa75b6074c9a68060898748c6cf50584cf208c84fc460812c54fbd630b1c0f24c8a3bf9bcc942eb3c2d2f71691b17110f32c7a3a04e2ffe25f4fe55df6696a52071e569a1543ab4b2779b998265ce2213e779c74b1422a812f260e9aa0f47b8d92801d2969b0ad5501524d9fd8cf2961734ec6546a222670ee8d478e58ceba5b6cef5351ea70fb93ca0278b2a4f3d43d928fbadd34e486f1d9235db60960ac1e93022920b91f1afd7a7d13730375e96270412588c6a067b1ed952247842a53cabab5dec07856b335cce16bb0f541a04bf91fb8fefbb25357c413783599e65ae1b4e8e8e1726cc091164d29af5dc7f7381b8c887bc9b72d6760c119e3eaa9766220f1ef02ed0c1509d53bfc8b8d0cb6db338f0b1ab3457036634bb424721972de9f17a074fa26a5463d2748cffdf85190a6cf0155a020218030464a3c4402af952daf007dd368f4e398cb82702a4089ff38de940d0601115d6013d37835bef7e5d79cf0ff1eedc0c3ca5545faad5de136a4d6637e7da36e1753a88d6f591be2de747c986ce46dbb80896c4bba2a55b9d0a83ee94ad1eecf1d4e730a5e3c2299f52435e5606b8baf0c5acc3511bfc1caf21da8aa32618d1173c8d1045303f6d99da74cb185f993deaf70e6a194970f62518b6bdfe5c072dd2a6bfaf3a7b531dc96f80d55a8b539ea1b853477ac849afc031ae5af47cfe1f9c61eb4869fe5fbe5b6de8ef08124abe5d174307f3c23677afa734c7e1a9f33491f7eef59068bc5afb407c1a0cdabb4bb17903482f7b687269a0fe0e4a29edba984fab9d6e5335097876d9eb7242e26f92343895fb003e953507992ba5f69b68932fc7284780888938addb728818d0d3a3f158c6d57fced987f942c19ac257b10cd209e9b27ea2b851de04263bd95dc15863f5b84ee255bbe7cecff748e671e109ffe3d6f9deaa05c376f7ab1abbf29fd031e0671a7a67c55f8406559457d036f3e4ad3131a4c3cac658a41d0fae610725b51b7828a8e59cea42b9cc12cb08ad10bcbb9b79168ca6fc8f0ab7d1ef93a4da809d98a7a7e3aae21e026aa3d26887cedece6c2ae884d76b944428bf01767278790be69939eda237529832daf5d385d8916f2f9e3b2569f190d587682273ca10616380457c2162c141cecf9c7a044686c189ee7490246f027607a325748c56d7e457d227de2bb5d9895774fc949d9322e542cd363432160bfe25411f6752ba16e44a6dc0fd347a0cf8121b1cf985d830bce6e28c252e3317f6cca939a2dac2b3ffef5fef9f645c01661c85d8e8b996f5ac6ca357915e6213de81d0c3d128fee5418635edee5ac35ae3a0cac19457a156f9c412c32e29e9a46d08c78966a7ef86e785679f14ba8b2c900a5a1eefcf41195bd3d12602a7243b605cac7e395fc92b7871ebc9862eb76ee64647fcc28bcaae1debe54dbcc605ca1200662ddd4021a413554a5fce00bfa991a995994f2028e9b86bc95e764f171532d6d1a2a9504f48e94504700d4e618b4b32d72c7cb56a092e452d7460f5ff3dfc1269bc2907e72bca902f6190006d1572fd6fa60fbcccf75cdeeef58f0d007fcb832327f090c75d1085d2a1a8c942f9a9e27d22af16bfdaf34372e59f5bff19222b9de0325781fee732ead4347ed5752f249996d5c649ee167e378d9fb7a670ca6db6d09062beaaab3fc80825d6f27195cd00802c74d3b3c7c5541d46c8253662e8ae9f98df0fd1bc9406aabe4be61d3bff0568950c0da7144a5b4df4c9e1c356eb873c7603bd66b117c347b93e1a47f912bb511cc6d6527cac0bef20d90a3656d405af063c1784cf5d3b64c8623e1b9efc8098c6565696154d34ed42d9b4e5130c15390b8ac0e2ac6a65e9c15023eadaf8abe6a2dd543a36b6a664dfaf1a0d7ac5ac7228ac5e5b53967e80ccb91e8e2f31ce9615eda5a6d0578c9c8d883d4299b28c693ef5c84e3d732e03c0ff59728bfe7d7dca444881b521896fc600475437fe47335e9f8e3af6e598567b5a6421e00f0a464def62fc19807f609578a815b9812a1a61630f61afe3467fbe70751ba5d0f0ebdc425179656a85ae76473e9db966e45a16d7119c118a12786a34fb33c461c2845274b837b64087e5fabf70c51d6da8cb0ed6b7869e67f7902702f577c41f8a1ae5a49581d4757d2d3609f7fc663a38e5e97b00120b3498fee4336335454984181f6dc3fda2890998bbeb4ebde76138dfde672b8f04ba2de883a466aff861d4bb7c69aa7cc8c694b1804626ba3bad078dd2ad7ec5417973b459c70a6ed73932180cb321a03529e1d2a809d2abbd750cdb4a3ed31cb83c90ce2ba07493c2e647f1901d9aa75d39b32dee912963a847c09e1b64b099dbd340be01a0b7a2191508fbe55d0d858b0446cca98c5c3e271a603dbbf3f49c8dfc96d2abf40fa752774bee9415b46cf73f69cdf53afe7297b5d1c33a106060d4171f5ed3036fa5745c73257095189ec9a37a95d2b1a25b59364a93b22a7a1ac948c88e9e39331a9519efc359b89d80642155bcc6370caa0ebae6bdfcb98cd225e94e684ac711e7b637a3dbe8ff0a9ba5ab59ae8c171cdc7cf6808dbb8199435e2c6729670b3376650bdfb37aecc1a87c3c47b673e88eb212c22c5bdae98ee9967aa529690216e32bdcc5724df7d1ebee56f1b546e7876318e6b8bb1dcaae9c8df39de44cfb03d28146754e5a0352d5727caac5ae2ab211a8b0feafc98f7080163e1339f2a33c9a89b26884ac2f4ddc69f1eb81d99f6798f4716b212bc8cdd4e665ad14b6a64d143d922f151a23dce128bc6dfc0a2284b8fe066fa54ddcd2c8d850e8974130fe740a31e41c08694fdd8758804c476fde3a1696a4fc4fdb3e66dc906b55d7ce440cc26b62822898cfcec47b01512cb2c0d86ce8cf24f44b32e400967cdcc37f1b523ba6159e0e22cb1392a0dd9e257d9b66fb61be4a5864e232e583c7c0085692d32e098379efd00f79fb7915903e525bf6612fb2f6c3c2c396853f5e578cfedc6d714600bcd07516958fe503db479a46a69b65945dc081e292e5220ebc3bd495a1ec28d1d9022fb8516043743c85272899d4ee2751c3333294345c998b6a56316a7c33b01510dee8c6603f8e5c25e54bff5f6a810836090109cf781779645d27021ddc5e8ddb86e3915eae3f74943fccdbb5bd5e50d4185febe27d659e25cde1ea33b39d1ca53d1109f6960ced2a8ba00ca64a4bca3e60c805435e174ace34fac4214267d820d7cf460bdeb8de6480bcbb786a2f9b582085a1cf140e16217d799821c719d3bc3c6e42944d0c7896a7f7055790bc40adadbeaecbdc2408ecd0b9795b62994c71aa27f959d8dbe4c9dbe4db48e87d40ec3e02d4ef46a66b854532de7e479158ad939d58e1474f6c96611435aaec1562bfc0affa9bf330f61607c38dc54abf00cb0f1ee39f33fa15c60deec4c9637ac572e872dbaa0ca09caedc0921c1d7ed98bf0d22c6077dda350dc0e0bdf72182e7c72ef6a6a4c2dcd9b8fc119be062495d7da151e52d6d362b4f69a782963ff4520b3598c58303c6b6395cc803c33c0d1902c01c98035c114c4503de0a8f1b8ad74520d5f6239f342c66829605c3bcccaa8c165fc5ddef9b32680307f1947dd25f1fbf6f58db7085b2cd5433800c882c7e5dde889876b00fc4aad328782f4cbca8d8582ac363704a84519620b32b410854b68936043a17eb2c5696c113fc7f12ab5faafb3e82a554a252beab62c9a8092cd1d5ba0ef373de9317fad4fc8bce957e33556989cca9ba1277b71ba6d1407720b519c9b32412356e6065a4de072efffdb66657276ccdcb3665992d931afc80968bf8ab68f90445bc5bac8be243ba265c7090c4b4ee0659c9eda68d9e434cd227a5dce29bb18c9027db53ac7c3069c9d07c0ee7d88db8e46736c82d3130987670d46584cca599773f8e0f57858c5dc344274ac0e2e24c908d2f6d3446ac2c3eeae5396e0c5e7720ac5d65847845794cd881c4c1fcfdc01b61f38885b3d52ef300868df7b946bf2adf5b9836b03cca488c58ca17f70a7599f51c0ad26b78b06d44152856056ce0ccd193bcecfea827945c51735f01be3872a602bf4617cbd73699048143c9cc5d95b7aeec9ab1c09ac86fc1bdb85157f45f526f1f069361aab3f9fdcd93c1ac6b831529dbbdd6bb69c9525e9486f54d016a54a5ffffa2380d6a9966ccad50faefe15cf203f4e033d86c364d4f79dc2d32ae1dd69d7f40495e39edd3dba8c0f0c83b35fd680c2169030ef339cce046f0038a26d854e808b027eb1a88433d5e3a35111b4204b5cdb8e6fd095379fd51f33866c49a40ca6ac845e77b247830cce920ff132251284823109471b683c8c323ed6aad15d65ffda3dfbc0524b6b10001b54d6074e5c546b7f6df601f47eb12f289aa8453c99043098bccd9d17fd2305537a2342e5ebb62dd93831f1daa427f4c10bd4e2fd05145280a3336cb71a810ca570726d64e5b3359f4f1ca844971b0f3f5cc3cabff187120680665f6961035f98a619d49454d07abf926fddeb323bdc00e02bbfbfbd5e1548289627f0bc5a2c0f9e8247cc0d58594ebf4a3d50256ceeda8f59cb94bcb59d1c60f81223f2492c515867156c2ff77b3814b3cc494ea6bb2e37de2b972b05860b967168478da629d8687da4b65964283afa8b3b111ef2430f8ba5111d642339075a3eeb8a67a964291a02c3f1426222d9ab2e6a9bc3c0d9aa7c8eb2b97bc95e298a5280d4bf8abb68e729d3f7b40549c9a5dde8e683787bc8b35101cf75f69e43343b0ba417e04125f73fb4792beeff4fd7fdbe902810f46948849be664f8ca8e6254e85f0f4f671d741b9030881a70b01ca95c709b8572941b62bf252527017c3f33f93b1bea8ca98a46e6c87c091c5182fd1bc86793e1767bdb3846ba6c896193ac4f182b51c2a38b05ab05bc6c1967de37c0103d8c96789b4b2927a1be17fcd9078033ac0aa61b0e3c776e3c09c5ef34b5a5536fce0aaf5ad47effa96d7113589d1f7d609a71e4cb69726d37c58568c91e6a939c92827ddcc460089d8f420575cf76c8f60ba0f81555b8df40f1faf4466692b58a43a37aaab6c3228b28d551127f4ad5c1730193bab7bfecdc40f285e163813a7d56334409c8b561e834e791f171e2a0e942d3d52798b2f030fb0938cdc8be43b9504f3e458e67038aaef33d41b7432066f630437e1ae6490695aeb9cd3c9fea6933bf4e069caa36355bcc3a5cc640dc94d6c1fc5a2d3b8eff3ed21ac8feb1ed5dd6110007bd5740a0f897f5e7072ff1fe4161f6983396c48b81b9e52bc38257d12e1cebcb564988345ceab80ea78e8ba02ba3de0f020e585a3e1326eb21005041c4b134e65591f4238027e421b44d78f7d0a1b1f02493575fa5b1ab11df0b02b81e440fc0bbb9c528ada2001e118f36e22a5992d7608cca7d73f8134684d4cfe0aa02613b85c1cb62ee6972ad2d261f2f5d811384f0b82f27f07002c3ce91359197fd605eb52dd741bb6547570e485801ab34c523c77a808b0181934673432e1b3ca45186aa52ef4ea6c8a86bf17a88ae9b61cbcbc8836fd7a06d7bc8ffa7724a1dc41b03f3a713c1032255095073e9d742ff130c8013e8846abd19cdda06dfa1ac0de85df9ef361782e0bed75f4f9883e725ac5392637ca54def1846a2bb5e9ef9298b95cd8e13ba0a3001adc993315b145fc52a54728780e101fa9f9edf22ae30b8d5bf7ddcffea94922b1d312c9733069f51046634214fe2d5befd2a3fc1fe057dc29f21e2e3f24bb5e9b9c9835d6cacaea09defbd023a4ea5d3423da0f3c6f5a48e80bdb6e6cd8833896d5969b83652dea76120a05e0d7355a25f42b440df077d404c6db749a0d1bd8ecf132dcb47e790d1e09f6ef009830777dde0f9aa980ccaf75a8db30f8859ca84b07ae2e122143acafc901b5fd81b0ccbc83609e6e5187231f8968f2334f78ca8ec173201fa2f5dd281630d8913a173a1b8baefd5e9dcae51ad06516fc4ae6948b1898d1b921f9f6428a8d8ed6c922cd63af5e593d6e9da6f816f0857118b9a6730abb509e895687e83afdbabeeb4f03c922cb6cf12ae05a17e3712e3bffddf67ba285f58e581e85736242530d8e60590aeb4b5b2e0df94d5e227a8f83a43a0043a2d56d79b808e46466db1c5c7b9c78b44519664051fa98762be7c01aedeb5b80d69eb81e1c79b58bf43e9e3c78f24529b7ef7dbb35a583140534a47c9717840b18fe6afa40239eb00d0c7cc3097de162838754ed404314ac2d88cc387ed206064879f7f9a69e4b401fb9b90ad1e47678824dc59ebb9365fee4787b28604eb7974aa3a521264c6d57a4c1e873e29a5e20ef71268a5dd5458f334a9aeb50c41a80cbe13639dae48195989837a5c8a135c9be18962118bf114159c3c8649c24843517df19890f165159f2412e4a8dbe68987c20f0663e4845237796c5b1a169ee65e855a8dbc966cb412dcc875561cd5d86b5857a4b8ea0b820185c69e737995182e1ea4ff3ac105cd56e977c1ed96c54bd7bcc453e6061c3e81dd42f1d672b96f1c1c5183513a9e3e56b0328ea1f90377a31f8d28bc4fa9c5948d7ca9444aee84d1ea794ba5a4a86387adea6ac72d9b108163b6283d3cf864a516336628516aed1f2dffa08130bf5d1bf109606cd0965c1f70eb3ed993fea399221845485b30cd343a58e48a10ef57720292e9915ea5e6cacd215346b141b613043a20e18e6653162a81572a179a4272e3267056e0038acc5cab7c2c4fe7444706c3da2abedd64c09224aa09068d5cdf31c5004215358bd09dee46ce6540b95e074ad532e7d1c7de71486ecae0404d307bb5ade97b2f29cfe1e1846f4559dbdbcc348704d00d9c934a985c8224eaaf553e9d1e696d57769d1763bd7e71d723c7f5ca24771d9500d0e7c99cd715f304f38d0912a1f1860ec7c959913437b11a1dd3442da282b9e9c79cd4d470e906a99f74245f2e0ef9f5e8f6a18a5efbb3664cfc7b4b555edb7412ec799f64c79edbbda538310bbc5fef21dc5f155802db69171d65d4235347937abb1e7eb58875d926cd29f5eb502a86ee0042f4d73c482391fbf3caa7a4358c0516d68fe62834731299ae6a497ec681046c3c99f0028dee6a1a12b1bacee0a9c2597354d1129fcd1039cf661c065a4d730a3af56aaa9151e94a31660f3402c8214c063</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-wave">      <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-wave">密码为我本科阶段所在院校中我参与的信息安全社团所属上级社团的拼音（不使用拼音符号，共13个字符）。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">【Pwn】栈溢出基本ROP——ret2syscall</summary>
    
    
    
    
    <category term="撰解" scheme="https://www.gh.zhangkaixin.cc/tags/%E6%92%B0%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>撰解 【Pwn】栈溢出基本ROP——ret2shellcode</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-pwn-so-brop-ret2shellcode/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-pwn-so-brop-ret2shellcode/</id>
    <published>2022-06-28T07:28:20.000Z</published>
    <updated>2023-10-14T12:11:57.422Z</updated>
    
    <content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉，您的输入不正确。" data-whm="抱歉，您所填写的内容与哈希校验不符，但你仍可查看此文。">  <script id="hbeData" type="hbeData" data-hmacdigest="7a19554a0d8d4fbc2f4649c91ae995a7fead18f206f1b676cdc915cde64738e5">40e65372b53142ce66afa8eee6834c5b0fb81dabf70cab732463966a4c6504d11a70220dc45fcf4b075d7b054cfce884c16b5fd9ca3c8ceed1ec705dda6919149cf9f41d5eb490a518bd489d890ee74283b211b7f8801bdf34bb29bca29dac9a8e9f998c53384367b2801e02bd6161041bf38c75f40daf069106e64b643bf5ee9bb16758724fff7a207027aa5e28272671701cb60521e17f080f27bfa75b6074c9a68060898748c6cf50584cf208c84fc460812c54fbd630b1c0f24c8a3bf9bcc942eb3c2d2f71691b17110f32c7a3a04e2ffe25f4fe55df6696a52071e569a1543ab4b2779b998265ce2213e779c74b1422a812f260e9aa0f47b8d92801d2969b0ad5501524d9fd8cf2961734ec6546a222670ee8d478e58ceba5b6cef5351ea70fb93ca0278b2a4f3d43d928fbadd34e486f1d9235db60960ac1e93022920b91f1afd7a7d13730375e96270412588c6a067b1ed952247842a53cabab5dec07856b335cce16bb0f541a04bf91fb8fefbb25357c413783599e65ae1b4e8e8e1726cc091164d29af5dc7f7381b8c887bc9b72d6760c119e3eaa9766220f1ef02ed0c1509d53bfc8b8d0cb6db338f0b1ab0853c6ae3c0804e5ea488ceec13483bc80ac530df33d9bf971e43975a7d122ef9a4100074c26771ed54c767a96bf1c7750428baba7a384421074b7a10092f2700451f4a9108c778fb2a71783f19fbc8f72396e2fa03afbc0c1712c1b138719648c6a809200f259c020db1533b7e6756199a7ae851ef323aaad360a6a55b4cb21d8d1ff8cb3b3300239381207666d4584ae7008ea84084d1a57467a9b159a2708e7eddf120c462d0dc20b4e154291be3ae4f76119c1b76fe75461b421534a7b9c5b80239408db191d8b6e3890b1526b0a09366a9a2e2f3e437d0ca62717405cdc5fd6a2cfcc598c08e6ffd8a468eba4e05b8ceccf09708dc57cb1eb24edbe5d16554eda1bbdc69a98208eb7fca3ac8db627d8050ef4d07216c2e490e8a3b25531586a62c74a03b80ce3b5bf215e2b66ea36a205c547c2dd8e5f5a81590fda98681cb51fde5b0e0207c6f01c21b8da368a7a2ef8a7e785b439ee086cf103ee28f992d9873edc56b66eaa3562fe878a6af5d87c1a27dd928686bbdecf6c27f6180b2522de3d47994c8c1a841f3f57cc9115b4ae0df71ac47e5b8b1a0c3b2fa80da96218b0b281badfc52c46e8b440b7a174dd377a554cf93c4e8fa9932ac9b5eed157f40fe40011930ffb7e5626d04b2f36f52de53379e74523d0020a628e223575995fb26e6833e9153f3126093cef695f81a770c0608a9b6d2804e47e9d2767d9f715c4aaeb83c7ee9100dbaefa01243ca3787ebc5b3cccb5cdaf44999f6fed42442dc1740be171183e32d411dffea14a72f433ec0e6a51c17aa81e06f638459f9cb05ea7df6ae3b74b767fdfbe4100a61f54c1d357343069de24dbd02dca7a512ee97445c036f8e922e4d956165fce3413971dfdff000db5a451401d4f71401232a3d586dea4c85f3529c91f9adfb04d08afd82abd5e45565d460326820e080f12ec50f3b8c023227d54317aad1948a46bef1d8996cfb8c31fd4b4d3566a4751786c2e402ca15da48c595cdbaa73e29aa77ed53f76fdc3d0c451c9aae84acb96b0f4320f375b88fbdd92b030fe037b227f8d161db09afdc65fb51b79c5d0d3b0a3b7033ae95c5f594c596fcd5b2c3d4d892a5f9d701e05a324962c95f03a03dab88c48174c5b955ab495e21c7548c3aed63823497f26a0239ed407c9c1ea7730c37956da30ddd6eee51b078e4ba5b98b418d460effc542df6a5859cd26c02ef7bfce7218e6a683694015af3658ada6d57f175c92953fdd38328855fe928b9dfa0684aa2a61001259f758a8d31b7c5dee370e0c357bf475c13a801ca5601868b5442896fac6e712aa2369f6947fffe5c2fe7bae1bdfd9af4168ecf4e0bd7083d0040e26e5fbce74e4c8d1c92af2f66e69c372ea371880dc0e3a21307cd36d8bbd41837094ca5363fa54aea2c77751408404138aeb81480aefef5cc4811aa36ece05f4ef74c8f9f099d0464d83489a77ed28caf300d5bfa5899a63cbc2e2141d5c6cafdd10ee531b95f4f555beceec65011782c8b088bed8dd7e159b0235173577ac38e3ffdde3d6dea5d47955c42f6bb452a498d093bf628dba419b10b5f0c3b1ca5dbc8730a689686c55d5c7dcce5c7bf36c8602dbbbd182a0041eb7232ad3336762f629fb49623623362f4ea0ec7cde442f9b0d21e1678d90ca1a2563aa62545a2be8928f68570cf5060e183f034553b935b0b4ef35423854a70f7b8d2e79795874cc9b121757363fdd4c07be4885e9b78b0e2e8e756bab678128d49818c9e48d1922d3178c32177f82a81ae1e50df636c5862d5af82cfc61683a9ad898310ac4b17199f51a26af88cb85c80313668a49f57f38c93e067972e251d0015bcb9a9470211e853d2c6a3ae94141e12fe1cfd7a41b7001ed0a8bf277ead8063751f476212a5c2a0d0694816ec74f48ba2a56e3b255dc4e855b8e05c2058487d5fbb73b4337a57b9508f5502bebc1a06dedd75a103076fe6ac2f450961b0d79482d937b54038137a0662a1ac0f38aa8151796e5c29ef715374b7caa81542a85e0e1d48769a45276b3a4bb6771afd3b8f9a5d46bfd3f8d62abeca3f0844d0db0a31d6c8dc4a1eb26e53ff4b87ab00f4f042fb154ca4e50eb0d127a9ac3a8354b18caa4234651d6a540a8189ec6874073e9bc2562e61227b4cb1dc2f34260d5fe96e951a8f09d6c9da8e2965671e3dac5ce92f3e564ac7f05ec0594ca20918250a70b1cbc736269a6f149ae70b6ab7d8504abcb330483042dbe587668983f0771e37893760ad7362ce16496471bfae1aeb23565786883d94e9ca61524b51de5e25bc650e882a7e1a8e1e84d2bb07df02561a2f9252887b75ae8d515286f803f806ec14dc901a992449c38e9addd7145024d6d0f2c68501281211dbf333906afecd7ee3351b6218bc285b67584b298fc7c5e6caa4f142622756f76bf87ba905b79aefa88a68fd438f1057159a675dc0b2ebd5ec475e64e62899947319ffac7e8e70d83c18d25b7d2f6d22492d698d94bec6ec3a6d4665881cc29e2d3162f863b29cacf04dbfce8542ede2e8032ba83e817a00bac50e610060e1687b3175426b3ba20e62cb0701e7c5982488de623b03a2ea09451fa65abc9edbf73f4469c6cf13536882f6b50904ea4a4a290efc914707a9dbb6cfe6c7171a108f6fa10c87f95feea410bfccc071ea4f32c0a70c55e8d7622f2ce7a62eb728143174cb5ac309c391c1f7019385c38e9f11ce73897e7a5793995c09c6e763f055d7016fc65d502939d7c00079715f816d6f6019f81a076d4b492aa20d0186d07293845b55f1d41b1e4aa2dcef3cbffc29ca0705c7c5d2238c987c5dae5561b3be5cfa2b4384a6e72833b2c0f46894901f30a06c8e6462794c511d6894d34b0e6cf62306bdb3948c12b2eb4c1d549edf396aea1ee55c0bc0403e9bbb1effb7a4bfb4fb9aa4d3e4d113b715f18719ebd919ebb59ba07aad76622784d8fcaf454f83006f02e7b1562b8208f1992b5d59af1ab9485bbcd564717a7379dd2077b070702373b5ed63662949767e2949d6a97e0ed12d03fdf9f1761c0378692f940e68411e972c17deab4a86a89fc92aeb63c45e5590650981a4382067cf2e8bf3f17d151f32a73f9f245980721a576db92f5471a7ddf76895644c19e3c10eeb35633ea254ee47cc110155ec703c3a164bb7805cec93694c38612287214fa4cb964cb998c52418bb312381ddd5b462171756a6ae51495e798c479003a3259493e1b8451fcf32c1f899643018c615233d61bb830639a62e23ccf569d33cd7f38cbc344f37c7a79ea58f6ec575d24aa355017cf8b017d6e6fc7aca129f138551f2bd027c4616bd86dbbc67ed30f8092c5be349472de000859711777ee6ffebd6e4f4c9a1ebf2e965b96081086a5af900cab12c39158761ada3a2e764ebf4e564032196925b0db022ce6469b6f8254345e84cbbb4af9597101fe3424dfb51711b959de105e1256cdd73870704929f8bb478857bc0868c7ebd4a53ed39457710a5407f0470989aebaf9488b44ad04083714143f2022ee6924a2364cae36810fb73e4aa8f5044efb4734d63fb52a58ce502f1c210c60ca8c8b4ec9e0e886016e82415d9a5e4a99b3155d54e375ce867f29ea7ad94842627293677bcf5fa1d3ee474de01da691aea295e3c42057dfbf2ea45d7bbb2bf66c9c5ac3db7ee61edecfcb2f37c178f167d534944a061b8010bcb84d6938b4b758818a2534ec80315af949f72fbf45830fc20a4b233dab7b336872d619def4ed0f77ef977cc351d4b55ac3</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-wave">      <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-wave">密码为我本科阶段所在院校中我参与的信息安全社团所属上级社团的拼音（不使用拼音符号，共13个字符）。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">【Pwn】栈溢出基本ROP——ret2shellcode</summary>
    
    
    
    
    <category term="撰解" scheme="https://www.gh.zhangkaixin.cc/tags/%E6%92%B0%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>撰解 【Pwn】栈溢出基本ROP——ret2text</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-pwn-so-brop-ret2text/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/WriteUp/writeup-pwn-so-brop-ret2text/</id>
    <published>2022-06-27T07:32:35.000Z</published>
    <updated>2023-10-14T12:11:57.430Z</updated>
    
    <content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉，您的输入不正确。" data-whm="抱歉，您所填写的内容与哈希校验不符，但你仍可查看此文。">  <script id="hbeData" type="hbeData" data-hmacdigest="3cda1da61498ac2a4f10314aa79c85b6ba8d7601a5b65874f6b4b7411cb23584">40e65372b53142ce66afa8eee6834c5b0fb81dabf70cab732463966a4c6504d11a70220dc45fcf4b075d7b054cfce884c16b5fd9ca3c8ceed1ec705dda6919149cf9f41d5eb490a518bd489d890ee74283b211b7f8801bdf34bb29bca29dac9a8e9f998c53384367b2801e02bd6161041bf38c75f40daf069106e64b643bf5ee9bb16758724fff7a207027aa5e28272671701cb60521e17f080f27bfa75b6074c9a68060898748c6cf50584cf208c84fc460812c54fbd630b1c0f24c8a3bf9bcc942eb3c2d2f71691b17110f32c7a3a04e2ffe25f4fe55df6696a52071e569a1543ab4b2779b998265ce2213e779c74b1422a812f260e9aa0f47b8d92801d2969b0ad5501524d9fd8cf2961734ec6546a222670ee8d478e58ceba5b6cef5351ea70fb93ca0278b2a4f3d43d928fbadd34e486f1d9235db60960ac1e93022920b91f1afd7a7d13730375e96270412588c6a067b1ed952247842a53cabab5dec07856b335cce16bb0f541a04bf91fb8fefbb25357c413783599e65ae1b4e8e8e1726cc091164d29af5dc7f7381b8c887bc9b72d6760c119e3eaa9766220f1ef02ed0c1509d53bfc8b8d0cb6db338f0b1abea0368b165bec0a63076d7df200b113a1eb598d3e923027f8dc276340d60fd2f5527c7f2da490cc6e5678d221e31e5a5a6fdaa1bd5fff4510e28ffaa896bbf96b7f2bcbb3989315d345d05ae4a974bed154c4fc1eb3e9d7918b9f5893cda295bcca2b955cff1a77795a9ccf3012d7c2bd8188353ddc01c31c8f20fb4aeedb26ff3cdddbb7bfa9a2421a1ebbf81f5b64631388562764ccad98608a11dcc909e3492269aea3bfae5472f007888e51568cb087e3462651e5f9f84cea508863eaf26c2b80f396c41796477326dd1b75ad10cce998fede318ac59d378bbeb1e82d248c4fb54e5a91565b3b05ae39c9622ee05ae8a1a022f19e166143b1df55069e8a0d636961ce536d1ad60b7031f2b95d696658907ba13e6c23c8cfb7c0d7a7aadc2f6d7c204f0fbe83108b72e96da42d6d5a831b3bebe4ac638f2d9f73bfa4657b10a38cdd562c449a40d98c67c2f564b12bfc4a9e5d6f1716aec7ad905aa5d9684fd1122fddfaef29f03250247995c22d01cadabce46fa0bc53ca095c178cd2925569aa3cb6ad31be61d9a46afd00e198695670861ffb68a046279534863d5f04e92a346db46ef2b37361d28111cfccb4c143f138a6258f6ec2d45eab080b55a34bc463faaad8e249c51ac658d6e79b18553d3b4083dcdca62a3bf9f7edf662f4b2ccec0a84932a17bbca66e446790980331eb59885116a75d37b0b727963e6652f59bdb8a0815a841786190c7f5b568efcb3e028ca35539889e21a0f390aca26282a537ea5a5abd1380d3d6cd19192261b6e99ee870e6cf3b97918f967fde32a0d4f51d87e7aefc648f39f5c90a39891a0267e1fe67b79fe53f5db69826912d26ef6e61976b03241b85c0d05af0e4cf4a7ca9174d2b2b80e3c9d4d0a803e54d7934fc2f03bd5b0d8ce7c1c8c34a15c5ff817117a1f1fd23d3f5025339bafeb6923471a7f7278c1017b733ba130d032ed01647bece309bdc451c536f22dc02a997cd1b0693ce6ae7643c7c671023d91156423cf7f90b60d4c8265adf77016f0b842a881c4fb435b1c4f0efbfb6d101f63ad59f6b2ec8dde96a4f794a092a6ba866b031667c80b24d38a8afc56d0c12587df0308c8a1603b21b06f1f0888e85adb30615cf2ba796d7b55d4368b9ac553213452f9ebf27c8adf3ec0bac09165e898b9a0a82e62f1bf2ec84ea1f96971158287b9675b05e87bca480e324bee2342d518759a5c32780adcdc719dae99ec9f80c6d97c5c70f76d9f4d666ecd9793117527a3e01c47bd869b9d7ab2c26648cdd8c0a2f597c558ee79d591fa5ce7f47294ca395b8779d0942586a8d126d8c223e1060f0670b826135182ffe93738f2791ab567546f590226a0aa023b4be281872d775d116b04d0cb3dc4cb9050c35ad6a6ce8f8a63d6fcea3198df3980cde1263879a0d2f4742ef6762f38b845cbfd0199a9e4fde7120dfa2c26b7eea85fe4c5fa879a78528fc131803c2b47cfdbc2544c64b63c1db1187e02e1d1baae2028290e9c459c6b391d7de807614749cdff8689221e9e976b345013eef989acb396650496266fe4a7e67914af2007293d79da0c0235467b86f9ee23c9b42f04796745750b98ebb45a7e534079af16481d48a227384c93d746de9b87cbb3bbc6fb532ec3005be7aeca76ac5eb8081fc1d9dc763a72fcc59c0eae03950586a44cc268ca9eebcaf816459e02d31829729cfb54294c087485751e3950dde8efaf44eac12d6d209866bc8f4c2a667e0a8a5f6091d524fc185689af86be0c36186d8cc6898e2381dde10a23603aa155cc659827c572877e184be93d30d1efbe878c18c7868e3d734d977d175431303d0f9ee945fbfa17664ca734728e4752fccb9d7c1e5478eab4484408348fe2c8597802f9cff4a1098447d739482e1739bc31a166fca3d22951853a434299fc557d4f2059f4fb047f94fb9a7b699f0e294c42bcbf7b0530348a72697e51dc05ebc07c9fc3e66613bf623831dcc164e271973872dcda557ecd47d11449a4c1a1d549ab04aaed6de92e0e24f4d1cffcfea1e3e7af5bd1409b9d7cb8a5fc38d6c27a7a491119d4747d2ca790748d2cc7a563e617fa4cca34c76997c439d9e389c629c7d68233118898a13679e5182437740f9a9c5035b9d67032e777ae6874b71a5868ff084ef05da947cd81063fe8a7bab4fd1bf572d8185e3c2338d0cc8baa41fa431a72bc074d6b402c8dd8bfa672f19cd40a4b849b1703f6891be8a2e342f118013df8d9325ac27f4594c76bddf0f0c473656b7c526621f5d5fee00885eafbb2d64b71c800af2d37d75408a2e87db14ee4f9a21fd920ee621d641d9738bbc4c06033c19d66950b1f3ea7026dc93da4a0a35625b383d23a651649e2724eb645d97f2ed557250ec88ed590cffe260a5d0a633986366737d76fe222aee85bd06f5469a42bbb099ed7a6b73e9c87b2fc4442973018b3ac5249833da962ce0398850c416b6e7267b85cd0829afa7db9547ea74f097d9216f87e59107d04f86078dfe484e068a84611aa90f719e2a88991cf670267c3b4bcc68dab51bce4902c4adf61397d4a540293fcd0baba2bb882407cfcb4de411cd7bbcf22bd601222f33d4380fa470a0604a0e94a76c2780dffd0be0c31ff6015a0ddd111c42a9109c5b47f9bd74ac99978b175dac8e0f7ca387beecbc259f8185c3c0a8789384838d10ccd804ea985c18d6a731b8dc91ced0ae844614ff97347db3304be6e9587607f6cd5226ad3ee07c1079cc3c1ab95f5b5942172475c9cc1e4d82afd875ea60dd52fe9c6acd843b721456efe685623fedd0180572592dea4d4838bec1790d7df0ce34e001b5437ce21fecb8f633d76c4936114337bcc7eaf45834980301e44043dd77e50e93026fc9b62259c6b127da5947a7bc6f83d7165d157e0c140977373e8e3f42d9de5ea76c2cb0285755a607a60c49a11a9d4d1119d62228acc6909fea71572eed586e7ff54b04ec29a6c253ff98def07ef7e3a65996d943ceb91641dbf1bb03fe33184f2d4f940cae67b17822e913ce2f44ceb6e44a6bbee961b557256e66e9372fb0d5d0f33f0e2e93ef908c60b726cbb6acba8bedf446d2ccac1ebb6c53f27cbdf7bfe4ea5f17edc90169dc2f8814548bf4dd9574fcbfc4142e48032cd1bae5cf0068f48b7f81047f351530471d0d0df8991cd8cc355a393875a977782feaa620378c5170ffe07f385c573f2e0136e724f11aff826db15c186aa77b13a345c166d5bab3b6c350f6231dcf5c02df3f0bd678e9425d6d02ea8ab7ac0b209a81142763fe2204ae0b1fb468591155a274d85bf0e95f6d2b2ad4c65b9b61d2052c1cc867e9696e16acbfe9177b98749928cfaafc1739a010ff073e0261987881df3ddef3c762019edecd92a9d337ec41c3b18cddaff9f9ecbfb7d0eb66b00c37c71af5d3d4f64eb6840a196a3aca783e5d156c23ebaaaa8baae80696fb3b59e7c4d7d5d7482bd17691ba87f85be070721b3c0fd36462bc148635f94123417fe6a9224cee86cb5207ff69f8dec5e99eec9212646a9ba2501b7ada39b2ad5f62cc5704db601c7486fa2292caa6bea3cd9a791ac20638a50432d1897e9ee7c63020a88ebdb9adf4aaf190da0d053b9e4853b8592eafa26cc2fbae9eadd0aa48e59907156e94740320f50a28097094562d7a165b90f305a5dae1ce44137b1a2cc1fb701f97c09a918484bdccedd49a7532807ecfca8c02add17f2bc63e0ba3cf56d06f78d4d3756af288d6cda99048de29bd847f9344857399cc0aa4f66c51499e93b43ea926fe7ac70b05880207c5b5a7f82d599699cd39eefea3dd7f2e81d51ea477f2303b8249bb4340832c69e82bb7a4117b4bbdbf20640daf6489cf8cfa24fc271d684686f3493758d7664d4483393ce59ed59a9e5134a3cc4045f9cfbafd81ce4627f432634711aa58</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-wave">      <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-wave">密码为我本科阶段所在院校中我参与的信息安全社团所属上级社团的拼音（不使用拼音符号，共13个字符）。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">【Pwn】栈溢出基本ROP——ret2text</summary>
    
    
    
    
    <category term="撰解" scheme="https://www.gh.zhangkaixin.cc/tags/%E6%92%B0%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>【宝塔面板使用心得】L02 认识界面与配置</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/BTPanel-L02/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/BTPanel-L02/</id>
    <published>2022-01-15T12:41:31.000Z</published>
    <updated>2023-10-14T12:11:57.138Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote><p><em>本系列心得序号以L开头是Linux面板，以W开头是Windows面板。</em></p></blockquote><h2 id="登录页面"><a href="#登录页面" class="headerlink" title="登录页面"></a>登录页面</h2><p><img src="/pic/btpanell02-01.png" alt="登录页面1"><br><img src="/pic/btpanell02-02.png" alt="登录页面2"><br>上一篇，我们安装了宝塔面板，大家已经见到过这个页面了。点击右上角的二维码或计算机图标可以切换登录方式，从账号密码登录改为二维码登录。二维码登录需要使用宝塔APP，具体绑定方法可以看<a href="https://www.bt.cn/bbs/thread-47408-1-1.html">官方的教程</a>，由于需要在面板安装应用，所以目前只能使用账号密码登录。</p><blockquote><p>如果忘记面板地址和账户密码，可以输入指令 <code>bt 14</code> 查看面板默认的信息。如果修改过了信息，可以按如下步骤修改：<br>域名忘记的，输入指令 <code>bt 12</code> 关闭域名限制并使用IP登录；<br>端口忘记的，输入指令 <code>bt 8</code> 并修改端口；<br>入口忘记的，输入指令 <code>bt 11</code> 关闭入口限制并使用根目录登录；<br>用户名忘记的，输入指令 <code>bt 6</code> 修改宝塔用户名；<br>密码忘记的，输入指令 <code>bt 5</code> 修改宝塔密码。</p></blockquote><p>现在我们登录进去，认识下一个界面。</p><blockquote><p><img src="/pic/btpanell02-03.png" alt="推荐安装套件"><br>登录进入以后，会弹出一个推荐安装套件对话框，这里关闭它，我们稍后就来手动组建套件。</p></blockquote><h2 id="菜单栏"><a href="#菜单栏" class="headerlink" title="菜单栏"></a>菜单栏</h2><p><img src="/pic/btpanell02-04.png" alt="菜单栏"><br>我们首先来认识菜单栏，菜单栏最上方是服务器的IP地址，右边有一个红底的数字，点击会弹出消息盒子，这里有服务器的任务和消息列表，已经在列表里结束的会在执行日志中记录。<br>在下方，依次是首页、网站、FTP、数据库、监控、安全、文件、终端、计划任务、软件商店、面板设置和退出。点击退出项就会退回登录页面，点击其他的项就会跳转到对应页面。在哪个界面，哪个界面对应的项就会突出显示。</p><p>现在我们来看首页吧。</p><h2 id="首页"><a href="#首页" class="headerlink" title="首页"></a>首页</h2><p><img src="/pic/btpanell02-04.png" alt="首页"><br>在首页，你可以看到五个板块。</p><p><strong>第一个板块</strong>，左侧有你登录的宝塔账户名、一个宝塔的广告链接、当前的系统版本（含已经安装的Python版本），还有服务器自上次开机后不间断运行的天数；右侧有当前宝塔面板的版本号以及更新、修复和重启三个链接文字。<br>点击宝塔面板的版本号，可以看到版本迭代的更新日志。当宝塔面板有版本更新时，会有小红点的提示。点击更新文字，会弹出更新版本对话框，有更新则可以点击更新。宝塔面板的测试版是每周更新，正式版是每月更新，许多功能会先在测试版发布，当你想体验测试版功能的时候，可以点击查看详情弹出切换版本对话框，按要求操作即可切换面板为测试版。<br>当宝塔面板出现问题时，例如模块错误之类的，可以点击修复文字进行校验面板文件，若有问题会自动修复。当面板或服务器需要重启时，可以点击重启文字，然后选择重启服务器或者重启面板。</p><p><strong>状态板块</strong>中，你可以看到服务器负载状态、CPU使用率、内存使用率和磁盘使用率。<br>点击内存使用率的图表，可以释放内存。将鼠标放到其他三个图表上，可以查看详细信息。<br>点击负载状态上的问号，可以查看官方给出的<a href="https://www.bt.cn/bbs/thread-11402-1-1.html">负载状态含义</a>说明。</p><p><strong>概览模块</strong>中，你可以看到你的网站数量、FTP数量、数据库数量和安全风险数量。<br>点击前三项都可以直接跳转到对应的页面，点击安全风险可以查看当前的安全风险，然后对应去解决。</p><p><strong>软件模块</strong>有十二个格子，默认已经有一个软件占用了一个格子。这里相当于一个快速访问的位置，向这里添加软件的方法稍后会提到。这里点击软件就可以打开，将鼠标移至软件格子的右上角可以看到一个图标，点击并按住可以拖动改变软件在这十二个格子中的位置。</p><p><strong>最后一个模块</strong>，是服务器的实时数据统计，分流量和磁盘IO两张图表，每个图表右上角的菜单可以改变统计的数据范围。</p><p>现在我们点击左边的面板设置，进入下一个页面。</p><h2 id="面板设置"><a href="#面板设置" class="headerlink" title="面板设置"></a>面板设置</h2><p><img src="/pic/btpanell02-05.png" alt="面板设置"><br>在这里，有一堆开关和一堆文本框。</p><h3 id="开关模块"><a href="#开关模块" class="headerlink" title="开关模块"></a>开关模块</h3><p><strong>关闭宝塔面板</strong>开关，点击即可关闭宝塔面板不再使用。若需要恢复使用，需要输入指令 <code>rm -f /www/server/panel/data/close.pl</code> 将开关的控制文件删除来关闭开关。</p><p><strong>监听IPv6</strong>开关，如果你的服务器支持IPv6可以打开，这样面板就可以通过IPv6地址访问。如果你的服务器为纯IPv6地址，请不要关闭这个选项，如果关闭了，需要输入指令 <code>echo &quot;True&quot; &gt; /www/server/panel/data/ipv6.pl</code> 来开启开关。</p><p><strong>面板SSL</strong>开关，点击后会进入证书页面，你可以粘贴自签证书，也可以选择成Let’s Encrypt的证书输入管理员邮箱让宝塔面板帮你创建一个。笔者的建议是在域名和软件安装完后回来进行。常见问题可以查看<a href="https://www.bt.cn/bbs/thread-4689-1-1.html">官方说明</a>在宝塔面板中，这个证书保存在 <code>/www/server/panel/ssl/certificate.pem</code> 文件中，私钥保存在 <code>/www/server/panel/ssl/privateKey.pem</code> 文件中，如果要关闭面板SSL开关，需要输入指令 <code>rm -f /www/server/panel/data/ssl.pl &amp;&amp; /etc/init.d/bt restart</code> 。</p><p><strong>API接口</strong>开关，当启动了API接口，只有在IP白名单列表中的IP才能访问面板API接口。关于API接口的使用方法，可以查看<a href="https://www.bt.cn/bbs/thread-20376-1-1.html">官方的教程</a>。</p><p><strong>开发者模式</strong>开关，开启后可以更加便于开发，但会占用更多内存。</p><p><strong>离线模式</strong>开关，开启离线模式后，面板不能联网更新和下载软件，所有的安装软件和面板更新均需手动下载离线升级包和软件包进行安装升级。</p><p><strong>动态口令认证</strong>开关，这是一项安全认证设置，你可以使用宝塔App或者谷歌认证器，通过服务器的指引添加动态口令认证。如果不会使用可以查看<a href="https://www.bt.cn/bbs/thread-37437-1-1.html">官方说明</a>。如果要关闭，可以输入指令 <code>bt 24</code> 关闭动态口令认证。</p><p><strong>在线客服</strong>开关，默认是开的，开启后会在右下角显示一个在线客服的浮动标，点击后可以进入和宝塔客服聊天的页面。</p><p><strong>访问设备验证</strong>开关，具体如何使用可以查看<a href="https://www.bt.cn/bbs/thread-77863-1-1.html">官方说明</a>。如果需要关闭，可以输入指令 <code>bt 29</code> 关闭访问设备验证。</p><h3 id="文本框模块"><a href="#文本框模块" class="headerlink" title="文本框模块"></a>文本框模块</h3><p>文本框模块有一个选项卡可以切换，第二个选项卡是从全部设置中摘取与面板安全配置相关的设置（安全入口、BasicAuth认证、密码复杂度验证、密码过期时间、域名和授权IP）。</p><p><strong>别名</strong>，这个就是显示在浏览器标题的名称，可以随便改。</p><p><strong>面板端口</strong>，即宝塔面板运行的端口，十分不推荐大家仍然使用默认端口8888，请修改它。云服务器记得先放行新的端口再进行改端口，<a href="https://www.bt.cn/bbs/thread-1229-1-1.html">腾讯云</a>、<a href="https://www.bt.cn/bbs/thread-2897-1-1.html">阿里云</a>和<a href="https://www.bt.cn/bbs/thread-3923-1-1.html">华为云</a>的放行教程再次列出，其他主机商放行方法类同。如果忘记端口，输入指令 <code>bt 8</code> 并修改端口。</p><p><strong>超时时间</strong>，默认值是86400，单位是秒，也就是1天一共24小时，这里可以根据需要修改。</p><p><strong>安全入口</strong>，是为了让宝塔面板更加安全不被轻易登录而设置的，同样不推荐各位使用默认入口，如果忘记，输入指令 <code>bt 11</code> 关闭入口限制并使用根目录登录。</p><p><strong>BasicAuth认证</strong>，登录面板前增加一层账号密码认证，基于BasicAuth，使用浏览器对话框，可以有效防止面板被扫，具体介绍可以看<a href="https://www.bt.cn/bbs/thread-34374-1-1.html">官方说明</a>。如果忘记账号密码，输入指令 <code>bt 23</code> 关闭BasicAuth认证。</p><p><strong>消息通道</strong>，用于webshell查杀通知，登录告警，具体设置可以看<a href="https://www.bt.cn/bbs/thread-71298-1-1.html">官方的教程</a>。</p><p><strong>登录告警</strong>，需要设置消息通道才能用，当不在IP白名单的设备登录了宝塔面板会向消息通道发送告警，具体设置可以看<a href="https://www.bt.cn/bbs/thread-71298-1-1.html">官方的教程</a>。</p><p><strong>域名</strong>，这个域名指的是面板的访问域名，建议大家不要使用IP访问面板，这样十分不安全，一旦设置，只有该域名能访问宝塔面板。如果忘记域名，输入指令 <code>bt 12</code> 关闭域名限制并使用IP登录。</p><p><strong>授权IP</strong>，即访问宝塔面板的IP白名单，一旦设置，非白名单中的IP无法访问宝塔面板。如果需要关闭白名单，输入指令 <code>bt 13</code> 关闭。</p><p><strong>默认建站目录</strong>，所有的网站默认都会保存到这个目录的子目录中，保持默认值 <code>/www/wwwroot</code> 即可，如果确有需要也可以修改，我们后续一些心得中会默认大家使用的是这个默认值，如果有修改，请在后面的心得中自行修改对应的参数或者命令。</p><p><strong>默认备份目录</strong>，所有的备份文件默认都会保存到这个目录当中，保持默认值 <code>/www/backup</code> 即可，如果确有需要也可以修改，我们后续一些心得中会默认大家使用的是这个默认值，如果有修改，请在后面的心得中自行修改对应的参数或者命令。</p><p><strong>服务器IP</strong>，默认是宝塔面板检测出来的IP，建议各位填写外网IP，如果没有外网需求或者在局域网内使用或者和笔者一样是使用虚拟机测试，则可以填写内网IP，这个IP地址会在宝塔面板的菜单栏显示，部分地方的参数也会默认填写这个值。</p><p><strong>服务器时间</strong>，如果服务器时间不对，可以点击同步按钮同步一下。<br>如果时区不对，可以输入指令 <code>tzselect</code> 选择时区，然后输入 <code>cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime</code> 调整时区，其中的主次时区由刚才你选择的时区决定。<br>RedHat和CentOS还可以通过 <code>timeconfig</code> 指令找到时区，Ubuntu还可以通过 <code>dpkg-reconfigure tzdata</code> 指令找到时区。<br>设置服务器自动同步时间的方法我们于下篇再说。</p><p><strong>面板用户</strong>，即登录面板的用户名，如果忘记用户名，输入指令 <code>bt 6</code> 修改宝塔用户名。</p><p><strong>面板密码</strong>，即登录面板的密码，如果忘记密码，输入指令 <code>bt 5</code> 修改宝塔密码。</p><p><strong>密码复杂度验证</strong>，开启后，宝塔密码必须设置成满足复杂度验证规则的，规则为长度大于8位且为大写字母、小写字母、数字、特殊字符至少3项的组合。</p><p><strong>密码过期时间</strong>，设置后，如果上次密码设置后到了过期时间，则面板会强制提示修改密码。将时间设置为 <code>0</code> 天以关闭密码过期时间功能。</p><p><strong>绑定宝塔账号</strong>，即绑定一个宝塔账号，7.8.0版本要求强制绑定宝塔账号，无论是服务器是否开启了离线模式。<br>在离线模式下，由于不会连接宝塔官网，所以会出现无法绑定的情况，所以需要先关闭离线模式，然后再换绑宝塔账号，之后再开启离线模式。<br>如果服务器在开启离线模式的时候直接解绑宝塔账号，需要输入指令 <code>rm -f /www/server/panel/data/not_network.pl</code> 关闭离线模式，然后再绑定宝塔账号，之后再开启离线模式。</p><p><strong>面板菜单栏隐藏</strong>，除了本篇介绍的首页、软件商店、面板设置和退出四个项无法隐藏外，其他项目均可隐藏不显示。注意这里起的作用是在菜单栏隐藏而不是禁用，访问对应地址面板对应的功能仍可正常使用。</p><p><strong>临时访问授权</strong>，可以创建一个临时的访问授权链接，将链接给他人，他人便可以有一次临时访问面板的授权，已经授权的访问会在这里留下记录。</p><p>现在，点击软件商店，我们来配置服务器环境。</p><h2 id="软件商店"><a href="#软件商店" class="headerlink" title="软件商店"></a>软件商店</h2><p><img src="/pic/btpanell02-06.png" alt="软件商店"><br>软件商店是宝塔提供的一键安装软件的一个功能，离线模式下不能正常使用。</p><ul><li>全部就是目前宝塔的全部应用；</li><li>已安装就是服务器已经安装的应用；</li><li>运行环境就是一些常用的运行环境；</li><li>系统工具就是一些管理系统的工具；</li><li>宝塔插件就是宝塔官方提供的免费插件；</li><li>专业版插件就是宝塔官方提供的专业版、企业版免费，其余版本付费的插件；</li><li>企业版插件就是宝塔官方提供的企业版免费其余版本付费的插件；</li><li>第三方应用就是由其他开发者开发的应用，功能也比较多；</li><li>一键部署是一个单独的类别，我们等会儿再说。</li></ul><p>在应用分类的右边有一个更新软件列表的按钮，点击可以获取宝塔官方最新的软件列表。</p><p>接下来是一个广告横幅。如果你有使用专业版和企业版的需求，可以考虑购买对应的版本。</p><p align="right"><em><font size="1"><a href="https://www.bt.cn/?invite_code=MV9rYXV5Z2Y=" target="_blank" rel="noopener">广告：宝塔服务器面板，一键全能部署及管理，送你￥3188礼包，点我领取</a></font></em></p><p>然后是一个最近使用入口，和首页的软件模块相比，这里显示的是最近使用的项目而不能自定义。</p><p>之后就是软件列表。软件分免费的和付费的。<br>软件列表会显示一个软件的名称、开发商、说明以及付费软件的到期时间，免费软件和已经购买的软件可以点击操作处的安装文字直接安装。<br>一个软件被安装后，位置处会多一个文件夹的图标，点击即可跳转到安装位置；状态处会显示当前软件的状态，绿色播放图标表示正常运行，红色暂停图标则表示出现问题；首页显示处会多出一个开关，打开开关就会向首页软件模块添加当前软件的图标。<br>同时，一个软件被安装后，操作处会从 <code>安装</code> 变为 <code>更新|设置|修复|卸载</code> 。更新文字只有当软件有新版本时才会显示，点击即可更新软件的新版本；设置文字点击后会进入软件的UI界面，每个软件的界面和内容都有所差异，首页的软件模块和这个页面的最近使用入口都是调用这个设置链接；很多软件会有修复功能，点击后可以对软件的完整性以及功能进行修复；最后是卸载文字，点击后就会将该软件卸载。</p><h3 id="安装套件"><a href="#安装套件" class="headerlink" title="安装套件"></a>安装套件</h3><p>现在我们来配置服务器的运行环境，首先我们来看知名的LNMP和LAMP套件。所谓LNMP，L就是指Linux，N就是指Nginx，M一般指MySQL，也可以指MySQL Mariadb，P一般指PHP，也可以指Perl或Python；LAMP就是将LNMP中N代表的Nginx换成A代表的Apache。<br>宝塔面板在推荐我们安装LNMP的同时还推荐我们安装Pure-Ftpd和phpMyAdmin。Pure-Ftpd可以提供FTP服务，phpMyAdmin提供可视化数据库管理服务。</p><p>宝塔官方给我们推荐的配置是</p><ul><li>Nginx 1.20</li><li>MySQL 5.6</li><li>Pure-Ftpd 1.0.49</li><li>PHP 5.6</li><li>phpMyAdmin 4.4</li></ul><p>你可以跟着官方的安装，当然你也可以自己选择，比如目前我的服务器所运行的这几个软件对应的版本是</p><ul><li>Nginx 1.20</li><li>MySQL Mariadb 10.5</li><li>Pure-Ftpd 1.0.49</li><li>PHP 5.6,7.2,7.4</li><li>phpMyAdmin 5.1</li></ul><p>如果有Java项目需求还可以安装Tomcat，如果有Node项目需求还可以Node.js版本管理器等等，其他软件都可以根据需要自行安装。</p><h3 id="一键部署"><a href="#一键部署" class="headerlink" title="一键部署"></a>一键部署</h3><p><img src="/pic/btpanell02-07.png" alt="一键部署"><br>一键部署是什么？宝塔为一些诸如WordPress，discuz等常用项目的开发者提供了一个接口，项目开发者可以将项目打包并写一个自动部署脚本方便宝塔面板的用户使用。</p><p>点进一键部署，你会看到现在的列表，除了全部以外，官方还将其中的一些项目进行了分类。<br>每个项目都有名称、版本、简介、支持PHP版本、提供者、评价和操作。<br>点击简介后面的问号，可以跳转到提供者在宝塔论坛发的贴子的地址，点击提供者，可以跳转到提供者的网站，当部署项目出现问题时，可以试着访问这两个地址，往往能够得到解决方法。<br>点击评价可以参与一个项目的评分。<br>点击一键部署，按照要求填写网站的信息即可部署，宝塔面板会自动下载源码，运行自动化脚本，然后告诉你安装入口或者后台账号密码，按照提示即可很方便的完成部署。<br>由于一键部署与创建一个新的网站的区别仅为前者宝塔会自动下载源码，其余填写信息和配置上并无大差，所以笔者就不在这里讲述新建网站等等一系列过程了，详细的过程会放在之后的心得里。</p><h2 id="下篇"><a href="#下篇" class="headerlink" title="下篇"></a>下篇</h2><p>下一篇心得，笔者将带大家对面板的监控、安全、文件、终端、计划任务几个模块进行了解。</p><hr><blockquote><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_80x15.png" alt="知识共享许可协议"></a></p><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_88x31.png" alt="知识共享许可协议"></a></p><p>本作品采用<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p></blockquote><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="宝塔面板使用心得" scheme="https://www.gh.zhangkaixin.cc/tags/%E5%AE%9D%E5%A1%94%E9%9D%A2%E6%9D%BF%E4%BD%BF%E7%94%A8%E5%BF%83%E5%BE%97/"/>
    
    <category term="宝塔Linux面板" scheme="https://www.gh.zhangkaixin.cc/tags/%E5%AE%9D%E5%A1%94Linux%E9%9D%A2%E6%9D%BF/"/>
    
  </entry>
  
  <entry>
    <title>题解 CPPUAPA 2022年寒假第一次模拟赛</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Solution/solution-apa2022h1/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Solution/solution-apa2022h1/</id>
    <published>2022-01-09T10:05:43.000Z</published>
    <updated>2023-10-14T12:11:57.275Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>本篇题解所使用的语言是C++，部分其他语言的选手可能需要理解做法后自行编写对应语言的代码。</p><h2 id="L1-1-打个招呼"><a href="#L1-1-打个招呼" class="headerlink" title="L1-1 打个招呼"></a>L1-1 打个招呼</h2><p>背景<br>这是寒假的第一次模拟赛（可能也是最后一次模拟赛。。），关系到咱们天梯赛等比赛的选拔，希望大家怀着淡淡的喜悦尽情发挥！<br>描述<br>首先打个招呼，在屏幕上输出“HELL0 CPPUAPA!”。</p><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>本题无输入。</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>一行一个字符串，为打招呼的内容</p><h3 id="输入样例"><a href="#输入样例" class="headerlink" title="输入样例"></a>输入样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"></span><br></pre></td></tr></table></figure><h3 id="输出样例"><a href="#输出样例" class="headerlink" title="输出样例"></a>输出样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">HELL0 CPPUAPA!</span><br></pre></td></tr></table></figure><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>直接输出原文即可，注意是 <code>HELL0</code> ，不是 <code>HELLO</code> 。</p><h3 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    cout&lt;&lt;<span class="string">&quot;HELL0 CPPUAPA!&quot;</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L1-2-昊神的游戏"><a href="#L1-2-昊神的游戏" class="headerlink" title="L1-2 昊神的游戏"></a>L1-2 昊神的游戏</h2><p>邓晨昊和张开昕因为某些不可抗拒的原因寒假不能回家，他们在李志老师的办公室中百般无聊，于是昊神发明了一个新游戏让开昕玩。</p><p>游戏是要在纸上画一列长度为n的正方形，每个正方形可以是白色或黑色（1表示白色，0表示黑色）。玩家可以选择任意两个相邻并且颜色相同的正方形，并将它们重新涂色（可以是两个白色、两个黑色，也可以是一白一黑），游戏的目标是要让这一列正方形中任意两个相邻的正方形颜色都不同。</p><p>开昕觉得这个题目太简单了于是将它丢给了你，现在请你帮开昕计算一下，他至少需要几次操作才能达成目标？</p><h3 id="输入格式-1"><a href="#输入格式-1" class="headerlink" title="输入格式"></a>输入格式</h3><p>输入总共两行。</p><p>第一行包括一个数字n(1&lt;&#x3D;n&lt;&#x3D;1000)。n表示这列正方形的个数。</p><p>第二行包括n个数字0或1，表示每个正方形的颜色。</p><h3 id="输出格式-1"><a href="#输出格式-1" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出一行，即开昕操作的最少次数。</p><h3 id="输入样例-1"><a href="#输入样例-1" class="headerlink" title="输入样例 1"></a>输入样例 1</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">6</span><br><span class="line">111010</span><br></pre></td></tr></table></figure><h3 id="输出样例-1"><a href="#输出样例-1" class="headerlink" title="输出样例 1"></a>输出样例 1</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1</span><br></pre></td></tr></table></figure><h3 id="输入样例-2"><a href="#输入样例-2" class="headerlink" title="输入样例 2"></a>输入样例 2</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">7</span><br><span class="line">1100010</span><br></pre></td></tr></table></figure><h3 id="输出样例-2"><a href="#输出样例-2" class="headerlink" title="输出样例 2"></a>输出样例 2</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2</span><br></pre></td></tr></table></figure><h3 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h3><p>我们考虑当一列正方形任意两个相邻的正方形颜色都不同时，一定是 <code>010101...</code> 或者 <code>101010...</code> 的排列。<br>若初始状态不是刚好满足排列时，则必定存在两个相邻正方形颜色相同的情况。显然，我们不会将两个相邻正方形颜色重新涂色成两个颜色相同的，而会是涂成一白一黑。<br>我们假设要将 <code>001010</code> 变为 <code>010101</code> ，则需要先将序列变为 <code>011010</code> ，然后变为 <code>010010</code> 、 <code>010110</code> 、 <code>010100</code> ，最后变成 <code>010101</code> 。<br>可以看出来序列变换的次数是原序列和目标序列中数字不同的个数。</p><p>对于一整个序列来说，可以将序列划分成一小段一小段，每一小段分为需要按照上方给出的方法变换和已经满足排列两种，最后拼合答案即为整个序列中与目标序列中数字不同的个数。</p><h3 id="代码-1"><a href="#代码-1" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,a,ans=<span class="number">0</span>;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%1d&quot;</span>,&amp;a);</span><br><span class="line">        <span class="keyword">if</span>(a==(i&amp;<span class="number">1</span>))ans++;</span><br><span class="line">    &#125;</span><br><span class="line">    ans=<span class="built_in">min</span>(ans,n-ans);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,ans);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L1-3-懒羊羊的压岁钱"><a href="#L1-3-懒羊羊的压岁钱" class="headerlink" title="L1-3 懒羊羊的压岁钱"></a>L1-3 懒羊羊的压岁钱</h2><p>马上就要过年啦，懒羊羊又可以收压岁钱了，他非常开心，但他不愿意告诉他的父母他到底收了多少压岁钱，因为懒夫和懒母经常会以各种名义扣下这笔钱，他只想存下这笔钱作为和他的挚友喜羊羊的购房基金(呜呜呜喜懒szd!)。于是他给喜羊羊写信时进行了加密，信的内容是一串字符串，他今年收到的压岁钱的数量就是这个字符串中对称子串的数量，这样就算这封信件在通信过程中被懒夫懒母截获，他们也不知道这封信件的真正内容。</p><p>对称串是一个正读和反读都一样的字符串，比如”baaab”或者”non”再或者”a”这样的就是对称串；如果在这个字符串中能找到几个连续的字符构成一个对称串，则称这几个字符为这个字符串的对称子串。值得注意的是，具有不同开始位置或结束位置的子串，即使是由相同的字符组成，也会被视作不同的子串。</p><p>现在告诉你懒羊羊的信件内容，你能知道他今年一共收到了多少压岁钱吗？</p><h3 id="输入格式-2"><a href="#输入格式-2" class="headerlink" title="输入格式"></a>输入格式</h3><p>输入一个字符串</p><h3 id="输出格式-2"><a href="#输出格式-2" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出一个整数，为字符串中对称子串的数量</p><h3 id="输入样例-1-1"><a href="#输入样例-1-1" class="headerlink" title="输入样例 1"></a>输入样例 1</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">abc</span><br></pre></td></tr></table></figure><h3 id="输出样例-1-1"><a href="#输出样例-1-1" class="headerlink" title="输出样例 1"></a>输出样例 1</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">3</span><br></pre></td></tr></table></figure><h3 id="输入样例-2-1"><a href="#输入样例-2-1" class="headerlink" title="输入样例 2"></a>输入样例 2</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">oops</span><br></pre></td></tr></table></figure><h3 id="输出样例-2-1"><a href="#输出样例-2-1" class="headerlink" title="输出样例 2"></a>输出样例 2</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">5</span><br></pre></td></tr></table></figure><h3 id="提示"><a href="#提示" class="headerlink" title="提示"></a>提示</h3><p>字符串长度len&lt;&#x3D;1000</p><h3 id="题解-2"><a href="#题解-2" class="headerlink" title="题解"></a>题解</h3><p>寻找回文串的题，可以使用Manacher或者PAM解题。<br>然而本题题目中字符串长度仅为1000，暴力枚举子串，然后判断是不是回文串即可。</p><h3 id="代码-2"><a href="#代码-2" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">char</span> s[<span class="number">1005</span>];</span><br><span class="line"><span class="type">int</span> len,ans=<span class="number">0</span>;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,s+<span class="number">1</span>);</span><br><span class="line">    len=<span class="built_in">strlen</span>(s+<span class="number">1</span>);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> l=<span class="number">1</span>;l&lt;=len;l++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=len-l+<span class="number">1</span>;i++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="type">bool</span> tag=<span class="literal">true</span>;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;=l/<span class="number">2</span>;j++)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">if</span>(s[i+j]!=s[i+l<span class="number">-1</span>-j])</span><br><span class="line">                &#123;</span><br><span class="line">                    tag=<span class="literal">false</span>;</span><br><span class="line">                    <span class="keyword">break</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span>(tag)ans++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,ans);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L1-4-这是一道水题"><a href="#L1-4-这是一道水题" class="headerlink" title="L1-4 这是一道水题"></a>L1-4 这是一道水题</h2><p>–Background</p><p>看了一眼大家出的题目，也太难了。</p><p>于是心地善良的好学长决定出一道水题让大家放松一下~</p><p>–Description</p><p>天梯赛马上就要到了，APA的同学们又要开始纠结起什么队名了。</p><p>李志老师一般都把起名字的权利交给大家。但老师也有一些不喜欢的词汇，是不可以出现在队伍名称里的。例如，老师不喜欢毛毛虫，于是2019年的天梯队名“飘起来的毛毛虫”就让老师看着很不舒服。</p><p>现在我们罗列出了老师不喜欢的N个词汇。你需要在三个小组上报队伍名称之前进行一轮检查，若出现了老师不喜欢的词汇，则需要把相关词汇剔除后再上报</p><h3 id="输入格式-3"><a href="#输入格式-3" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行输入一个数字N，表示老师不喜欢的词汇数量。</p><p>接下来N行，每行包含一个<strong>没有空格</strong>的字符串，表示老师不喜欢的词汇。</p><p>再接下来3行，每行包含一个<strong>可能含有空格</strong>的字符串，表示三支队伍上报的队名。</p><h3 id="输出格式-3"><a href="#输出格式-3" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出包含3行，依次为三个队名的判断结果。**(区分大小写)**</p><p>若队名没有问题，则输出“No problem!”，否则，请将老师不喜欢的词汇剔除后，输出新队名。</p><p><strong>只需要删除词汇对应的字符即可，前后若有空格无需删除</strong></p><h3 id="输入样例-1"><a href="#输入样例-1" class="headerlink" title="输入样例"></a>输入样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">1</span><br><span class="line">maomaochong</span><br><span class="line">maomaochong on the keyboard</span><br><span class="line">Piaoqilaidemaomaochong</span><br><span class="line">Wo zhi xiang yao KFC</span><br></pre></td></tr></table></figure><h3 id="输出样例-1"><a href="#输出样例-1" class="headerlink" title="输出样例"></a>输出样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"> on the keyboard</span><br><span class="line">Piaoqilaide</span><br><span class="line">No problem!</span><br></pre></td></tr></table></figure><h3 id="提示-1"><a href="#提示-1" class="headerlink" title="提示"></a>提示</h3><p>N≤100，所有字符串长度len≤100。</p><p>题目保证一个队名中最多包含一个老师不喜欢的词汇。</p><h3 id="题解-3"><a href="#题解-3" class="headerlink" title="题解"></a>题解</h3><p>一道字符串匹配的题，这道题有很多种做法，说一种比较简单的做法，这种做法会利用到C和C++的一个特性。字符串在数组中的结束是以到值为0的字符为标志，所以当我们找到问题词汇的时候，将问题词汇开始的那个字母归0，这样从开头输出就只会输出到这个字母之前的部分，然后我们从这个词汇之后的地方继续输出，就可以达到删除对应词汇的效果。</p><h3 id="代码-3"><a href="#代码-3" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,T=<span class="number">3</span>;</span><br><span class="line"><span class="type">char</span> s[<span class="number">105</span>][<span class="number">105</span>],t[<span class="number">110</span>];</span><br><span class="line"><span class="type">int</span> sl[<span class="number">105</span>],tl;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;\n%s&quot;</span>,s[i]+<span class="number">1</span>);</span><br><span class="line">        sl[i]=<span class="built_in">strlen</span>(s[i]+<span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span>(T--&gt;<span class="number">0</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">        cin.<span class="built_in">getline</span>(t+<span class="number">1</span>,<span class="number">105</span>);</span><br><span class="line">        tl=<span class="built_in">strlen</span>(t+<span class="number">1</span>);</span><br><span class="line">        <span class="type">int</span> ts=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">1</span>;j&lt;=tl;j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">if</span>(t[j]==s[i][<span class="number">1</span>])</span><br><span class="line">                &#123;</span><br><span class="line">                    <span class="type">bool</span> tag=<span class="literal">true</span>;</span><br><span class="line">                    <span class="keyword">for</span>(<span class="type">int</span> k=<span class="number">2</span>;k&lt;=sl[i];k++)</span><br><span class="line">                    &#123;</span><br><span class="line">                        <span class="keyword">if</span>(t[j+k<span class="number">-1</span>]!=s[i][k])</span><br><span class="line">                        &#123;</span><br><span class="line">                            tag=<span class="literal">false</span>;</span><br><span class="line">                            <span class="keyword">break</span>;</span><br><span class="line">                        &#125;</span><br><span class="line">                    &#125;</span><br><span class="line">                    <span class="keyword">if</span>(tag)</span><br><span class="line">                    &#123;</span><br><span class="line">                        t[j]=<span class="number">0</span>;</span><br><span class="line">                        ts=j+sl[i];</span><br><span class="line">                        <span class="keyword">break</span>;</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span>(ts)</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>((<span class="type">int</span>)<span class="built_in">strlen</span>(t+<span class="number">1</span>)==tl)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;No problem!\n&quot;</span>);</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%s%s\n&quot;</span>,t+<span class="number">1</span>,t+ts);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L2-1-军训"><a href="#L2-1-军训" class="headerlink" title="L2-1 军训"></a>L2-1 军训</h2><p>警察大学的军训开始了，小梁作为带训班长需要给他所带的班的新生排队列，以下是他凭借多年带训经验总结的排队列方法：</p><p>先给班里每个新生一个编号（1~n），然后让1号新生先站在队列里，然后通过目测身高，凭感觉将第i名新生安排在之前已经在队列里的某位新生的旁边。</p><p>某次训练中，教员让带训班长们训练新生的出列动作，梁班长在让m（m&lt;n）名同学出列后，想知道这时队列从左到右新生的编号</p><h3 id="输入格式-4"><a href="#输入格式-4" class="headerlink" title="输入格式"></a>输入格式</h3><p>第1行为新生人数</p><p>第2~n行，第i行包含一个整数a和一个字符b，其中a为小于i的正整数，b为z或者y。若b为z，则表示将i号新生插入到a号新生的左边，b为y则表示插入到右边。</p><p>第n+1行为新生的同学。</p><p>接下来m行，每一行一个数，代表出列的新生的编号（如果该新生已经出列就是梁班长记性不好，不用管这个出列的指令）。</p><h3 id="输出格式-4"><a href="#输出格式-4" class="headerlink" title="输出格式"></a>输出格式</h3><p>若干个正整数，数与数之间用空格隔开，表示从左到右新生的编号，行末换行且无空格。</p><h3 id="输入样例-2"><a href="#输入样例-2" class="headerlink" title="输入样例"></a>输入样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">4</span><br><span class="line">1 z</span><br><span class="line">2 y</span><br><span class="line">1 z</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">3</span><br></pre></td></tr></table></figure><h3 id="输出样例-2"><a href="#输出样例-2" class="headerlink" title="输出样例"></a>输出样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2 4 1</span><br></pre></td></tr></table></figure><h3 id="提示-2"><a href="#提示-2" class="headerlink" title="提示"></a>提示</h3><p>1&lt;n,m&lt;&#x3D;100000</p><h3 id="题解-4"><a href="#题解-4" class="headerlink" title="题解"></a>题解</h3><p>一道链表的裸题，唯一需要注意的就是加入一个已经被清除的标记。</p><h3 id="代码-4"><a href="#代码-4" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">stu</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> l,r;</span><br><span class="line">    <span class="type">bool</span> er;</span><br><span class="line">&#125;s[<span class="number">100005</span>];</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    s[<span class="number">0</span>].l=s[<span class="number">0</span>].r=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">2</span>;i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">int</span> x;<span class="type">char</span> c;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;\n%d %c&quot;</span>,&amp;x,&amp;c);</span><br><span class="line">        <span class="keyword">if</span>(c==<span class="string">&#x27;z&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            s[i].r=x;</span><br><span class="line">            s[i].l=s[x].l;</span><br><span class="line">            s[s[x].l].r=i;</span><br><span class="line">            s[x].l=i;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(c==<span class="string">&#x27;y&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            s[i].l=x;</span><br><span class="line">            s[i].r=s[x].r;</span><br><span class="line">            s[s[x].r].l=i;</span><br><span class="line">            s[x].r=i;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;m);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=m;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">int</span> x;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;\n%d&quot;</span>,&amp;x);</span><br><span class="line">        <span class="keyword">if</span>(s[x].er)<span class="keyword">continue</span>;</span><br><span class="line">        s[s[x].l].r=s[x].r;</span><br><span class="line">        s[s[x].r].l=s[x].l;</span><br><span class="line">        s[x].er=<span class="literal">true</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=s[<span class="number">0</span>].r;i;i=s[i].r)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d%c&quot;</span>,i,s[i].r?<span class="string">&#x27; &#x27;</span>:<span class="string">&#x27;\n&#x27;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L2-2-大大大卡车"><a href="#L2-2-大大大卡车" class="headerlink" title="L2-2 大大大卡车"></a>L2-2 大大大卡车</h2><p>警察大学新研究生宿舍楼正在如火如荼地建设中，大卡车不停地穿梭在校园间运送货物。他们总共需要运送两种类型的货物，记为A和B。类型A的货物重量为1，类型B的货物重量为2，每个货物都有一个编号和价值。</p><p>为了能让研究生学长学姐们更快地住上新宿舍，工程师在校园中找到了会设计算法的你，请你帮他计算大卡车一次运送货物的最大价值。</p><h3 id="输入格式-5"><a href="#输入格式-5" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行，包含两个整数 n 和 v。表示有 n 个物品（1 ≤ n ≤ 10^5）， 大卡车的载重量为 v （1 ≤ v ≤ 10^9）。</p><p>接下来 n 行， 每行两个整数，第i行表示编号为i的货物的重量 ti （1 ≤ ti ≤ 2）和价值 pi（1 ≤ pi ≤ 10000）。</p><h3 id="输出格式-5"><a href="#输出格式-5" class="headerlink" title="输出格式"></a>输出格式</h3><p>第一行为一个整数， 表示大卡车单次能运送的最大价值。</p><p>第二行为构成最大价值的全部物品编号。</p><h3 id="输入样例-1-2"><a href="#输入样例-1-2" class="headerlink" title="输入样例 1"></a>输入样例 1</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">3 2</span><br><span class="line">1 2</span><br><span class="line">2 7</span><br><span class="line">1 3</span><br></pre></td></tr></table></figure><h3 id="输出样例-1-2"><a href="#输出样例-1-2" class="headerlink" title="输出样例 1"></a>输出样例 1</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">7</span><br><span class="line">2</span><br></pre></td></tr></table></figure><h3 id="输入样例-2-2"><a href="#输入样例-2-2" class="headerlink" title="输入样例 2"></a>输入样例 2</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">5 3</span><br><span class="line">1 9</span><br><span class="line">2 9</span><br><span class="line">1 9</span><br><span class="line">2 10</span><br><span class="line">1 6</span><br></pre></td></tr></table></figure><h3 id="输出样例-2-2"><a href="#输出样例-2-2" class="headerlink" title="输出样例 2"></a>输出样例 2</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">24</span><br><span class="line">1 3 5</span><br></pre></td></tr></table></figure><h3 id="提示-3"><a href="#提示-3" class="headerlink" title="提示"></a>提示</h3><p>输出时注意：优先输出类型A的货物编号，并按货物的价值从大到小排序输出，以空格分隔。</p><h3 id="题解-5"><a href="#题解-5" class="headerlink" title="题解"></a>题解</h3><p>本题看上去是一个动态规划题，但我们看数据范围会发现用动态规划会超时。实际上，这个题就是一个排序的题目。<br>我们将物品分两种分别记录并降序排序，然后枚举可能的排列情况，比如5的时候，可能是 <code>122</code> 、 <code>1112</code> 和 <code>11111</code> 这三种，枚举情况判断价值即可。</p><h3 id="代码-5"><a href="#代码-5" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,v;</span><br><span class="line"><span class="type">int</span> l1,l2,ans,an1,an2;</span><br><span class="line"><span class="type">int</span> s1[<span class="number">100005</span>],s2[<span class="number">100005</span>];</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">wp</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> p,id;</span><br><span class="line">&#125;v1[<span class="number">100005</span>],v2[<span class="number">100005</span>];</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(wp a,wp b)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a.p&gt;b.p;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>,&amp;n,&amp;v);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>,x;i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;x);</span><br><span class="line">        <span class="keyword">if</span>(x==<span class="number">1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;v1[++l1].p);</span><br><span class="line">            v1[l1].id=i;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(x==<span class="number">2</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;v2[++l2].p);</span><br><span class="line">            v2[l2].id=i;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(v1+<span class="number">1</span>,v1+l1+<span class="number">1</span>,cmp);</span><br><span class="line">    <span class="built_in">sort</span>(v2+<span class="number">1</span>,v2+l2+<span class="number">1</span>,cmp);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=l1;i++)</span><br><span class="line">        s1[i]=s1[i<span class="number">-1</span>]+v1[i].p;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=l2;i++)</span><br><span class="line">        s2[i]=s2[i<span class="number">-1</span>]+v2[i].p;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>,sum;i&lt;=<span class="built_in">min</span>(v,l1);i++)</span><br><span class="line">    &#123;</span><br><span class="line">        sum=s1[i]+s2[<span class="built_in">min</span>((v-i)/<span class="number">2</span>,l2)];</span><br><span class="line">        <span class="keyword">if</span>(sum&gt;ans)</span><br><span class="line">        &#123;</span><br><span class="line">            ans=sum;</span><br><span class="line">            an1=i;</span><br><span class="line">            an2=<span class="built_in">min</span>((v-i)/<span class="number">2</span>,l2);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,ans);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=an1;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,v1[i].id);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=an2;i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,v2[i].id);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L2-3-LF市规划"><a href="#L2-3-LF市规划" class="headerlink" title="L2-3 LF市规划"></a>L2-3 LF市规划</h2><p>LF市要重新规划城市建筑了，现在LF市有n个给建筑物预留的位置，LF市政府决定只建设n-1条长度为1的双向道路，每条道路连接两个位置，且任意两个位置可以通过这些道路相互到达。</p><p>LF市政府决定在其中的k个位置建设LF市的核心建筑物，这些建筑物往往是市政府、市检察院、市法院、市监察委等；在其余的n-k个位置建设其他的非核心建筑物。为了让核心建筑物更好的服务人民，这k个位置需要在建成城市以后让对应的k个核心建筑物满足以下条件：</p><ol><li>这k个核心建筑物之间可以直接通过核心建筑物之间的道路相互到达，而不需要经过非核心建筑物。</li><li>一个非核心建筑物到这k个核心建筑物的距离，为其与这k个核心建筑物的距离的最小值，也就是其与其最近的核心建筑物的距离。所有非核心建筑物到这k个核心建筑物的距离的最大值需要最小。</li></ol><p>现在，你需要求出建成城市以后，所有非核心建筑物到这k个核心建筑物的距离的最大值。</p><h3 id="输入格式-6"><a href="#输入格式-6" class="headerlink" title="输入格式"></a>输入格式</h3><p>输入共n行。</p><p>第一行有两个正整数n和k。</p><p>接下来的n-1行，每行有两个正整数u和v，表示第u个位置和第v个位置之间有一条长度为1的双向道路。</p><h3 id="输出格式-6"><a href="#输出格式-6" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出共一行一个整数，表示答案。</p><h3 id="输入样例-3"><a href="#输入样例-3" class="headerlink" title="输入样例"></a>输入样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">7 4</span><br><span class="line">1 4</span><br><span class="line">7 3</span><br><span class="line">7 4</span><br><span class="line">2 1</span><br><span class="line">5 4</span><br><span class="line">6 5</span><br></pre></td></tr></table></figure><h3 id="输出样例-3"><a href="#输出样例-3" class="headerlink" title="输出样例"></a>输出样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1</span><br></pre></td></tr></table></figure><h3 id="提示-4"><a href="#提示-4" class="headerlink" title="提示"></a>提示</h3><p><strong>数据范围</strong></p><p>1≤k&lt;n≤ $10^5$ 。</p><p>1≤u,v≤n，且u≠v。</p><p>保证任意两个位置可以通过这些道路相互到达。</p><p><strong>样例#1说明</strong></p><p>在1,4,5,7这4个位置建设核心建筑物，这样2,3,6的3个非核心建筑物与4个核心建筑物的距离均为1，答案为1。</p><h3 id="题解-6"><a href="#题解-6" class="headerlink" title="题解"></a>题解</h3><p>一道树的性质的题。<br>首先，我们不难看出题中的图给的是一棵树。<br>根据核心建筑物的性质1，我们可知，所有的核心建筑物都是直接相连的，中间不会有非核心建筑物。<br>所以我们可以找出核心建筑物里最核心的那一个，将其作为树的根节点，向下延伸选择最优的k-1个节点即可。<br>根据性质2，我们知道这个最核心建筑物就是树的重心。<br>因此思路就是求出树的重心，按照节点距离排序剩下的节点，选择前k-1个即可。节点选择的时候，选择一个节点会减少最下方节点到核心区的距离，于是我们选择了到核心区距离最大的节点的祖辈节点，即可减小全局最大距离。<br>然后算出所求的距离。</p><h3 id="代码-6"><a href="#代码-6" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,k,dm,rt,hf;</span><br><span class="line"><span class="type">int</span> head[<span class="number">100005</span>],cnt;</span><br><span class="line"><span class="type">int</span> d[<span class="number">100005</span>],to[<span class="number">100005</span>],fa[<span class="number">100005</span>];</span><br><span class="line"><span class="type">int</span> dis[<span class="number">100005</span>],ans;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">edge</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> ne,to;</span><br><span class="line">&#125;e[<span class="number">200005</span>];</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">add</span><span class="params">(<span class="type">int</span> u,<span class="type">int</span> v)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    e[++cnt]=(edge)&#123;head[u],v&#125;;head[u]=cnt;</span><br><span class="line">    e[++cnt]=(edge)&#123;head[v],u&#125;;head[v]=cnt;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">dfs1</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> f)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">if</span>(d[x]&gt;dm)</span><br><span class="line">    &#123;</span><br><span class="line">        dm=d[x];</span><br><span class="line">        rt=x;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=head[x];i;i=e[i].ne)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">int</span> y=e[i].to;</span><br><span class="line">        <span class="keyword">if</span>(y==f)<span class="keyword">continue</span>;</span><br><span class="line">        d[y]=d[x]+<span class="number">1</span>;</span><br><span class="line">        fa[y]=x;</span><br><span class="line">        <span class="built_in">dfs1</span>(y,x);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">dfs2</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> f)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    to[x]=d[x];</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=head[x];i;i=e[i].ne)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">int</span> y=e[i].to;</span><br><span class="line">        <span class="keyword">if</span>(y==f)<span class="keyword">continue</span>;</span><br><span class="line">        d[y]=d[x]+<span class="number">1</span>;</span><br><span class="line">        <span class="built_in">dfs2</span>(y,x);</span><br><span class="line">        to[x]=<span class="built_in">max</span>(to[x],to[y]);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>,&amp;n,&amp;k);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>,u,v;i&lt;n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>,&amp;u,&amp;v);</span><br><span class="line">        <span class="built_in">add</span>(u,v);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">dfs1</span>(<span class="number">1</span>,<span class="number">0</span>);</span><br><span class="line">    <span class="built_in">memset</span>(d,<span class="number">0</span>,<span class="built_in">sizeof</span>(d));</span><br><span class="line">    <span class="built_in">memset</span>(fa,<span class="number">0</span>,<span class="built_in">sizeof</span>(fa));</span><br><span class="line">    dm=<span class="number">0</span>;</span><br><span class="line">    <span class="built_in">dfs1</span>(rt,<span class="number">0</span>);</span><br><span class="line">    hf=rt;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=(d[rt]+<span class="number">1</span>)/<span class="number">2</span>;i++)</span><br><span class="line">        hf=fa[hf];</span><br><span class="line">    <span class="built_in">memset</span>(d,<span class="number">0</span>,<span class="built_in">sizeof</span>(d));</span><br><span class="line">    <span class="built_in">dfs2</span>(hf,<span class="number">0</span>);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">        dis[i]=to[i]-d[i];</span><br><span class="line">    <span class="built_in">sort</span>(dis+<span class="number">1</span>,dis+n+<span class="number">1</span>,<span class="built_in">greater</span>&lt;<span class="type">int</span>&gt;());</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=k+<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">        ans=<span class="built_in">max</span>(ans,dis[i]+<span class="number">1</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,ans);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="L3-1-dyd的好奇心"><a href="#L3-1-dyd的好奇心" class="headerlink" title="L3-1 dyd的好奇心"></a>L3-1 dyd的好奇心</h2><p>众所周知，dyd身高有两米所以总是被安排在队列的排头，队列是由学生组成的N×N的方阵。然而dyd是个好奇心重的少年会在队列的一角向周围望去并数清他所能看到的学生人数。善于思考的dyd已经摸清了随着N变化他所能看到人数的规律，然而为了考考你，希望你告诉他能看到的学生人数。<br><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWUAAAFHCAYAAAB54V2GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAHRoSURBVHhe7d0JuHVVWQdwQGRSZhAEQcXhQ1MBkVERVNRURBFnUVQQciqHnCvNckizNMvZNNFQw3kecEwtx9QipxxSyyEtm8ysTvy29/1c32Kf4d57hr3Pef/P8z4f3L3PPmuts/Z/veud1naDRCKRSHQGScqJRCLRISQpJxKJRIeQpJxIJBIdQpJyIpFIdAhJyolEItEhJCknEolEh5CknEgkEh1CknIikUh0CEnKiUQi0SEkKScSiUSHkKScSCQSHUKSciKRSHQIScqJRCLRISQpJxKJRIeQpJxIJBIdQpJyIpFIdAhJyolEItEhJCknEolEh5CknEgkEh1CknIikUh0CEnKiUQi0SEkKScSiUSHkKScSCQSHUKSciKRSHQInSTlV77ylYN99913sN12222VG93oRoOPfOQja3f0Dw9/+MO36Q/5pV/6pcFPfvKTtTv6hc985jODm970ptv0Z7fddhu8+MUvXrujf9B2fSj7pI/62keYW+ZY2R9iLvYVOAAXlP3BFThjWdA5Ur7gggsGz3jGMwb3u9/9BmedddZWedCDHjR47nOfO/jwhz88+PGPf7x2d/fxxS9+sZkwT3jCE7bpD3nc4x43eMUrXjG45JJL1u7uPv77v/978NGPfnTwvOc9b/DQhz50m/6cffbZg6c97WmDt771rYPvfOc7a5/oPrRVm7VdH8o+6aO+6rO+9wXmlLlljpX9IeaiOWlu9gXeee8+DsAFZX9wBc7AHcuAzpHyPvvsM7jvfe87+Lu/+7vBD37wg63ywQ9+cHDqqacOzjnnnMH3v//9tbu7j5e85CWD/ffff/C7v/u72/SH/OEf/uHggAMOaP7tC/7t3/5t8JCHPGRw4xvfePDOd75zm/58+9vfbjSzk046afDnf/7na5/oPrRVm7VdH8o+6aO+6rO+9wXl3Cr7Q8xFc9Lc7Au88959HIALyv7gCpyBO5YBnSNl25F73eteg3/6p39a+8vP8IlPfGJw4oknDu5+97sPvvvd7679tfvwUlzucpcb/N7v/d7aX36O5z//+YOddtpp8MxnPnPtL93Hv/7rvzaayZFHHtm8HCX+4z/+Y3DuuecObnCDGwze//73r/21+9BWbdZ2fSihj/qqz/reF5hT5pY5VsNcNCf7pAx45737OAAXlMAVOAN3LAOSlGeMkpT/93//t3mxf/SjHw3+53/+ZylImd3yhz/8YUNmfSdlW+FvfvObg//8z/9cu9J/UqYV//M///M2ppck5W4jSXnGKEn5e9/73uBZz3rW4KlPfergW9/61lKQ8l/+5V8OHvzgBw9e/epX956Ur3GNawzudre7Dd785jevXek3Ke+www6DY489dvDoRz968PnPf37tSpJy19G5Xhx//PHNS37xxRcPPvaxj22V1772tc2P8mu/9muNZtYXXHTRRc1EevrTnz54/etf39gujznmmMGFF17YEDR75ate9aq1u7sPxPtbv/VbgzPPPLNptwVmv/32G9z73vcefOhDHxo87GEPazTOT33qU2uf6D60VZsPO+ywhsg4kmLe6aO+6nNt2ugykDKSIle/+tUHf/AHf7C1T+aiOWlu9gXeee8+DsAF0ReCK3AG7lgGdI6UaV5/9Ed/NLjZzW7WrPIhd77znRtt7Ctf+UqvvOBW+I9//OODxzzmMYMjjjhisNdeew322GOPwfWvf/3BIx7xiMar/4//+I9rd3cfzC5f/epXmwXmnve85+Ca17zm4PKXv/zgyle+8uAmN7nJ4NnPfnajlfVJq9RWbRaVsMsuuwwOOeSQrfNOH/VVn/W9LyhJeddddx0cfvjhW/tkLpqTfdpxeue9+zgAF0RfCK7AGbhjGdBJfV8s4gMf+MBG+wr5jd/4jcGXvvSltTv6B7GhV7ziFQennHLK1j697GUvG/z0pz9du6NfiDjlq171qo0mqT+84x/4wAfW7ugPhMS95S1v2RoSF78P+e3f/u3BN77xjbU7+4MwXxx33HHb9If0OaYXB+CCsj+4os85DDU6ScqcR5wTtiwhtJm+Ehgg5UMPPXTwp3/6p1v71KftcI0g5dNPP72JidUfv9l//dd/rd3RHwiJo+Wff/75TUhc/D7EvOuThhxAyvwVTGRlf0jpyOwbcIDfpOyPeYczlgXLYRnvAZDy1a52tcGb3vSmtb/0E0j3DW94w+CJT3zi4ElPelJj3+uTqaINo0Li+oa//du/bRx5fht28E9+8pNrVxJ9QZLynLAspIyAy+iLPkOIovDEt73tbY3DlZOyr1ok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"/></p><h3 id="输入格式-7"><a href="#输入格式-7" class="headerlink" title="输入格式"></a>输入格式</h3><p>一行，一个正整数 N。</p><h3 id="输出格式-7"><a href="#输出格式-7" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出一行一个数，即 dyd应看到的学生人数。</p><h3 id="输入样例-4"><a href="#输入样例-4" class="headerlink" title="输入样例"></a>输入样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">4</span><br></pre></td></tr></table></figure><h3 id="输出样例-4"><a href="#输出样例-4" class="headerlink" title="输出样例"></a>输出样例</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">9</span><br></pre></td></tr></table></figure><h3 id="提示-5"><a href="#提示-5" class="headerlink" title="提示"></a>提示</h3><p>对于 100% 的数据，1≤N≤10000。</p><h3 id="题解-7"><a href="#题解-7" class="headerlink" title="题解"></a>题解</h3><p>我们将这些坐标从(0,0)编号到(n-1,n-1)，我们不难发现，可以被dyd看到的学生坐标都满足坐标的两个数字互质，因此dyd可以看到的学生数量是 $\sum_{i&#x3D;1}^{n-1}\sum_{j&#x3D;1}^{n-1}\left [ \gcd (i,j)&#x3D;1\right ]$ 再补上(0,1)和(1,0)两种情况。<br>同时，我们发现，可以利用对称性，让 $i&gt;j$ ，变成 $\sum_{i&#x3D;2}^{n-1}\sum_{j&#x3D;1}^{i-1}\left [ \gcd (i,j)&#x3D;1\right ]$ 在乘以2的同时除了(0,1)和(1,0)再补上(1,1)一共三种情况。<br>不难发现， $\sum_{j&#x3D;1}^{i-1}\left [ \gcd (i,j)&#x3D;1\right ]$ 即为欧拉函数 $\varphi (i)$ ，得到的答案是 $2\sum_{i&#x3D;2}^{n-1}\varphi (i)+3$ ，考虑 $i&#x3D;1$ 的情况，则最终答案就是 $2\sum_{i&#x3D;1}^{n-1}\varphi (i)+1$ ，注意n为1时答案为0的特判即可。</p><h3 id="代码-7"><a href="#代码-7" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,ans;</span><br><span class="line"><span class="type">int</span> phi[<span class="number">10005</span>];</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">calcphi</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    phi[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">2</span>;i&lt;=n;i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(!phi[i])</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> j=i;j&lt;=n;j+=i)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">if</span>(!phi[j])</span><br><span class="line">                    phi[j]=j;</span><br><span class="line">                phi[j]=phi[j]/i*(i<span class="number">-1</span>);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">if</span>(n==<span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;0&quot;</span>);</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">calcphi</span>(n);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;n;i++)</span><br><span class="line">        ans+=phi[i];</span><br><span class="line">    ans=ans*<span class="number">2</span>+<span class="number">1</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,ans);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="题解" scheme="https://www.gh.zhangkaixin.cc/tags/%E9%A2%98%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>【宝塔面板使用心得】L01 宝塔面板的安装</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/BTPanel-L01/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/BTPanel-L01/</id>
    <published>2022-01-04T11:29:14.000Z</published>
    <updated>2023-10-14T12:11:57.134Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote><p><em>本系列心得序号以L开头是Linux面板，以W开头是Windows面板。</em></p></blockquote><h2 id="什么是宝塔面板？"><a href="#什么是宝塔面板？" class="headerlink" title="什么是宝塔面板？"></a>什么是宝塔面板？</h2><p>一般，我们的个人电脑的操作系统都会安装带有桌面或者是可视化界面，但是服务器的操作系统为了追求运行服务的性能，不会带有桌面或者是可视化界面。一般服务器操作系统只有一个输入命令的框，这对初入服务器维护的学习者来说十分不友好；同时，一些大量的重复性操作也会浪费老手的很多时间，十分不方便。因此，一个为了方便新手与老手服务器运维人员的可视化界面——服务器面板便应运而生。宝塔面板就是众多服务器面板软件中的一种，也是目前服务器实操运维和电子数据取证竞赛出现频率较高的一种。  </p><blockquote><p><em>“宝塔Linux面板是提升运维效率的服务器管理软件，支持一键LAMP&#x2F;LNMP&#x2F;集群&#x2F;监控&#x2F;网站&#x2F;FTP&#x2F;数据库&#x2F;JAVA等100多项服务器管理功能。<br>“有30个人的专业团队研发及维护，经过200多个版本的迭代，功能全，少出错且足够安全，已获得全球百万用户认可安装。运维要高效，装宝塔。”<br>——宝塔面板开发团队对Linux版的介绍</em></p></blockquote><h2 id="安装宝塔面板"><a href="#安装宝塔面板" class="headerlink" title="安装宝塔面板"></a>安装宝塔面板</h2><p>宝塔面板可以安装在Linux和Windows系统的服务器上。Linux版支持CentOS 7.1+ (Ubuntu16.04+.、Debian9.0+)，Windows版仅支持Windows Server 2008&#x2F;2012&#x2F;2016&#x2F;2019 64位。</p><blockquote><p>本系列心得基于在VMware Workstation 16.x虚拟机运行的Ubuntu20.04，4核，内存4G，硬盘80G上讲解，并安装Linux 7.8.0版，面板部分内容由于机型与版本原因会有所出入，请读者自行甄别。</p></blockquote><p>打开<a href="https://www.bt.cn/">官网</a>，点击立即安装，下滑选择对应版本的安装命令，复制代码并在系统中粘贴运行。<br><img src="/pic/btpanell01-01.png" alt="输入命令"></p><p>在安装时，你会遇到下图的等待界面，这是选择宝塔的安装路径，笔者建议读者使用默认的&#x2F;www路径进行安装，如果是默认的路径这里输入y并敲回车即可。<br><img src="/pic/btpanell01-02.png" alt="选择路径"></p><p>当你看到如下界面，即说明安装已完毕。<br><img src="/pic/btpanell01-03.png" alt="安装完毕"></p><blockquote><p>请注意，如果你是云服务器，由于大部分主机商有安全组的限制，你需要手动放行宝塔面板默认端口8888，不放行不能用，官方提供了<a href="https://www.bt.cn/bbs/thread-1229-1-1.html">腾讯云</a>、<a href="https://www.bt.cn/bbs/thread-2897-1-1.html">阿里云</a>和<a href="https://www.bt.cn/bbs/thread-3923-1-1.html">华为云</a>的放行教程，其他主机商放行方法类同。</p></blockquote><p>现在，你可以访问你服务器的宝塔面板了，地址、用户名及密码已经在安装完成的界面给出。<br><img src="/pic/btpanell01-04.png" alt="安装完毕"></p><p>进入后，同意“《用户协议》”并绑定宝塔账号即可使用。</p><p>你可以选择现在安装LNMP或者LAMP套件，也可以选择在下一篇心得中和笔者一起手动组建套件。</p><p>最后，笔者在这里放出宝塔官方给出的<a href="https://www.bt.cn/btcode.html">宝塔linux面板命令大全</a>。笔者将在以后的篇章中对宝塔linux面板的命令进行讲解分析。</p><h2 id="下篇"><a href="#下篇" class="headerlink" title="下篇"></a>下篇</h2><p>下一篇心得，笔者将带大家对面板进行基本的配置，对面板的基础功能进行讲解。</p><hr><blockquote><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_80x15.png" alt="知识共享许可协议"></a></p><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_88x31.png" alt="知识共享许可协议"></a></p><p>本作品采用<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p></blockquote><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="宝塔面板使用心得" scheme="https://www.gh.zhangkaixin.cc/tags/%E5%AE%9D%E5%A1%94%E9%9D%A2%E6%9D%BF%E4%BD%BF%E7%94%A8%E5%BF%83%E5%BE%97/"/>
    
    <category term="宝塔Linux面板" scheme="https://www.gh.zhangkaixin.cc/tags/%E5%AE%9D%E5%A1%94Linux%E9%9D%A2%E6%9D%BF/"/>
    
  </entry>
  
  <entry>
    <title>【宝塔面板使用心得】L00 安装服务器操作系统</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/BTPanel-L00/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/BTPanel-L00/</id>
    <published>2022-01-03T11:59:51.000Z</published>
    <updated>2023-10-14T12:11:57.130Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote><p><em>本系列心得序号以L开头是Linux面板，以W开头是Windows面板。</em></p></blockquote><p>与桌面操作系统不同，服务器操作系统一般是安装在大型计算机上，用于提供例如Web、应用、数据库等特定服务的操作系统。</p><p>宝塔面板可以安装在Linux和Windows系统的服务器上。Linux版支持CentOS 7.1+ (Ubuntu16.04+.、Debian9.0+)，Windows版仅支持Windows Server 2008&#x2F;2012&#x2F;2016&#x2F;2019 64位。</p><blockquote><p>本系列心得基于在VMware Workstation 16.x虚拟机运行的Ubuntu20.04，4核，内存4G，硬盘80G上讲解，并安装Linux 7.8.0版，面板部分内容由于机型与版本原因会有所出入，请读者自行甄别。</p></blockquote><h2 id="安装VMware"><a href="#安装VMware" class="headerlink" title="安装VMware"></a>安装VMware</h2><p>打开<a href="https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html">VMware官网</a>，根据你自己系统的类型，点击页面最下方的立即下载。<br><img src="/pic/btpanell00-01.png" alt="官网下载"></p><p>然后点开安装程序，开始安装。<br><img src="/pic/btpanell00-02.png" alt="安装程序1"></p><p>同意许可协议。<br><img src="/pic/btpanell00-03.png" alt="安装程序2"></p><p>此处建议勾选增强型键盘驱动程序。<br><img src="/pic/btpanell00-04.png" alt="安装程序3"></p><p>单击“下一步”即可。<br><img src="/pic/btpanell00-05.png" alt="安装程序4"><br><img src="/pic/btpanell00-06.png" alt="安装程序5"></p><p>单击“安装”，并等待安装进度条。<br><img src="/pic/btpanell00-07.png" alt="安装程序6"></p><p>你可以看到安装已经完毕，可以点击许可证输入密钥或者点击完成后稍后输入密钥，这里点击许可证直接输入密钥。<br><img src="/pic/btpanell00-08.png" alt="安装程序7"></p><blockquote><p>VMware Workstation 作为虚拟机软件中十分经典而且流行的一款，十分建议各位购买正版软件，支持正版。但是，由于学生的经济实力有限或者你只想试用这款软件，往往你不会去购买正版软件（这还真是可惜），而是使用搜索引擎得到VMware Workstation的破解密钥。<br><strong><center>笔者并不会在这里列出那些密钥。</center></strong></p></blockquote><p>输入密钥并点击“输入”。<br><img src="/pic/btpanell00-09.png" alt="安装程序8"></p><p>单击“完成”，结束安装。<br><img src="/pic/btpanell00-10.png" alt="安装程序9"></p><p>Oops!它提示要重启了！笔者建议各位重启自己的电脑，因为VMware Workstation需要一些系统服务支持才能够正常运行。请确认别的工作文件已经保存，然后点击“是”，笔者在这里等待大家几分钟。<br><img src="/pic/btpanell00-11.png" alt="安装程序10"></p><h2 id="安装Linux"><a href="#安装Linux" class="headerlink" title="安装Linux"></a>安装Linux</h2><p>欢迎回到本系列心得！虚拟机准备好了，现在我们来安装操作系统吧！</p><p>Linux的发行版本诸多，这里以算法竞赛、电子数据取证竞赛中都经常用到的一个版本Ubuntu来安装。Ubuntu基于Debian，对各类硬件的支持比较完善，而且界面友好、上手容易，最大的优点是Ubuntu的所有发行版本都免费提供。</p><h3 id="下载Ubuntu镜像"><a href="#下载Ubuntu镜像" class="headerlink" title="下载Ubuntu镜像"></a>下载Ubuntu镜像</h3><p>打开<a href="http://releases.ubuntu.com/">Ubuntu官网</a>，你会发现页面上方列出了许多Ubuntu的发行版本，这里以<a href="http://releases.ubuntu.com/focal/">Ubuntu 20.04.3 LTS (Focal Fossa)</a>为例，给大家讲解下安装操作系统的方法。<br><img src="/pic/btpanell00-12.png" alt="Ubuntu官网"></p><p>点开对应版本的页面，你会发现有两个版本的下载页面。第一个版本是Desktop image，这是桌面版本，经常用于个人电脑；第二个版本是Server install image，即服务器版本。这里，选择服务器版本下载，点击右边的超链接即可下载。<br><img src="/pic/btpanell00-13.png" alt="Ubuntu20.04页面"></p><blockquote><p>如果你有想尝试使用Ubuntu系统的想法，可以在看完本系列心得后自行下载桌面版本安装使用。</p></blockquote><h3 id="创建虚拟机"><a href="#创建虚拟机" class="headerlink" title="创建虚拟机"></a>创建虚拟机</h3><p>现在，我们点开VMware Workstation，你看到了主页选项卡，现在点击“创建新的虚拟机”。<br><img src="/pic/btpanell00-14.png" alt="VM主页"></p><p>选择“自定义(高级)(C)”，并点击“下一步”。<br><img src="/pic/btpanell00-15.png" alt="VM创建1"></p><p>默认Workstation 16.x即可。<br><img src="/pic/btpanell00-16.png" alt="VM创建2"></p><p>请选择“稍后安装操作系统(S)。”。<br><img src="/pic/btpanell00-17.png" alt="VM创建3"></p><p>请将系统选为Linux—Ubuntu 64 位。<br><img src="/pic/btpanell00-18.png" alt="VM创建4"></p><p>你可以自行选择虚拟机名称和它的位置，这不影响使用。<br><img src="/pic/btpanell00-19.png" alt="VM创建5"></p><p>你可以使用默认的处理器配置，也可以和本心得一样，设为2个处理器每个处理器2核的4核配置。<br><img src="/pic/btpanell00-20.png" alt="VM创建6"></p><p>内存可以是推荐的4GB即4096MB，本心得也用的是4GB。<br><img src="/pic/btpanell00-21.png" alt="VM创建7"></p><p>默认NAT模式即可。<br><img src="/pic/btpanell00-22.png" alt="VM创建8"></p><p>推荐的 LSI Logic 即可。<br><img src="/pic/btpanell00-23.png" alt="VM创建9"></p><p>推荐的 SCSI 即可。<br><img src="/pic/btpanell00-24.png" alt="VM创建10"></p><p>选择“创建新虚拟磁盘”。<br><img src="/pic/btpanell00-25.png" alt="VM创建11"></p><p>推荐20GB，你也可以和本心得一样改成80GB。<br><img src="/pic/btpanell00-26.png" alt="VM创建12"></p><p>这里的名称不影响使用，默认即可。<br><img src="/pic/btpanell00-27.png" alt="VM创建13"></p><p>已经准备好创建虚拟机，但是不要急着点完成，这里点击“自定义硬件”。<br><img src="/pic/btpanell00-28.png" alt="VM创建14"></p><p>选择“新 CD&#x2F;DVD (SATA)”，选择“使用 ISO 映像文件”，浏览选中本节刚开始下载的 Ubuntu 20.04 的服务器镜像，然后单击“关闭”。<br><img src="/pic/btpanell00-29.png" alt="VM创建15"></p><p>现在可以点击“完成”了。<br><img src="/pic/btpanell00-28.png" alt="VM创建16"></p><h3 id="安装操作系统"><a href="#安装操作系统" class="headerlink" title="安装操作系统"></a>安装操作系统</h3><p>现在，你已经看到虚拟机的页面，单击“开启此虚拟机”<br><img src="/pic/btpanell00-30.png" alt="VM虚拟机"></p><p>当安装程序的光标在“English”上时，敲回车进行选择。<br><img src="/pic/btpanell00-31.png" alt="安装系统1"></p><p>这里它提示我们有更新，直接选择“Continue without updating”，不要更新。<br><img src="/pic/btpanell00-32.png" alt="安装系统2"></p><p>这里按上下键切换选择项，在Layout这里按空格弹出菜单，上下选择“Chinese”，你会发现Variant现在也是“Chinese”，选中“Done”确认即可。<br><img src="/pic/btpanell00-33.png" alt="安装系统3"></p><p>网络连接这里直接确认过去即可。<br><img src="/pic/btpanell00-34.png" alt="安装系统4"></p><p>代理这里直接确认过去跳过即可。<br><img src="/pic/btpanell00-35.png" alt="安装系统5"></p><p>镜像源这里直接默认即可。<br><img src="/pic/btpanell00-36.png" alt="安装系统6"></p><p>磁盘按默认的整个磁盘安装即可。<br><img src="/pic/btpanell00-37.png" alt="安装系统7"></p><p>存储设置这里直接默认即可。这里，它提示是否确认设置，选择“Continue”确认设置。<br><img src="/pic/btpanell00-38.png" alt="安装系统8"></p><p>资料配置这里按你自己的需要填写。<br><img src="/pic/btpanell00-39.png" alt="安装系统9"></p><p>建议安装OpenSSH，按空格选中。<br><img src="/pic/btpanell00-40.png" alt="安装系统10"></p><p>一些服务器环境，建议不要安装，我们将在宝塔面板中对服务器环境进行安装和配置。确认过后我们等待安装即可。<br><img src="/pic/btpanell00-41.png" alt="安装系统11"></p><p>现在，已经安装完了，选择“Reboot Now”重新启动系统。<br><img src="/pic/btpanell00-42.png" alt="安装系统12"></p><p>这个页面直接敲回车即可，VMware已经帮你把镜像自动移除了。<br><img src="/pic/btpanell00-43.png" alt="安装系统13"></p><p>当你看到login或者静止不动，就说明已经加载完毕，可以输入刚刚设置的用户名和密码登录了。<br><img src="/pic/btpanell00-44.png" alt="安装系统14"></p><p>现在，你已经安装完毕了！可以点击VMware Workstation的我已完成安装了。<br><img src="/pic/btpanell00-45.png" alt="安装系统15"></p><h2 id="下篇"><a href="#下篇" class="headerlink" title="下篇"></a>下篇</h2><p>下一篇心得，笔者向带大家介绍宝塔Linux面板，并且带大家安装面板。</p><hr><blockquote><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_80x15.png" alt="知识共享许可协议"></a></p><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_88x31.png" alt="知识共享许可协议"></a></p><p>本作品采用<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p></blockquote><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="宝塔面板使用心得" scheme="https://www.gh.zhangkaixin.cc/tags/%E5%AE%9D%E5%A1%94%E9%9D%A2%E6%9D%BF%E4%BD%BF%E7%94%A8%E5%BF%83%E5%BE%97/"/>
    
    <category term="宝塔Linux面板" scheme="https://www.gh.zhangkaixin.cc/tags/%E5%AE%9D%E5%A1%94Linux%E9%9D%A2%E6%9D%BF/"/>
    
  </entry>
  
  <entry>
    <title>C++内置数据类型与二进制存储</title>
    <link href="https://www.gh.zhangkaixin.cc/blog/Cpp-Binary-Storage/"/>
    <id>https://www.gh.zhangkaixin.cc/blog/Cpp-Binary-Storage/</id>
    <published>2021-08-01T13:00:03.000Z</published>
    <updated>2023-10-14T12:11:57.150Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" type="text&#x2F;css" href="https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>平时，很多同学因为两个int类型的变量相乘变成了负数的问题而头疼，将变量换成了long long类型后便可以解决，但不知道为什么。本文笔者就将向大家介绍C++内置数据类型与二进制存储，以便大家理解。</p><h2 id="C-内置数据类型"><a href="#C-内置数据类型" class="headerlink" title="C++内置数据类型"></a>C++内置数据类型</h2><p>C++有非常多的数据类型，尤其是STL预写了十分多的数据类型，本文仅介绍原生内置的数据类型。</p><h3 id="最基本的内置类型"><a href="#最基本的内置类型" class="headerlink" title="最基本的内置类型"></a>最基本的内置类型</h3><p>C++最基本的内置类型有以下七种：</p><ol><li>布尔型，关键字是bool</li><li>窄字符型，关键字是char</li><li>宽字符型，关键字是wchar_t</li><li>整型，关键字是int</li><li>单精度浮点型，关键字是float</li><li>双精度浮点型，关键字是double</li><li>无类型，关键字是void</li></ol><h3 id="基本的内置类型"><a href="#基本的内置类型" class="headerlink" title="基本的内置类型"></a>基本的内置类型</h3><p>同时，一个最基本的内置类型可以被以下的一个或者多个类型修饰符修饰：</p><ul><li>signed</li><li>unsigned</li><li>short</li><li>long</li></ul><p>因此，我们组合出了C++基本的内置类型。<br>下表列出了这些基本的内置类型在内存中占用的空间以及该类型的变量所能存储的最小值和最大值。<br><em>1字节为8位。</em></p><table><thead><tr><th align="right">关键字（[ ]表示可省略）</th><th align="right">占用空间（字节）</th><th align="right">变量范围</th><th align="left">备注</th></tr></thead><tbody><tr><td align="right">bool</td><td align="right">1</td><td align="right">$0$~$1$</td><td align="left"></td></tr><tr><td align="right">char</td><td align="right">1</td><td align="right">$-2^7$~$2^7-1$</td><td align="left"></td></tr><tr><td align="right">signed char</td><td align="right">1</td><td align="right">$-2^7$~$2^7-1$</td><td align="left"></td></tr><tr><td align="right">unsigned char</td><td align="right">1</td><td align="right">$0$~$2^8-1$</td><td align="left"></td></tr><tr><td align="right">wchar_t</td><td align="right">2</td><td align="right">$0$~$2^{16}-1$</td><td align="left"></td></tr><tr><td align="right">signed wchar_t</td><td align="right">2</td><td align="right">$0$~$2^{16}-1$</td><td align="left"></td></tr><tr><td align="right">unsigned wchar_t</td><td align="right">4</td><td align="right">$0$~$2^{32}-1$</td><td align="left"></td></tr><tr><td align="right">int</td><td align="right">2或4</td><td align="right">$-2^{15}$~$2^{15}-1$ 或 $-2^{31}$~$2^{31}-1$</td><td align="left">16位系统为2字节，32位和64位系统为4字节</td></tr><tr><td align="right">signed [int]</td><td align="right">2或4</td><td align="right">$-2^{15}$~$2^{15}-1$ 或 $-2^{31}$~$2^{31}-1$</td><td align="left">16位系统为2字节，32位和64位系统为4字节</td></tr><tr><td align="right">unsigned [int]</td><td align="right">2或4</td><td align="right">$0$~$2^{16}-1$ 或 $0$~$2^{32}-1$</td><td align="left">16位系统为2字节，32位和64位系统为4字节</td></tr><tr><td align="right">short [int]</td><td align="right">2</td><td align="right">$-2^{15}$~$2^{15}-1$</td><td align="left"></td></tr><tr><td align="right">signed short [int]</td><td align="right">2</td><td align="right">$-2^{15}$~$2^{15}-1$</td><td align="left"></td></tr><tr><td align="right">unsigned short [int]</td><td align="right">2</td><td align="right">$0$~$2^{16}-1$</td><td align="left"></td></tr><tr><td align="right">long [int]</td><td align="right">4或8</td><td align="right">$-2^{31}$~$2^{31}-1$ 或 $-2^{63}$~$2^{63}-1$</td><td align="left">GCC、Clang 等实现中，64位代码的long类型为8字节，而MSVC中则维持4字节</td></tr><tr><td align="right">signed long [int]</td><td align="right">4或8</td><td align="right">$-2^{31}$~$2^{31}-1$ 或 $-2^{63}$~$2^{63}-1$</td><td align="left">GCC、Clang 等实现中，64位代码的long类型为8字节，而MSVC中则维持4字节</td></tr><tr><td align="right">unsigned long [int]</td><td align="right">4或8</td><td align="right">$0$~$2^{32}-1$ 或 $0$~$2^{64}-1$</td><td align="left">GCC、Clang 等实现中，64位代码的long类型为8字节，而MSVC中则维持4字节</td></tr><tr><td align="right">long long [int]</td><td align="right">8</td><td align="right">$-2^{63}$~$2^{63}-1$</td><td align="left"></td></tr><tr><td align="right">signed long long [int]</td><td align="right">8</td><td align="right">$-2^{63}$~$2^{63}-1$</td><td align="left"></td></tr><tr><td align="right">unsigned long long [int]</td><td align="right">8</td><td align="right">$0$~$2^{64}-1$</td><td align="left"></td></tr><tr><td align="right">float</td><td align="right">4</td><td align="right">$\pm 1.17549\times{10}^{-38}$~$\pm 3.40282\times{10}^{+38}$ ，有效数字7位</td><td align="left"></td></tr><tr><td align="right">double</td><td align="right">8</td><td align="right">$\pm 2.22507\times{10}^{-308}$~$\pm 1.79769\times{10}^{+308}$ ，有效数字15位</td><td align="left"></td></tr><tr><td align="right">long double</td><td align="right">10或16</td><td align="right">$\pm 3.3621\times{10}^{-4932}$~$\pm 1.18973\times{10}^{+4932}$ ，有效数字18位或33位</td><td align="left">在大多数平台上的实现与double相同，实现由编译器定义。</td></tr></tbody></table><p><em>如上表所示，加signed修饰符和不加修饰符的内存占用和数据范围一致，一般无需添加。</em>  </p><blockquote><p>上表所有的数据会由于编译器与系统环境的不同而有所差异。<br>读者可以运行如下代码查看自己电脑对应的数值。</p></blockquote><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;iostream&gt;</span>  </span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;limits&gt;</span>  </span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;  </span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span>  </span></span><br><span class="line"><span class="function"></span>&#123;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;bool: \t\t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">bool</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">bool</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">bool</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;char: \t\t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">char</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (<span class="type">int</span>)(numeric_limits&lt;<span class="type">char</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t\t最小值：&quot;</span> &lt;&lt; (<span class="type">int</span>)(numeric_limits&lt;<span class="type">char</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;signed char: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">signed</span> <span class="type">char</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (<span class="type">int</span>)(numeric_limits&lt;<span class="type">signed</span> <span class="type">char</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t\t最小值：&quot;</span> &lt;&lt; (<span class="type">int</span>)(numeric_limits&lt;<span class="type">signed</span> <span class="type">char</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;unsigned char: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">unsigned</span> <span class="type">char</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (<span class="type">int</span>)(numeric_limits&lt;<span class="type">unsigned</span> <span class="type">char</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t\t最小值：&quot;</span> &lt;&lt; (<span class="type">int</span>)(numeric_limits&lt;<span class="type">unsigned</span> <span class="type">char</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;wchar_t: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">wchar_t</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">wchar_t</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">wchar_t</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;signed wchar_t: \t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">signed</span> <span class="type">wchar_t</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">wchar_t</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">wchar_t</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;unsigned wchar_t: \t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">unsigned</span> <span class="type">wchar_t</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">wchar_t</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">wchar_t</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;int: \t\t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;signed int: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">signed</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;unsigned int: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">unsigned</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;short int: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">short</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">short</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">short</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;signed short int: \t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">signed</span> <span class="type">short</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">short</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">short</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;unsigned short int: \t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">unsigned</span> <span class="type">short</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">short</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">short</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;long int: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">long</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">long</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">long</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;signed long int: \t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">signed</span> <span class="type">long</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">long</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">long</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;unsigned long int: \t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">unsigned</span> <span class="type">long</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">long</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">long</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;long long int: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">long</span> <span class="type">long</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">long</span> <span class="type">long</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">long</span> <span class="type">long</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;signed long long int: \t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">signed</span> <span class="type">long</span> <span class="type">long</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">long</span> <span class="type">long</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">signed</span> <span class="type">long</span> <span class="type">long</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;unsigned long long int: &quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">unsigned</span> <span class="type">long</span> <span class="type">long</span> <span class="type">int</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">long</span> <span class="type">long</span> <span class="type">int</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">unsigned</span> <span class="type">long</span> <span class="type">long</span> <span class="type">int</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;float: \t\t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">float</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">float</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">float</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;double: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">double</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">double</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">double</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;long double: \t\t&quot;</span> &lt;&lt; <span class="string">&quot;所占字节数：&quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(<span class="type">long</span> <span class="type">double</span>);  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t最大值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">long</span> <span class="type">double</span>&gt;::max)();  </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\t\t最小值：&quot;</span> &lt;&lt; (numeric_limits&lt;<span class="type">long</span> <span class="type">double</span>&gt;::min)() &lt;&lt; endl;  </span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;  </span><br><span class="line">&#125;  </span><br></pre></td></tr></table></figure><h2 id="二进制存储"><a href="#二进制存储" class="headerlink" title="二进制存储"></a>二进制存储</h2><p>不知道有没有同学好奇过为什么这些类型变量的数据范围是这样的，笔者在这里向大家讲述下这些范围是怎么得出来的。</p><h3 id="二进制"><a href="#二进制" class="headerlink" title="二进制"></a>二进制</h3><p>相信很多同学们都看出来了，这些变量的范围大多都与2有关，这是因为计算机内部存储数据时使用二进制，在向用户显示时使用八进制、十进制、十六进制等进制。</p><p>二进制，就是逢二进一的一种进制。对于整数部分，比如 $13_{(10)}$ ，由于 $13_{(10)}&#x3D;8+4+1&#x3D;2^3+2^2+2^0$ ，转化为二进制就是 $1101_{(2)}$ ；对于小数部分，比如 $0.6875_{(10)}$ ，由于 $0.6875_{(10)}&#x3D;0.5+0.125+0.0625&#x3D;2^{-1}+2^{-3}+2^{-4}$ ，转化为二进制就是 $0.1011_{(2)}$ 。</p><p>在计算机中，这些类型的变量存储都是采用二进制的，一般1字节就表示有8位，2字节就表示有16位，以此类推。但是布尔型（关键字bool）和长双精度浮点型（关键字long double）是个例外，布尔型占用1字节但仅使用1位，长双精度浮点数在部分平台上内存占16个字节，但仅使用80位。  </p><h3 id="范围为整数的类型的计算方法"><a href="#范围为整数的类型的计算方法" class="headerlink" title="范围为整数的类型的计算方法"></a>范围为整数的类型的计算方法</h3><p>对于非负整数，直接使用二进制表示，所有关键字以unsigned开头的类型，保存的都是非负整数。例如，对unsigned char，是1字节8位无符号二进制数， $13_{(10)}$ 表示为 $00001101_{(2)}$ 。因此，对于这种类型，最小值就是全0， $00000000_{(2)}$ 即 $0_{(10)}$ ，最大值就是全1， $11111111_{(2)}$ 即 $255_{(10)}$ 也就是 $2^8-1_{(10)}$ 。<em>需要注意的是，如果已经到了最大值 $11111111_{(2)}$ 再加1的话，就会变到最小值 $00000000_{(2)}$ ，如果再加1就是 $00000001_{(2)}$ 。</em><br>对于负整数，我们将其分为符号和数字两部分。对于符号，由于二进制无法直接保存符号，我们需要转化，由于一个数只有有符号和无符号两种情况，因此我们取变量中最前面的一位作为符号位，0表示无符号，1表示有符号；对于数字，有原码、反码、补码和移码四种编码方式，在下文介绍。</p><h4 id="原码"><a href="#原码" class="headerlink" title="原码"></a>原码</h4><p>原码是指负数与其相反数原来的编码相同，即一个数与其相反数只有符号位不同。例如，对char，是1字节8位二进制数， $-13_{(10)}$ 用原码表示为 $10001101_{(2)}$ 。<br>这种表示方法有两个问题：</p><ol><li>正数运算与负数运算不同，混用很不方便。<br>例如， $12_{(10)}$ 、 $13_{(10)}$ 、 $-12_{(10)}$ 和 $-13_{(10)}$ 分别表示为 $00001100_{(2)}$ 、 $00001101_{(2)}$ 、 $10001100_{(2)}$ 和 $10001101_{(2)}$ 。<br>在十进制下从 $12_{(10)}$ 变到 $13_{(10)}$ 是加1，在二进制下 $00001100_{(2)}$ 变到 $00001101_{(2)}$ 是加1，即对于正数，十进制加1是二进制加1。<br>但在十进制下 $-13_{(10)}$ 变到 $-12_{(10)}$ 是加1，在二进制下 $10001101_{(2)}$ 变到 $10001100_{(2)}$ 是减1，即对于负数，十进制加1是二进制减1。<br>因此不统一。</li><li>存在两个0。<br>即存在 $00000000_{(2)}$ 和 $10000000_{(2)}$ 两个 $0_{(10)}$ 。<br>在十进制下从 $-1_{(10)}$ 加到 $1_{(10)}$ 需要加2，即从 $-1_{(10)}$ 加1变到 $0_{(10)}$ ，再加1变到 $1_{(10)}$ 。<br>但在二进制下从 $10000001_{(2)}$ 加到 $00000001_{(2)}$ 需要加3，即从 $10000001_{(2)}$ 加1变到 $10000000_{(2)}$ ，再加1变到 $00000000_{(2)}$ ，然后再加1变到 $00000001_{(2)}$ 。</li></ol><h4 id="反码"><a href="#反码" class="headerlink" title="反码"></a>反码</h4><p>反码是指负数与其相反数原来的编码相反，即一个数与其相反数的每一位都不一样。例如，对char，是1字节8位二进制数， $-13_{(10)}$ 用反码表示为 $11110010_{(2)}$ 。<br>这种表示方法解决了一个问题：</p><ol><li>正数运算与负数运算不同的问题。<br>例如， $12_{(10)}$ 、 $13_{(10)}$ 、 $-12_{(10)}$ 和 $-13_{(10)}$ 分别表示为 $00001100_{(2)}$ 、 $00001101_{(2)}$ 、 $11110011_{(2)}$ 和 $11110010_{(2)}$ 。<br>在十进制下从 $12_{(10)}$ 变到 $13_{(10)}$ 是加1，在二进制下 $00001100_{(2)}$ 变到 $00001101_{(2)}$ 是加1，即对于正数，十进制加1是二进制加1。<br>在十进制下 $-13_{(10)}$ 变到 $-12_{(10)}$ 是加1，在二进制下 $11110010_{(2)}$ 变到 $11110011_{(2)}$ 是加1，即对于负数，十进制加1是二进制加1。<br>由此统一。</li></ol><p>但这种表示方法还存在一个问题：</p><ol><li>存在两个0。<br>即存在 $00000000_{(2)}$ 和 $11111111_{(2)}$ 两个 $0_{(10)}$ 。<br>在十进制下从 $-1_{(10)}$ 加到 $1_{(10)}$ 需要加2，即从 $-1_{(10)}$ 加1变到 $0_{(10)}$ ，再加1变到 $1_{(10)}$ 。<br>但在二进制下从 $11111110_{(2)}$ 加到 $00000001_{(2)}$ 需要加3，即从 $11111110_{(2)}$ 加1变到 $11111111_{(2)}$ ，因为已经全是1的缘故所以再加1变到 $00000000_{(2)}$ ，然后再加1变到 $00000001_{(2)}$ 。</li></ol><h4 id="补码"><a href="#补码" class="headerlink" title="补码"></a>补码</h4><p>补码是在反码的基础上通过将负数所有的数的编码加1得到的。例如，对char，是1字节8位二进制数， $-13_{(10)}$ 用反码表示为 $11110011_{(2)}$ 。<br>这种表示方法又解决了一个问题：</p><ol><li>两个0的问题。<br>即这种表示方法只存在 $00000000_{(2)}$ 一个 $0_{(10)}$ 。<br>在十进制下从 $-1_{(10)}$ 加到 $1_{(10)}$ 需要加2，即从 $-1_{(10)}$ 加1变到 $0_{(10)}$ ，再加1变到 $1_{(10)}$ 。<br>在二进制下从 $11111111_{(2)}$ 加到 $00000001_{(2)}$ 也只需要加2，即 $11111111_{(2)}$ 因为已经全是1的缘故所以加1变到 $00000000_{(2)}$ ，再加1变到 $00000001_{(2)}$ 。</li></ol><p>计算机内部对于负数采用的是补码的表示方法。那么，对char，是1字节8位无符号二进制数，最小值就是符号位为1，其他位为0， $10000000_{(2)}$ 即 $-128_{(10)}$ 也就是 $-2^7_{(10)}$ ，最大值就是符号位为0，其他位为1， $01111111_{(2)}$ 即 $127_{(10)}$ 也就是 $2^7-1_{(10)}$ 。</p><h4 id="移码"><a href="#移码" class="headerlink" title="移码"></a>移码</h4><p>移码，是取消最高位作为符号位的设定，转而将所有数字向正数方向移动一定数值，使负数最小值为二进制全0，正数最大值为二进制全1。<br>移码是在补码的基础上提出的一种编码方式，思想与补码移动一位弥补反码的思路一致。一般，对于一个n位二进制数，其移码的偏移值为 $2^{n-1}-1$ ，例如，对于一个1字节8位二进制数，其移码的偏移值位 $2^{8-1}-1&#x3D;127_{(10)}$ ，如果用移码表示 $13_{(10)}$ 和 $-13_{(10)}$ ，就需要先对其加上偏移值得到 $140_{(10)}$ 和 $114_{(10)}$ ，然后转换位二进制得到 $10001100_{(2)}$ 和 $01110010_{(2)}$ 。<br>当然，偏移值也可以为其他值。</p><p><em>一般整数不常用移码进行表示，除了浮点数的指数部分。</em></p><h3 id="浮点数范围的计算方法"><a href="#浮点数范围的计算方法" class="headerlink" title="浮点数范围的计算方法"></a>浮点数范围的计算方法</h3><p>刚才介绍的是大部分类型变量的数据范围计算的方法，下面我们介绍一下比较特别的一类数据类型——浮点数。<br>浮点数，是属于有理数中某特定子集的数的数字表示，在计算机中用以近似表示任意某个实数。例如，0.00210245、5012.35和3140520000都是浮点数。<br>浮点数在计算机中表示时使用的是一种以2为底数科学计数法。我们首先了解下以10为底数的科学计数法是怎么表示一个数的，科学计数法分为三部分，符号、指数和因数三部分。符号是指正负号，指数是指十次方幂的指数，因数就是和幂相乘的因数，因数大于等于1小于10，因数又分为整数部分和小数部分。例如对于 $5012.35$ ，应当写成 $5.01235 \times 10^3$ ，其本质是 $( 5 \times 10^{0} + 1 \times 10^{-2} + 2 \times 10^{-3} + 3 \times 10^{-4} + 5 \times 10^{-5} ) \times 10^3$ 。<br>以2为底数科学计数法与以10为底的科学计数法类似，例如对于 $5012.35_{(10)}$ 即 $1001110010100.010110011001100110011001100110011001101_{(2)}$ ，应当写成 $1.001110010100010110011001100110011001100110011001101 \times 2^{12}$ ，其本质是 $( 1 \times 2^{0} + 1 \times 2^{-3} + 1 \times 2^{-4} + 1 \times 2^{-5} + \cdots + 1 \times 2^{-51} ) \times 2^{12}$ 。</p><h4 id="结构"><a href="#结构" class="headerlink" title="结构"></a>结构</h4><p>C&#x2F;C++语言编辑器采用IEEE 754标准，对float和double都采用下图所示的符号、指数和小数三个域划分，整数位不写入内存。<br><img src="/pic/CBinS01.png" alt="IEEE 754浮点数的三个域"><br>比较特别的一个是long double，采用符号、指数、整数、小数四个域划分。<br>三个关键字每个域对应的长度如下表所示：</p><table><thead><tr><th align="right">关键字</th><th align="right">符号</th><th align="right">指数</th><th align="right">整数</th><th align="right">小数</th><th align="right">总长度</th></tr></thead><tbody><tr><td align="right">float</td><td align="right">1</td><td align="right">8</td><td align="right">0</td><td align="right">23</td><td align="right">32</td></tr><tr><td align="right">double</td><td align="right">1</td><td align="right">11</td><td align="right">0</td><td align="right">52</td><td align="right">64</td></tr><tr><td align="right">long double</td><td align="right">1</td><td align="right">15</td><td align="right">1</td><td align="right">63</td><td align="right">80</td></tr></tbody></table><p>float的示意图如下：<br><img src="/pic/CBinS02.png" alt="float三个域的示意图"><br>double的示意图如下：<br><img src="/pic/CBinS03.png" alt="double三个域的示意图"><br>long double的示意图如下：<br><img src="/pic/CBinS04.png" alt="long double三个域的示意图"><br>这里的指数使用的是偏移值为 $2^{n-1}-1$ 的移码（已在上文介绍）。<br>按照这个规则，大家就会得到5012.35转换得到的三个类型的数<br>float： $ \color{lightskyblue}{0}\color{lightseagreen}{10001011}\color{hotpink}{00111001010001011001101} $ （近似处理）<br>double： $ \color{lightskyblue}{0}\color{lightseagreen}{10000001011}\color{hotpink}{0011100101000101100110011001100110011001100110011010} $<br>long double： $ \color{lightskyblue}{0}\color{lightseagreen}{100000000001011}\color{pink}{1}\color{hotpink}{001110010100010110011001100110011001100110011001101000000000000} $ </p><h4 id="规约形式的浮点数"><a href="#规约形式的浮点数" class="headerlink" title="规约形式的浮点数"></a>规约形式的浮点数</h4><p>如果浮点数指数的移码值不为全0和全1（全0和全1有特殊用途），且在科学计数法的表示方式下，整数部分是1（小数部分值为全0到全1），那么这个浮点数被称为规约形式的浮点数。“规约”是指用唯一确定的浮点形式表示一个值。</p><h4 id="非规约形式的浮点数"><a href="#非规约形式的浮点数" class="headerlink" title="非规约形式的浮点数"></a>非规约形式的浮点数</h4><p>如果浮点数指数的移码值为全0 ，小数部分非全0，那么这个浮点数是非规约形式的浮点数。一般只有某个数相当接近0的时候才会使用非规约形式的浮点数表示。<br>实际上，非规约形式的浮点数是可以正常使用的，只是它的绝对值小于所有规约形式的浮点数，更接近0。<br>需要注意的是，对非规约形式的浮点数，虽然其指数的移码值为全0，但值并不是最小值，这是因为，对非规约形式的浮点数，其指数的移码偏移值为 $2^{n-1}-2$ ，例如float非规约形式的浮点数其指数为-126而不是-127。<br>同时，非规约形式的浮点数其因数的整数部分为0，整个因数大于0小于1。</p><h4 id="特殊值"><a href="#特殊值" class="headerlink" title="特殊值"></a>特殊值</h4><p>这里有三个特殊值需要指出：</p><ol><li>如果指数为全0并且因数的小数部分是全0，这个数是±0（取决于符号位）。</li><li>如果指数为全1并且因数的小数部分是全0，这个数是±∞（取决于符号位）。</li><li>如果指数为全1并且因数的小数部分不是全0，这表示的不是一个数字（NaN,Not a Number）。</li></ol><p>以上，对浮点数的形式总结如下</p><table><thead><tr><th align="left">形式</th><th align="left">指数</th><th align="left">小数部分</th></tr></thead><tbody><tr><td align="left">0</td><td align="left">全0</td><td align="left">全0</td></tr><tr><td align="left">非规约形式</td><td align="left">全0</td><td align="left">不为全0</td></tr><tr><td align="left">规约形式</td><td align="left">不为全0和全1</td><td align="left">无要求</td></tr><tr><td align="left">∞</td><td align="left">全1</td><td align="left">全0</td></tr><tr><td align="left">NaN</td><td align="left">全1</td><td align="left">不为全0</td></tr></tbody></table><p>由此，我们计算出了三类浮点数规约形式的数据范围。</p><h4 id="关于精度"><a href="#关于精度" class="headerlink" title="关于精度"></a>关于精度</h4><p>float、double和long double的小数部分存储位数分别为23、52、63，所以一共记录的二进制数位数就为24、53、64。<br> $\lg 2^{24}\approx 7.22$<br> $\lg 2^{53}\approx 15.95$<br> $\lg 2^{64}\approx 19.27$<br>由上计算可得，float可保证7位十进制有效数字，double可保证15位十进制有效数字，long double可保证19位十进制有效数字。</p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><p>中文维基百科：<br><a href="https://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B_(C%E8%AF%AD%E8%A8%80)">数据类型 (C语言)</a><br><a href="https://zh.wikipedia.org/wiki/%E6%9C%89%E7%AC%A6%E8%99%9F%E6%95%B8%E8%99%95%E7%90%86">有符号数处理</a><br><a href="https://zh.wikipedia.org/wiki/IEEE_754">IEEE 754</a></p><hr><blockquote><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_80x15.png" alt="知识共享许可协议"></a></p><p><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><img src="/pic/license/BY-NC-SA_88x31.png" alt="知识共享许可协议"></a></p><p>本作品采用<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p></blockquote><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text&amp;#x2F;css&quot; href=&quot;https://cdn.jsdelivr.net/npm/hexo-tag-hint@0.3.1/dist/hexo-tag-hint.min.css&quot;&gt;&lt;link rel=&quot;st</summary>
      
    
    
    
    
    <category term="科技" scheme="https://www.gh.zhangkaixin.cc/tags/%E7%A7%91%E6%8A%80/"/>
    
    <category term="CPPUAPA周刊" scheme="https://www.gh.zhangkaixin.cc/tags/CPPUAPA%E5%91%A8%E5%88%8A/"/>
    
  </entry>
  
</feed>
