C语言 指针练习

一、 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");
		}
	}
}
运行结果
相关推荐
小林熬夜学编程4 分钟前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
Jackey_Song_Odd16 分钟前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
A懿轩A1 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
半盏茶香1 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
字节高级特工3 小时前
【C++】深入剖析默认成员函数3:拷贝构造函数
c语言·c++
计算机学长大白3 小时前
C中设计不允许继承的类的实现方法是什么?
c语言·开发语言
XH华9 小时前
初识C语言之二维数组(下)
c语言·算法
Uu_05kkq12 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
嵌入式科普14 小时前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
A懿轩A14 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列