学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第六周学习总结

news/2025/1/11 4:14:07/文章来源:https://www.cnblogs.com/vincent2077/p/18522094

学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第六周学习总结

作业信息

这个作业属于哪个课程 <班级链接>(如[https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP))
这个作业要求在哪里 <作业要求链接>(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06)
这个作业的目标 <计算机科学概论(第七版)第7章 《C语言程序设计》第5章>

教材学习内容总结

C语言的选择控制结构主要通过ifswitch?:(三元运算符)来实现。下面简要但全面地介绍这些控制结构:

  1. if语句

    • 基本形式:if语句用于在满足特定条件时执行一段代码。
    • 语法:
      if (条件) {// 条件为真时执行的代码
      } else {// 条件为假时执行的代码
      }
      
    • 可以嵌套if语句,也可以使用else if来检查多个条件。
  2. switch语句

    • switch语句用于根据变量的值执行不同的代码块。
    • 语法:
      switch (变量) {case 值1:// 当变量等于值1时执行的代码break;case 值2:// 当变量等于值2时执行的代码break;// ...default:// 如果变量的值不匹配任何case时执行的代码
      }
      
    • break语句用于退出switch结构,防止执行下一个case
  3. 三元运算符(?:

    • 三元运算符是一种简洁的选择结构,用于在两个值之间选择。
    • 语法:
      条件 ? 表达式1 : 表达式2;
      
    • 如果条件为真,则返回表达式1的值,否则返回表达式2的值。

这些选择控制结构是C语言中实现条件逻辑的基础,允许程序根据不同的条件执行不同的代码路径。

数组:

  1. 定义
    数组是一个容器对象,它存储了具有相同类型的一系列元素,并且可以通过索引来访问这些元素。

  2. 元素类型
    数组中的所有元素必须是相同的数据类型,例如整型、浮点型、字符型等。

  3. 索引
    数组中的每个元素都可以通过一个唯一的索引来访问,索引通常是从0开始的整数。

  4. 大小
    数组的大小是在声明时确定的,这意味着一旦创建了数组,其包含的元素数量就固定了。在某些编程语言中,如C和C++,数组的大小是静态的,而在其他语言如Python中,数组(更准确地说是列表)的大小是动态的。

  5. 声明
    在不同的编程语言中,数组的声明方式不同。例如,在C语言中,可以这样声明一个整型数组:

    int myArray[5]; // 声明一个包含5个整数的数组
    
  6. 访问和修改
    可以通过索引来访问和修改数组中的元素。例如,在C语言中:

    myArray[0] = 10;  // 将数组的第一个元素设置为10
    int value = myArray[0];  // 读取数组的第一个元素

排序算法:

1. 选择排序(Selection Sort)

原理

  • 选择排序的基本思想是:遍历数组,每次从未排序的部分找出最小(或最大)的元素,存放到排序序列的起始位置,直到整个序列有序。
  • 它重复地走访过列表,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

步骤

  1. 找到未排序部分的最小元素。
  2. 将其与未排序部分的第一个元素交换位置。

时间复杂度:O(n^2),其中n是数组的长度。

2. 泡沫排序(Bubble Sort)

原理

  • 泡沫排序的基本思想是:通过重复遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
  • 遍历数列的工作是重复进行直到没有再需要交换,也就是说该数列已经排序完成。

步骤

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。

时间复杂度:O(n^2),其中n是数组的长度。

3. 快速排序(Quick Sort)

原理

  • 快速排序的基本思想是:通过一个分治法(Divide and Conquer)的过程,将一个序列分为两个子序列,使得其中一个子序列的所有数据都比另一个子序列的所有数据要小,然后再按此方法对两个子序列分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

步骤

  1. 选择一个元素作为"基准"(pivot)。
  2. 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

时间复杂度:平均O(n log n),最坏O(n^2)。

4. 插入排序(Insertion Sort)

原理

  • 插入排序的基本思想是:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
  • 插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序)。

步骤

  1. 从第一个元素开始,该元素可以认为已经被排序。
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描。
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置。
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。
  5. 将新元素插入到该位置后。
  6. 重复步骤2~5。

时间复杂度:O(n^2),其中n是数组的长度。

这些排序算法各有优缺点,选择排序和泡沫排序在数据量较大时效率较低,而快速排序在平均情况下效率较高,插入排序在数据量较小或部分有序的情况下效率较高。

AI学习











代码调试中的问题和解决过程

1.问题:调试位运算程序时用人力计算正确成本很高,检验效率慢
解决方法:在代码中加入一行输出答案,就可以直接知晓答案再输入检验程序了
2.问题:伪随机数的解决
解决方法:加入srand()函数
3.问题:scanf输入时会先空一行结果,再对下一行执行命令
解决问题:scanf使用时多加了换行命令“\n”,删去即可

  • 计划学习时间:10小时

  • 实际学习时间:9小时

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

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

