C语言数组(下)

        我希望各位可以在思考之后去看本期练习,并且在观看之后独立编写一遍,以加深理解,巩固知识点。

练习一:编写代码,演⽰多个字符从两端移动,向中间汇聚

我们依旧先上代码

//编写代码,演⽰多个字符从两端移动,向中间汇聚
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };int left = 0;int right = strlen(arr1) - 1;while (left <= right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);Sleep(500);system("cls");left++;right--;}printf("%s\n", arr2);return 0;
}

第一步

        对于这道题来说,我们要先搞清楚怎么样让字符从两端向中间移动。既然题目说的是多个字符,那就会用到数组去存放这些字符;移动是一个过程,所以这道题必定要使用循环。那我们先创建出所需要的数组:

#include<stdio.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };return 0;
}

        这里英语句子是有意义的,各位感兴趣可以试着翻译,嘻嘻。

        接着我们要创建循环体系,从两端开始,那就要左右各设置一个变量去满足题意。

#include<stdio.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };int left = 0;int right = strlen(arr2) - 1;while (left <= right){}return 0;
}

        注意,right的值应该是字符串长度-1,原因是我们要用的是数组下标,如果不明白可以去看上一篇知识点讲解。从两端开始,当 left 不再<= right 的时候,说明我们的移动也结束了。

第二步

多个字符移动汇聚

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };int left = 0;int right = strlen(arr2) - 1;while (left <= right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);left++;right--;}return 0;
}

        怎么样,是不是体会到移动的感觉了,接下里我们就要去让他称为一个动态的移动过程了。

第三步

这一步有分两个点:一是在每次打印之间都要设置停顿。

                                二是在每下一次打印之前都要清理掉前一次的打印。

那我们就要用到新知识了:

第一个是Sleep函数,这个函数的作用是生成停顿,需要包含头文件(windows.h)

形式:Sleep(时间)    单位是毫秒

第二个是系统提供的清屏指令符cls,需要包含头文件(stdlib.h)

形式:stytem(“cls”);

写出代码就是

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };int left = 0;int right = strlen(arr1) - 1;while (left <= right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);Sleep(500);system("cls");left++;right--;}printf("%s\n", arr2);return 0;
}

        这里要注意你两个函数的位置,如果放到了printf 前面的话,就得不到想要的效果了。动态过程不便呈现,各位自行尝试效果。

练习二:二分查找

在有序数组中查找某个数的下标。

  老样子,上代码:

#include<stdio.h>
int main()
{//创建数组int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//k就是我们要找的元素,这里也可以写成scanf输入变量int k = 7;//二分法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){right = mid - 1;}else if (arr[mid] < k){left = mid + 1;}else{printf("找到了,下标是%d\n", mid);flag = 1;break;}}if (flag == 0){printf("找不到\n");}return 0;
}

        这道题的思路和上一道有相似之处,我们可以对比着来看。注意这道题是有序数组中的查找,在无序的数组中,这种方法不适用。

首先,创建数组和需要查找的变量是必不可少的,注释中也有相应的替换方法,这里不多讲了。

        我着重讲一下二分法,根据上面的数组可知,元素下标最大的9,最小的是0,而我们要寻找的元素的下标是6,我们就可以通过(max+min)/2的方法先把所有的元素去掉一半,如果没找到,再重复上一步,这样的方式在数组元素非常多的时候可以极大的减少计算机的执行时间,提高了运行效率。

        还有两个细节,第一,中间值mid必须在循环内部,因为在每次改变left 或者 right之后,我们也需要改变中间值。第二 flag 是用于找不到你想查找数时的必要办法。

        本期到此就结束了,如果还有不太清楚的地方,欢迎在评论区讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/258290.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C //例10.3 从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。

C程序设计 &#xff08;第四版&#xff09; 谭浩强 例10.3 例10.3 从键盘读入若干个字符串&#xff0c;对它们按字母大小的顺序排序&#xff0c;然后把排好序的字符串送到磁盘文件中保存。 IDE工具&#xff1a;VS2010 Note: 使用不同的IDE工具可能有部分差异。 代码块 方法…

