首页 > 编程语言 >2024-2025-1 20241421《计算机基础与程序设计》第6周学习总结

2024-2025-1 20241421《计算机基础与程序设计》第6周学习总结

时间:2024-11-03 16:21:54浏览次数:3  
标签:语句 传递 return 函数 int 2024 2025 循环 20241421

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276
这个作业的目标 计算机科学概论(第七版)第7章 《C语言程序设计》第5章
**作业正文 ** https://www.cnblogs.com/118qa/p/18523564
教材学习内容总结
本周我们继续强化学习了循环结构的应用,并通过实验课的学习进行了语句的实践操作
以下是对不同语句及其用法的概括与总结。
一、for语句
含义:
for语句用于重复执行一段代码特定次数或遍历一个数据结构。
用法:
语法形式为for(初始化表达式; 条件表达式; 更新表达式) {循环体}。
初始化表达式通常用于初始化一个循环变量,在循环开始时执行一次。
条件表达式在每次循环开始前进行判断,如果为真,则执行循环体;如果为假,则退出循环。
更新表达式在每次循环体执行后执行,通常用于更新循环变量。
例如:
这段代码会输出 “0 1 2 3 4”。
二、if语句
含义:
if语句用于根据一个条件来决定是否执行一段代码。
用法:
语法形式为if(条件表达式) {条件为真时执行的代码}。如果条件表达式的值为真,则执行if后面的代码块;如果为假,则不执行。
例如:
这段代码会输出 “num 大于 5”。
三、while语句
含义:
while语句用于在条件为真时重复执行一段代码。
用法:
语法形式为while(条件表达式) {循环体}。只要条件表达式的值为真,就会不断执行循环体。
例如:
这段代码也会输出 “0 1 2 3 4”。
四、do-while语句
含义:
do-while语句与while语句类似,但它保证循环体至少执行一次。
用法:
语法形式为do {循环体} while(条件表达式);。先执行循环体,然后判断条件表达式,如果为真,则继续执行循环体;如果为假,则退出循环。
例如:
这段代码同样输出 “0 1 2 3 4”。
教材学习中的问题和解决过程
问题1:while语句中为什么不能用return?
AI回答:在 C 语言中,while 语句中并不是绝对不能用 return。
一、为什么说 while 语句中 “通常不建议直接用 return”
破坏循环结构的本意
While 循环通常用于在特定条件下重复执行一段代码。如果在循环中直接使用 return,会立即从包含该循环的函数中返回,这可能会导致循环提前终止,破坏了循环结构原本的设计意图,使得后续可能需要在循环中执行的代码无法得到执行。
影响程序的可维护性和可读性
在复杂的程序中,如果在循环中随意使用 return,会使程序的控制流变得难以理解和跟踪。其他开发者在阅读代码时,可能难以预测在什么情况下循环会被突然终止,增加了理解代码逻辑的难度。
二、在某些情况下可以使用 return 的场景
错误处理
当在循环中检测到严重错误,并且继续执行循环已经没有意义时,可以使用 return 来提前终止函数并返回错误状态。例如,在读取文件的循环中,如果遇到无法恢复的文件读取错误,可以选择直接返回以避免进一步的错误处理。
满足特定条件立即退出整个函数
如果在循环中满足了某个特定条件,并且这个条件意味着整个函数的执行应该立即停止并返回结果,那么可以使用 return。但这种情况应该谨慎使用,并且最好在代码中添加清晰的注释说明为什么在这个位置使用 return。
综上所述,虽然在 while 循环中可以使用 return,但应该谨慎使用,以确保程序的正确性、可维护性和可读性。
问题2:for循环中如何正确表达依次递增与递减?
一、递增
使用基本形式
通常情况下,可以直接使用for循环的自增运算符++来实现递增。例如:

include <stdio.h>

int main() {
for (int i = 0; i < 10; i++) {
printf("%d ", i);
}
return 0;
}
在这个例子中,循环变量i从 0 开始,每次循环后i自增 1,直到i小于 10 时停止循环。
改变步长实现更大幅度递增
如果想要以更大的步长递增,可以在更新表达式中进行调整。例如:

include <stdio.h>

