c语言问题

来源:互联网 发布:urllib post json 编辑:程序博客网 时间:2024/06/08 11:21

char类型只有一个字节,汉字要占两个字节,故输入职工姓名时,应采用二维数组;


#include <stdio.h>#include <string.h>#define N 10int main(){void input(int[], char name[][8]); void sort(int[], char name[][8]);void search(int, int[], char name[][8]);int num[N], number, flag = 1, c;char name[N][8];input(num, name);sort(num, name);while (flag == 1){printf("\ninput number to look for:");scanf_s("%d", &number);search(number, num, name);printf("continue ot not(Y/N)?");getchar();c = getchar();if (c == 'N' || c == 'n')flag = 0;}return 0;}void input(int num[], char name[N][8]) //输入职工姓名和职工号{int i;for (i = 0; i<N; i++){printf("input NO.: ");   scanf_s("%d", &num[i]);     printf("input name: ");getchar();  //scanf读入的是num[i],按回车键后’\n‘还在缓冲区,getchar()是为了清楚键盘缓冲区的回车符;            //否则,进行gets操作时,不等用户输入,直接输出“\n”;gets_s(name[i]);}}void sort(int num[], char name[N][8])//按职工号由大到小排序,姓名顺序随之调整;{int i, j, min, templ;char temp2[8];for (i = 0; i<N - 1; i++){min = i;for (j = i; j<N; j++)if (num[min]>num[j])  min = j;templ = num[i];strcpy_s(temp2, name[i]);num[i] = num[min];strcpy_s(name[i], name[min]);num[min] = templ;strcpy_s(name[min], temp2);}printf("\n result:\n");for (i = 0; i<N; i++)printf("\n %5d%10s", num[i], name[i]);}void search(int n, int num[], char name[N][8])//用折半法找出职工的姓名,从主函数输入要查找的职工号,输出该职工号。{int top, bott, mid, loca, sign;top = 0;bott = N - 1;loca = 0;sign = 1;if ((n<num[0]) || (n>num[N - 1]))loca = -1;while ((sign == 1) && (top <= bott)){mid = (bott + top) / 2;if (n == num[mid]){loca = mid;printf("NO. %d , his name is %s.\n", n, name[loca]);sign = -1;}else if (n<num[mid])bott = mid - 1;elsetop = mid + 1;}if (sign == 1 || loca == -1)printf("%d not been found.\n", n);}


0 0