高级语言程序第七次作业

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

(1)定义一个二维数组和指向该数组的指针,分别以数组下标和指针的形式引用数组各个元素进行赋值与输出。
image
image

(2)构造螺旋方阵。对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。
image
image

(3)7门课程的成绩分别存放在score[n][1]、score[n][2]、...、score[n][7]中,第0列用来存放总成绩。请编写一个函数实现计算成绩表score中每一个学生7门课程的总成绩,并将总成绩存放在该学生的第0列中。请在main函数中构造数据测试你写的函数。
image
image

(4)将以下定义的含义写出来。

     a)int a;  b)int *a;  c)int **a;  d)int a[10];  e)int (*a)[10];

a) int a; // 定义一个整型变量a
b) int a; // 定义一个指向整型的指针变量a
c) int **a; // 定义一个指向整型指针的指针变量a(二级指针)
d) int a[10]; // 定义一个包含10个整型元素的数组a
e) int (
a)[10]; // 定义一个指向包含10个整型元素的数组的指针a

(5)给定一个二维数组,使用指针把数组中的数字复制到另一个数组中相同的位置。
image
image

(6)请编写一个函数,接受一个字符串指针作为参数,并返回该字符串的长度,不包括字符串结尾的空字符。
image
image

(7)输出以下内容,并解释每一个输出内容的含义。

          int a[3][4] = {0};

          printf("%d\n",sizeof(a));

          printf("%d\n",sizeof(a[0][0]));

          printf("%d\n",sizeof(a[0]));

          printf("%d\n",sizeof(a[0]+1));

          printf("%d\n",sizeof(*(a[0]+1)));

          printf("%d\n",sizeof(a+1));

          printf("%d\n",sizeof(*(a+1)));

          printf("%d\n",sizeof(&a[0]+1));

          printf("%d\n",sizeof(*(&a[0]+1)));

          printf("%d\n",sizeof(*a));

          printf("%d\n",sizeof(a[3]));)

image
image

(8)键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len),将此字符串中从第 m 个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针处理字符串。
image
image

总结:
一、核心区别

  • 数组名:大多数情况退化为指针,但sizeof(数组名)&数组名除外
  • 二维数组:是“数组的数组”,内存连续

二、必记公式
c
a[i][j] = *(a[i] + j) = ((a + i) + j)

三、sizeof关键
c
int a[3][4];
sizeof(a) = 48 // 整个数组:3×4×4
sizeof(a[0]) = 16 // 一行:4×4
sizeof(a+1) = 8 // 指针大小(退化)

四、螺旋矩阵套路
c
while(num <= N*N) {
上边界:左→右,top++
右边界:上→下,right--
下边界:右→左,bottom--
左边界:下→上,left++
}

五、易错点

  1. 字符串:必须加\0
  2. 边界:数组别越界
  3. 类型:int (*p)[4]int **p

六、实用技巧
c
// 遍历二维数组的指针写法
for(int *p = &a[0][0]; p <= &a[N-1][M-1]; p++) {
*p = ...;
}

posted @ 2025-12-01 18:24  102300317-李东阳  阅读(3)  评论(0)    收藏  举报