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

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C
这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13304
学号:102300107
姓名:陈沁怡

(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

`#include <stdio.h>
int main() {
int N;
scanf("%d", &N);
int matrix[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
matrix[i][j] = 0;
}
}
int directions[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int x = 0, y = 0, dir = 0;
int value = 1;
while (value <= N * N) {
matrix[x][y] = value++;
int next_x = x + directions[dir][0];
int next_y = y + directions[dir][1];
if (next_x >= 0 && next_x < N && next_y >= 0 && next_y < N && matrix[next_x][next_y] == 0) {
x = next_x;
y = next_y;
} else {
dir = (dir + 1) % 4;
x += directions[dir][0];
y += directions[dir][1];
}
}

for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
        printf("%3d", matrix[i][j]);
    }
    printf("\n");
}
return 0;

}
`


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

include <stdio.h>

// 函数:计算每个学生的总成绩并存储在第0列
void calculateTotalScores(int score[][8], int N) {
for (int n = 0; n < N; n++) {
int total = 0;
// 计算该学生7门课程的成绩总和
for (int i = 1; i <= 7; i++) {
total += score[n][i];
}
// 将总成绩存放在第0列
score[n][0] = total;
}
}
int main() {
int N = 5; // 假设有5个学生
// 模拟成绩数据,成绩数据包括总成绩列 (score[n][0]) 和7门课程成绩 (score[n][1] 到 score[n][7])
int score[5][8] = {
{0, 80, 85, 90, 75, 88, 92, 85}, // 第0列将会是总成绩
{0, 70, 75, 80, 85, 90, 78, 88},
{0, 88, 92, 86, 79, 83, 91, 87},
{0, 65, 72, 78, 84, 82, 88, 90},
{0, 95, 91, 89, 84, 90, 93, 91}
};
calculateTotalScores(score, N);
// 输出每个学生的总成绩和各科成绩
printf("学号 总成绩 课程1 课程2 课程3 课程4 课程5 课程6 课程7\n");
for (int n = 0; n < N; n++) {
printf("%d %d %d %d %d %d %d %d %d\n",
n + 1, score[n][0], score[n][1], score[n][2], score[n][3],
score[n][4], score[n][5], score[n][6], score[n][7]);
}
return 0;
}

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

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

(a)含义:声明了一个普通的整型变量 a,它可以存储一个整数值。
(b)含义:声明了一个指向整数类型的指针 a。
(c)含义:声明了一个指向指针的指针 a,它指向一个 int* 类型的变量。
(d)含义:声明了一个包含10个整数的数组 a。
(e)含义:声明了一个指向包含10个整数的数组的指针 a。
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]));)

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

sizeof(a)返回整个二维数组a的大小。
数组a的类型是int[3][4],即3行4列,总共12个int元素。每个int占4字节,所以总大小为12 * 4 = 48字节。
输出:48
printf("%d\n", sizeof(a[0][0]));

a[0][0]是数组中的一个元素,类型是int。
sizeof(a[0][0])即sizeof(int),通常int占4字节。
输出:4
printf("%d\n", sizeof(a[0]));

a[0]是a的第一行,即一个包含4个int元素的数组。a[0]的类型是int[4]。
sizeof(a[0])返回的是这一行数组的大小。4个int元素,每个int占4字节,所以大小是4 * 4 = 16字节。
输出:16
printf("%d\n", sizeof(a[0] + 1));

a[0] + 1是a[0]数组的第二个元素,即a[0][1]的地址。此时,a[0] + 1的类型是int
sizeof(a[0] + 1)即sizeof(int
),int通常占4字节(在32位系统上),也可能是8字节(在64位系统上)。
假设是32位系统,输出:4
printf("%d\n", sizeof(
(a[0] + 1)));

(a[0] + 1)解引用a[0] + 1,即访问a[0][1]。
sizeof(
(a[0] + 1))即sizeof(a[0][1]),它是int类型。
因为int通常占4字节,所以输出:4
printf("%d\n", sizeof(a + 1));

a + 1是a数组的第二行的地址,类型是int[4],指向a[1]的地址。
sizeof(a + 1)即sizeof(int(
)[4]),这是指向包含4个int元素的数组的指针。
int()[4]通常占4字节(在32位系统上),也可能是8字节(在64位系统上)。
假设是32位系统,输出:4
printf("%d\n", sizeof(
(a + 1)));

(a + 1)是解引用a + 1,即a[1],它是int[4]类型的数组。
sizeof(
(a + 1))即sizeof(a[1]),它是包含4个int元素的数组的大小。
a[1]的大小是4 * 4 = 16字节。
输出:16
printf("%d\n", sizeof(&a[0] + 1));

&a[0]是数组a第一行的地址,它的类型是int()[4]。
&a[0] + 1是a[1]的地址,类型依然是int(
)[4]。
sizeof(&a[0] + 1)即sizeof(int()[4]),这是指向一个包含4个int元素的数组的指针,通常占4字节(在32位系统上)。
假设是32位系统,输出:4
printf("%d\n", sizeof(
(&a[0] + 1)));

&a[0] + 1指向a[1],(&a[0] + 1)即a[1],它是int[4]类型的数组。
sizeof(
(&a[0] + 1))即sizeof(a[1]),它是包含4个int元素的数组的大小。
a[1]的大小是4 * 4 = 16字节。
输出:16
printf("%d\n", sizeof(*a));

a是a的第一行,即a[0],它是int[4]类型的数组。
sizeof(
a)即sizeof(a[0]),它是包含4个int元素的数组的大小。
a[0]的大小是4 * 4 = 16字节。
输出:16
printf("%d\n", sizeof(a[3]));

a[3]是a的第四行,类型是int[4]。
然而,数组a只有3行,因此访问a[3]会越界。
根据C语言标准,sizeof(a[3])的结果依然是有效的,它会返回int[4]的大小,即4 * 4 = 16字节。
输出:16
(8)键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len),将此字符串中从第 m 个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针处理字符串。

posted @ 2024-11-16 13:23  AAA卡皮巴拉  阅读(1)  评论(0编辑  收藏  举报