int main() {
for (int i = 0; i < 100; i += 5) {
printf("%d ", i);
}
return 0;
}
二、递减
使用自减运算符
可以使用自减运算符--来实现递减。例如:

include <stdio.h>

int main() {
for (int i = 10; i > 0; i--) {
printf("%d ", i);
}
return 0;
}
这个例子中,循环变量i从 10 开始,每次循环后i自减 1,直到i不大于 0 时停止循环。
改变步长实现更大幅度递减
类似递增的情况,可以调整步长来实现更大幅度的递减。例如:

include <stdio.h>

int main() {
for (int i = 100; i > 0; i -= 10) {
printf("%d ", i);
}
return 0;
}
这里循环变量i每次减少 10,输出 100、90、80 等数字。
基于AI的学习
请以C语言程序设计第五章知识点为基础以苏格拉底的形式向我提问,一次一个问题
好呀,那我先来第一个问题。在 C 语言中,什么是函数的定义?
在数学中,我们曾经学习过数学的概念,如:y=kx+b(k,b均为常数),给定任意一个x的值,均可得出y的值。
C语言中也存在函数的概念,常被称作:子程序。(即函数就是一个完成某项特定的任务的一小段代码)
C语言的程序是由无数个小的函数组合而成。(即将一个大型的计算任务分解成若干个小的函数【对应较小的任务】完成)


函数由哪些部分组成呢?
函数头‌:函数头是函数体之前的所有部分,它给出了该函数的返回类型、每个参数的次序和类型等函数原型信息。当没有专门给出函数原型说明语句时,系统会从函数头中获取函数原型信息‌1。
‌函数体‌:函数体是用花括号括起来的若干语句,它们完成了一个函数的具体功能。函数体内的前面是定义和说明部分,后面是语句部分。函数声明与函数体放在一起组成了函数定义‌1。
此外,C语言中的函数还可以进一步分为有参函数和无参函数,根据是否接收用户传递的数据来区分‌2。
有参函数和无参函数在使用上有什么主要区别呢?
需要传递参数、有返回值
‌有参函数的定义和特点‌12
‌有参函数‌是‌C语言中的一种函数类型,其特点是在定义函数时有规定参数,并且有返回值。有参函数需要传递参数给函数,这些参数在函数内部被使用来完成特定的任务,并且在函数结束时可以返回一个结果。
有参函数的例子
以下是一个简单的有参函数的例子,该函数用于比较两个数的大小,并返回较大的数:
c
Copy Code
int max(int a, int b) {
int c;
c = (a > b) ? a : b;
return c;
}

int main() {
int x, y, z;
x = 3;
y = 5;
z = max(x, y);
printf("%d", z);
getch();
return 0;
}
在这个例子中,max函数接受两个整数参数a和b,比较它们的大小,并返回较大的数。主函数main调用max函数,并打印返回值。
有参函数在调用时参数的传递方式有哪些呢?
值传递(传值方式)‌:在这种方式下,实参的值被复制一份给形参,形参在函数内部对数据的任何修改都不会影响到实参。例如,在C语言中,当函数调用时,系统会临时创建形参变量,并将实参的值复制给形参,形参的任何改变都不会影响到实参‌12。
‌地址传递(传地址方式)‌:在这种方式下,实参的地址被传递给形参,形参可以是指针变量或数组名。这样,函数内部对形参的修改会直接影响到实参。例如,在C语言中,如果形参是指针变量,那么通过指针可以修改主调函数中实参的值‌12。
‌全局变量‌:在某些情况下,可以通过修改全局变量的值来传递数据。这种方式不需要通过函数参数,但需要注意全局变量的使用可能会引起代码的混乱和难以维护‌1。
值传递和地址传递在效率上有什么不同呢?
传递效率的比较
‌对于小数据类型‌:对于内建的int、char、short、long、float等4字节或以下的数据类型,值传递和地址传递的效率在32位CPU上是一样的,因为传递这些类型的数据只需要1-4个字节。然而,对于8字节的数据类型(如double、long long),在32位CPU上,值传递的效率比地址传递慢,因为需要分两次传递8个字节的数据‌1。
‌在64位CPU上‌:无论是值传递还是地址传递,效率都是一样的,因为64位CPU可以一次性处理8字节的数据‌1。
‌引用传递‌:引用传递的效率取决于编译器的实现方式。一种常见的实现方式是使用指针,这种情况下与指针传递的效率相同。另外,有些编译器可以进行优化,采用直接寻址的方式,这种情况下效率比值传递和地址传递都要快‌1。
引用传递在什么情况下会比指针传递更有优势呢?
语法简洁性和直观性‌:引用传递的语法比指针传递更简洁和直观。引用传递不需要使用*和&符号来进行取址和解引用操作,这使得代码更加简洁易读‌1。
‌执行效率‌:在某些情况下,引用传递可以提高程序的执行效率。由于引用传递直接传递变量的地址,不需要进行解引用操作,因此在函数内部对引用变量的修改可以直接影响到实际参数,从而减少了不必要的内存访问‌1。
‌安全性‌:引用传递比指针传递更安全,因为引用在定义时必须初始化,并且一旦引用一个实体后就不能再引用其他实体,这减少了野指针的风险‌2。
‌避免野指针和空指针‌:引用在定义时必须进行初始化,并且不能为NULL,这避免了野指针和空指针的问题,使得代码更加健壮‌3。
‌方便使用‌:引用传递使得函数可以直接修改调用者的变量,而不需要通过指针来间接修改,这使得代码更加直观和易于理解‌4。
感悟
C语言学习任重道远,还需努力。

