关于数组的两个应用

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

第一个应用:


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

头函数

#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月前
|
存储
数组的初识
数组的初识
|
1天前
|
存储 索引
数组的特点
数组是一种线性数据结构,用于存储固定大小的顺序集合。每个元素在数组中都有一个唯一的索引,可以快速访问和修改。数组支持随机访问,但插入和删除操作较慢,因为需要移动后续元素。适用于需要频繁读取数据的场景。
|
5月前
|
Java
数组的练习
数组的练习
|
5月前
|
存储 搜索推荐 程序员
C++ 数组
C++ 数组
40 0
|
存储 C语言 索引
C 数组
C 数组。
37 0
|
5月前
1-9 数组
1-9 数组
21 0
|
5月前
数组练习2
数组练习2。
26 2
|
存储 机器学习/深度学习 Java
原来这就是数组
原来这就是数组
76 0
|
5月前
|
编译器 C++
C++系列四:数组
C++系列四:数组
|
5月前
|
存储 程序员 C++
c++数组详细介绍(一)
前言 深入理解C++的数组和字符串是成为熟练C++程序员的重要一步。本文将探索C++中数组和字符串的基本概念,从基础到进阶,包括数组的声明、初始化、访问和多维数组的操作,以及字符串类的使用和与字符数组的转换。还将涉及异常处理、动态内存分配、STL中的其他容器、常用字符串操作。
97 0