首页 > 代码库 > 第九次作业

第九次作业

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

#include <stdio.h>
#define N 100
void readScore(int score[],int n);//输入成绩 
void printScore(int score[],int n);//浏览成绩 
double average(int score[],int n);//求平均值 
int findMax(int score[],int n);//最大值 
int findMin(int score[],int n);//最小值 
void findMaxIndex1(int score[],int n,int max);//最大值下标 
void findMinIndex1(int score[],int n,int min);//最小值下标 
void search(int score[],int n);//查找 
void bubbleSort(int score[],int n);//排序 
int main()
{
	int score[N]={0},index[N]={0},n,max,min,i=0,a;
	double ave;
	printf("输入人数\n");
	scanf("%d",&n);
	readScore(score,n);
	printScore(score,n);
    ave=average(score,n);
    printf("平均值为%.2f\n",ave);
    max=findMax(score,n);
    min=findMin(score,n);
    printf("最高分为%d\n最低分为%d\n",max,min);
    findMaxIndex1(score,n,max);
	findMinIndex1(score,n,min);
	search(score,n);
	bubbleSort(score,n);
	printf("成绩从高到低为\n");
	printScore(score,n);
   return 0;
}
void readScore(int score[],int n)
{
	int i=0;
	for(i=0;i<n;i++)
	{
		printf("输入成绩"); 
		scanf("%d",&score[i]);
	}
}
void printScore(int score[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%5d",score[i]);
	}
	printf("\n");
}
double average(int score[],int n)
{
	int i,sum;
	sum=0;
	for(i=0;i<n;i++)
	{
		sum+=score[i];
	}
	return (double)sum/n; 
}
int findMax(int score[],int n)
{
	int i,max;
	max=score[0];
	for(i=0;i<n;i++)
	{
		if(score[i]>max)
		{
			max=score[i];
		}
	}
	return max;
}
int findMin(int score[],int n)
{
	int i,min;
	min=score[0];
	for(i=0;i<n;i++)
	{
		if(score[i]<min)
		{
			min=score[i];
		}
	}
	return min;
}
void findMaxIndex1(int score[],int n,int max)
{
	int i,count;
	count=0;
	for(i=0;i<n;i++)
	{
		if(score[i]==max)
		{
	       count=i+1;
		   printf("最高分的有第%d个人\n",count);
		}
	}
}
void findMinIndex1(int score[],int n,int min)
{
	int i,count;
	count=0;
	for(i=0;i<n;i++)
	{
		if(score[i]==min)
		{
		  count=i+1;
		  printf("最低分的有第%d个人\n",count);
		}
	}
}
void search(int score[],int n)
{
	int i=0,x;
	printf("请输入要查询的成绩");
	scanf("%d",&x);
	for(i=0;i<n;i++)
	{
		if(score[i]==x)
		{
			printf("第%d个人\n",i+1);
		}
	}
}
void bubbleSort(int score[],int n)
{
	int i,j,t,flag;
	for(i=0;i<n-1;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;
	}
}

  技术分享

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

#include <stdio.h>
#define N 100
int main()
{
	int num[N]={0},i,j=0;
	for(i=0;i<N;i++)
	{
		num[i]=i+1;
	}
	for(i=0;i<N;i++)
	{
		if(num[i]%3==0||num[i]%7==0)
		{
			continue;
		}
		else
		{
			j++;
			printf("%4d",num[i]);
		}
	}
	printf("还剩%d个数",j);
	return 0;
}

  技术分享

附加题

   1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。

#include <stdio.h>
#define N 10
int main()
{
	int a[N]={0};
	int i,m,x,j;
	for(i=0;i<N;i++)
	{
		a[i]=i;
	    printf("%2d",a[i]);
	}
	printf("请输入要后移的位数"); 
	scanf("%d",&m);
	for(i=0;i<m;i++)
	{
		x=a[9];
		for(j=10;j>0;j--)
		{ 
		a[j]=a[j-1];
		} 
	    a[0]=x;
	}
	for(i=0;i<N;i++)
	{
		printf("%2d",a[i]);
	}
	return 0;
}

  技术分享

2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。(使用数组)

#include <stdio.h>
#define N 4
int main()
{
	int x,i,a[N]={0},z,y;
	printf("请输入一个四位数\n");
	scanf("%d",&x);
	a[0]=x/1000;
	a[1]=x%1000/100;
	a[2]=x%100/10;
	a[3]=x%10;
	for(i=0;i<N;i++)
	{
		a[i]=a[i]+9;
		a[i]=a[i]%10;
	}
	z=a[1];
	a[1]=a[3];
	a[3]=z;
	y=a[0];
	a[0]=a[2];
	a[2]=y;
	for(i=0;i<N;i++)
	{
		printf("%d",a[i]);
	}
	return 0;
}

  技术分享

   二丶实验总结:1.注意变量的赋初值问题。

                 2.函数和被调用函数的对应关系。

                 3.函数int类型需要返回值,函数void类型不需要返回值。

                 4.注意数组的越界问题。

                 5.注意形参与实参的对应,避免混淆。

三丶程序分析

程序1正确,程序2中简单变量做函数参数时,虽然对形参进行了互换,但是却不影响实参的数值。

程序1中用数组做函数参数,将实参数组传递到地址中再传递给形参数组。

 

第九次作业