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;
}