第八九周第六章指针

1.调试分析课本每一个例题,有可能的话更改成2-3个方法的新程序;


指针的几种表示形式

#include<iostream>
using namespace std;

int main()
{
	int a=10;
	int*p;
	p=&a;
	cout<<"a="<<a<<endl;
	cout<<"p="<<p<<endl;
	cout<<"&a="<<&a<<endl;
	cout<<"*p="<<*p<<endl;
	cout<<"&p="<<&p<<endl;
	cout<,endl;
	*p=15;
	cout<<"a="<<a<<endl;
	cout<<"p="<<p<<endl;
	cout<<"&a="<<&a<<endl;
	cout<<"*p="<<*p<<endl;
	cout<<"&p="<<&p<<endl;

	return 0;
}


输入两个整数,按由大到小输出

#include<iostream>
using namespace std;

int main()
{
	int a,b;
	int *p=&a,*q=&b,*tp;
	cout<<"请输入两个数:";
	cin>>a>>b;
	if(a<b)
	{
		tp=p;p=q;q=tp;
	}
	cout<<a<<b<<endl;
	cout<<*p<<*q<<endl;

	return 0;
}

将两个数由大到小排

#include<iostream>
using namespace std;

int main()
{
	int a,b,temp;
	int *p=&a,*q=&b;
	cout<<"please input a and b:";
	cin>>a>>b;
	cout<<"初始的两个数为:"<<a<<" "<<b<<endl;
	if(a<b)
	{
		temp=*p;*p=*q;*q=temp;
	}
	cout<<"从大到小排序后的数为:"<<*p<<" "<<*q<<endl;

		return 0;
}


指针的运算

#include<iostream>
using namespace std;

int main()
{
	int a=10,b=10,*ptr1,*ptr2;
	ptr1=&a;
	ptr2=&b;
	cout<<boolalpha<<(*ptr1==*ptr2)<<endl;
	cout<<boolalpha<<(ptr1==ptr2)<<endl;
		return 0;
}



用下标法输出数组元素

#include<iostream>
#include<iomanip>
using namespace std;

int main()
{
	int a[10];
	for(int i=0;i<10;i++)
		a[i]=2*(i+1);
	for(i=0;i<10;i++)
		cout<<setw(4)<<a[i];
	cout<<endl;

	return 0;
}


通过数组名计算数组元素地址,找出数组元素的值

#include<iostream>
#include<iomanip>
using namespace std;

int main()
{
	int a[10];
	for(int i=0;i<10;i++)
		*(a+i)=2*(i+1);
	for(i=0;i<10;i++)
		cout<<setw(4)<<*(a+i);
	cout<<endl;

	return 0;
}


指针变量指向数组元素

#include<iostream>
#include<iomanip>
using namespace std;

int main()
{
	int a[10],*p,i=0;
	for(p=a;p<a+10;p++)
	{
		*p=2*(i+1);
		i++;
	}
	for(p=a;p<a+10;p++)
		cout<<setw(4)<<*p;
	cout<<endl;

	return 0;
}

使用字符指针变量实现将字符串A赋值到字符串B中

<pre name="code" class="cpp">#include<iostream>
using namespace std;

int main()
{
	char a[]="helle world",b[20],*p,*q;
	p=a,q=b;
	for(;*p!='\0';p++,q++)
		*q=*p;
	*q='\0';
	cout<<"string1 is:";
	cout<<a<<endl;
	cout<<"string2 is:";
	cout<<b<<endl;

	return 0;
}

 通过改变指针变量的值输出下面的字符串。 

#include<iostream>
using namespace std;

int main()
{
	char *p="student";
	for(;*p!='\0';p++)
		cout<<p<<endl;

	return 0;
}

用下标形式引用字符串中的字符

#include<iostream>
using namespace std;

int main()
{
	char *p="student";
	for(int i=0;p[i]!='\0';i++)
		cout<<p[i];
	cout<<endl;

	return 0;
}

