学习笔记《计算机程序设计C++》第8周基础练习

第8周基础练习

依照学术诚信条款,我保证此作业是本人独立完成的。

温馨提示:

1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

1使用指针输出数组元素(10分)
题目内容:

编写程序,定义大小为20的整型数组,通过指针输入数组元素(9999为结束标志),数据超过20时只接收前20个。通过指针输出数组元素,用空格隔开。

输入:一行中输入若干整数,用空格隔开,9999表示结束。

输出:一行中输出数组元素,用一个空格隔开,末尾无空格。

【注意】本题输入输出不是问题,关键是要用指针操作。除定义数组外,后面的程序中不应出现下标运算。

样例1输入:

1 2 3 4 5 9999

样例1输出:

1 2 3 4 5

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int const N = 20;
int a[N];
int input(int *p) {
	int n = 0;
	cin >> *p;
	while (*p != 9999) {
		if (++n == N)break;
		cin >> *(++p);
	}
	return n;
}
void print(int *p, int n) {
	cout << *p++;
	n--;
	while (n) {
		if (*p == 9999)break;
		cout << " " << *p++;
		n--;
	}
}
int main() {
	print(a, input(a));
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 236kb
5
用例2通过 2ms 368kb
5
提交答案本次得分/总分:10.00/10.00分
2通过指针输入输出数组元素的函数(10分)
题目内容:

编写两个函数,分别通过指针输入输出数组元素。编写主函数,定义数组,调用函数输入、输出数组元素。输入结束标志位9999,输出数据在一行中用空格隔开,末尾无空格。数据个数不超过100个。函数格式如下:

int input(int *p); //输入,返回输入的元素个数

void print(int *p,int n); //显示数组元素,n为元素个数

输入:一行中输入若干整数,用空格隔开,9999表示结束。

输出:一行中输出数组元素,用一个空格隔开,末尾无空格。

【注意】本题一要用函数,二要用指针,函数中不出现下标运算。主函中数组的定义仍可以用静态数组。

样例1输入:

1 2 3 4 5 9999

样例1输出:

1 2 3 4 5

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int const N = 120;
int a[N];
int input(int *p) {
	int n = 0;
	cin >> *p;
	while (*p != 9999) {
		if (++n == N)break;
		cin >> *(++p);
	}
	return n;
}
void print(int *p, int n) {
	cout << *p++;
	n--;
	while (n) {
		if (*p == 9999)break;
		cout << " " << *p++;
		n--;
	}
}
int main() {
	print(a, input(a));
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 15ms 256kb
5
用例2通过 2ms 360kb
5
提交答案本次得分/总分:10.00/10.00分
3指针实现字符串复制函数(10分)
题目内容:

编写字符串复制的函数,用指针实现。函数格式为:

char * mystrcpy(char *s1,char *s2); //将s2中的内容复制到s1中,返回s1首地址。

编写主函数,输入字符串到s2中,调用函数实现复制,直接输出复制结果。函数调用格式如下:

cout<

字符串长度不超过100,函数中不出现下标运算,不使用字符串处理库函数,不使用string类。

输入:一个字符串

输出:一个字符串

【注意】本题的输入、输出相同,结果不是问题,关键一是用指针,二是用函数,三是返回指针,四是利用了返回的指针。

样例1输入:

copy

样例1输出:

copy

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int const N = 120;
char * mystrcpy(char *s1, char *s2){
	char *p = s1;
	while (*s2)*(s1++) = *(s2++);
	*s1 = '\0';
	return p;
}
int main() {
	char *str1 = new char[N], 
		 *str2 = new char[N];
	cin >> str2;
	str1 = mystrcpy(str1, str2);
	cout << str1;
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 380kb
5
用例2通过 2ms 256kb
5
提交答案本次得分/总分:10.00/10.00分
4指针实现字符串比较(10分)
题目内容:

编写函数,用指针实现字符串的比较,不区分大小写,若s1>s2返回1,若s1

int mystrcmp(char *s1,char *s2);

在主函数中定义字符数组,输入字符串,调用函数进行比较,在主函数中输出结果。

注意,必须用字符数组和指针,函数中不出现下标运算,不能使用字符串处理库函数,也不能使用string类。字符串的长度不超过200.

输入:两个英文字符串,用空格隔开。

输出:1,0,或-1

【提示】关于不区分大小写,即"ABC"和"abc"被认为是相同的。实现方法是在比较字符时,如果是字母,将它们转为小写或大写(用一个函数实现,但不改变原字符),再比较。

【注意】本题的关键是用函数和指针实现。还有就是不区分大小写。

样例1输入:

abc ABC

样例1输出:

0

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int const N = 120;
int mystrcmp(char *s1, char *s2){
	int bl = 0;
	char*a = s1, *b = s2;
	while (*a && *b) {
		if (*a < 'a')*a += 32;
		if (*b < 'a')*b += 32;
		if (*a - *b) break;
		a++;b++;
	}
	bl = *a - *b;
	if (bl < 0)bl = -1;
	if (bl > 0)bl = 1;
	return bl;
}
int main() {
	char *str1 = new char[N], 
		 *str2 = new char[N];
	cin >> str2 >> str1;
	cout << mystrcmp(str2, str1);
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 380kb
2
用例2通过 2ms 228kb
2
用例3通过 2ms 372kb
1
用例4通过 3ms 364kb
1
用例5通过 2ms 376kb
1
用例6通过 3ms 364kb
1
用例7通过 3ms 360kb
1
用例8通过 3ms 360kb
1
提交答案本次得分/总分:10.00/10.00分
5通过指针访问结构体变量(10分)
题目内容:

定义结构体PERSON表示一个人的基本信息,成员包含姓名(char),性别(char),年龄(int)。在主函数中定义结构体变量,通过指针输入一个人的信息,通过指针输出这个人的信息。

输入:姓名、性别、年龄,用空格隔开。

输出:姓名、性别、年龄,用空格隔开,末尾无空格。

样例1输入:

Zhang male 20

样例1输出:

Zhang male 20

【参考程序】

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int const N = 120;
struct PERSON {
	char name[40], gender[10];int age;
};
int main() {
	PERSON one;
	PERSON *p = &one;
	cin >> p->name >> p->gender >> p->age;
	cout<< p->name <<" "<< p->gender << " " << p->age << "\n" ;
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 14ms 360kb
10
提交答案本次得分/总分:10.00/10.00分
6通过指针访问结构体数组(10分)
题目内容:

定义结构体PERSON表示一个人的基本信息,成员包含姓名(char),性别(char),年龄(int)。在主函数中定义结构体数组表示一个班级(不超过50人),通过指针若干人的信息,输入三个0时表示结束,通过指针逆序输出这些人的信息。字符串的比较可以使用字符串处理库函数。

输入:若干行,每行是一个人的信息,用空格隔开。最后一行是0 0 0 表示结束。

输出:逆序输出人员信息,每行一人,个人信息各项用一个 空格隔开,末尾无空格。

样例1输入:

zhao male 18

qian female 17

sun male 19

0 0 0

样例1输出:

sun male 19

qian female 17

zhao male 18

【参考程序】

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int const N = 120;
struct PERSON {
	char name[40], gender[10];int age;
};
int main() {
	PERSON one[N];
	PERSON * p = one;
	while (p->name[0] != '0') {
		cin >> (++p)->name;
		cin >> p->gender;
		cin >> p->age;
	} 
	--p;
	do {
		cout << p->name << " " << p->gender << " " <<p->age << "\n";
	} while (--p >one);
	
	return 0;
}

用例测试结果	运行时间	占用内存	提示	得分
用例1通过	2ms	372kb	
10
提交答案本次得分/总分:10.00/10.00分
7动态申请变量(10分)
题目内容:

编写动态申请三个存放整数的存储单元,输入三个整数,输出它们的和。

输入:三个整数,用空格隔开。

输出:整数

【注意】输入、计算、输出都不是问题,关键是存放整数的空间是用new申请的。

样例1输入:

1 2 3

样例1输出:

6

【参考程序】



时间限制:500ms内存限制:32000kb
C++

```cpp
#include
using namespace std;
int main(){
int *a,*b,*c;
a=new int;b=new int;c=new int;
cin>>*a>>*b>>*c;
cout<<*a+*b+*c;
delete a,b,c;
return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 368kb
3
用例2通过 2ms 380kb
3
用例3通过 2ms 376kb
2
用例4通过 19ms 380kb
2
提交答案本次得分/总分:10.00/10.00分
8动态申请数组(10分)
题目内容:

编写程序,输入整数n,动态申请能存放n个double型数据的空间(动态数组),输入若干实数,以9999表示结束,实际个数不超过最大个数n,逆序输出数据。

输入:两行,第一行是元素最大个数;第1行是若干实数,用空格隔开,9999表示结束。

输出:逆序输出若干实数,用一个空格隔开,末尾无空格。

【注意】关键是动态和指针,程序中不出现下标运算。注意释放空间。

样例1输入:

20

1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 9999

样例1输出:

1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1

【参考程序】

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int const N = 120;
struct PERSON {
	char name[40], gender[10];int age;
};
int main() {
	int n;
	cin >> n;
	double  *p = new double[n];
	double *q = p;
	cin >> *p;
	while (*p!=9999) {
		cin >> *(++p);
	}
	cout << *(--p);
	while(--p>=q)
		cout <<  " " << *p;
	delete []q;
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 360kb
4
用例2通过 2ms 356kb
3
用例3通过 3ms 364kb
3
提交答案本次得分/总分:10.00/10.00分
9动态申请结构体数组(10分)
题目内容:

定义结构体PERSON表示一个人的基本信息,成员包含姓名(char),性别(char),年龄(int)。在主函数中输入正整数n,动态申请能存放n个人的基本信息的存储空间,通过指针输入若干人的信息,输入三个0时表示结束,通过指针逆序输出这些人的信息。实际人数不超过n,字符串的比较可以使用字符串处理库函数。

输入:若干行,第1行是最大人数,以后每行是一个人的信息,用空格隔开。最后一行是0 0 0 表示结束。

输出:逆序输出人员信息,每行一人,个人信息各项用一个空格隔开,末尾无空格。

样例1输入:

10

zhao male 18

qian female 17

sun male 19

0 0 0

样例1输出:

sun male 19

qian female 17

zhao male 18

【参考程序】

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int const N = 120;
struct PERSON {
	char name[40], gender[10];int age;
};
int main() {
	int n;
	cin >> n;
	PERSON *one=new PERSON[n];
	PERSON * p = one;
	while (p->name[0] != '0') {
		cin >> (++p)->name;
		cin >> p->gender;
		cin >> p->age;
	}
	--p;
	do {
		cout << p->name << " " << p->gender << " " << p->age << "\n";
	} while (--p > one);
	delete[]one;
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 256kb
4
用例2通过 2ms 368kb
3
用例3通过 2ms 256kb
3
提交答案本次得分/总分:10.00/10.00分
10动态申请结构体数组空间和结构体数组复制(10分)
题目内容:

定义结构体PERSON表示一个人的基本信息,成员包含姓名(char),性别(char),年龄(int)。在主函数中输入正整数n,动态申请能存放n个人的基本信息的存储空间,通过指针输入若干人的信息,输入三个0时表示结束,实际人数不超过n。根据实际人数再动态申请一个结构体数组,将输入的数据逆序复制到新的结构体数组中,通过指针输出这些人的信息。字符串的比较可以使用字符串处理库函数。

输入:若干行,第1行是最大人数,以后每行是一个人的信息,用空格隔开。最后一行是0 0 0 表示结束。

输出:逆序输出人员信息,每行一人,个人信息各项用一个空格隔开,末尾无空格。

【注意】关键一是动态申请存储空间,二是指针操作,程序中不出现下标运算;三是真正实现复制。

样例1输入:

10

zhao male 18

qian female 17

sun male 19

0 0 0

样例1输出:

sun male 19

qian female 17

zhao male 18

时间限制:500ms内存限制:32000kb
C++

#include 
using namespace std;
int const N = 120;
struct PERSON {
	char name[40], gender[10];int age;
};
int main() {
	int n;
	cin >> n;
	PERSON *one = new PERSON[n];
	PERSON *two = new PERSON[n];
	PERSON * p = one, *t = two;
	while (p->name[0] != '0') {
		cin >> (++p)->name;
		cin >> p->gender;
		cin >> p->age;
	}
	--p;
	while (p > one) {
		*t++ = *p--;
	}
	p = two;
	do {
		cout << p->name << " " << p->gender << " " << p->age << "\n";
	} while (++p <t);
	delete[]one; delete []two;
	return 0;
}

用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
3
用例2通过 3ms 256kb
3
用例3通过 2ms 368kb
4
提交答案本次得分/总分:10.00/10.00分

你可能感兴趣的:(C++学习笔记)