32.一个学习小组有5人, 每个人有3门课的考试成绩,求每个人的总分和该学习小组各门课的平均成绩
#include <stdio.h>
#define M 5
#define N 3
void inputarr( int x[ ][N], int m, int n );
void printarr( int x[ ][N], int m, int n );
int main()
{
int x[M][N] = {0}, m = 5, n = 3;
inputarr(x, m, n);
printarr(x, m, n);
return 0;
}
void inputarr( int x[ ][N] , int m, int n )
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf("%d", &x[i][j]);
}
void printarr( int x[ ][N], int m, int n )
{
int i, j;
int s[5] = {0};
float avg[3] = {0};
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ",x[i][j]);
s[i] += x[i][j];
avg[j] += x[i][j];
}
printf("\n");
}
printf ("每个学生的总分:\n");
for (i = 0; i < m; i++)
printf ("%6d", s[i]);
printf("\n");
printf ("每门课的平均分:\n");
for (j = 0; j < n; j++)
printf ("%8.2f", avg[j]/5.0);
printf("\n");
}
33.编写函数用冒泡法将数组按从小到大的顺序排列
#include<stdio.h>
#define N 100
void swap(int a[],int n)
{
int i, j, t;
for(i = n-1; i >= 1; i--) //n个数,进行 n-1 次循环
{
for(j = 0; j <= i-1; j++)
{ //两数交换次序 ,将最大数下沉
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
}
int main()
{
int score[N];
int i, n = 0;
for(i = 0; i < N; i++)
{
scanf("%d", &score[i]);
if(score[i] == 0)
break;
n++;//n的作用是记载输入了多少个数
}
swap(score,n);
for(i = 0; i < n; i++)
printf("%d ", score[i]);
return 0;
}
34.找次大值
# include <stdio.h>
int main()
{
int a[5], t, max;
for (int i = 0; i < 5; i++)
{
scanf("%d",&a[i]);
}
//排序
for (int i = 0; i < 5; i++)
{
for (int j = i + 1; j < 5; j++)
{
if (a[j] > a[i])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
max = a[1];//第二大
printf("次最大值=%d",max);
return 0;
}
35.编写函数将长度为N的数组从指定位置m开始的n个数逆置
#include<stdio.h>
#include<stdio.h>
#define N 10
void inputarr (int a[],int n);
void outputarr (int a[],int n);
void swap(int a[],int m,int n);
void func(int a[],int m,int n);
int main()
{
int i,n,m;
int a[N];
//printf("输入数组元素:\n");
inputarr (a,N);
//printf("请输入起始位置:");
scanf("%d",&m);
//printf("请输入逆序处理的元素个数:");
scanf("%d",&n);
func(a,m,n) ;
outputarr (a,N);
return 0;
}
/********** Begin **********/
void inputarr (int a[],int n)
{
int i;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
}
void func(int a[],int m,int n)
{
int x,y;
x=m;
y=n;
if(m<1||m>N)
{
printf("m不合法\n");
return ;
}
if( n<1 || n>N || n+m > N+1)
{
printf("n不合法\n");
return ;
}
else swap(a,x,y);
}
void swap(int a[],int m,int n)
{
int i,j,t;
for(i=m-1;i<m+n-1;i++)
{
for(j=i+1;j<m+n-1;j++)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
void outputarr (int a[],int n)
{
int i;
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
36.编写函数计算n的阶乘
#include <stdio.h>
long fact(int n);
int main()
{
int i;
for (i=1; i<=10; i++)
{
printf("%d! = %d\n", i, fact(i));
}
return 0;
}
long fact(int n)
{
static int p = 1;
p*=n;
return p;
}
/*定义静态局部变量的运用*/