HttpComponents: 领域对象的设计

1. HTTP协议 1.1 HTTP请求 HTTP请求由请求头、请求体两部分组成&#xff0c;请求头又分为请求行(request line)和普通的请求头组成。通过浏览器的开发者工具&#xff0c;我们能查看请求和响应的详情。 下面是一个HTTP请求发送的完整内容。 POST https://track.abc.com/v4/tr…

c语言怎么“简单”表示9个变量互不相等?

c语言怎么“简单”表示9个变量互不相等? 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C语言从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#xff0…

第二次上机测试:Javascript. (第一组)

需求&#xff1a;&#xff08;注意在规定的时间&#xff0c;在自己的博客提交作品&#xff0c;便于统计测试的完成情况。博客题目《第二次上机测试&#xff1a;Javascript.》&#xff09; 1、点击按钮&#xff0c;将图片加上边框 2、点击按钮&#xff0c;将图片缩小为长和宽都…

服务器配置免密SSH

在当今互联网时代&#xff0c;远程工作和网络安全已成为信息技术领域的热点话题。无论是管理远程服务器、维护网络设备还是简单地从家中连接到办公室&#xff0c;安全始终是首要考虑的因素。这就是为什么 SSH&#xff08;Secure Shell&#xff09;成为了网络专业人士的首选工具…

这把养生局~

查看原文请移步~ &#x1f308;9款好喝解腻水果茶 ✅苹果热橙茶 苹果橙子柠檬红茶冰糖 ✅金桔话梅乌龙茶 柠檬话梅金桔乌龙茶冰糖 ✅柠檬百香果乌龙茶 橙子柠檬百香果乌龙茶冰糖 ✅港式柠檬茶 柠檬青柠红茶冰糖 ✅山楂苹果消食茶 山楂苹果红茶冰糖 ✅桂圆热红茶 桂圆红茶冰糖 …

Java第二十一章

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封装成不同的类&#xff0c;用户只要创建这些类的对象&#xff0c;使用相应的方法&#xff0c;即使不具备有关的网络支持&#xff0c;也可以编写出高质量的网络通信程序。 …

C++基础 -42- STL库之list链表

———————STL库之list链表——————— &#x1f384; list链表的格式(需要定义头文件) list<int> data1(4, 100);list<int> data2(4, 500);&#x1f384;list链表的合并接口 &#x1f384;举例使用合并接口并且验证 data2.merge(data1);list<int>::…

细粒度视觉分类的注意内核编码网络

Attentional Kernel Encoding Networks for Fine-Grained Visual Categorization 1、介绍2、方法2.1 卷积模块2.2 级联注意力模块2.3 内核编码模块2.4 整体 3、结论 在本文中&#xff0c;我们提出了一种用于细粒度视觉分类的注意核编码网络(AKEN)。具体来说&#xff0c;AKEN聚合…

vue pc官网顶部导航栏组件

官网顶部导航分为一级导航和二级导航 导航的样子 文件的层级 router 文件层级 header 组件代码 <h1 class"logo-wrap"><router-link to"/"><img class"logo" :src"$config.company.logo" alt"" /><i…

【计算机毕业设计】java网上服装商城销售系统springboot+jsp

目前互联网上的网上销售系统每天以惊人的速度增加&#xff0c;网上购物越来越成为现代年轻人的首选&#xff0c;足不出门便能选购好自己称心如意的商品。基于Java术及MySQL数据库设计与实现一个网上服装销售系统&#xff0c;要求实现用户管理、服装管理、新闻公告管理、留言管理…

虾皮关键词广告怎么选

在虾皮&#xff08;Shopee&#xff09;平台上&#xff0c;关键词广告是提高商品曝光度和销量的有效手段。然而&#xff0c;选择合适的关键词对于广告效果至关重要。本文将为您提供一些建议&#xff0c;帮助您选择适合虾皮关键词广告的关键词。 先给大家推荐一款shopee知虾数据…