搜索初步----一个小例子

本篇博客主要以一个小例子来初步探索一下“搜索”,包括程序的逻辑结构设计

例:在美元中,硬币是有名字的,它有一些英文单词去对应的硬币的面值,比如1分钱叫做penny,5分钱叫做nichel......(有一个数字对应一个英文单词)。如果要编写一个程序做搜索,用户输入一个数字(面额),程序输出对应的英文,那么如何实现?

分析:本题的关键点是如何建立“数字面值”与“英文”这两者之间的联系。可以分别设置两个数组

如图所示,如果在amount数组中搜到了一个值:比如10,得到它所在的位置是2,那么就可以在字符数组2的位置上得到dime。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//搜索函数
int search(int a[], int key, int size)
{
	int ret = -1;
	for ( int i = 0; i < size; i++)
	{
		if (a[i] == key)
		{
			ret = i;
			break;
		}
	}
	return ret;
}
int main()
{
        int amount[] = { 1, 5, 10, 25, 10 };
	char*p[] = { "penny", "nickel", "dime", "quarter", "half-dollar" };
	int sz = sizeof(amount) / sizeof(amount[0]);
	int loc = search(amount, 0, sz);
	if (loc != -1)
	{
		printf("%s\n", p[loc]);//输出对应位置的英文字符
	}
	else
	{
		printf("没找到\n");
	}
      system("pause");
      return 0;
}

但是这样有一个不好处:它是割裂的两个数组。更好的做法是将数字面额与对应的英文放的比较近;这样的话,一旦找到面额,直接再附近就可以找到英文,不需要到另外的地方去找。

改进思路:不需要有两个数组,而是设计一个结构,结构内容包含“int 类型的数字面额”和“字符指针”,用这样的结构构造一个结构体数组,然后进行初始化。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct
{
	int amount;
	char*name;
}coins[] = {
	{ 1, "penny" },
	{ 5, "nickel" },
	{ 10, "dime" },
	{ 25, "quarter" },
	{ 50, "half-dollar" }
};
int main()
{
     int k = 0;
     scanf("%d", &k);
     int sz = sizeof(coins) / sizeof(coins[0]);
     for (int i = 0; i < sz; i++)
     {
	   if (k == coins[i].amount)
	   {
		   printf("%s\n", coins[i].name);
		   break;
	   }
     }
   system("pause");
   return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值