第四周《C语言及程序设计》实践项目22 用指针法访问数组元素

本文通过两个项目实例展示了如何使用C++进行数组翻转和成绩数据处理,包括成绩输入验证、计算最高分、最低分、平均分、标准偏差等。

【项目1-翻转数组】

/*  
 * Copyright (c) 2016, 优快云学院  
 * All rights reserved.  
 * 文件名称:【项目1-翻转数组】.cpp  
 * 作    者:张易安  
 * 完成日期:2016年 9 月 8 日  
 * 版 本 号:v1.0  
 *  
 * 问题描述:下面的程序的输出为10 9 8 7 6 5 4 3 2 1。也就是说,调用reverse(b,10);后,b数组中的元素正好“翻转”过来了。请定义reverse函数,实现这个功能。
 */ 
#include<stdio.h>
void reverse(int a[],int n);
int main()
{
	int b[10]={1,2,3,4,5,6,7,8,9,10};
	int i;
	reverse(b,10);
	for(i=0;i<10;i++)
	{
		printf("%d\t",b[i]);
	}
	
	return 0;
 } 
void reverse(int a[],int n)
 {
 	int t,i;
 	for(i=0;i<n/2;i++)//看的算法就头疼!有时间再看看 
 	{
 		t=a[i];
 		a[i]=a[n-1-i];
 		a[n-1-i]=t;
	 }
 }
运行结果


【项目2 - 成绩处理函数版】

/*  
 * Copyright (c) 2016, 优快云学院  
 * All rights reserved.  
 * 文件名称:【项目2 - 成绩处理函数版】.cpp  
 * 作    者:张易安  
 * 完成日期:2016年 9 月 8 日  
 * 版 本 号:v1.0  
 *  
 * 问题描述:  在数组score中将要存储了某小组C程序设计的成绩,请设计实现下面的各功能函数,并在main函数中调用,组合成一个完整的应用:
(1)输入小组人数及成绩,要保证成绩在0-100之间;
(2)输出该小组的最高成绩、最低成绩、平均成绩;
(3)输出考得最高成绩和最低成绩的同学的人数;
(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩)。
(5)求出所有同学成绩的标准偏差,标准偏差公式为,其中为样本(即某同学成绩),为均值(前面已经求出),为样本数目;
 */
#include<stdio.h>
#include<math.h>
void input_score(int s[],int n);
int get_max_score(int s[],int n);
int get_min_score(int s[],int n);
double get_avg_score(int s[],int n);
double get_stdev_score(int s[],int n);
int count(int x,int s[],int n);
void output_index(int x,int s[],int n);
int main()
{
	int score[50];
	int num;
	int max_score,min_score;
	printf("小组有多少名同学?");
	scanf("%d",&num);
	printf("请输入学生成绩:\n");
	input_score(score,num);
	max_score=get_max_score(score,num);
	printf("最高成绩为: %d,共有 %d人\n",max_score,count(max_score,score,num));
	min_score=get_min_score(score,num);
	printf("最低成绩为: %d,共有 %d人\n",min_score,count(max_score,score,num));
	printf("平均成绩为: %.2f\n",get_avg_score(score,num));
	printf("标准偏差为: %.2f\n",get_stdev_score(score,num));
	printf("获最高成绩的学生(学号)有:");
	output_index(min_score,score,num);
	printf("\n");
	
	return 0; 	
 } 
 
/*
input_score函数的功能是输入小组的成员成绩
入口参数:
    s-存放成绩的数组
	n—学生人数
返回值:无
*/
void input_score(int s[],int n)
{
	int i;
	for(i=1;i<=n;i++)
	  do
	  {
		printf("请输入第%d 位同学的成绩:",i);
		scanf("%d",&s[i]);
	  }
	  while(s[i]<0||s[i]>100);
	  
	  return;
 } 
/*
get_max_score函数的功能是求出最大成绩
输入参数:
    s-存放成绩的数组
	n-学生成绩
返回值:max
*/
int get_max_score(int s[],int n)
{
	int i,max;
	max=-1;
	for(i=1;i<=n;i++)
	{
		if(max<s[i])
		  max=s[i];
	}
	return max;
 } 
/*get_min_score函数的功能是输出最小成绩
输入参数:
     s-存放成绩的数组
	 n-学生成绩 
返回值:min
*/
int get_min_score(int s[],int n)
{
	int i,min;
	min=999;
	for(i=1;i<=n;i++)
	{
		if(min>s[i])
		{
			min=s[i];
		}
	}
	return min;
 } 
/*
get_avg_score函数的功能是求出平均数
输出参数:
      s-存放成绩的数组
	  n-学生成绩
返回值:平均数 
*/
double get_avg_score(int s[],int n)
{
	int i;
	double avg,sum;
	sum=0;
	for(i=1;i<=n;i++)
	{
		sum+=s[i];
	}
	avg=sum/n;
	
	return avg;
} 
/*
 get_stdev_score函数的功能是求出num同学的标准偏差
 入口参数:
    s-存放成绩的数组
	n-学生人数
返回值:标准偏差 
*/
double get_stdev_score(int s[],int n)
{
	double sum=0,avg,x;
	int i;
	avg=get_avg_score(s,n);//这为什么不可以写成score(s[],n)呢?那个返回值还有些没有完全搞懂,这个函数的运用也是 
	for(i=1;i<=n;i++)
	{
		x=s[i]-avg;
		sum+=x*x;
	}
	
	return sqrt(sum/(n-1));
 } 
 
/*
count函数的功能是返回值s数组中为m的元素的个数
入口参数:
      m-要查找计数的值
      s-存放成绩的数组
	  n-学生人数
返回值:m出现的数目
*/
int count(int m,int s[],int n)
{
	int icount=0;
	int i;
	for(i=1;i<=n;i++)
	{
		if(s[i]==m)
		  icount++;
	}
	return icount;
 } 
/*
output_index函数的功能是输出数组中值为m的元素的下标
入口参数:
  m-要找的值
  s-存放成绩的数组
  n-学生人数
返回值:无
*/
void output_index(int m,int s[],int n)
{
	int i;
	for(i=1;i<=n;i++)
	{
		if(s[i]==m)
		  printf("%d",i);
	}
	return;
 }
运行结果



心得

头一次写快200行的代码,感觉就是一个字:爽!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值