• 第八章 指针函数练习题


    每个题目后面有更正后的代码(有提示更正),前面代码是自己写的,不是很准确,请参考更正后的内容

    1. 将n个整数按输入顺序的逆序排列,要求应用带指针参数的函数实现

    代码:

    #include<iostream>
    
    using namespace std;
    #define N 100
    int tip(int num);
    void addArray(int arr[], int size);
    void reOrder(int *p, int num);
    
    int main()
    {
    	int n = 0;
    	int array[N] = {''};
    	n = tip(n);
    	addArray(array,n);
    	reOrder(array,n);
    
    	return 0;
    }
    //输入提示
    int tip(int num)
    {
    	cout<<"请输入需要倒序整数n:  ";
    	cin>>num;
    	if(num<0)
    	{
    		cout<<"你输入的n值小于0 
    ";
    		return 0;
    	}
    	else if(num > 100)
    	{
    		cout<<"你输入的n值大于数组的容量 
    ";
    		return 0;
    	}
    	else
    	{
    		cout<<"你要为 "<<num<<" 个整数排序"<<endl;
    		return num;		
    	}
    }
    //对数组输入值并打印输入的整数
    void addArray(int arr[], int size)
    {
    	cout<<"请输入要倒序输出的整数: ";
    	int i=0;
    	for(i; i<size; i++)
    	{
    		cin>>arr[i];
    	}
    	cout<<"需要倒序输出的整数: ";
    	for(i=0; i<size; i++)
    	{
    		cout<<arr[i]<<"  ";
    	}
    	cout<<endl;
    }
    //对整数进行倒序排列并输出
    
    void reOrder(int arr[], int num)
    {
    	cout<<"倒序输出的整数: ";
    	int i=0;
    	for(i = num-1; i>=0; i--)
    	{
    		cout<<arr[i]<<"  ";
    	}
    	cout<<endl;
    }
    

    运行结果:
    在这里插入图片描述

    更正:

    #include<iostream>
    
    using namespace std;
    void inverse(int *p, int n)
    {
    	int *q=p+n-1;				//指针变量q指向数组最后一个元素
    	int t;
    	while (p<q)
    	{
    		t = *p; *p = *q; *q=t;  //交换*p与*q
    		p++;q--;				//移动指针变量
    	}
    }
    int main()
    {
    	int a[10] = {1,2,3,4,5,6,7,8,9,10};
    	inverse(a,10);
    	for(int i=0; i<10; i++)
    		cout<<a[i]<<"	";
    	cout<<endl;
    
    	return 0;
    }
    

    更正运行结果:
    在这里插入图片描述

    2.编程输入一行文字,找出其中的大写字母、小写字母、空格、数字以及其他字符各有多少
    代码:

    #include <iostream>
    #include<string>
    
    using namespace std;
    #define M 100     //预内编译命令容没分号 
    void number(char array[]);
    
    int main()
    {
    	char array[M] = {''};
    	number(array);
    
    	return 0;
    } 
    
    void number(char array[])
    {
    	int capitalNum;//大写字母个数
    	int lowerNum;//小写字母个数
    	int spaceNum;//空格个数
    	int digitalNum;//数字个数
    	int othreNum;//其他个数
    
    	capitalNum=lowerNum=spaceNum=digitalNum=othreNum = 0;
    
    	cout<<"请输入字符串:"<<endl;
    	gets(array);
    	int size = strlen(array);
    	for(int i=0;i<size;i++)
    	{
    		if(array[i]>='A'&&array[i]<='Z')
    			capitalNum++;
    		else if(array[i]>='a'&&array[i]<='z')
    			lowerNum++;
    		else if(array[i]>='0'&&array[i]<'9')
    			digitalNum++;
    		else if(array[i]==' ')
    			spaceNum++;
    		else
    			othreNum++;
    	}
    
    	cout<<"字符串长度:"<<size<<endl;
    	cout<<"大写字母个数:"<<capitalNum<<endl;
    	cout<<"小写字母个数:"<<lowerNum<<endl;
    	cout<<"数字个数:"<<digitalNum<<endl;
    	cout<<"空格个数:"<<spaceNum<<endl;
    	cout<<"其他字符个数:"<<othreNum<<endl;
    	system("pause");
    }
    

    运行结果:
    在这里插入图片描述
    更正

    #include <iostream>
    #include<string>
    
    using namespace std;
    
    int main()
    {
    	char a[50], *p = a;				//指针与数组
    	int i=0, j=0, m=0, n=0, k=0;
    	cout<<"输入字符串:";
    	cin.getline(a,51);				//输入一段文字,自动加'',输入最大字符个数为50
    	cout<<"a= "<<a<<endl;
    	while(*p != '')
    	{
    		if(*p>='A'&&*p<='Z')
    		{i++;}
    		else if(*p>='a'&&*p<='z')
    		{j++;}
    		else if(*p>='0'&&*p<='9')
    		{m++;}
    		else if(*p == ' ')
    		{n++;}
    		else
    		{k++;}
    		p++;							//执行完一轮后,将指针的地址指向下一个字符,继续检查
    	}
    
    	cout<<"大写字母:"<<i<<" 个"<<endl;
    	cout<<"小写字母:"<<j<<" 个"<<endl;
    	cout<<"数字:"<<m<<" 个"<<endl;
    	cout<<"空格:"<<n<<" 个"<<endl;
    	cout<<"其他字符:"<<k<<" 个"<<endl;
    
    	return 0;
    } 
    

    更正后运行结果
    在这里插入图片描述

    3. 编写一个从n个字符串中寻找最长字符串的函数char * Longstr(char * z[],int n),其中z是指向多个字符串的指针数组,n是字符串的个数,数组返回值是最长串的首地址,并编写main函数验证程序。

    代码:

    #include <iostream>
    #include <cstring>
    using namespace std;
    char* longstr(char* z[], int n)
    {
        int i;
    
        char* p = z[0];
        for(i = 1; i < n; ++i)
    	{
            if(strlen(p) < strlen(z[i]))
                p = z[i];
        }
        return p;
    }
    
    int main()
    {
        char* array[ ] = {"iostream","pptx","xlsx","docx","doc","txt","c" };
        char* p = longstr(array, sizeof(array)/sizeof(array[0]));
        cout << "最长字符串是:" << p << endl;
    
        return 0;
    }
    

    运行结果:
    在这里插入图片描述
    4. 编写一个将一个字符串插入到另一个字符串指定位置的函数,并编写main函数验证程序

    代码:

    #include<iostream>
    using namespace std;
    #define X 40
    #define Y 40
    #define Z 40
    
    void oderInsert(char a[],char b[],char c[])
    {
    	int p, i, j, k;
    	while(1)
    	{
    		cout <<"请输入第一个字符串: "<< endl;
    		cin >> a;
    		cout <<"请输入第二个字符串: "<< endl;
    		cin >> b;
    		
    		cout <<"请输入插入的位置: "<< endl;
    		cin >> p;                     //输入插入位置
    		for( i=0; i<p; i++ )
    			c[i] = a[i];
    		for( j=0; b[j] != ''; j++ )
    			c[i+j] = b[j];
    		for( k=p; a[k] != ''; k++ )
    			c[j+k] = a[k];
    		 c[j+k] = '';
    		 cout <<"拼接好的字符串: "<<c << endl;
    	  }
    }
    
    int main()
    { 
    	char s1[X] = {''}, s2[Y] = {''}, s3[Z] = {''};
    	oderInsert(s1,s2,s3);
    
    	return 0;
    }
    
    

    运行结果:

    在这里插入图片描述
    更正:

    #include<iostream>
    using namespace std;
    
    #define X 1000
    
    int myStrlen(const char *str)		//指向常量的指针,指向的数据为常量(str指向的常量)
    {
    	int len = 0;
    	while(*str++)
    		len++;
    	return len;
    }
    
    //拼接函数
    void myStrcat(char *str1,char *str2)
    {
    	int len1 = strlen(str1);
    	int len2 = strlen(str2);
    	for(int i=0; i<len2; i++)
    	{
    		str1[len1 + i] = str2[i];
    	}
    	str1[len1+len2] = '';
    }
    
    void myLink(char *str1,char *str2, int pos)
    {
    	int len1 = myStrlen(str1);
    	int len2 = myStrlen(str2);
    	char tmp[1000];
    	int k = 0;
    	for(int i=pos; i<=len1;i++)
    	{
    		tmp[k++] = str1[i];
    	}
    	for(int j=0; j<len2; j++)
    	{
    		str1[pos + j] = *str2++;
    	}
    	str1[pos + j] = '';
    	myStrcat(str1, tmp);
    }
    int main()
    {
    	char str1[X], str2[X];
    	int n;
    		cout<<"输入字符串str1: ";
    		cin.getline(str1,X);
    		cout<<"输入字符串str2: ";
    		cin.getline(str2,X);
    		cout<<"输入插入点n: ";
    		cin>>n;
    		myLink(str1, str2, n);
    		cout<< str1 <<endl;
    
    	return 0;
    }
    
    

    更正后运行结果:

    在这里插入图片描述

    在这里插入图片描述

    第一个方程的代码:

    #include<iostream>
    using namespace std;
    double func (const double x);
    double findRoot( double first, double last,const double e); 
    
    int main ()
    {
    	double a,b ,c,root;
    	cout<<"初值x1:  ";
    	cin>>a;
    	cout<<"初值x2:  ";
    	cin>>b;
    	cout<<"精确值e:  ";
    	cin>>c;
    	root=findRoot(a,b,c);
    	cout<<"方程的根:"<<root<<endl;
    
    	return 0;
    }
    double func(const double x)
    {
    	double y;
    	y=x*x*x + x*x - 3*x +1;
    
    	return y;
    }
    double findRoot(double first, double last,const double e)
    {
    	double mid,y0,y1,y2;
    	mid=(first+last)/2;
    	while((last-first)>e)
    	{
    		y0=func (mid);
    		y1=func(first);
    		y2=func(last);
    
    		if (y0==0)
    			return mid;
    		else if(y0*y1<0) last=mid;
    		else first=mid; /*注意这里*/
    		mid=(first+last)/2;
    	}
    
    	return mid;
    }
    

    运行结果:
    在这里插入图片描述

    第二方程的代码:

    #include<iostream>
    using namespace std;
    double func (const double x);
    double findRoot( double first, double last,const double e); 
    
    int main ()
    {
    	double a,b ,c,root;
    	cout<<"初值x1:  ";
    	cin>>a;
    	cout<<"初值x2:  ";
    	cin>>b;
    	cout<<"精确值e:  ";
    	cin>>c;
    	root=findRoot(a,b,c);
    	cout<<"方程的根:"<<root<<endl;
    
    	return 0;
    }
    double func(const double x)
    {
    	double y;
    	y=x*x - 2*x -8;
    
    	return y;
    }
    double findRoot(double first, double last,const double e)
    {
    	double mid,y0,y1,y2;
    	mid=(first+last)/2;
    	while((last-first)>e)
    	{
    		y0=func (mid);
    		y1=func(first);
    		y2=func(last);
    
    		if (y0==0)
    			return mid;
    		else if(y0*y1<0) last=mid;
    		else first=mid; /*注意这里*/
    		mid=(first+last)/2;
    	}
    
    	return mid;
    }
    

    运行结果:
    在这里插入图片描述

    第三个方程的代码:

    #include<iostream>
    using namespace std;
    double func (const double x);
    double findRoot( double first, double last,const double e); 
    
    int main ()
    {
    	double a,b ,c,root;
    	cout<<"初值x1:  ";
    	cin>>a;
    	cout<<"初值x2:  ";
    	cin>>b;
    	cout<<"精确值e:  ";
    	cin>>c;
    	root=findRoot(a,b,c);
    	cout<<"方程的根:"<<root<<endl;
    
    	return 0;
    }
    double func(const double x)
    {
    	double y;
    	y=x*x*x + 2*x*x + 2*x + 1;
    
    	return y;
    }
    double findRoot(double first, double last,const double e)
    {
    	double mid,y0,y1,y2;
    	mid=(first+last)/2;
    	while((last-first)>e)
    	{
    		y0=func (mid);
    		y1=func(first);
    		y2=func(last);
    
    		if (y0==0)
    			return mid;
    		else if(y0*y1<0) last=mid;
    		else first=mid; /*注意这里*/
    		mid=(first+last)/2;
    	}
    
    	return mid;
    }
    

    运行结果:
    在这里插入图片描述

    更正:

    #include <cmath>
    #include<iostream>
    
    using namespace std;
    float f1(float x)
    {
    	return x*x*x + x*x - 3*x + 1;
    }
    float f2(float x)
    {
    	return x*x - 2*x - 8;
    }
    float f3(float x)
    {
    	return x*x*x + 2*x*x + 2*x + 1;
    }
    //二分法计算方程的解
    float divide(float(*p)(float),float x1,float x2)
    {
    	float x0;
    	do
    	{
    		x0=(x1+x2)/2;
    		if(p(x1)*p(x0)>0)
    			x1=x0;
    		else 
    			x2=x0;
    	}while (fabs(p(x0))>1e-6);
    	return x0;
    }
    int main()
    {
    	cout<<"f1方程的解为:"<<divide(f1,-2,2)<<endl;
    	cout<<"f2方程的解为:"<<divide(f2,-3,3)<<endl;
    	cout<<"f3方程的解为:"<<divide(f3,-2,3)<<endl;
    
    	return 0;
    }
    
    

    更正后的运行结果:
    在这里插入图片描述

    千里之行,始于足下!
  • 相关阅读:
    linux文件系统初探--Day2(3)
    linux文件系统初探--Day2(2)
    linux文件系统初探--Day2(1)
    linux文件系统初探--Day1
    LKD-虚拟文件系统
    linux-nova 安装
    per-file DAX 工作日志(2)
    linux 内核设计与实现——进程管理
    关于用户与服务端密码的校验问题 !mysql php
    [Err] 1055
  • 原文地址:https://www.cnblogs.com/MINAIot/p/13040993.html
Copyright © 2020-2023  润新知