planets2.c

/*
 * PLANETS2 -- sort and print planets in increasing order of diameter
 * this uses structures to hold names and diameters
 *
 * Usage: planets2
 *     
 * Inputs: none
 * Outputs: prints the sorted list
 *      
 * Written by Matt Bishop for ECS 30
 * version 1    November 18, 2015
 */                          

#include <stdio.h>

/*
 * structure that holds planet name and diameter
 */
struct celestial {
	char *name;	/* name of planet */
	int diameter;	/* diameter of planet */
};
/* define a type to make things easier */
typedef struct celestial PLANET;

/*
 * array of planet names and diameters
 * note these are kept together, so we don't
 * have to worry about keeping two lists
 * synchronized
 */
PLANET planets[] = {
	{ "Mercury",	  4780, },
	{ "Venus",	 12104, },
	{ "Earth",	 12756, },
	{ "Mars",	  6780, },
	{ "Jupiter",	139822, },
	{ "Saturn",	116464, },
	{ "Uranus",	 50724, },
	{ "Neptune",	 49248, },
	{ "Pluto",	  2400, },
};
/* number of entries */
int sz_planets = sizeof(planets) / sizeof(PLANET);

/*
 * main routine
 */
int main(void)
{
	PLANET tmp_planets;	/* temporary to hold structure in swap */
	int i, j;		/* counters in for loops */
	int min;		/* index of minimum diameter this pass */

	/*
	 * do selection sort
         * make repeated passes through the list,
         * putting the planet with the minimum diameter in the
         * first position, and then sorting the rest of the list
	 */
	for(i = 0; i < sz_planets; i++){
		/* assume first one is minimum diameter */
		min = i;
		/*
		 * now find out if it *really* is the minimum
		 * if not, swap it with the minimum and continue
		 */
		for(j = i + 1; j < sz_planets; j++)
			if (planets[j].diameter < planets[min].diameter)
				min = j;

		/*
		 * if we found a new minimum -- swap 
		 */
		if (min != i){
			tmp_planets = planets[min];
			planets[min] = planets[i];
			planets[i] = tmp_planets;
		}
	}

        /*
 	 * now print out the planets and diameters
 	 * in increasing order of diameter
 	 */
	printf("Planets in order of size of diameters:\n");
	for(i = 0; i < sz_planets; i++)
		printf("%7dkm  %s\n", planets[i].diameter, planets[i].name);
	
	/*
 	 * all done!
 	 */
	return(0);
}




UC Davis sigil
Matt Bishop
Office: 2209 Watershed Sciences
Phone: +1 (530) 752-8060
Email: mabishop@ucdavis.edu
ECS 36A, Programming & Problem Solving
Version of April 2, 2024 at 12:13PM

You can get the raw source code here.

Valid HTML 4.01 Transitional Built with BBEdit Built on a Macintosh