题目内容:
下面程序的功能是用动态数组编程输入任意m个班学生(每班n个学生)的某门课的成绩,计算最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。其中,m和n的值由用户从键盘任意输入(不限定m和n的上限值)。
#include
#include
void InputScore(int *p, int m, int n);
int FindMax(int *p, int m, int n, int *pRow, int *pCol);
int main()
{
int *pScore, m, n, maxScore, row, col;
printf("Input array size m,n:\n");
scanf("%d,%d", &m, &n);
pScore = (int*)malloc(m*n*sizeof(int)); /* 申请动态内存 */
if (pScore == NULL)
{
printf("No enough memory!\n");
exit(0);
}
InputScore(pScore, m, n);
maxScore = FindMax(pScore,m,n,&row,&col);
printf("maxScore = %d, class = %d, number = %d\n", maxScore, row+1, col+1);
free(pScore); /* 释放动态内存 */
return 0;
}
/* 函数功能:输入m行n列二维数组的值 */
void InputScore(int *p, int m, int n)
{
int i, j;
printf("Input %d*%d array:\n", m, n);
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
scanf("%d",p + i*n + j);
}
}
}
/* 函数功能:计算任意m行n列二维数组中元素的最大值,并指出其所在行列下标值 */
int FindMax(int *p, int m, int n, int *pRow, int *pCol)
{
int i, j, max = p[0];
*pRow = 0;
*pCol = 0;
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
if (p[i*n+j] > max)
{
max = p[i*n+j];
*pRow = i; /*记录行下标*/
*pCol = j; /*记录列下标*/
}
}
}
return max;
}
题目内容:
下面程序的功能是输入m个学生(最多为30人)n门课程(最多为5门)的成绩,然后计算并打印每个学生各门课的总分和平均分。其中,m和n的值由用户从键盘输入。
#include
#define STUD 30 /* 最多可能的学生人数 */
#define COURSE 5 /* 最多可能的考试科目数 */
void Total(int *pScore, int sum[], float aver[], int m, int n);
void Print(int *pScore, int sum[], float aver[], int m, int n);
int main()
{
int i, j, m, n, score[STUD][COURSE], sum[STUD];
float aver[STUD];
printf("How many students?\n");
scanf("%d", &m);
printf("How many courses?\n");
scanf("%d", &n);
printf("Input scores:\n");
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
scanf("%d", &score[i][j]);
}
}
Total(*score, sum, aver, m, n);
Print(*score, sum, aver, m, n);
return 0;
}
void Total(int *pScore, int sum[], float aver[], int m, int n)
{
int i, j;
for (i=0; i<m; i++)
{
sum[i] = 0;
for (j=0; j<n; j++)
{
sum[i] = sum[i] + pScore[i*COURSE+j];
}
aver[i] = (float) sum[i] / n;
}
}
void Print(int *pScore, int sum[], float aver[], int m, int n)
{
int i, j;
printf("Result:\n");
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
printf("%4d\t", pScore[i*COURSE+j]);
}
printf("%5d\t%6.1f\n", sum[i], aver[i]);
}
}
题目内容:
下面程序的功能是用二维数组的列指针作为函数实参,计算并输出m×n阶矩阵的转置矩阵。其中,m和n的值由用户从键盘输入。已知m和n的值都不超过10。程序的运行结果如下所示:
#include
#define M 10
#define N 10
void Transpose(int *a, int *at, int m, int n);
void InputMatrix(int *a, int m, int n);
void PrintMatrix(int *at, int n, int m);
int main()
{
int s[M][N], st[N][M], m, n;
printf("Input m, n:\n");
scanf("%d,%d", &m, &n);
InputMatrix(*s, m, n);
Transpose(*s, *st, m, n);
printf("The transposed matrix is:\n");
PrintMatrix(*st, n, m);
return 0;
}
/* 函数功能:计算m*n矩阵a的转置矩阵at */
void Transpose(int *a, int *at, int m, int n)
{
int i, j;
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
at[j*M+i] = a[i*N+j];
}
}
}
/* 函数功能:输入m*n矩阵a的值 */
void InputMatrix(int *a, int m, int n)
{
int i, j;
printf("Input %d*%d matrix:\n", m, n);
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
scanf("%d", &a[i*N+j]);
}
}
}
/* 函数功能:输出n*m矩阵at的值 */
void PrintMatrix(int *at, int n, int m)
{
int i, j;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
printf("%-5d", at[i*M+j]);
}
printf("\n");
}
}
题目内容:
用函数编程实现在一个按升序排序的数组中查找x应插入的位置,将x插入数组中,使数组元素仍按升序排列。
#include
int main()
{
int n,x;
int i, j = 0;
int a[200] = {0};
printf("Input array size:\n");
scanf("%d",&n);
printf("Input array:\n");
for(i = 0; i < n; i++)
scanf("%d",&a[i]);
printf("Input x:\n");
scanf("%d",&x);
while(a[j] < x)
j++;
for(i = n - 1;i >= j; i--)
{
a[i + 1] = a[i];
}
a[j] = x;
printf("After insert %d:\n",x);
for(i = 0; i <= n; i++)
printf("%4d",a[i]);
return 0;
}
题目内容:
在调查数据分析(Survey data analysis)中经常需要计算平均数、中位数和众数。用函数编程计算40个输入数据(是取值1—10之间的任意整数)的平均数(Mean)、中位数(Median)和众数(Mode)。中位数指的是排列在数组中间的数。众数是数组中出现次数最多的那个数(不考虑两个或两个以上的输入数据出现次数相同的情况)。
#include
#include
int cmp(const void* a,const void* b)
{
const int *x = (const int*)a;
const int *y = (const int*)b;
if(*x -*y == 0)
return 0;
else if(*x - *y > 0)
return 1;
else
return -1;
}
int Mean(int a[], int n);
int Median(int a[], int n);
int Mode(int a[], int n);
int main()
{
int stu[40] = {0};
int mean,med,mode;
printf("Input the feedbacks of 40 students:\n");
for(int i = 0; i < 40; i++)
scanf("%d",&stu[i]);
mean = Mean(stu,40);
med = Median(stu,40);
mode = Mode(stu,40);
printf("Mean value=%d\n",mean);
printf("Median value=%d\n",med);
printf("Mode value=%d\n",mode);
return 0;
}
int Mean(int a[], int n)
{
int i,sum = 0;
for(i = 0; i < n; i++)
sum += a[i];
return sum / n;
}
int Median(int a[], int n)
{
qsort(a,n,sizeof(int),cmp);
return a[n/2];
}
int Mode(int a[], int n)
{
int num[11] = {0};
int max = 0;
int pos = 1;
for(int i = 0; i < n; i++)
num[a[i]]++;
for(int i = 1; i <= 10; i++)
{
if(num[i] > max)
{
max = num[i];
pos = i;
}
}
return pos;
}