标签:语句,传递,return,函数,int,2024,2025,循环,20241421
From: https://www.cnblogs.com/118qa/p/18523564

相关文章

  • 2024.11.3 鲜花
    浅谈RMQ비밀인형극II어느한적한마을골목안의허름한건물在某个僻静村庄胡同的破旧建筑里문을열고들어가면작은극장이있죠开门进去便会见到一个小剧场솜씨좋은인형사가연극을마치고떠나면一个手艺不错的人偶师演完戏离开的时候인형들은......
  • Adobe IC 下载与快捷键使用【2017-2024】
    目录一、AdobeIC功能介绍1.1强大的图像编辑能力1.2丰富的画笔与图层管理工具1.3模板库与高效协作二、AdobeIC下载与安装2.1下载2.2安装三、AdobeIC快捷键使用3.1基本编辑快捷键3.2视图与导航快捷键3.3协作与批注快捷键一、AdobeIC功能介绍1.1......
  • 第四次:2024年郑州马拉松赛事记
    目录第一次报名通道开启第二次通道开启完赛奖牌和参赛T恤官方召开新闻发布会参加赛事第一次报名通道开启时间回到了九月底,郑州马拉松官方公众号推送消息,报名通道9月27日开启,一致期待的郑马报名终于落地了。第一次抽签,系统推送消息,没有中签。官方通告信息显......
  • 2024-2025-1 20241301 《计算机基础与程序设计》第六周学习总结
    |这个作业属于哪个课程|<2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)>||这个作业要求在哪里|<2024-2025-1计算机基础与程序设计第六周作业](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06)>||这个作业的目标|<夯实基础,......
  • 2024-2025-1 20241312《计算机基础与程序设计》第6周学习总结
    这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第六周作业)这个作业的目标Polya如何解决问题简单类型与组合类型复合数据结构查找与排序算法算法复杂度递归代码......
  • 【论文阅读】<ICSE2024>CoderEval: A Benchmark of Pragmatic Code Generation......
    CoderEval:ABenchmarkofPragmaticCodeGenerationwithGenerativePre-trainedModels标题:CoderEval:基于生成式预训练模型的实用代码生成基准摘要:基于预训练和微调范式的代码生成模型在学术界和工业界中得到了广泛应用,催生了许多知名的工业模型,如Codex、CodeGen和Pan......
  • 2024-2025-1 20241407《计算机基础与程序设计》第六周学习总结
    这个作业属于哪个课程[2024-2025-1计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)这个作业要求在哪里2024-2025-1计算机基础与程序设计第六周作业这个作业的目标学习Polya如何解决问题,简单类型与组合类型,复合数据结构,查找与排序算法......
  • 2024.11.2 2024ICPC成都站
    Solved:7/13Penalty:793Rank:40Rank(ucup):152L.RecoverStatistics输出50个P50、45个P95,4个P99和1个P99+1即可。#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(0);cin.tie(0);inta,b,c;cin>>a>&g......