相关文章

数组篇-代码随想录

数组篇 跳-二分查找-704-力扣 class Solution {public int search(int[] nums, int target) {if (nums == null || nums.length == 0) return -1;if (target < nums[0] || target > nums[nums.length - 1])return -1;int left = 0, right = nums.length - 1;while (left …

闲话 11.2

杂项乱写 11.2也是打上搜了。小木棍 曾经在题库上做过,数据水就过了,交洛谷发现只有 87pts。 《剪 枝 盛 宴》钦定长度:最小肯定是最长的那根木棍,最长肯定是所有木棍的总和,并且这个长度一定只能是总和的因数。 选择顺序:如果选一个长的合法,那么选若干个和相同的短的一…

Nuxt.js 应用中的 nitro:config 事件钩子详解

title: Nuxt.js 应用中的 nitro:config 事件钩子详解 date: 2024/11/2 updated: 2024/11/2 author: cmdragon excerpt: nitro:config 是 Nuxt 3 中的一个生命周期钩子,允许开发者在初始化 Nitro 之前自定义 Nitro 的配置。Nitro 是 Nuxt 3 的服务器引擎,负责处理请求、渲染…

源鲁杯2024[Round 3] CheckImg

新思路:十六进制错位恢复 新知识:DNA编码 下载文件,是一张图片,010、属性、pngcheck都没有发现信息,用stegslove打开查看, 在red0通道发现图片下面有明显的隐写,后面的green0有提示(这图片真的好大,一整个屏幕看不到完整的)Green0通道的整句话应该是attention to det…

第三十一讲:为什么还有kill不掉的语句?

第三十一讲:为什么还有kill不掉的语句? 简概依旧是平平无奇的开篇 ​ 在 MySQL 中有两个 kill 命令: ​ 一个是 kill query + 线程 id,表示终止这个线程中正在执行的语句; ​ 一个是 kill connection + 线程 id,这里 connection 可缺省,表示断开这个线程的连接,当然如果…

代码随想录一刷day6 (链表day2)(链表完结)

24. 两两交换链表中的节点 分三步走; 1.创建dummyhead 2.三个指针 cur t1 t2 3. cur->next=t2; t1->next=t2->next; t2->t1->next; 最后让cur=t1; 注意最后返回的是dummyhead-》next 而不是head;注意最后delete dummyhead19.删除链表的倒数第N个…

代码随想录一刷day7 (链表day2)

24. 两两交换链表中的节点 分三步走; 1.创建dummyhead 2.三个指针 cur t1 t2 3. cur->next=t2; t1->next=t2->next; t2->t1->next; 最后让cur=t1; 注意最后返回的是dummyhead-》next 而不是head;注意最后delete dummyhead19.删除链表的倒数第N个…

【触想智能】工业平板电脑在智能教育设备上的应用优势分析

随着科技的快速发展,智能教育设备成为现代教育领域的新宠。其中,工业平板电脑作为一种重要的智能教育设备,正逐渐在教育领域得到广泛应用。工业平板电脑在智能教育设备上的应用具有以下几个优势。1、工业平板电脑具备便携性。相比传统的教学设备,如电视、投影仪等,工业平板…

【AIGC人脸生成的后门攻击】 Is It Possible to Backdoor Face Forgery Detection with Natural Triggers?

[!CAUTION] 本篇论文主要是关于AIGC生成人脸的后门攻击,与换脸技术的后门攻击有差异,因此本篇文章主要研究 trigger 的生成部分,后面的实验部分不加以研究。一、研究动机 ​ 目前的后门攻击模型还比较简单,是基于数字像素上的操作,例如增加噪声或者像素补丁,这些攻击已经…

cocolis

cocolis以下是博客签名,正文无关本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/18521668版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。 看完如果觉得有用请点个赞吧…

[理论学习] CNN学习笔记简陋版

写在前面 参考: https://www.cnblogs.com/boostwei/p/15195643.html https://www.youtube.com/watch?v=pj9-rr1wDhMCNN做了什么 CNN的出现主要解决图像处理的两大难题: 1.图像处理的数据量过大以致处理成本昂贵且效率低 2.图象在数字化的过程中很难保证原有的特征CNN结构输入…

你还用ES存请求日志?ClickHouse+Vector打造最强Grafana日志分析看板

为什么要做NGINX日志分析看板 Grafana官网的dashboards有NGINX日志采集到ES数据源的展示看板,也有采集到LOKI数据源的展示看板,唯独没有采集到ClickHouse数据源的展示看板。所以这个轮子是必须要造的。 为什么不使用ES存储 ElasticSearch是全文检索引擎的文档数据库,对于业务…