【项目1-翻转数组】
下面的程序的输出为10 9 8 7 6 5 4 3 2 1。也就是说,调用reverse(b,10);后,b数组中的元素正好“翻转”过来了。请定义reverse函数,实现这个功能。
解法:
#include <stdio.h>
#include <stdlib.h>
void reverse(int*,int);
int main()
{
int n,i;
printf("please enter a number n:");
scanf("%d",&n);
int *p;
p=(int*)malloc(n*sizeof(int));
fflush(stdin);
printf("please enter ten numbers:");
for(i=0;i<n;++i)
{
scanf("%d",(p+i));
}
reverse(p,n);
return 0;
}
void reverse(int *a,int n)
{
int i;
printf("the elements in the array are(reverse order):");
for (i=0;i<n;++i)
{
printf("%d ",*(a+(n-i-1)));
}
}
【项目2 - 成绩处理函数版】
在数组score中将要存储了某小组C程序设计的成绩,请设计实现下面的各功能函数,并在main函数中调用,组合成一个完整的应用:
(1)输入小组人数及成绩,要保证成绩在0-100之间;
(2)输出该小组的最高成绩、最低成绩、平均成绩;
(3)输出考得最高成绩和最低成绩的同学的人数;
(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩)。
(5)求出所有同学成绩的标准偏差,标准偏差公式为
解法:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int *score_in(int*,int);//function of the score inputing
int *score_m(int*,int);//function of the max, min,and average
int *score_num(int*, int);//function of the amount and number of of the min and max
double stand_deviation(int*,int);
int main()
{
int n;
int *m;//存放平均数,最高成绩和最低成绩
int *m_num;//最高和最低成绩的人数
m=(int*)malloc(3*sizeof(int));
m_num=(int*)malloc(2*sizeof(int));
double s=0;//所有成绩的标准差
int *iScore;
iScore=(int*)malloc(n*sizeof(int));
printf("please enter the amount of the students in the group:");
scanf("%d",&n);
iScore=(int*)malloc(n*sizeof(int));
fflush(stdin);
iScore=score_in(iScore,n);
m=score_m(iScore,n);
printf("the highest score of the group is:%d\n",*m);
printf("the lowest score of the group is:%d\n",*(m+1));
printf("the average score of the group is:%d\n",*(m+2));
m_num=score_num(iScore,n);
printf("the total amount of the highest score is:%d\n",*m_num);
printf("the total amount of the lowest score is:%d\n",*(m_num+1));
s=stand_deviation(iScore,n);
printf("the stand deviation of the students' score is;%.2lf\n",s);
return 0;
free(m);
free(m_num);
}
int *score_in(int *score,int n)
{
int i=0;
do
{
printf("please enter the %d th student's score:",i);
scanf("%d",(score+i));
if(*(score+i)<0||*(score+i)>100)
continue;
++i;
}while(i<n);
return(score);
}
int *score_m(int *a,int n)
{
int *m;
m=(int*)malloc(3*sizeof(int));
int min=101;
int max=0;
int aver=0;
int i;
int sum=0;
for(i=0;i<n;++i)
{
sum +=*(a+i);
if(*(a+i)<min)
min=*(a+i);
if(*(a+i)>max)
max=*(a+i);
}
aver=sum/n;
*m=max;
*(m+1)=min;
*(m+2)=aver;
return(m);
free(m);
}
int *score_num(int *a,int n)
{
int iMax=0;//最高分的人数
int iMin=0;//最低分的人数
int *num_m;
num_m=(int*)malloc(3*sizeof(int));//用于存放调用函数的结果
int *n_stu;
n_stu=(int*)malloc(3*sizeof(int));
int i;
num_m=score_m(a,n);
for(i=0;i<n;++i)
{
if(*(a+i)==*num_m)
++iMax;
if(*(a+i)==*(num_m+1))
++iMin;
}
*n_stu=iMax;
*(n_stu+1)=iMin;
return(n_stu);
free(num_m);
free(n_stu);
}
double stand_deviation(int *a,int n)
{
int *m;
double sum=0;//累加和
m=score_m(a,n);
int i;
int s;//标准差
for(i=0;i<n;++i)
{
sum += pow((*(a+i)-m[2]),2);
}
s=sqrt(sum/(n-1));
return(s);
}