计算机程序设计C++ MOOC(第8周编程作业)

本博客内容为中国大学生MOOC国家精品课程《计算机程序设计C++》作业记录,仅供参考,观者忌照搬照抄,欢迎交流批评指正!

(注:由于本人学习时,前八周的作业提交时间已过,因此这八周的作业代码只在自己的编译器上测试运行通过,在课程网站上还未测试,于下学期开课时,再另行测试,如您发现有明显错误,可留言评论)

##第8周编程作业

本周作业为动态数组的使用

  1. 输出数字的英文名称
    计算机程序设计C++ MOOC(第8周编程作业)_第1张图片
#include

using namespace std;

char *a[13] = { "zero","one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten","eleven","twelve"};

char *digitName(int n)
{
	return a[n];
}

int main()
{
	int n;
	cin >> n;
	if (n < 0 || n > 12)return 0;
	cout << digitName(n);
	return 0;
}
  1. 去除字符串首尾多余的空格
    计算机程序设计C++ MOOC(第8周编程作业)_第2张图片
//本题注意在gcc编译器上 不能写 char *a =new char[],必须给一个长度
#include

using namespace std;

char *deletespace(char *a)
{
	int i = 0, j = 0, n = 0;
	//i是记录原字符第一个不为空格字符下标,j是最后一个不为空格字符的下标
	//n是原字符指针长度,
	while (a[i] == ' ')
	{
		i++;
	}
	while (a[n] != '\0')//计算包括#在内的字符长度
	{
		n++;
	}
	j = n - 2;//将j定位到#前一位置
	while (a[j] == ' ')
	{
		j--;//找到最后一个不为零的字符
	}
	int length=j-i+2; 
	char *d=new char[length];
	int k = 0;
	for (k = 0; k < j - i + 1; k++)
	{
		d[k] = a[k + i];
	}
	d[k] = '#';
	d[k + 1] = '\0';
	return d;
}

int main()
{
	char *a=new char[100];
	cin.getline(a, 100);
	cout << deletespace(a);
	return 0;
}
  1. 遍历二维数组
    计算机程序设计C++ MOOC(第8周编程作业)_第3张图片
#include

using namespace std;

int main()
{
	int m, n,sum=0;
	cin >> m >> n;
	int **matrix = new int *[m];//动态申请
	for (int i = 0; i < m; i++)
	{
		matrix[i] = new int[n];
	}
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> matrix[i][j];
			sum += matrix[i][j];
		}
	}
	for (int i = 0; i < n; i++)//反序释放
	{
		delete[]matrix[i];
	}
	delete[]matrix;
	cout << sum;
	return 0;
}
  1. 动态申请大数组
    计算机程序设计C++ MOOC(第8周编程作业)_第4张图片
#include

using namespace std;

int *new_array(int n)
{
	int *a = new int[n];
	return a;
}

void init_array(int *p, int n, int c)
{
	for (int i = 0; i < n; i++)
		p[i] = c;
	return;
}

int main()
{
	int n, c,i;
	cin >> n >> c;
	int *a;
	a = new_array(n);
	init_array(a, n, c);
	for (i = 0; i < n-1; i++)
	{
		cout << a[i]<<' ';
	}
	cout << a[i];
	return 0;
}
  1. 矩阵对角线元素之和
    计算机程序设计C++ MOOC(第8周编程作业)_第5张图片
#include

using namespace std;

int sumDiagonal(int **a, int n)
{
	int sum = 0;
	for (int i = 0; i < n; i++)
	{
		sum += a[i][i];
	}
	return sum;
}

int main()
{
	int n;
	cin >> n;
	int **matrix = new int *[n];//动态申请
	for (int i = 0; i < n; i++)
	{
		matrix[i] = new int[n];
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> matrix[i][j];
		}
	}
	cout << sumDiagonal(matrix, n);
	for (int i = 0; i < n; i++)//反序释放
	{
		delete[]matrix[i];
	}
	delete[]matrix;
	return 0;
}
  1. 十进制点分IP转换为32位二进制IP
    计算机程序设计C++ MOOC(第8周编程作业)_第6张图片
#include

using namespace std;

bool judge(int *a, int n)
{
	for (int i = 0; i < n; i++)
	{
		if (a[i] > 255 || a[i] < 0) { return false; }
	}
	return true;
}

void trans10_2(int &n)
{
	int mul = 1, sum = 0;
	while (n)
	{
		sum += mul*(n % 2);
		mul *= 10;
		n /= 2;
	}
	n = sum;
	return;
}

int main()
{
	int a[4];
	scanf("%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3]);
	if (!judge(a, 4))
	{
		printf("data error"); return 0;
	}
	for (int i = 0; i < 4; i++)
	{
		trans10_2(a[i]);
		printf("%08d", a[i]);
	}
	return 0;
}

以上为第8周的编程作业。

你可能感兴趣的:(计算机程序设计C++)