L-2 MCS 275 Wed 10 Jan 2001
Below are the listings for the programs we discussed in class.
/* illustration of passing arrays to functions
lecture 2 MCS 275 Wed 10 Jan 2001 */
#include <stdio.h>
float avg (float a[], int n); /* computes average of a[n] */
int main()
{
float a[] = {7.0, 3.0, 4.0, 3.0, 7.0, 2.0};
int i;
printf("The array is\n");
for (i = 0; i < 6; ++i) printf(" %f", a[i]);
printf("\n");
printf("average of all 6 elements : %f\n", avg(a,6));
printf("average of first 3 elements : %f\n", avg(a,3));
printf("average of last 3 elements : %f\n", avg(&a[3],3));
return 0;
}
float avg (float a[], int n)
{
int i;
float sum = 0.0;
for (i = 0; i < n; ++i)
sum += a[i];
return sum/n;
}
See the text book for the program about bubble sort.
/* finding saddle points in a matrix
This program illustrates two-dimensional arrays
in lecture 2 of MCS 275, Wed 10 Jan 2001. */
#include <stdio.h>
int row_min (int m, int n, int a[m][n], int i);
/* return minimum on row i of an m-by-n matrix a */
int row_max (int m, int n, int a[m][n], int i);
/* return maximum on row i of an m-by-n matrix a */
int col_min (int m, int n, int a[m][n], int j);
/* return minimum on column j of an m-by-n matrix a */
int col_max (int m, int n, int a[m][n], int j);
/* return maximum on column j of an m-by-n matrix a */
int is_saddle (int m, int n, int a[m][n], int i, int j);
/* a[i][j] is a saddle (where "a" is an m-by-n matrix)
if it is the minimum on its row and maximum on its column
or if it is the maximum on its row and minimum on its column
is_saddle(a,i,j) == 0 if a[i][j] is not a saddle
== 1 if a[i][j] is a saddle */
void saddle (int m, int n); /* reads m-by-n matrix and finds saddles */
int main(void)
{
int m,n;
printf("Give number of rows : "); scanf("%d",&m);
printf("Give number of columns : "); scanf("%d",&n);
saddle(m,n);
return 0;
}
void saddle (int m, int n)
{
int a[m][n], i,j, cnt = 0;
printf("Give %d-by-%d matrix : \n", m,n);
for (i = 0; i < m; ++i) /* read the matrix */
for (j = 0; j < n; ++j)
scanf("%d",&a[i][j]);
printf("your matrix is :\n");
for (i = 0; i < m; ++i) /* print the matrix */
{
for (j = 0; j < n; ++j)
printf("%4d",a[i][j]);
printf("\n");
}
printf("computing the saddles...\n");
for (i = 0; i < m; ++i) /* count number of saddles */
for (j = 0; j < n; ++j)
{
if (is_saddle(m,n,a,i,j) == 1)
{
printf("a[%d][%d] = %d is saddle\n",i,j,a[i][j]);
cnt+= 1;
}
}
printf("Number of saddles : %d\n", cnt);
}
int is_saddle (int m, int n, int a[m][n], int i, int j)
{
int rowmin,rowmax,colmin,colmax;
rowmin = row_min(m,n,a,i);
if (rowmin == a[i][j])
{
colmax = col_max(m,n,a,j);
if (colmax == a[i][j])
return 1;
else
return 0;
}
else
rowmax = row_max(m,n,a,i);
if (rowmax == a[i][j])
{
colmin = col_min(m,n,a,j);
if (colmin == a[i][j])
return 1;
else
return 0;
}
}
int row_min (int m, int n, int a[m][n], int i)
{
int j, min;
min = a[i][0];
for (j = 1; j < n; ++j)
if (a[i][j] < min)
min = a[i][j];
return min;
}
int row_max (int m, int n, int a[m][n], int i)
{
int j, max;
max = a[i][0];
for (j = 1; j < n; ++j)
if (a[i][j] > max)
max = a[i][j];
return max;
}
int col_min (int m, int n, int a[m][n], int j)
{
int i, min;
min = a[0][j];
for (i = 1; i < m; ++i)
if (a[i][j] < min)
min = a[i][j];
return min;
}
int col_max (int m, int n, int a[m][n], int j)
{
int i, max;
max = a[0][j];
for (i = 1; i < m; ++i)
if (a[i][j] > max)
max = a[i][j];
return max;
}