• 第九次


    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
    ",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个学生
    ",a,b);
    	c=search(score,i);
    	printf("这是第%d个学生
    ",c+1);
    	bubbleSort(score,n);
    	printfScore(score,i);
        return 0;
    }
    int readScore(int score[])
    {
    	int i=0;
    	printf("请输入成绩
    ");
    	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("请输入学生成绩
    ");
    	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("
    ");
    }
    

      

      

     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("
    ");	
    	    	}	
    		}
    	}
    	printf("数组中剩余%d个数
    ",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
    a[1]=%d
    ",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
    a[1]=%d
    ",a[0],a[1]);
        return 0;
    }
    void swap(int x,int y)
    {  
         int z;
         z=x;
         x=y; 
         y=z;
    }

      

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

  • 相关阅读:
    关于乔布斯,互联网上全部的视频资源有哪些
    Spring MVC 文件下载最佳实践
    HMC 的升级方法
    linux软件包合集
    9117-MMA几种具有分离背板(split backplane)功能选件的区别
    Utility Capacity on Demand(服务器按需扩容技术)
    ent en et的区别
    IBM-UK ftp资料站
    ntpd和chrony
    bosboot -a的作用
  • 原文地址:https://www.cnblogs.com/jg666666/p/6128452.html
Copyright © 2020-2023  润新知