C语言 指针章节相关例题实现(2)

1.将若干字符串按字母顺序(由小到大)输出。要求:用指针数组( char *name[ ]={“Follow”,“Great”,“FORTRAN”,“Computer”}; ),用各字符串对它进行初始化,然后用选择法排序,但不是移动字符串,而是改变指针数组的各元素的指向。

#include<stdio.h>
#include<string.h>
void sort(char *a[],int n)
{
	int i,j,k;
	char *p;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(strcmp(a[k],a[j])>0)
			    k=j;
		}
		if(k!=i)
		{
			p=a[i];a[i]=a[k];a[k]=p;
		}
	}
}
int main()
{
	char *name[4]={"Basic","Fortran","C","Jave"};
	int i;
	sort(name,4);
	for(i=0;i<4;i++)
	{
		printf("%s\n",name[i]);
	} 
	return 0;
} 

2.有一个指针数组,其元素分别指向一个整型数组的元素,用指向指针数据的指针变量,输出整型数组各元素的值。

#include<stdio.h>
int main()
{
	int i,a[5];
	printf("输入5个数据:");
	for(i=0;i<5;i++)
	{
		scanf("%d",&a[i]);
	}
	int *b[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
	int **p;
	p=b;
	printf("输出整型数组各元素的值:");
	for(i=0;i<5;i++)
	{
		printf("%d ",**p);
		p++;
	}
	return 0;
}

3.用函数求整数a和b中的较大者。通过指向函数的指针变量来实现。

#include<stdio.h>
int max(int x,int y)
{
	if(x>y) return x;
	else return y;
}
int main()
{
	int a,b,c;
	int (*p)();
	p=max;
	printf("输入两个整数:");
	scanf("%d %d",&a,&b);
	c=(*p)(a,b);
	printf("输出两个整数的较大者为:%d",c);
	return 0;
}

4.输入两个整数,然后让用户选择1或2,选1时调用max函数,输出二者中的较大数,选2时调用min函数,输出二者中的较小数。要求:定义两个函数max和min,分别用来求较大数和较小数。在主函数中根据用户输入的数字1或2,使指针变量指向max函数或min函数。

#include<stdio.h>
int max(int x,int y)
{
	if(x>y) return x;
	else return y;
}
int min(int x,int y)
{
	if(x>y) return y;
	else return x;
}
int main()
{
	int a,b,c,t;
	int (*p)();
	printf("输入两个整数:");
	scanf("%d %d",&a,&b);
	printf("选择 1 or 2:");
	scanf("%d",&t);
	if(t==1)
	{
		p=max;
		c=(*p)(a,b);
		printf("输出两个整数的较大者为:%d",c);
	}
	else if(t==2)
	{
		p=min;
		c=(*p)(a,b);
		printf("输出两个整数的较小者为:%d",c);
	}
	return 0;
}

5.有两个整数a和b,由用户输入1,2或3。如输入1,程序就给出a和b中较大者,输入2,就给出a和b中较小者,输入3,则求a与b之和。 用一个函数fun来实现以上功能,函数形参需要有指向函数的指针。

#include<stdio.h>
int max(int x,int y)
{
	int z;
	if(x>y) z=x;
	else z=y;
	printf("输出两个整数的较大者为:%d",z);
	return z;
}
int min(int x,int y)
{
	int z;
	if(x>y) z=y;
	else z=x;
	printf("输出两个整数的较小者为:%d",z);
	return z;
}
int sum(int x,int y)
{
	int z=x+y;
	printf("输出两个整数之和为:%d",z);
	return z;
}
int fun(int x,int y,int (*a)(int,int))
{
	int z;
	z=(*a)(x,y);
}
int main()
{
	int a,b,c,t;
	printf("输入两个整数:");
	scanf("%d %d",&a,&b);
	printf("选择 1 or 2 or 3:");
	scanf("%d",&t);
	if(t==1) fun(a,b,max);
	else if(t==2) fun(a,b,min);
	else if(t==3) fun(a,b,sum);
	return 0;
}

6.有a个学生,每个学生有b门课程的成绩。要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数(函数返回类型为指针)实现。

#include<stdio.h>
float *search(float (*p)[4],int n)
{
	float *t;
	t=*(p+n);
	return t;
}
int main()
{
	float score[][4]={{59,66,67,61},{93,95,90,88},{33,65,77,90}};
	float *k;
	int i,j;
	printf("输入学生序号:");
	scanf("%d",&j);
	printf("输出第%d个学生的全部成绩:",j);
	k=search(score,j-1);
	for(i=0;i<4;i++)
	{
		printf("%5.2f\t",*(k+i));
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值