一、 a、b是两个浮点型变量,给a、b赋值,建立两个指针分别指向a的地址和b的地址,输出两个指针的值。
#include<stdio.h>
int main()
{
float a,b,*p1,*p2;
a=10.2;
b=2.3;
p1=&a;
p2=&b;
printf("a=%f,b=%f\n",a,b);
printf("*p1=%f,*p2=%f\n",*p1,*p2);
return 0;
}
运行结果
二、用指针变量作为函数参数,实现交换两个变量值的功能。
#include<stdio.h>
void swap(int*,int*);
int main()
{
int a,b,*p1,*p2;
a=29;
b=23;
printf("a=%d,b=%d\n",a,b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("swapping......\n");
printf("a=%d,b=%d\n",a,b);
return 0;
}
void swap(int*n,int*m)
{
int temp;
temp=*m;
*m=*n;
*n=temp;
}
运行结果
三、编写一个程序。输入某个班级20人的成绩,求其最高分及平均分并输出。其中输入成绩、求最高分和求平均分要求设计为三个函数input()、gethighest()和getaverage( )(要求用指针方法处理)
#include<stdio.h>
#define NUM 10
void Input(float*,int);
float GetHighest(float*,int);
float Getaverage(float*,int);
int main()
{
float score[NUM];
float highest,average;
Input(score,NUM);
highest = GetHighest(score,NUM);
average = Getaverage(score,NUM);
printf("highest is %f,\naverage is %f\n",highest,average);
return 0;
}
void Input(float*array,int number)
{
int i;
printf("please input ten scores:");
for(i=0;i<number;i++)
{
scanf("%f",&array[i]);
}
}
float GetHighest(float*array,int number)
{
int i;
float highest=*array;
for(i=0; i<number;i++,array++)
{
if(*array>highest)
{
highest=*array;
}
}
return highest;
}
float Getaverage(float*array,int number)
{
int i;
float average;
float sum=0;
for(i=0;i<number;i++,array++)
{
sum=sum+(*array);
}
average=(sum)/NUM;
return average;
}
运行结果
四、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①输入10个数;②进行处理;③输出10个数。(要求用指针方法处理)
#include<stdio.h>
#define NUM 10
void input(int*,int);
void swap(int*,int);
void output(int*,int);
int main()
{
int a[NUM];;
input(a,NUM);
swap(a,NUM);
output(a,NUM);
return 0;
}
void input(int*array,int number)
{
int i;
printf("please enter %d scores:\n",NUM);
for(i=0;i<number;i++)
{
scanf("%d",array+i);
}
}
void swap(int*array,int number)
{
int i,j,temp,min,max;
max=min=0;
for(i=0;i<number;i++)
{
for(j=0;j<number-i;j++)
{
if(*(array+i)>*(array+max))
{
max=i;//找出最大数的位置
}
}
}
temp=*(array+max);
*(array+max)=*(array+number-1);
*(array+number-1)=temp;//使最大数与最后一个数调换
for(i=0;i<number;i++)
{
for(j=0;j<number-i;j++)
{
if(*(array+i)<*(array+min))
{
min=i;//找出最大数调换后最小数的位置
}
}
}
temp=*(array+min);
*(array+min)=*array;
*array=temp;//使最小数与第一个数调换
}
void output(int*array,int number)
{
int i;
printf("swapping......\n");
for(i=0;i<number;i++)
{
printf("%d ",array[i]);
}
putchar('\n');
}
运行结果
五、写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度?(要求用指针方法处理)
#include<stdio.h>
int c(char*);
int main()
{
int length;
char a[]="i love china!";
length=c(a);
printf("The length of string is %d\n",length);
return 0;
}
int c(char*n)
{
int i ;
for(i=0;*(n+i)!='\0';)
{
i++;
}
return i;
}
运行结果
六、有一个班4个学生,5门课。(1)求第一门课程的平均分;(2)找出两门以上课程不及格的学生,输出他们课程的学号和全部课程成绩及平均成绩。(3)找出平均成绩在90分以上或者全部课程成绩在85分以上的学生。分别编3个函数实现以上三个要求
#include<stdio.h>
void getaverage(float(*)[5],int);
void fail(float a[][5]);
void excellence(float a[][5]);
int main()
{
int i,j;
float a[4][5];
for(i=0;i<4;i++)
{
printf("请输入第%d名成绩:",i+1);
for(j=0;j<5;j++)
{
scanf("%f",&a[i][j]);
}
}
getaverage(a,0);//第一门课程下标为0
fail(a);
excellence(a);
return 0;
}
void getaverage(float(*m)[5],int n)
{
int i;
float average,sum=0;
for(i=0;i<4;i++)
{
sum=sum+*(*(m+i)+n);//类比于一维数组*(p+i)=a[i]
}
average=sum/4;
printf("第%d门课程平均分为:%5.2f\n",n+1,average);
}
void fail(float a[][5])
{
int i,j,k;
for(i=0;i<4;i++)
{
k=0;
for(j=0;j<5;j++)
{
if(a[i][j]<60)
{
k++;
}
}
if(k>2)
{
printf("第%d名学生超过两门以上课程不及格:",i+1);
float sum=0;
for(j=0;j<5;j++)
{
sum+=a[i][j];
printf("%5.2f ",a[i][j]);
}
putchar('\n');
printf("平均分为:%5.2f\n",sum/5);
}
}
}
void excellence (float a[][5])
{
int i,j,k;
float average,sum;
for(i=0;i<4;i++)
{
k=0;
sum=0;
for(j=0;j<5;j++)
{
sum+=a[i][j];
if(a[i][j]>85)
{
k++;
}
}
average=sum/5;
if(average>90)
{
printf("第%d名学生平均分在90以上,平均分为%5.2f\n",i+1,average);
}
if(k==5)
{
printf("第%d名学生全部课程在85分以上,成绩为:",i+1);
for(j=0;j<5;j++)
{
printf("%5.2f ",a[i][j]);
}
printf("\n");
}
}
}
运行结果