C++高级语言程序设计实验五

目录

一、第一题

1.1题目描述

1.2源代码

1.3运行截图

 ​编辑

二、第二题

2.1题目描述

2.2源代码

2.3运行截图

三、第三题

3.1题目描述

 

3.2源代码

3.3运行截图

 四、第四题

4.1题目描述

4.2源代码

4.3运行截图

 五、第五题

5.1题目描述

5.2源代码

5.3运行截图

一、第一题

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 s[1000]={0},num=1,j=0,max=0,k=0,n=0,sum=0;
	for(int i=0;str[i]!='\0';i++)
	{
		if(str[i]==' ')
		{
			num++;
	        j++;
		}
		else s[j]++;
	}
	cout<<num<<" ";
	for(int i=0;s[i]!=0;i++)
	{
		if(s[i]>max)
		{
			max=s[i];
			k=i;
		}
	}
	cout<<max<<" ";
		 for(j=0;j<k;j++)
		 {
		 	sum+=s[j];
		 }
		 sum+=k;
    for(;str[sum]!=' '&&str[sum]!='\0';sum++)
    {
    	cout<<str[sum];
	}
}
int main()
{
	char str[500];
	cin.getline(str,500); 
	split(str);
	return 0;
}

1.3运​​​​​​​行截图

 

二、第二题


2.1题目描述

编程序,按如下方法求A矩阵的转置矩阵B:输入两个正整数mn,而后通过使用指针配合new运算符生成一个mn列的二维动态数组A以及另一个nm列的二维动态数组B,之后为A输入数据(A矩阵数据),逐行逐列输入,进而求出其转置矩阵B(即将A中的行存放成B中的列)并输出结果,逐行逐列输出,每一行数字占一行,同一行的数空格隔开。

注意:输入保证全是整数。

2.2源代码

#include<iostream>
using namespace std;
int main()
{
    int m,n,i,j;
    cin>>m>>n;
    int s[100][100];
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            cin>>s[i][j];
    for(j=0;j<n;j++)
    {
        for(i=0;i<m;i++)
            cout<<s[i][j]<<' ';
        cout<<endl;
    }
    return 0;
}

2.3运行截图

​​​​​​​

三、第三题

3.1题目描述

 

题目编写如下原型的函数:

void split(double x,int*iPart,double*fPart);

提取出数据x的整数部分与小数部分,分别放于*iPart*fPart处,由于形参iPartfPart都是指针,从而可实现将这两个结果带回到主函数中。

在主函数中

输入一个数

输出它的整数部分和小数部分,用空格隔开。

提示:一个double类型数,强制类型转换后就是int,也就是整数部分,差为小数部分。这两个值用指针iPart和指针fPart带回(通过修改指针的目标变量值。)

3.2源代码

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

3.3运行截图

​​​​​​​

 四、第四题

4.1题目描述

编制具有如下原型的函数findLast

           char*findLast(char*sourceStr,char*subStr);

findLast函数则要返回源串sourceStr中最后一次出现subStr子字符串的头字符位置。

而后编制主函数,输入两个字符串,将它们用作实参来调用这两个函数,如果返回NULL输出-1,否则输出子字符串出现时头字符在原字符串的下标,每个结果占一行。

要求实现程序中不可使用“string.h”头文件内有关寻找子串的标准库函数。

4.2源代码

#include<iostream>
using namespace std;
char*findLast(char*sourceStr,char*subStr)
{
     char *p1=sourceStr,*p2=subStr;
     int len1=0,len2=0;
     while(*p1!='\0')
     {
     	len1++; 
     	p1++;
	 }
	 while(*p2!='\0')
	 {
	 	len2++;
		p2++; 
	 }
	 p1=sourceStr;
	 p2=subStr;
	 if(len1<len2)
	 {
	 return NULL;
     }
	 else
	 {
	 	while(*p1!='\0'&&*p2!='\0')
	 	{
	 		if(*p1==*p2)
			 {
	 			p2++;
			 }
			 else
			 {
			 	p2=subStr;
			 }
			 p1++; 
		 }
		 if(*p2=='\0')
		 {
		 	return p1-len2;
		 }
		 else 
		 {
		 return NULL;
         }
	 }
}

void re(char *p)
{
	int i,j,len;
	char *q=NULL;
	char t;
	for(len=0;*(p+len)!=0;len++)
	{
		q=p+len;
    }
		while(p<q)
		{
			t=*p;
			*p=*q;
			*q=t;
			p++;
			q--;
	    }
}

int main()
{
	char sourceStr[100],subStr[100];
	char *p1;
	char *p2;
	int len1=0,len2=0;
	p1=sourceStr;
	p2=subStr;
	cin.getline(sourceStr,100);
	cin.getline(subStr,100);
	while(*p1!='\0')
     {
     	len1++; 
     	p1++;
	 }
	 while(*p2!='\0')
	 {
	 	len2++;
		p2++; 
	 }
	re(sourceStr);
	re(subStr);
	p1=findLast(sourceStr,subStr);
	if(p1==NULL)
	{
		cout<<"-1";
	}
	else
	{
	cout<<len1-(p1-sourceStr+len2)<<endl;
    }  
	return 0;
}

4.3运行截图

​​​​​​​

 五、第五题

5.1题目描述

编写具有如下原型的函数:

int f(unsigned long x, int n,int & Lxn);

它负责将整数x的第n位(从左边数第n位,n>0)的数值放到引用Lxn中(将作为结果返回到主调函数的对应实参变量中),并将倒数第n位(从右边数第n位,n>0)的数值作为函数结果返回去。

例如当x=123456789,n=7时,执行语句Rxn=f(x,n, Lxn);将使返回的Lxn7,并使Rxn变为3;而执行语句 Rxn=f(123456Lxn);将使LxnRxn都变为0(超出数的长度即总位数时返回0

5.2源代码

#include<iostream>
#define NULL 0;
using namespace std;
int f(unsigned long x, int n,int & Lxn)
{
    int len=0,Rxn,k=0,m;
    int s[100]={0};
	m=x;
	for(int i=0;m>0;i++)
	{
	     m=m/10;
		 len++;	
	}
	m=x;
	if(len<n)
	{
	     Rxn=0;
		 Lxn=0;	
	}
	else
	{
	     for(int i=0;m>0;i++)
		 {
	        k=m%10;
	        m=m/10;
	        s[len-1-i]=k;
		 }
		 Lxn=s[n-1];
		 Rxn=s[len-n];	
	}	
	return Rxn;
}

int main()
{
     unsigned long x;
     int n;
     int Rxn,Lxn;
     cin>>x>>n;
     Rxn=f(x,n,Lxn);
     cout<<Rxn<<" "<<Lxn;
     return 0;
}

5.3运行截图

​​​​​​​



 醒来万物皆是沉寂,唯有你是世间的一抹旎旖,他人困于山中晨雾,我困于你。

                                                                                                                          ------德卡先生的信箱

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值