1. 程式人生 > 其它 >C++程式設計實驗二 2017/12/19

C++程式設計實驗二 2017/12/19

技術標籤:C++2017.9c++

1、第一題

1.1題目描述

在進行文章重複度檢查時,經常需要統計一段英文中的單詞數量,並找出長度最長的單詞。

設有如下定義:char str[500];

編寫程式,通過利用cin.getline(str,500);實現從鍵盤輸入一小段英文(其中可以包含空格,但在同一行),利用函式統計該段英文中包含幾個單詞,輸出統計出的單詞數量、最長單詞的長度以及長度最長的單詞,空格隔開。

注意:函式宣告使用void split(char *str);如果有最長的單詞不只一個,輸出最先找到的那個。

1.2 原始碼

#include<iostream>
using namespace std;
void split(char *str)
{
    int i,j,a,s[100]={0},n=0;
    for (i=0,j=0;str[i]!='\0';i++)
    {
       if (str[i]==' ')
       {
           n++;
           j++;
       }
       else
           s[j]++;
    }
    cout <<n+1<<' ';
    for (i=0,j=s[0];s[i]!=0;i++)
    {
       if (j<s[i])
           j=s[i];
    }
    cout<<j<<' ';
    for (i=0;s[i]!=0;i++)
    {
       if (s[i]==j)
           break;
    }
    for (a=0,j=0;a<i;j++)
    {
       if (str[j]==' ')
           a++;
    }
    for (i=j;str[i]!=' '&&str[i]!='\0';i++)
       cout<<str[i];
}
int main()
{
    char str[500];
    cin.getline(str, 500);
    split(str);
    return 0;
}

1.3 執行截圖

2、第二題

2.1題目描述

程式設計序,按如下方法求A矩陣的轉置矩陣B:輸入兩個正整數m和n,而後通過使用指標配合new運算子生成一個m行n列的二維動態陣列A以及另一個n行m列的二維動態陣列B,之後為A輸入資料(A矩陣資料),逐行逐列輸入,進而求出其轉置矩陣B(即將A中的行存放成B中的列)並輸出結果,逐行逐列輸出,每一行數字佔一行,同一行的數空格隔開。

2.2 原始碼

#include<iostream>
using namespace std;
int main()
{
    int m,n;
    cin>>m>>n;
    int(*p1)[30]=new int[30][30];
    int(*p2)[30]=new int[30][30];
    for(int i=0;i<m;i++)
    {
       for(int j=0;j<n;j++)
       {
           cin>>*(*(p1+i)+j);
       }
    }
    for(int i=0;i<m;i++)
    {
       for(int j=0;j<n;j++)
       {
           *(*(p2+j)+i)=*(*(p1+i)+j);
       }
    }
    for(int i=0;i<n;i++)
    {
       for(int j=0;j<m;j++)
       {
           cout<<*(*(p2+i)+j)<<" ";
       }
       cout<<endl;
    }
    return 0;
}

2.3 執行截圖

3、第三題

3.1題目描述

編寫如下原型的函式:void split(double x,int*iPart,double*fPart);提取出資料x的整數部分與小數部分,分別放於*iPart與*fPart處,由於形參iPart與fPart都是指標,從而可實現將這兩個結果“帶回”到主函式中。在主函式中輸入,一個數,輸出它的整數部分和小數部分,用空格隔開。

3.2 原始碼

#include<iostream>
using namespace std;
void split(double x, int*iPart, double*fPart)
{
    *iPart=x;
    *fPart=x-*iPart;
}
int main()
{
    double n,x;
    int z;
    cin>>n;
    split(n,&z,&x);
    cout<<z<<' '<<x;
    return 0;
}

3.3 執行截圖

4、第四題

4.1題目描述

編制具有如下原型的函式findLast:char*findLast(char*sourceStr,char*subStr); findLast函式則要返回源串sourceStr中最後一次出現subStr子字串的頭字元位置。而後編制主函式,輸入兩個字串,將它們用作實參來呼叫這兩個函式,如果返回NULL輸出-1,否則輸出子字串出現時頭字元在原字串的下標,每個結果佔一行。

4.2 原始碼

#include<iostream>
#include<string.h>
using namespace std;
char*findlast(char*soursestr,char*substr);
int main()
{
    char str[100],substr[20];
    char*p;
    p=str;
    cin>>str;
    cin>>substr;
    p=findlast(str,substr);
    if(p==NULL)
    cout<<"-1"<<endl;
    else
    cout<<p-str<<endl;
    return 0;
}
char*findlast(char*sourcestr,char*substr)
{
    int len1=0,len2=0;
    len1=strlen(sourcestr);
    len2=strlen(substr);
    char*p1=sourcestr+len1-1,*p2=substr+len2-1;
    if(len1<len2)return NULL;
    else
    {
          while(*p1!=*(sourcestr-1)&&*p2!=*(substr-1))
           {
               if(*p1==*p2)
               {
                  p2--;
              }
              else
              {
                  p2=substr+len2-1;
              }
            p1--;
           }
      if(*p2==*(substr-1))return p1+1;
      else return NULL;
    }
}

4.3 執行截圖