关于数组的两个应用

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

第一个应用:


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

头函数

#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;
}

控制台实现

目录
相关文章
|
4月前
|
存储 算法 编译器
C 数组详解
在C语言中,数组是一种用于存储多个同类型数据的集合。本文介绍了数组的基本特性与使用方法,包括定义与初始化、索引访问、多维数组、指针操作、大小计算及函数传递等内容。数组名可视为指向首元素的指针,支持遍历、排序与查找等常见操作。数组大小固定,访问越界会导致未定义行为。此外,还可以将数组嵌套在结构体中以增加数据复杂性。
70 10
|
7月前
数组(2)
数组(2)
36 1
|
7月前
|
存储 开发框架 .NET
C#中的数组探索
C#中的数组探索
|
存储 C语言 索引
C 数组
C 数组。
44 0
|
存储 机器学习/深度学习 Java
原来这就是数组
原来这就是数组
89 0
|
8月前
|
程序员 索引
C 中数组详解
C 中数组详解。
37 3
|
8月前
数组练习2
数组练习2。
32 2
|
8月前
|
编译器 C++
C++系列四:数组
C++系列四:数组
|
8月前
|
存储 人工智能 算法
4.为何数组下表从0开始
4.为何数组下表从0开始
69 1
|
8月前
|
存储 程序员 C++