高级语言程序第六次作业

这个作业属于哪个课程 2025高级语言程序设计 (福州大学)
这个作业的要求在哪里 高级语言程序设计课程第六次个人作业
学号 102300317
姓名 李东阳

(1)设计一个按值传递和按地址传递呈现不同效果的程序。
image
image

(2)编写函数fun(int m, int *k, int xx[]),将小于整数m的非素数存入xx数组中,个数由k返回。
image
image

(3)编写函数,将长度为n的字符串从第m个字符开始的全部字符复制成另一个字符串。
image
image

(4)编写函数用冒泡法将数组按从小到大的顺序排列。
image
image

(5)将n个整数按输入顺序的逆序排列,要求应用带指针参数的函数实现。
image
image

(6)写一个函数打印arr数组的内容,不使用数组下标,使用指针。
image
image

(7)编写程序,分别找出多个n×m数组的最大值、最小值,并输出两个值的下标。
image
image

(8)判断上三角矩阵。上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
image
image

(9)给定一个按升序排列的二维数组,编写一个函数来判断目标值是否存在于数组中。数组是一个m x n的矩阵,可使用算法快速查询。
image
image

(10)编写一个函数,输入一个整数,将其分解为两个质数之和。提示:函数可以声明为int split(int n, int *a, int *b)。n作为传入参数,a和b作为传出参数。若无法分解返回0,可以分解则返回1。
image
image

(11) 编写函数void shift(char* s, int n),请原地将字符串s循环左移n次。例如,字符串“hello”左移3次得到“lohel”。
image
image

(12)写一个程序读入一个二维整型数组并判断它是否为魔方矩阵。在魔方阵中,所有的行、列和对角线都拥有相同的和。
image
image
image

(13)利用指针,判断两个字符串是否相等。忽略大小写。例如,输入 “hello”和”hELlO”,认为它们是相等的。返回值:1表示相等。0表示不同)。
image
image

(14)定义一个一维数组和二维数组,按顺序打印出数组中每个元素的地址。
image
image

(15)设计一个分别使用数组名和指针引用数组元素的程序。
image
image

思考

  1. 指针与内存管理
    核心理解
    指针是C语言的灵魂,它直接操作内存地址,提供了高效的数据访问方式。
    关键收获
  • 按值传递 vs 按地址传递:按值传递创建副本,不影响原数据;按地址传递直接修改原数据
  • 指针运算:ptr++移动的是整个数据类型的大小,而非单个字节
  • 数组名本质:数组名是首元素地址的常量指针(arr ≡ &arr[0]

重要认知
c
// 这两种访问方式是等价的
arr[i] ≡ *(arr + i)
&arr[i] ≡ arr + i

  1. 字符串处理技巧
    核心算法
    三步反转法用于字符串循环移位:
    c
    void shift(char *s, int n) {
    reverse(s, 0, n-1); // 反转前n个
    reverse(s, n, len-1); // 反转剩余
    reverse(s, 0, len-1); // 整体反转
    }

重要细节

  • 字符串必须以'\0'结尾
  • 指针移动时要注意边界检查
  • 忽略大小写比较时使用tolower()/toupper()
  1. 数组与矩阵操作
    多维数组理解
    二维数组在内存中仍然是线性存储的:
    c
    matrix[i][j] ≡ *(matrix + i * cols + j)

算法优化

  • 二分查找应用于有序二维数组时,可以将其视为一维数组
  • 魔方矩阵检查需要验证行、列、对角线之和相等
  • 上三角矩阵只需检查主对角线以下的元素
  1. 质数相关算法
    c
    int is_prime(int num) {
    if (num <= 1) return 0;
    if (num == 2) return 1;
    if (num % 2 == 0) return 0;

    // 只需检查到sqrt(num),且跳过偶数
    for (int i = 3; i <= sqrt(num); i += 2) {
    if (num % i == 0) return 0;
    }
    return 1;
    }

哥德巴赫猜想应用
将偶数分解为两个质数之和,只需检查到n/2即可。
5. 编程范式与最佳实践
函数设计原则
单一职责:每个函数只完成一个明确的任务
明确接口:参数和返回值意义明确
错误处理:考虑边界情况和异常输入

指针使用规范
c
// 好的实践:明确指针用途
void fun(int m, int *k, int xx[]) // k: 输出参数,xx: 输出数组
int split(int n, int *a, int *b) // a,b: 输出参数

  1. 重要技术点总结
    内存地址理解
  • 一维数组元素地址连续
  • 二维数组按行优先存储
  • 指针运算基于数据类型大小

测试策略
c
// 应测试各种边界情况

  • 空数组/空字符串
  • 单个元素
  • 最大值/最小值
  • 已排序/逆序数据
  1. 性能与可读性平衡
    性能优化
  • 避免不必要的函数调用
  • 减少循环嵌套层数
  • 使用局部变量代替重复计算

代码可读性

  • 有意义的变量名和函数名
  • 适当的注释说明算法思路
  • 合理的代码结构和缩进

总结
通过这些编程练习,我深刻体会到C语言的强大和灵活。指针提供了直接操作内存的能力,但也要求程序员对内存管理有清晰的认识。良好的编程习惯、严谨的边界检查、合理的算法选择是编写高质量C程序的关键。
C语言的学习是一个循序渐进的过程,从语法基础到底层原理,每一步都需要扎实掌握。这些练习不仅巩固了基础知识,更重要的是培养了系统思维和问题分解的能力,这是编程能力的核心所在。

posted @ 2025-11-24 17:02  102300317-李东阳  阅读(0)  评论(0)    收藏  举报