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");
		}
	}
}
运行结果

相关推荐

  1. C语言指针)单元练习

    2024-03-21 04:30:01       29 阅读
  2. C语言指针)单元练习

    2024-03-21 04:30:01       33 阅读
  3. c语言练习

    2024-03-21 04:30:01       50 阅读
  4. C语言20240219练习

    2024-03-21 04:30:01       50 阅读
  5. C 语言练习分享

    2024-03-21 04:30:01       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-21 04:30:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-21 04:30:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-21 04:30:01       82 阅读
  4. Python语言-面向对象

    2024-03-21 04:30:01       91 阅读

热门阅读

  1. 课时66:流程控制_case条件控制_嵌套案例

    2024-03-21 04:30:01       44 阅读
  2. 低代码与前端项目部署:革新软件开发的新篇章

    2024-03-21 04:30:01       46 阅读
  3. 区分广域网和局域网~

    2024-03-21 04:30:01       45 阅读
  4. 专升本 C语言笔记-10 指针数组 和 数组指针

    2024-03-21 04:30:01       43 阅读
  5. 华为OD机试 C++ -围棋的气

    2024-03-21 04:30:01       36 阅读
  6. WPF 中 样式触发器机制 Style.Triggers

    2024-03-21 04:30:01       42 阅读
  7. 【C语言学习日志】Hello World!

    2024-03-21 04:30:01       40 阅读
  8. MyBatis面试系列-02

    2024-03-21 04:30:01       39 阅读