习题 7.15 写几个函数:1.输入10个职工的姓名和职工号;2.按职工号由小到大顺序排序,姓名顺序也随之调整;。。。

C程序设计(第四版) 谭浩强 习题7.15 个人设计

习题 7.15 写几个函数:

1. 输入10个职工的姓名和职工号;

2. 按职工号由小到大顺序排序,姓名顺序也随之调整;

3. 要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

代码块:

方法1:

#include 
#include 
void input (char na[][20], int nu[]);                 //定义输入函数
void sorts (char na[][20], int nu[]);                 //定义排序函数
void search (char na[][20], int nu[], int x);         //定义查找函数
int main()
{
    char name[10][20];
    int num[10], numb, i;
    input(name, num);                                 //调用输入函数
    sorts(name, num);                                 //调用排序函数
    for (i=0; i<10; i++){
        printf("%8s ", name[i]);
        printf("%d\n", num[i]);
    }
    printf("Input your number:");                     //输入一个职工号
    scanf("%d", &numb);
    search(name, num, numb);                          //调用查找函数
    return 0;
}
//输入函数
void input (char na[][20], int nu[])
{
    int i;
    for (i=0; i<10; i++){
        printf("Input No.%d name:", i+1);
        scanf("%s", na[i]);
        printf("Input No.%d number:", i+1);
        scanf("%d", &nu[i]);
    }
}
//排序函数
void sorts (char na[][20], int nu[])
{
    int i, j, temp;
    char tm[20];
    for (i=0; i<10; i++)
        for (j=i+1; j<10; j++){
            if (nu[i]>nu[j]){
                temp=nu[i];
                nu[i]=nu[j];
                nu[j]=temp;
                strcpy(tm, na[i]);
                strcpy(na[i], na[j]);
                strcpy(na[j], tm);
            }
        }
}
//查找函数
void search (char na[][20], int nu[], int x)
{
    int low, high, mid;
    low = 0;
    high = 9;
    while (low<=high){
        mid=(low+high)/2;
        if (x>nu[mid])
            low=mid + 1;
        else if (x

方法2:

#include 
#include 
void input(char na[][20], int nu[], int n);                    //定义输入函数
void sort(char na[][20], int nu[], int n);                     //定义排序函数
void search(int numb, char na[][20], int nu[], int n);         //定义查找函数
int main()
{
	char name[10][20];
	int num[10], number;
	input(name, num, 10);                                      //调用输入函数
	sort(name, num, 10);                                       //调用排序函数
	printf("Please enter number: ");                           //输入一个职工号
	scanf("%d", &number);
	search(number, name, num, 10);                             //调用查找函数
	return 0;
}
//输入函数
void input(char na[][20], int nu[], int n)
{
	int i;
	for (i=0; inu[j] ? t=nu[j], nu[j]=nu[i], nu[i]=t, strcpy(temp, na[j]), strcpy(na[j], na[i]), strcpy(na[i], temp), j++ : j++);
	for (i=0; inu[mid]) low=mid+1;
		if (numb==nu[mid]){
			printf("Name: %s\n", na[mid]);
			break;
		}
	}
	if (numb!=nu[mid]) printf("No Match!\n");
}

解答评论(拆开for循环)
问号是涉及条件运算符,拆开如下:

for (j=i+1; jnu[j]){
        t=nu[j], nu[j]=nu[i], nu[i]=t;
        strcpy(temp, na[j]);
        strcpy(na[j], na[i]);
        strcpy(na[i], temp);
        }

你可能感兴趣的:(C程序设计,(第四版),谭浩强,课后答案)