1. 程式人生 > >計算機程式設計C++(第8周基礎練習)

計算機程式設計C++(第8周基礎練習)

計算機程式設計C++ MOOC

測試與作業C++基礎練習100題

##第八週基本練習

本週為陣列與指標的應用

  1. 使用指標輸出陣列元素
    在這裡插入圖片描述
#include "iostream"

using namespace std;

int main()
{
	int a[20], *pa,temp,n=0;
	for (pa = a; pa < a + 20; pa++)
	{
		cin >> temp;
		if (temp == 9999)break;
		*pa = temp;
		n++;
	}
	for (pa = a; pa < a + n-1;pa++)
	{
		cout << *pa << " ";
	}
	cout << *pa;
	return 0;
}
  1. 通過指標輸入輸出陣列元素的函式
    在這裡插入圖片描述
#include "iostream"

using namespace std;

int input(int *p)
{
	int temp, n = 0;
	cin >> temp;
	while (temp != 9999)
	{
		*p = temp;
		p++;
		n++;
		cin >> temp;
	}
	return n;
}

void print(int *p, int n)
{
	cout << *p;
	p++;
	n--;
	while(n)
	{
		cout << " " << *p;
		p++;
		n--;
	}
}

int main()
{
	int a[100],n;
	n = input(a);
	print(a, n);
	return 0;
}
  1. 指標實現字串複製函式
    在這裡插入圖片描述
#include "iostream"

using namespace std;

char *mystrcp(char *s1, char *s2)
{
	int n = 0;
	while (*s2 != '\0')
	{
		*s1 = *s2;
		s1++;
		s2++;
		n++;
	}
	*s1 = *s2;
	return s1-n;
}

int main()
{
	char s1[100], s2[100];
	cin >> s2;
	cout << mystrcp(s1, s2) << endl;
	return 0;
}
  1. 指標實現字串比較
    在這裡插入圖片描述
#include "iostream"

using namespace std;

char trans(char s)
{
	if (s >= 'A'&&s <= 'Z') return s - ('A' - 'a');
	else return s;
}

int mystrcmp(char *s1, char *s2)
{
	while (1)
	{
		if (*s1 == '\0'&& *s2 == '\0')	return 0;
		else if (trans(*s1) > trans(*s2))	return 1;
		else if (trans(*s1) < trans(*s2))	return -1;
		else
		{
			s1++;s2++;
		}
	}
}

int main()
{
	char s1[200], s2[200];
	cin >> s1 >> s2;
	cout << mystrcmp(s1, s2) << endl;
	return 0;
}
  1. 通過指標訪問結構體變數
    在這裡插入圖片描述
#include "iostream"

using namespace std;

struct PERSON
{
	char name[40], gender[10];
	int age;
};

int main()
{
	PERSON a, *pa;
	pa = &a;
	cin >> pa->name;
	cin >> pa->gender;
	cin >> pa->age;
	cout << pa->name << " ";
	cout << pa->gender << " ";
	cout << pa->age;
	return 0;
}
  1. 通過指標訪問結構體陣列
    在這裡插入圖片描述
#include "iostream"

using namespace std;

struct PERSON
{
	char name[40], gender[10];
	int age;
};


int main()
{
	PERSON class_A[50], *pa;
	pa = class_A;
	cin >> pa->name;
	cin >> pa->gender;
	cin >> pa->age;
	while (pa->name!= "0" && pa->gender!= "0" && pa->age!=0)
	{
		pa++;
		cin >> pa->name;
		cin >> pa->gender;
		cin >> pa->age;
	}
	pa = pa - 1;
	while(pa >= class_A)
	{
		cout << pa->name << " ";
		cout << pa->gender << " ";
		cout << pa->age << endl;
		pa--;
	}
	return 0;
}
  1. 動態申請變數
    在這裡插入圖片描述
#include "iostream"

using namespace std;

int main()
{
	int *a = new int;
	int *b = new int;
	int *c = new int;
	cin >> *a >> *b >> *c;
	cout << *a + *b + *c << endl;
	delete a, b, c;
	return 0;

}
  1. 動態申請陣列
    在這裡插入圖片描述
#include "iostream"

using namespace std;

int main()
{
	int n;
	cin >> n;
	double *a = new double[n];
	double *p = a;
	cin >> *p;
	while (*p!=9999)
	{
		p++;
		cin >> *p;
	}
	p--;
	while (p > a)
	{
		cout << *p << " ";
		p--;
	}
	cout << *p;
	delete[]a;
	return 0;
}
  1. 動態申請結構體陣列
    在這裡插入圖片描述
#include "iostream"

using namespace std;

struct PERSON
{
	char name[40], gender[10];
	int age;
};

int main()
{
	int n;
	cin >> n;
	PERSON *class_A=new PERSON[n];
	PERSON *pa;
	pa = class_A;
	cin >> pa->name;
	cin >> pa->gender;
	cin >> pa->age;
	while (pa->name != "0" && pa->gender != "0" && pa->age != 0)
	{
		pa++;
		cin >> pa->name;
		cin >> pa->gender;
		cin >> pa->age;
	}
	pa = pa - 1;
	while (pa >= class_A)
	{
		cout << pa->name << " ";
		cout << pa->gender << " ";
		cout << pa->age << endl;
		pa--;
	}
	delete[]class_A;
	return 0;
}
  1. 動態申請結構體陣列空間和結構體陣列複製
    在這裡插入圖片描述
#include "iostream"

using namespace std;

struct PERSON
{
	char name[40], gender[10];
	int age;
};

int main()
{
	int n,real=0;
	cin >> n;
	PERSON *class_A=new PERSON[n];
	PERSON *pa,*pb;
	pa = class_A;
	cin >> pa->name;
	cin >> pa->gender;
	cin >> pa->age;
	real++;
	while (pa->name != "0" && pa->gender != "0" && pa->age != 0)
	{
		pa++;
		real++;
		cin >> pa->name;
		cin >> pa->gender;
		cin >> pa->age;
	}
	pa = pa - 1;
	real = real - 1;
	PERSON *class_B = new PERSON[real];
	pb = class_B;
	while (pa >= class_A)
	{
		*pb = *pa;
		pa--;
		pb++;
	}
	for (pb = class_B; pb < (class_B + real); pb++)
	{
		cout << pb->name << " " << pb->gender << " " << pb->age << endl;
	}
	delete[]class_A,class_B;
	return 0;
}

以上為第八週的基礎練習。