天津师范大学C++课程上机题目精选(二)——指针及其应用

题目1描述:
在主函数中输入n个整数到数组中,调用函数(使用指针)完成将数组中的最小值与第0个元素对调,将数组中的最大值与最后一个元素对调,主函数中输出调换后的数组

#include<iostream.h>
#define N 5
void Input(int array[])
{
	int i;
    for(i=0;i<5;i++)
        cin>>*(array+i);
}
void Change(int *p)
{
	int max,min,k=0,w=0,t,i;
    max=*p;
    min=*p;
    for(i=1;i<5;i++)
	{
         if(*(p+i)<min)
		 {     
             min=*(p+i);
             k=i;
		 }
	}
    for(i=1;i<5;i++)
	{
          if(*(p+i)>max)
		  {     
               max=*(p+i);
               w=i;
		  }
	}
    t=*p;
    *p=*(p+k);
    *(p+k)=t;
    t=*(p+4);
    *(p+4)=*(p+w);
    *(p+w)=t;

}
void main()
{
	int array[N];
	int *p,*q;
	p=array;
	q=p+5;
    int i;
	Input(array);
	Change(p);
	cout<<"the changed array:"<<endl;
	for( ;p<q;p++)
		cout<<*p<<'\t';
}

题目2描述:
在主函数中输入10个整数到数组中,调用函数(使用指针)完成将数组元素循环移动k位。当k>0时,实现循环右移;当k<0时,实现循环左移。循环右移一位的意义是:将数组整体元素向后一个下标位置移动一个元素的位置,原数组最后一个元素移动到数组最前面第0个元素的位置。

#include<iostream.h>
#define N 10
void swap(int *p,int k)
{

	int b[10];
	int i;
	for(i=0;i<10;i++)
		b[i]=*(p+i);
	if(k>0)
	{
		for(i=9;i>=k;i--)
			*(p+i)=*(p+i-k);
		for(i=0;i<k;i++)
			*(p+i)=b[i+10-k];
	}
    if(k<0)
	{
		k=-k;
		for(i=k;i<10;i++)
			*(p+i-k)=*(p+i);
		for(i=0;i<k;i++)
			*(p+9-i)=b[k-i-1];

	}
}
void main()
{
	int i,k ;
	int a[N];
	int *p;
	p=a;
	cout<<"please input:"<<endl;
	for(i=0;i<N;i++)
		cin>>a[i];
	cout<<"please input k:";
	cin>>k;
	cout<<endl;
	swap(p,k);
    for(i=0;i<N;i++)
		cout<<a[i]<<endl;
}

题目3描述:
在主函数中输入任意的四个整数存入变量a,b,c,d中,调用函数(用引用实现参数传递)将这四个整数进行排序。

#include<iostream.h>
void order(int &a,int &b,int &c,int &d)
{
	int m,n,p,q,t;
	m=a;
	n=b;
	p=c;
	q=d;
    if(m>n)
	{
		t=m;
		m=n;
		n=t;
	}
	if(m>p)
	{
		t=m;
		m=p;
		p=t;
	} 
	if(m>q)
	{
		t=m;
		m=q;
		q=t;
	}
	if(n>p)
	{
		t=n;
		n=p;
		p=t;
	}	
	if(n>q)
	{
		t=n;
		n=q;
		q=t;
	}
	if(p>q)
	{
		t=p;
		p=q;
		q=t;
	}
	d=q;c=p;b=n;a=m;

}
void main()
{
	int a,b,c,d;
	cout<<"please input 4 numbers:"<<endl;
	cin>>a>>b>>c>>d;
	order(a,b,c,d);
	cout<<"the ordered numbers are:"<<endl;
	cout<<a<<'\t'<<b<<'\t'<<c<<'\t'<<d<<endl;
}
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值