Reading an array and doing linear searches on it

/* linear.c -- Read an integer array and then do linear searches.
*/

#include <stdio.h>

#define NMAX 10

int getIntArray(int a[], int nmax, int sentinel);
void printIntArray(int a[], int n);
int linear(int a[], int n, int who);

int main(void) {
int x[NMAX];
int hmny;
int who;
int where;

hmny = getIntArray(x, NMAX, 0);
printf("The array was: \n");
printIntArray(x,hmny);
printf("Now we do linear searches on this data\n");
do{
printf("Enter integer to search for [0 to terminate] : ");
scanf("%d", &who);
if(who==0)break;
where = linear(x,hmny,who);
if (where<0){
printf("Sorry, %d is not in the array\n",who);
}else
printf("%d is at position %d\n",who,where);
}while(1);
}

void printIntArray(int a[], int n)
/* n is the number of elements in the array a.
* These values are printed out, five per line. */
{
int i;

for (i=0; i<n; ){
printf("\t%d ", a[i++]);
if (i%5==0)
printf("\n");
}
printf("\n");
}

int getIntArray(int a[], int nmax, int sentinel)
/* It reads up to nmax integers and stores then in a; sentinel 
* terminates input. */
{
int n = 0;
int temp;

do {
printf("Enter integer [%d to terminate] : ", sentinel);
scanf("%d", &temp);
if (temp==sentinel) break;
if (n==nmax)
printf("array is full\n");
else 
a[n++] = temp;
}while (1);
return n;
}

int linear(int a[], int n, int who)
/* Given the array a with n elements, searches for who.
* It returns its position if found, otherwise it returns
* -1.
*/
{
int lcv;
for (lcv=0;lcv<n;lcv++)
if(who == a[lcv])return lcv;
return (-1);
}

0 comments: