中國礦業大學2020-2021-1高級語言程序設計實驗期末考題


期末測試一:字符串處理

題目描述

在一個字符串str1中找到所有存在於str2中的字符,並逐一刪除。每刪除一個字符,就按順序從str3中取出一個字符填充刪除的位置。要求在刪除字符時,從str1的頭部開始比較與str2中的元素是否相同,而填充字符時,也從str3的頭部逐一選擇字符填充。當str3不夠長時,循環返回到頭部繼續逐一選擇。

輸入

輸入有三行,第一行對應str1,第二行對應str2,第三行對應str3。

輸出

輸出只有一行,是處理過的字符串,末尾沒有換行。

樣例輸入

abcdhjkl
hdk
AB

樣例輸出

abcABjAl

AC代碼示例1(自己的考試后修改結果)

#include<iostream>
using namespace std;
int len(char str[])
{
   int l=0;
   for (int i=0; str[i]; i++) l++;
   return l;
}
int main()
{
   char str1[40];
   char str2[10];
   char str3[10];
   cin>>str1>>str2>>str3;
   int m=0;
   for (int i=0; str1[i]; i++)
   {
      for (int j=0; str2[j]; j++)
      {
         if (str1[i]==str2[j])
         {
            m=m%len(str3);   //就是這里!!!考試寫成了str2死活AC不出來!!!結果是abcABj
            cout<<"m-> "<<m<<" "<<len(str2)<<endl;
            str1[i]=str3[m];    
            m++;
            break;
         }
      }
   }
   for (int i=0; str1[i]; i++) cout<<str1[i];
   return 0;
}

AC代碼示例2:某ZJUer同學現做(似乎沒有用到五分鍾)

#include <stdio.h>
#include <string.h>
#define MAX 200
int cur,len;
char s1[MAX], s2[MAX], s3[MAX], tmp;
int main(int argc, char const *argv[])
{
    scanf("%s",s1);
    scanf("%s",s2);
    scanf("%s",s3);
    len = strlen(s3);
    for (int i = 0; s1[i]; i++)
    {
        tmp = s1[i];
        for (int j = 0; s2[j]; j++)
        {
            if(tmp == s2[j]){
                s1[i] = s3[cur++%len];
                break;
            }
        }
    }
    printf("%s",s1);
    return 0;
}

復盤

  1. 先把題目看清楚再下手。。前幾遍全是以str2開始遍歷的,完全搞錯了
  2. 不熟悉char[]的應用,沒認真看書以及做題做少了
  3. 應該多學習點string類或者STL的內容,字符串處理算法似乎很多廠子也會作為面試題。。

期末測試二:圖形類

題目描述

一個中空柱形圖形的截面如下圖陰影部分所示。設計一個圓類,包含半徑數據,以及構造函數,成員賦值函數,面積函數等。再設計一個柱形類,柱形類繼承了圓類,增加高度作為數據成員,增加構造函數,成員賦值函數,底面積函數(返回正方形與圓形面積之差),體積函數(為底面積乘以高度)等。在主函數中輸入圓的半徑及圓柱高度,調用柱形類對象的成員賦值函數,輸出柱形對象的底面積與體積。要求:用面向對象實現,使用繼承方法;數據為私有,函數為公有;圓周率值按3.14計算。

輸入

輸入兩個數據,分別代表圓的半徑和圓柱的高度,中間用一個空格隔開。

輸出

輸出兩個數據,分別是柱形對象的底面積與體積,中間用一個空格隔開,末尾沒有換行。

樣例輸入

4.3 5.6

樣例輸出

15.9014 89.0478

考試AC代碼

#include <iostream>
using namespace std;
class Circle
{
    private:
        double radius;
    public:
        Circle():radius(0){}
        Circle(double r):radius(r){}
        double ShowR() {return radius;}
        double Area() {return 3.14*radius*radius;}  
};
 
class Zhu: public Circle
{
    private:
        double height;
    public:
        Zhu():height(0){}
        Zhu(double r, double h):Circle(r),height(h){}
        double BottomArea()
        {
            double ra=0;
            ra=ShowR();
            return 4*ra*ra-Area();
        }
        double Volumn() {return BottomArea()*height;}
};
int main() {
    double r,h;
    cin>>r>>h;
    Zhu z(r,h);
    cout<<z.BottomArea()<<' '<<z.Volumn()<<endl;
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM