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

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

##第8周编程作业

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

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

using namespace std;

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

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

int main()
{
	int n;
	cin >> n;
	if (n <= 0 || n > 12)return 1;
	cout << digitName(n);
	return 0;
}
  1. 去除字符串首尾多余的空格
    计算机程序设计C++ MOOC(第8周编程作业)
#include<iostream>

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--;//找到最后一个不为零的字符
	}
	char *d = new char[]; 
	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[];
	cin.getline(a, 100);
	cout << deletespace(a);
	return 0;
}
  1. 遍历二维数组
    计算机程序设计C++ MOOC(第8周编程作业)
#include<iostream>

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周编程作业)
#include<iostream>

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周编程作业)
#include<iostream>

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周编程作业)
#include<iostream>

using namespace std;

bool judge(int *a,int n)
{
	for (int i = 0; i < n; i++)
	{
		if (a[i] > 255 || a[i] < 0) { printf("data erro"); 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)) return -1;
	for (int i = 0; i < 4; i++)
	{
		trans10_2(a[i]);
		printf("%08d", a[i]);
	}
	return 0;
}

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

相关文章: