关于数组的两个应用

简介: 关于数组的两个应用

第一个应用:


多个字符从两端移动,向中间汇聚

头函数

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>

代码实现

第一种实现方式

int main()
{
  char arr1[] = "白子寰是一位学习C语言的帅哥!!!";
  char arr2[] = "##############################";
    //两个双引号里的内容字符要对应
 
  int left = 0;
  int right = strlen(arr1) - 1;
  //上一行解释说明:例如输出a,b,c;有a b c \0;长度有4,访问C,只用strlen( )-1;
 
  while (left <= right)
  {
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    printf("%s\n", arr2);
    Sleep(1000);//睡眠1000秒
    system("cls");//system是库函数,执行系统指令,cls是清除控制台屏幕信息
    right--;
    left++;
  }
  printf("%s\n", arr2);
  return 0;
}

注释的内容为代码的解释

第二种实现方式

int main()
{
  char arr1[] = "白子寰是一位学习C语言的帅哥!!!";
  char arr2[] = "##############################";
    //两个双引号里的字符内容要对应
 
  int left = 0;
  //int sz = sizeof(arr1) / sizeof(arr1[0]);
  //int right = sz - 2;
  //上两行解释说明:如果是数组的话,arr[]="a,b,c";
  //                             有a b c /0 其元素个数有四个
  //                           而要访问c的话,因为是数组,访问的是其下标,所以sz-2
 
  while (left <= right)
  {
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    printf("%s\n", arr2);
    Sleep(1000);   //睡眠1000秒
    system("cls"); //system是库函数,执行系统指令,cls是清除控制台屏幕信息
    right--;
    left++;
  }
  printf("%s\n", arr2);
  return 0;
}

注释的内容为代码的解释

控制台实现


第二个应用:


二分法

头函数

#include<stdio.h>

代码实现

第一种实现方式

运用到的知识:数组和for循环

int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int k = 0;//    0 1 2 3 4 5 6 7 8  9
  printf("请输入你要找下标的数字:");
  scanf("%d", &k);
  int i = 0;
  int sz = sizeof(arr) / sizeof(arr[0]);
  for (i = 0; i < sz; i++)
  {
    if (arr[i] == k)
    {
      printf("%d找到了,下标是%d ", k, i);//i访问了数组的下标
      break;
    }
  }
  if (i == sz)
  {
    printf("找不到\n");
  }
  return 0;
}

控制台打印输出:

第二种实现方式

运用到的知识:数组,break语句,while循环,if..else语句

此方式是找中间的值:mid与所找数字k进行比较

int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int  k = 0;
  printf("请输入所需找下标的数字:");
  scanf("%d", &k);
  int sz = sizeof(arr) / sizeof(arr[0]);
 
  int left = 0;
  int right = sz - 1;
 
  while (left <= right)
  {
    int mid = (left + right) / 2;
    if (arr[mid] == k)
    {
      printf("%d找到了,下标是%d\n", k, mid);
      break;
    }
    else if (arr[mid] < k)
    {
      left = mid + 1;
    }
    else//中间的元素大于所需要找的元素k,就让右边的=中间的-1;
    {
      right = mid - 1;
    }
  }
  if (left > right)
  {
    printf("%d的下标找不到", k);
  }
 
  return 0;
}

控制台打印输出:

第三种实现方式

运用到的知识::数组,break语句,while循环,if..else语句

与第二种比较,增加了一个定义flag

int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int k = 0;
  printf("请输入所需找下标的数字:");
  scanf("%d", &k);
  int sz = sizeof(arr) / sizeof(arr[0]);
 
  int left = 0;
  int right = sz - 1;
  int flag = 0;
 
  while (left <= right)
  {
    int mid = (left + right) / 2;
    if (arr[mid] == k)
    {
      printf("%d找到了,下标为%d\n", k, mid);
      flag = 1;
      break;
    }
    else if (arr[mid] < k)
    {
      left = mid + 1;
    }
    else
    {
      right = mid - 1;
    }
  }
  if (left > right)
  {
    printf("%d找不到它的下标\n", k);
    flag = 0;
  }
  return 0;
}

控制台实现

目录
相关文章
|
5月前
|
存储 开发框架 .NET
C#中的数组探索
C#中的数组探索
|
6月前
|
存储 搜索推荐 算法
C数组
C数组
34 0
|
6月前
1-9 数组
1-9 数组
27 0
|
6月前
数组练习2
数组练习2。
27 2
|
6月前
|
存储 C语言
数组
数组。
27 0
|
6月前
|
机器学习/深度学习 人工智能 JavaScript
数组练习
数组练习。
36 0
|
存储 编译器 程序员
|
存储 C# 索引
C#视频—数组
C#视频—数组
|
存储 算法 编译器
数组(一)
数组(一)
112 0
数组(一)
|
存储 程序员 C#
【总结】C#中的数组
【总结】C#中的数组