第九次作业

Posted 小北ML

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九次作业相关的知识,希望对你有一定的参考价值。

一、实验内容   

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

#include<stdio.h>
#define N 100
void readscore(int score[],int n);//输入函数,不用返回值。
double average(int score[],int n);//求平均值
int findmax(int score[],int n);//找最大值
int findmin(int score[],int n);//找最小值
int maxindex(int score[],int n);//最大值下标
int minindex(int score[],int n);//最小值下标
int searchscore(int num[],int n,int grade);//查询
void bubblescort(int score[],int n);//升序
void printscore(int score[],int n);//输出函数
int main() 
{
	int score[N]={0},num[N]={0},n,max,max1,min,min1,grade,count;
    double ave;
	printf("input the number:\\n");
	scanf("%d",&n);
	readscore(score,n);
    ave=average(score,n);
	printf("平均成绩为%.2f\\n",ave);
    max=findmax(score,n);
	printf("最大值为%d\\n",max);
	min=findmin(score,n);
	printf("最小值为%d\\n",min);
	max1=maxindex(score,n);
	printf("最大值下标为%d\\n",max1);
    min1=minindex(score,n);
	printf("最大值下标为%d\\n",min1);
	printf("请输入一个学生的成绩:\\n");
	scanf("%d",&grade);
	count=searchscore(num,n,grade);
	printf("该学生成绩的下标为%d\\n",count);
	bubblescort(score,n);
	printscore(score,n);
	return 0;
} 
void readscore(int score[],int n)
{
	int i;
	printf("input the score:\\n");
	for(i=0;i<n;i++)
	{
		scanf("%d",&score[i]);
	}
}
double average(int score[],int n)
{
     int i,sum=0;
	 for(i=0;i<n;i++)
	 {
		 sum+=score[i];//求和
	 }
	 return (double)sum/n;//求平均数
}
int findmax(int score[],int n)
{
	int i,a=score[0];
	for(i=1;i<n;i++)
	{
        if(score[i]>a)
		{
			a=score[i];
		}
		return a;
	}
}
int findmin(int score[],int n)
{
    int i,b=score[0];
	for(i=1;i<n;i++)
	{
        if(score[i]<b)
		{
			b=score[i];
		}
		return b;
	}
}
int maxindex(int score[],int n)
{
	int i,maxindex=0;
	for(i=1;i<n;i++)
	{
		if(score[i]>score[maxindex])
		{
			maxindex=i;
		}
		return maxindex;
	}
}
int minindex(int score[],int n)
{
    int i,minindex=0;
	for(i=1;i<n;i++)
	{
		if(score[i]<score[minindex])
		{
			minindex=i;
		}
		return minindex;
	}
}
int searchscore(int num[],int n,int grade)
{
	int i;
	printf("请输入你要查询的成绩:\\n");
	scanf("%d",&grade);
	for(i=0;i<n;i++)
	{
		if(num[i]==grade)
		{
			return i;
		}
		return -i;
	}
}
void bubblescort(int score[],int n)
{
    int i,j,t,flag;
    for(i=0;i<n;i++)
    {
    
        for(j=0;j<n-1-i;j++)
        {    
            flag=0;
            if(score[j]>score[j+1])
            {
                t=score[j];
                score[j]=score[j+1];
                score[j+1]=t;
                flag=1; 
            }
        }
        if(flag==0)
        {
            break;
        }
} } void printscore(int score[],int n) { int i; for(i=0;i<n;i++) { printf("%3d",score[i]); } printf("\\n");
}

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

#include<stdio.h>
#define N 100
int main()
{
   int i,j=0,n=0;//i为变量,n是剩余数个数
   int digit[N];
   for(i=0;i<N;i++)
   {
	   j++;
	   digit[i]=j;
	   if(digit[i]%3==0||digit[i]%7==0)
	   {
		   digit[i]=0;
	   }
   }
   for(i=0;i<N;i++)
   {
	   if(digit[i]!=0)
	   {
		   printf("%4d",digit[i]);
		   n++;
	   }
   }
   printf("共有%d位\\n",n);
   return 0;
}

  

二、实验总结(实验中遇到的问题及解决方法) 

1.数组函数引用,头文件与主函数与被调用函数一一对应。

2.做第一道题时遇到的困难是头文件和被调用函数都能编译出来 ,主函数不会写。思维比较乱,让别人讲了之后,尝试写一个头文件,然后写主函数,需要输入什么,输出什么,声明什么,都应注意,接着写被调用函数。这样一个一个的写,就不会不清楚了。还要注意什么函数不用最后输出,以致优化函数。最后出现的小错误是丢大括号,强调大括号的用法。

3.数组函数是与循环分不开的。

4.第二道题定义长度为100的整型数组,首先循环数字,如果循环到的数字能与3取余或能与7取余,就结束,若不能再进行一次循环,输出剩余的数字。

学习内容里,老师就重点学习怎样向函数传递数组,对函数和数组的理解和运用,对火柴棍问题三个程序进行优化。利用穷举,重复的函数归结在一起,应用主调用函数和被调用函数,然后学习了数组函数,用循环更简化编程。

三、程序分析

输出结果不同,第一个用的是数组做函数,实现的是定义的数组在其他函数中也可以被调用;第二个程序使用简单变量做函数,实现的是值只能单向传递使用。

    程序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;
}

以上是关于第九次作业的主要内容,如果未能解决你的问题,请参考以下文章

第九次作业

第九次作业

第九次作业

第九次作业

第九次作业

第九次作业