高级语言程序设计课程第七次个人作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C/

这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13304

学号:102400102

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

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

输入格式:

输入在一行中给出一个正整数N(<10)。

输出格式:

输出N×N的螺旋方阵。每行N个数字,每个数字占3位。

输入样例:

5

输出样例:

1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9
问题:不太会这个,上网搜了一下

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

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

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


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

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

问题:不会用字符串指针,后来上网查了
(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]));)

  1. printf("%d\n",sizeof(a));
    输出整个二维数组a的大小。因为a是一个3行4列的数组,所以它的大小是3 * 4 * sizeof(int),int型占4个字节
  2. printf("%d\n",sizeof(a[0][0]));
    因为a[0][0]是一个int类型的元素,所以它的大小是4个字节
  3. printf("%d\n",sizeof(a[0]));
    输出二维数组中第一行的大小。所以是4*4=16
  4. printf("%d\n",sizeof(a[0]+1));
    输出指向a[0]数组第二个元素的指针的大小。这不是一个数组,而是一个指针,所以它的大小是8
  5. printf("%d\n",sizeof((a[0]+1)));
    输出a[0]数组第二个元素的大小,
    (a[0]+1)解引用了指针,得到int类型的值,所以它的大小是4
  6. printf("%d\n",sizeof(a+1));
    输出指向a数组第二个行的指针的大小。a+1移动到下一行的开始,所以它的大小是8
  7. printf("%d\n",sizeof((a+1)));
    输出a数组第二行的大小。*(a+1)解引用了指针,得到第二行的数组,所以它的大小是4
    4=16
  8. printf("%d\n",sizeof(&a[0]+1));
    这里错误。&a[0]是一个指向数组的指针,&a[0]+1尝试将指针增加1,但这不是一个有效的操作,因为&a[0]`不是一个数组元素的指针,而是一个指向整个数组的指针。这个表达式是未定义行为,不应该在C语言中使用。
  9. printf("%d\n",sizeof(*(&a[0]+1)));
    同上,这也是未定义行为,因为&a[0]+1是不合法的。
  10. printf("%d\n",sizeof(*a));
    输出a数组的第一行的大小。*a解引用了指针,得到第一行的数组,所以它的大小是4 *4=16
  11. printf("%d\n",sizeof(a[3])); 这里有一个越界错误。a[3]尝试访问数组a`的第四行,但数组只有三行。这是一个越界访问
    问题:一开始不知道指针的字节是8位,上网查了
    (8)键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len),将此字符串中从第 m 个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针处理字符串。

    总结:对指针用法仍未掌握,还需要多加练习
posted @ 2024-11-15 23:11  方韵希  阅读(10)  评论(0编辑  收藏  举报