高级语言程序设计作业 11/11

1

#include <iostream>

using namespace std;

#define ROWS 3
#define COLS 5

int main()
{
	int arr[ROWS][COLS] =
	{
		{ 1, 2, 3, 4, 5 },
		{ 20, 21, 22, 23, 24 },
		{ 6, 7, 8, 9, 10}
	};
	int (*p)[COLS] = arr;     // 指向二维数组的指针

	// 数组下标访问元素
	for (int i = 0; i < ROWS; i++)
	{
		for (int j = 0; j < COLS; j++)
		{
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}

	// 指针访问元素
	for (int i = 0; i < ROWS; i++)
	{
		for (int j = 0; j < COLS; j++)
		{
			cout << *(*(p + i) + j) << " ";
		}
		cout << endl;
	}

	return 0;
}

2

#include <iostream>

using namespace std;

int main()
{
	int n;
	scanf_s("%d", &n);

	// 声明并初始化n阶二维数组。
	int** arr = (int**)malloc(n * sizeof(int*));
	for (int i = 0; i < n; i++)
	{
		arr[i] = (int*)malloc(n * sizeof(int));
		for (int j = 0; j < n; j++)
			arr[i][j] = -1;
	}

	int val = 1;            // 当前元素值
	int startRow = 0,       // 此轮(上右下左一次)从几行开始?
		startCol = 0;       // 此轮 从第几列开始?
	int length = n;         // 此轮 上边遍历的次数?

	while (length > 2)      // 到最后一轮,上边遍历2次,右边下边遍历1次,左边遍历0次(无需遍历)。
	{
		// 上
		for (int j = startRow; j < length; j++)
		{
			arr[startCol][j] = val++;
		}

		// 右
		for (int i = startRow + 1; i < length; i++)
		{
			arr[i][length - 1] = val++;
		}

		// 下
		for (int j = length - 1 - 1; j >= startCol; j--)
		{
			arr[length - 1][j] = val++;
		}

		// 左
		for (int i = length - 1 - 1; i >= startRow + 1; i--)
		{
			arr[i][startCol] = val++;
		}

		startRow++;
		startCol++;
		length--;
	}

	// 打印
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}

3

#include <iostream>

using namespace std;

void calcGrade(int (*p)[7], int students);

int main()
{
	int grades[3][7] =
	{
		{ 0, 90, 86, 45, 79, 87, 99 },
		{ 0, 99, 86, 65, 80, 75, 89 },
		{ 0, 98, 87, 76, 81, 70, 93 },
	};

	// 求和并加到[0]中
	calcGrade(grades, 3);

	// 打印
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 7; j++)
		{
			printf("%d ", grades[i][j]);
		}
		printf("\n");
	}

	return 0;
}

void calcGrade(int (*p)[7], int students)
{
	for (int i = 0; i < students; i++)
	{
		int sum = 0;
		for (int j = 1; j < 7; j++)
		{
			sum += p[i][j];
		}

		p[i][0] = sum;
	}
}

4

#include <iostream>

using namespace std;

int main()
{
	int a;                // 定义一个int类型的本地变量a。
	int* a;				  // 定义一个int类型的野指针变量a。
	int** a;			  // 定义一个指向int类型指针的野指针变量a。
	int a[10];			  // 定义一个含有10个元素的数组a。
	int (*a)[10];		  // 定义一个指向一个 每个元素含有10个元素 的数组 的指针变量a。

	return 0;
}

5

#include <iostream>

using namespace std;

int main()
{
	int src[3][5] =
	{
		{ 1, 2, 3, 4, 5 },
		{ 6, 7, 8, 9, 10 },
		{ 21, 22, 23, 24, 25 }
	};
	int dest[3][5];

	int* psrc = src[0];
	int* pdest = dest[0];
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			*(pdest + i * 5 + j) = *(psrc + i * 5 + j);
		}
	}

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			cout << dest[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}

6

#include <iostream>

using namespace std;

int mystrlen(char* str);

int main()
{
	char str[] = "Hello world!";
	int length = mystrlen(str);
	cout << "Length of 'Hello world!' is: " << length << endl;
	return 0;
}

int mystrlen(char* str)
{
	char* p = str;
	int length = 0;
	while (*p++ != '\0')
	{
		length++;
	}
	return length;
}

7

#include <iostream>

using namespace std;

int main()
{
    int a[3][4] = { 0 };

    printf("%d\n", sizeof(a));                     // 二维数组所有元素的占用字节之和,共3x4个int元素,每个int元素占用4个字节,共3x4x4=48字节。

    printf("%d\n", sizeof(a[0][0]));               // 第一行第一列元素占用4字节。

    printf("%d\n", sizeof(a[0]));                  // 第一行所有元素占用字节之和,共4x4=16字节。

    printf("%d\n", sizeof(a[0] + 1));              // `a[0] + 1`实际上是一个int指针,求的是指针的大小,8字节。

    printf("%d\n", sizeof(*(a[0] + 1)));           // `*(a[0] + 1)`是第一行第二个元素值,int值的大小为4字节。

    printf("%d\n", sizeof(a + 1));                 // `a + 1`指向二维数组的第二行,但本身仍是一个指针,8字节。

    printf("%d\n", sizeof(*(a + 1)));              // `*(a + 1)`解引用第二行,整行共4x4=16字节。

    printf("%d\n", sizeof(&a[0] + 1));             // 等价于`a + 1`。

    printf("%d\n", sizeof(*(&a[0] + 1)));          // 等价于`*(a + 1)`。

    printf("%d\n", sizeof(*a));                    // `*a`解引用第一行,整行4x4=16字节。

    printf("%d\n", sizeof(a[3]));                  // `a[3]`指向二维数组后面的4个int值,因此4x4=16字节。但索引超出界限,存在安全隐患。

	return 0;
}

8

#include <iostream>

using namespace std;

int main()
{
	char str[30];
	cout << "Please enter a string (1 <= length < 30): " << endl;
	scanf_s("%s", str, sizeof(str));

	int m;
	cout << "Please enter the start index to copy: " << endl;
	scanf_s("%d", &m);

	char newStr[30] = { 0 };
	int i;
	for (char* pch = str + m - 1, i = 0; *pch; pch++, i++)
	{
		newStr[i] = *pch;
	}
	cout << "Copied: "<< newStr << endl;

	return 0;
}

posted @ 2024-11-11 18:11  _vertigo  阅读(11)  评论(0编辑  收藏  举报