| 这个作业属于哪个课程 | 2025高级语言程序设计 |
|---|---|
| 这个作业的要求在哪里 | 高级语言程序第四次作业 |
| 学号 | 102300317 |
| 姓名 | 李东阳 |
运行程序截图:
1、

2、

3、用while和do while分别设计程序实现:用公式π/4=1-1/3+1/5-1/7+1/9+...求π的近似值,直到某一项的绝对值小于10-4为止,对两个程序的不同之处进行讨论。




4、设计一个程序,实现功能:逻辑表达式中的运算符,只有会影响表达式求值时,才会执行。


5、用for循环输出六行,第一行有FEDCBA,第二行是FEDCB,第三行是FEDC....,以此类推。


6、编程输入n, 计算s=1+(1+2)+(1+2+3)+…+(1+2+3+4+…n)。


7、用for循环给一组整型类型的数组进行赋值,输出,以及求和,数组长度为8。


8、设计一个if和else的多分支程序(分支数目大于3),该多分支程序再用switch语句进行改写,同时设计一个使用条件运算符(?:)的双分支语句。




9、设计一个循环程序,再循环中用break和continue语句,实现不同的程序效果,给出结果并讨论。


10、设计一个程序求100~200间的全部素数,给出算法思想、传统流程图、程序NS流程图。


传统流程图:
开始
↓
i = 100
↓
i <= 200? → 否 → 结束
↓是
j = 2, flag = 1
↓
j <= sqrt(i)? → 否 → 输出i
↓是
i % j == 0? → 是 → flag = 0, break
↓否
j++
↓
回到j循环判断
↓
i++
↓
回到i循环判断
NS流程图:
┌─────────┐
│ 开始 │
└─────────┘
↓
┌─────────┐
│ i = 100 │
└─────────┘
↓
┌─────────────────┐
│ i <= 200 ? │←──┐
└─────────────────┘ │
↓是 │
┌─────────┐ │
│ j = 2 │ │
│ flag=1 │ │
└─────────┘ │
↓ │
┌─────────────────┐ │
│ j <= sqrt(i) ? │←┐ │
└─────────────────┘ │ │
↓是 │ │
┌─────────────────┐ │ │
│ i % j == 0 ? │ │ │
└─────────────────┘ │ │
↓是 ↓否 │ │
┌───────┐ j++ ──────┘ │
│flag=0 │ │
│ break │ │
└───────┘ │
↓ │
┌─────────────────┐ │
│ flag == 1 ? │ │
└─────────────────┘ │
↓是 │
┌─────────┐ │
│ 输出 i │ │
└─────────┘ │
↓ │
i++ ────────────────┘
算法思想:
遍历100到200之间的所有整数
对每个数,检查是否能被2到其平方根之间的任何整数整除
如果不能被任何数整除,则该数是素数
第6章编程练习:
1、


5、


7、


10、


13、


16、


18、


第7章编程练习:
1、


2、


4、


5、


7、



思考:
通过编写这一系列C语言程序,我对程序设计有了更深入的理解和思考,现将主要收获总结如下:
一、输入输出的复杂性与缓冲区管理
核心认知:输入输出看似简单,实则隐藏着复杂的边界情况。
具体体会:
- 缓冲区问题:在字符替换程序中,最初忽略了换行符的影响,导致替换计数为0。这让我认识到
getchar()会读取所有输入字符,包括换行符。 - 用户交互设计:程序不仅要功能正确,还要考虑用户的使用习惯。比如在工资计算程序中,清晰的提示信息和格式化的输出大大提升了用户体验。
- 错误处理:完善的程序应该能够处理异常输入,如大写字母金字塔程序中对输入范围的检查。
技术收获:
掌握了getchar()、scanf()等输入函数的特点
学会了使用continue跳过不需要处理的字符
理解了标准输入的行缓冲机制
二、循环结构的灵活运用与选择
核心认知:不同的循环结构各有适用场景,正确选择能提升代码质量和效率。
具体体会: - while vs do-while:在π的计算程序中,while循环更自然,因为需要先判断条件;而在数组显示程序中,do-while确保至少执行一次。
- 循环嵌套:字母金字塔程序展示了嵌套循环的强大,外层控制行数,内层控制每行的字符输出。
- 终止条件设计:平方和计算程序通过
while (scanf() == 2 && lower < upper)巧妙处理了多种退出情况。
技术收获:
掌握了break和continue在循环控制中的精确使用
学会了通过循环计数器控制输出格式
理解了循环效率优化(如素数判断中的j <= sqrt(i))
三、算法思维与数学建模
核心认知:程序设计本质上是将实际问题转化为计算机可执行的算法。
具体体会: - 数学模型建立:投资比较程序将金融概念转化为迭代计算模型,清晰展示了单利与复利的区别。
- 算法优化:累加和计算从双重循环优化到数学公式,性能大幅提升。
- 问题抽象:Rabnud博士的朋友增长问题,将社交现象抽象为数学规律。
技术收获:
学会了从实际问题中提取数学模型
理解了时间复杂度与空间复杂度的概念
四、从具体到抽象的思维提升
通过这一系列程序的编写,我实现了几个重要的思维转变: - 从面向过程到面向问题:不再仅仅关注语法细节,而是首先分析问题本质。
- 从实现功能到优化体验:在保证正确性的基础上,考虑程序的易用性和健壮性。
总结
这些程序设计练习不仅巩固了C语言的语法知识,更重要的是培养了计算思维和问题解决能力。每个程序都像是一个小型的工程项目,从需求分析、算法设计、代码实现到测试调试,完整地体验了软件开发的各个环节。这种从理论到实践的转化过程,让我对程序设计有了更深刻和全面的理解。
程序设计既是科学也是艺术——科学在于其严谨的逻辑和算法,艺术在于其优雅的实现和用户体验的考量。这种双重属性正是编程吸引人的魅力所在。