习题 7.15 写几个函数:1.输入10个职工的姓名和职工号;2.按职工号由小到大顺序排序,姓名顺序也随之调整;。。。
2023-09-14 09:06:57 时间
C程序设计(第四版) 谭浩强 习题7.15 个人设计
习题 7.15 写几个函数:
1. 输入10个职工的姓名和职工号;
2. 按职工号由小到大顺序排序,姓名顺序也随之调整;
3. 要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
代码块:
方法1:
#include <stdio.h>
#include <string.h>
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<nu[mid])
high=mid-1;
else if (x==nu[mid]){
printf("%s\n", na[mid]);
break;
}
}
if (x!=nu[mid])
printf("No match!\n");
}
方法2:
#include <stdio.h>
#include <string.h>
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; i<n; i++){
printf("Please enter No.%d name: ", i+1);
gets(na[i]);
printf("please enter No.%d number: ", i+1);
scanf("%d", &nu[i]);
getchar(); //此处是为了避免把回车作为输入流输进数组中
}
}
//排序函数
void sort(char na[][20], int nu[], int n)
{
int i, j, t;
char temp[20];
for (i=0; i<n; i++)
for (j=i+1; j<n; nu[i]>nu[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; i<n; printf("%d %s\n", nu[i], na[i]), i++);
}
//查找函数
void search(int numb, char na[][20], int nu[], int n)
{
int mid, low=0, high=n-1;
mid=(low+high)/2;
for (low=0, high=n-1, mid=(low+high)/2; low<=high; mid=(low+high)/2){
if (numb<nu[mid]) high=mid-1;
if (numb>nu[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; j<n; j++)
if (nu[i]>nu[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语言输入4个整数要求按由小到大_c语言任意输入3个数从小到大排序
- python中如何输入派_用phython语言求圆周率
- Shell编程从看懂到看开②(字符串、数组、注释、流程控制、read读取控制台输入)
- pandas读取txt---按行输入按行输出
- 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
- 【数字信号处理】线性常系数差分方程 ( 使用 matlab 求解 “ 线性常系数差分方程 “ 示例 | A 向量分析 | B 向量分析 | 输入序列分析 | matlab 代码 )
- Linux下如何输入命令指南(linux如何输入命令)
- MySQL中如何避免重复数据输入(mysql中不允许重复)
- Oracle无需输入口令体验新的功能(oracle免输入口令)
- MySQL保证数据唯一性,不能重复输入(mysql 不能重复)
- 深入探索命令行输入Redis(命令行输入redis)
- asp.net仿腾讯微薄提示还能输入*个字符的实现代码
- 一行代码解决perl输入排序输出问题
- Winform之TextBox输入日期格式验证yyyy-mm-dd
- js正则判断非法字符限制输入
- js检测输入内容全为空格的方法
- php+ajax实时输入自动搜索匹配的方法
- 文本框倒叙输入让输入框的焦点始终在最开始的位置