第8周基础练习(fewuibfvre)

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

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

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

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

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

样例1输入:

1 2 3 4 5 9999

样例1输出:

1 2 3 4 5

//使用指针输出数组元素
#include<iostream>
using namespace std;
int main()
{
	const int N = 20;
	int a[N];
	int* p = a;
	cin >> *p;
	int i = 0;
	while (*p != 9999)
	{
		i++;
		if (i == N)
			break;
		p++;
		cin >> *p;
	}
	if (i > 0)
	{
		p = a;
		cout << *p;
		while (p < a + i-1)
		{
			p++;
			cout << " " << *p;
		}
		cout << endl;
	}
	return 0;
}

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

//通过指针输入输出数组元素的函数
#include<iostream>
using namespace std;
#define N 100
int input(int* p);          //输入,返回输入的元素个数
void print(int* p, int n);   //显示数组元素,n为元素个数
int main()
{
	int a[100];
	int num = input(a);
	print(a, num);
	return 0;
}
int input(int* p)
{
	cin >> *p;
	int n = 0;
	while (*(p + n) != 9999)
	{
		n++;
		cin >> *(p + n);
	}
	return n;
}
void print(int* p, int n)
{
	cout << *p;
	int i = 1;
	while (i < n)
	{
		p++;
		cout << " " << *p;
		i++;
	}
	cout << endl;
}

3指针实现字符串复制函数(10分)
题目内容:

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

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

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

cout<<mystrcpy(s1,s2)<<endl;

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

输入:一个字符串

输出:一个字符串

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

样例1输入:

copy

样例1输出:

copy

#include<iostream>
using namespace std;
char* mystrcpy(char* s1, char* s2); //将s2中的内容复制到s1中,返回s1首地址。
int main()
{
	char s1[100], s2[100];
	cin.getline(s2, 100);
	cout << mystrcpy(s1, s2) << endl;
	return 0;
}
char* mystrcpy(char* s1, char* s2)
{
	char* p = s1;
	char* q = s2;
	while (*q != 0)
		*p++ = *q++;
	*p = 0;
	return s1;
}

4指针实现字符串比较(10分)
题目内容:

编写函数,用指针实现字符串的比较,不区分大小写,若s1>s2返回1,若s1<s2返回-1,若s1等于s2返回0。函数的格式为:

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

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

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

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

输出:1,0,或-1

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

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

样例1输入:

abc ABC

样例1输出:

0

//指针实现字符串比较
#include<iostream>
using namespace std;
#define N 100
int mystrcmp(char* s1, char* s2);
void transform(char*);
int main()
{
	char* s1, * s2;
	s1 = new char[N];
	s2 = new char[N];//尝试下这样分配内存空间
	cin >> s1;
	cin >> s2;//这样输入以空格结束
	transform(s1);//和cin.getline() 的输入以换行结束区分
	transform(s2);
	cout << mystrcmp(s1, s2) << endl;
	delete [] s1;
	delete [] s2;//记得释放内存
	return 0;
}
void transform(char* s)
{
	char* p = s;
	while (*p != 0)
	{
		if (*p >= 'a' && *p <= 'z')
			*p = *p + 'A' - 'a';
		p++;
	}
}
int  mystrcmp(char* s1, char* s2)
{
	char* p = s1, * q = s2;
	while (*p && *q && *p == *q)//找到第一个不相等的位置
	{
		++q;
		p++;
	}
	if (*p > * q)
		return 1;
	else if (*p < *q)
		return -1;
	else
		return 0;
}

5通过指针访问结构体变量(10分)
题目内容:

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

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

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

样例1输入:

Zhang male 20

样例1输出:

Zhang male 20

//通过指针访问结构体变量
#include<iostream>
using namespace std;
struct STU{
	char name[40];
	char sex[10];
	int age;
};
int main()
{
	STU a;
	STU* p;
	p = &a;
	cin >> p->name >> p->sex >> p->age;
	cout << p->name << " " << p->sex << " " << p->age << endl;
	return 0;
}

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

//通过指针访问结构体数组
#include<iostream>
#include<cstring>
#define _CRT_SECURE_NO_WARNINGS//高版本VS中strcmp等函数被视为不安全的,会报错加上这句话就行
using namespace std;
struct STU {
	char name[40];
	char sex[10];
	int age;
};
int main()
{
	STU a[50];
	STU* p;

	p = a;
	int num=0;//计数用
	cin >> p->name >> p->sex >> p->age;
	while (strcmp(p->name,"0")!=0 && strcmp(p->sex,"0")!=0 && p->age != 0)//万一有人叫0呢,狗头
	{
		p++;
		cin >> p->name >> p->sex >> p->age;
		num++;
	}
	p = a + num - 1;//末尾
	while (p >= a)
	{
		cout << p->name << " " << p->sex << " " << p->age << endl;
		p--;
	}

}

7动态申请变量(10分)
题目内容:

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

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

输出:整数

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

样例1输入:

1 2 3

样例1输出:

6

//动态申请变量
#include<iostream>
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) << endl;
	delete[] a, b, c;//释放内存
	return 0;
}

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

//动态申请数组
#include<iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	double* p;
	p = new double[n];
	int num = 0;//计数
	cin >> *p;
	double* q = p;
	while (*q != 9999)
	{
		num++;
		q++;
		if (num >= n)
			break;
		cin >> *q;
	}

	q = p + num - 1;//q指向动态数组最后一个元素
	while (q > p)
	{
		cout << *q << " ";
		q--;
	}
	cout << *p;
	delete[] p;
	return 0;
}

动态申请结构体数组(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

//动态申请结构体数组
#include<iostream>
#include<cstring>
#define _CRT_SECURE_NO_WARNINGS//高版本VS中strcmp等函数被视为不安全的,会报错加上这句话就行
using namespace std;
struct STU {
	char name[40];
	char sex[10];
	int age;
};
int main()
{
	int n;
	cin >> n;
	STU* p;
	p = new STU[n];
	STU* q = p;
	int num = 0;//计数
	cin >> q->name >> q->sex >> q->age;
	while (strcmp(q->name, "0") != 0 && strcmp(q->sex, "0") != 0 && q->age != 0)//万一有人叫0呢,狗头
	{
		q++;
		num++;
		cin >> q->name >> q->sex >> q->age;
	}
	q = p + num - 1;//q指向末尾
	while (q >= p)
	{
		cout << q->name << " " << q->sex << " " << q->age << endl;
		q--;
	}
	delete[] p;
}

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

//动态申请结构体数组空间和结构体数组复制
#include<iostream>
#include<cstring>
#define _CRT_SECURE_NO_WARNINGS//高版本VS中strcmp等函数被视为不安全的,会报错加上这句话就行
using namespace std;
struct STU {
	char name[40];
	char sex[10];
	int age;
};
int main()
{
	int n;
	cin >> n;
	STU* p;
	p = new STU[n];
	STU* q = p;
	int num = 0;//计数
	cin >> q->name >> q->sex >> q->age;
	while (strcmp(q->name, "0") != 0 && strcmp(q->sex, "0") != 0 && q->age != 0)//万一有人叫0呢,狗头
	{
		q++;
		num++;
		cin >> q->name >> q->sex >> q->age;
	}
	//下面是结构体数组操作
	STU* a;
	a = new STU[num];
	q = p + num - 1;//q指向末尾的数据
	for (int i = 0; i < num; i++)
	{
		a[i] = *q;
		q--;
	}
	//下面输出元素
	for (int i = 0; i < num; i++)
		cout << a[i].name << " " << a[i].sex << " " << a[i].age << endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值