利用指针相减的运算,计算字符串的长度

#include<iostream>
using namespace std;

int main()
{
	char s[50];
	 char *p;
	 cout<<"please input a string:";
	 cin.get(s,50);
	 p=s;
	 for(;*p!='\0';p++)
		 cout<<"the length is:"<<p-s<<endl;

	return 0;
}

多级指针举例

#include<iostream>
using namespace std;

int main()
{
	int i=5,*p,**pp;
	p=&i;
	pp=&p;
	cout<<&i<<'\t'<<i<<endl;
	cout<<&p<<'\t'<<p<<'\t'<<*p<<endl;
	cout<<&pp<<'\t'<<pp<<'\t'<<*pp<<'\t'<<**pp<<endl;

	return 0;
}


指针数组举例

#include<iostream>
using namespace std;

int main()
{
	int a[5]={1,2,3,4,5};
	int *p[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
	for(int i=0;i<5;i++)
		cout<<*p[i]<<'\t';
	cout<<endl;

	return 0;
}

利用字符指针数组处理多个字符串

#include<iostream>
using namespace std;

int main()
{
	char a[]="computer system",b[]="hardware",c[]="software";
	char *p[4];
	p[0]=a;
	p[1]=b;
	p[2]=c;
	p[3]=NULL;
	for(int i=0;p[i]!=NULL;i++)
		cout<<p[i]<<endl;

	return 0;
}


用字符串初始化字符指针数组\

#include<iostream>
using namespace std;

int main()
{
	char *weekname[]={"Sunday","monday","tuesday","wednesday","thursday","friday","Saturday"};
	int i;
	while(1)
	{
		cout<<"please input week no:";
		cin>>i;
		if(i<0||i>6)
			break;
		cout<<"week no."<<i<<"-->"<<weekname[i]<<endl;
	}

	return 0;
}


将字符串指针由小到大排序

#include<iostream>
using namespace std;

int main()
{
	char *p[]={"revacca","heaven","ichael chang","linda tsai"};
		char * temp;
	int i,j,n=4;
	for(i=0;i<n-1;i++)
		for(j=0;j<n-1-i;j++)
			if(strcmp(p[j],p[j+1])>0)
			{
				temp=p[j];p[j]=p[j+1];p[j+1]=temp;
			}
			for(i=0;i<n;i++)
				cout<<p[i]<<endl;


	return 0;
}


 用指针数组处理二维数组

#include<iostream>
using namespace std;

int main()
{
	int a[2][3],*p[2];
	int i,j;
	p[0]=a[0];
	p[1]=a[1];
	for(i=0;i<2;i++)
	for(j=0;j<3;j++)
		a[i][j]=j+i;
	for(i=0;i<2;i++)
		for(j=0;j<3;j++)
		{
			cout<<"a["<<i<<"]["<<j<<"]:";
				cout<<*(p[i]+j)<<endl;
		}

		return 0;
}
利用二级指针处理二维数组

#include<iostream>
using namespace std;

int main()
{
	int a[2][3],*p[2],**pp;
	int i,j;
	p[0]=&a[0][0];
	p[1]=&a[1][0];
	pp=p;
	for(i=0;i<2;i++)
		for(j=0;j<3;j++)
			pp[i][j]=j+i;
		for(i=0;i<2;i++)
		for(j=0;j<3;j++)
			cout<<*(*(pp+i)+j)<<endl;

return 0;
}


2.编程实现课本每一个编程习题。

3. 有n个人围成一个圆圈,从第一个人开始报数,从1到3循环,凡是报3的退出圈子,问最后退出圈子的人是原来的几号。

4.一个班有5个学生,每一个学生有几门成绩(到底是几门自已定,或3或4或5或6),定义函数来完成下面功能:

    计算第2门课成的平均分;

    找出有2门以上成绩不及格的学生,并输出其学号和全部课程成绩;

    找出平均成绩在90以上或者全部课程在85分以上的学生。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值