C++程式設計實驗二 2017/12/19
阿新 • • 發佈:2021-01-15
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;
}
}