[C语言]——数组练习

时间:2024-03-12 14:21:14
#include <stdio.h>
int main()
{
 char arr1[] = "welcome to bit...";
 char arr2[] = "#################";
 int left = 0;
 int right = strlen(arr1)-1;
 printf("%s\n", arr2);
 while(left<=right)
 {
   Sleep(1000); //睡眠1000毫秒
   arr2[left] = arr1[left];
   arr2[right] = arr1[right];
   left++;
   right--;
   printf("%s\n", arr2);
 }
 retutn 0;
}

system("C/S"); //system函数是库函数,执行系统指令 C/S是清理控制台屏幕信息

练习2:⼆分查找

在⼀个升序的数组中查找指定的数字n,很容易想到的⽅法就是遍历数组,但是这种⽅法效率⽐较低。 ⽐如我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?你会1,2,3,4...这样猜吗?显然很慢;⼀般你都会猜中间数字,⽐如:150,然后看⼤了还是⼩了,这就是⼆分查找,也叫折半查找。
#include <stdio.h>
int main()
{
 int arr[] = {1,2,3,4,5,6,7,8,9,10};
 int left = 0;
 int right = sizeof(arr)/sizeof(arr[0])-1;
 int key = 7;//要找的数字
 int mid = 0;//记录中间元素的下标
 int find = 0;
 while(left<=right)
 {
   mid = (left+right)/2;
   if(arr[mid]>key)
   {
     right = mid-1;
   }
   else if(arr[mid] < key)
   {
     left = mid+1;
   }
   else
   {
     find = 1;
     break;
   }
 }
 if(1 == find )
   printf("找到了,下标是%d\n", mid);
 else
   printf("找不到\n");
}
求中间元素的下标,使⽤ mid = (left+right)/2 ,如果left和right⽐较⼤的时候可能存在问
题,可以使⽤下⾯的⽅式:
mid = left+(right-left)/2;