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

这个作业属于哪个课程 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语言学习任重道远,还需努力。

posted @ 2024-11-03 16:23  千里执孤  阅读(14)  评论(0编辑  收藏  举报