/* Strings and arrays example program by Rick Wagner. */ #include #include void about(); void menu(char* cArray[], float sfArray[], int n); void sortByName(char* cArray[], float sfArray[], int n); void sortByWeight(char* cArray[], float sfArray[], int n); void showElements(char* cArray[], float sfArray[], int n); void main() { int iNumElements = 10; char* cElementName[11] = {{" "}, /* Zeroeth string is used for swap space */ {"gold "}, {"zinc "}, {"oxygen "}, {"nitrogen "}, {"copper "}, {"carbon "}, {"mercury "}, {"iron "}, {"hydrogen "}, {"helium "}}; float sfElementWt[11] = {0, (float) 197.0, (float) 65.38, (float) 16.0, (float) 14.08, (float) 63.54, (float) 12.011, (float) 200.61, (float) 55.85, (float) 1.008, (float) 4.003}; about(); menu(cElementName, sfElementWt, iNumElements); } void about() { puts(" This program demonstrates string and numeric sorting"); puts(" by atomic element name and weight.\n"); } void menu(char* cArray[], float sfArray[], int n) { char cChoice = 0; puts("a. Sort by name."); puts("b. Sort by weight.\n\n"); printf("Enter your choice (anything else to quit): "); fflush(stdin); scanf("%c", &cChoice); if (cChoice == 'a') { sortByName(cArray, sfArray, n); showElements(cArray, sfArray, n); menu(cArray, sfArray, n); } if (cChoice == 'b') { sortByWeight(cArray, sfArray, n); showElements(cArray, sfArray, n); menu(cArray, sfArray, n); } puts(""); } void showElements(char* cArray[], float sfArray[], int n) { int i = 0; printf("\nElement: Atomic Weight:\n\n"); for (i = 1; i <= n; i++) { printf("%s %7.3f\n", cArray[i], sfArray[i]); } printf("\n\n\n\n\n\n\n"); } void sortByName(char* cArray[], float sfArray[], int n) { int i = 0; int j = 0; for (i = 1; i <= n - 1; i++) { for (j = i + 1; j <= n; j++) { if (strcmp(cArray[i], cArray[j]) > 0) { strcpy(cArray[0], cArray[i]); /* Use the zeroeth element for swap space */ strcpy(cArray[i], cArray[j]); strcpy(cArray[j], cArray[0]); sfArray[0] = sfArray[i]; sfArray[i] = sfArray[j]; sfArray[j] = sfArray[0]; } } } } void sortByWeight(char* cArray[], float sfArray[], int n) { int i = 0; int j = 0; for (i = 1; i <= n - 1; i++) { for (j = i + 1; j <= n; j++) { if (sfArray[i] > sfArray[j]) { strcpy(cArray[0], cArray[i]); /* Use the zeroeth element for swap space */ strcpy(cArray[i], cArray[j]); strcpy(cArray[j], cArray[0]); sfArray[0] = sfArray[i]; sfArray[i] = sfArray[j]; sfArray[j] = sfArray[0]; } } } }