第九次

1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)

#include<stdio.h>
#define N 1000
int readScore(int score[]);
double average(int score[],int i);
int findMax(int score[],int i);
int findMin(int score[],int i);
int findMaxIndex(int score[],int i);
int findMinIndex(int score[],int i);
int search(int score[],int i);
void bubbleSort(int score[],int i);
void printfScore(int score[],int i);
int main()
{
	int max,min,score[N]={0},a,b,c,i,x,m,n;
	double ave;
	readScore(score);
	ave=average(score,i);
	printf("平均分为%.2f\n",ave);
	max=findMax(score,i);
	min=findMin(score,i);
	printf("最高分为%d,最低分为%d",max,min);
	a=findMaxIndex(score,i);
	b=findMinIndex(score,i);
	printf("最高分是第%d个学生,最低分是第%d个学生\n",a,b);
	c=search(score,i);
	printf("这是第%d个学生\n",c+1);
	bubbleSort(score,n);
	printfScore(score,i);
    return 0;
}
int readScore(int score[])
{
	int i=0;
	printf("请输入成绩\n");
	while(1)
	{
		scanf("%d",&score[i]);
		if(score[i]<0)
		{
			break;
		}
		i++;
	}
	return i;
}
double average(int score[],int i)
{
	i=0;
	int sum=0;
	while(score[i]>=0)
	{
		sum=sum+score[i];
		i++;
	}
	return (double)sum/i;
}
int findMax(int score[],int i)
{
	i=0;
	int max;
	max=score[0];
	while(score[i]>=0)
	{
		if(score[i]>max)
		{
			max=score[i];
		}
		i++;
	}
	return max;
}
int findMin(int score[],int i)
{
	i=0;
	int min;
	min=score[0];
	while(score[i]>=0)
	{
		if(score[i]<min)
		{
			min=score[i];
		}
		i++;
	}
	return min;
}
int findMaxIndex(int score[],int i)
{
	i=0;
	int maxIndex;
	maxIndex=0;
	while(score[i]>=0)
	{
		if(score[i]==findMax(score,i))
		{
			maxIndex=i+1;
		}
		i++;
	}
	return maxIndex;
}
int findMinIndex(int score[],int i)
{
	i=0;
	int minIndex;
	minIndex=0;
	while(score[i]>=0)
	{
		if(score[i]==findMin(score,i))
		{
			minIndex=i+1;
		}
		i++;
	}
	return minIndex;
}
int search(int score[],int i)
{
	int x;
	printf("请输入学生成绩\n");
	scanf("%d",&x);
	i=0;
	while(score[i]>=0)
	{
		if(score[i]==x)
		{
			return i;
		}
		i++; 
	}
	return -1;
}
void bubbleSort(int score[],int n)
{	
	int i,j,t,flag;
	i=0;
    while(1)
    {
    	if(score[i]<0)
    	{
    		break;
		}
    	i++;
	}
	n=i;
	for(i=0;i<n-1;i++)   
	{
	    flag=0;
        for(j=0;j<n-1-i;j++) 
	    {
            if(score[j+1]>score[j])
            {	  
			    t=score[j];
		        score[j]=score[j+1];
		        score[j+1]=t;
		        flag=1;
	        }
	    }
	    if(flag==0)
	    {
		    break;
	    } 
    }
}
void printfScore(int score[],int i)
{
	i=0;
	while(score[i]>=0)
	{
		printf("%5d",score[i]);
		i++;
	}
	printf("\n");
}

  

  

 2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。

#include<stdio.h>
#define N 100
int main()
{
    int i,num[N],x=1,a=0;
	for(i=0;i<N;i++)
	{
		num[i]=x;
		x++;
	}
	for(i=0;i<N;i++)
	{
		if(num[i]%3==0||num[i]%7==0)
		{
			num[i]=0;
		}
	}
	for(i=0;i<N;i++)
	{
	    if(num[i]!=0)
		{
			printf("%4d",num[i]);
			a++;
			if(a%10==0)
		    {
		        printf("\n");	
	    	}	
		}
	}
	printf("数组中剩余%d个数\n",a);
	return 0;
} 

  

 实验总结

1.定义数组和在数组中移动变量时要注意数组的越界问题

2.定义函数时,有返回值的用int型,无返回值的用void

3.冒泡排序法是将两个相邻的数比较小的排到前面

4.函数只能有一个返回值

 

程序分析

     程序1     

#include <stdio.h>
void swap(int x[]);
int main()
{  
     int a[2]={1,2};
    swap(a);
    printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);
    return 0;
}
void swap(int x[])
{   
    int z;
    z=x[0];     
    x[0]=x[1];     
    x[1]=z;
}

 

 

程序2  

#include <stdio.h>
void swap(int x,int y);
int main()
{
    int a[2]={1,2};
    swap(a[0],a[1]);
    printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);
    return 0;
}
void swap(int x,int y)
{  
     int z;
     z=x;
     x=y; 
     y=z;
}

  

 

程序一的a[0和a[1]的值交换了,程序二没有改变。原因是简单变量做参数,实现的是值的单向传递,不会影响实参的值,数组做函数参数,是将实参数组的地址传给形参数组。

posted @ 2016-12-03 19:52  Burning~  阅读(172)  评论(2编辑  收藏  举报