bupt c++ 上机(4)

指针。

搞不太懂。混过来了。QAQ

问题 A: VC++实验6.1 求最大值

题目描述

编写相应的程序用指针实现:从键盘输入3个整型数va、vb、vc,通过一个指向整型的指针iptr,输出3个数中的最大值。

输入

1 2 3

输出

3

#include <iostream>
using namespace std;
int main() {
	int a, b, c;
	cin >> a >> b >> c;
	int *iptr = NULL;
	if (a >= b) 
		if (a > c) iptr = &a;
		else iptr = &c;
	if (a < b) 
		if (b > c) iptr = &b;
		else iptr = &c;
	cout << *iptr << endl;
	return 0;
}

问题 B: VC++实验6.2 求平均值

题目描述

编写一个函数get_average()获取整型数组元素的平均值。要求这个函数既可以用来求一维数组元素的平均值,也可以求二维数组元素的平均值。在main()函数中通过具体的一维数组Array_1D和二维数组Array_2D测试这个函数。假定一维数组为a[5],二维数组为b[2][3],一维数组和二维数组的变量值由键盘分别输入,在屏幕上输出一维数组和二维数组的平均值,平均值间用一个空格分开。

输入

1 2 3 4 5

1 2 3 4 5 6

输出

3 3.5

 

#include <iostream>
using namespace std;
int main() {
	int a[5] = {0};
	int b[2][3] = {0};
	for (int i = 0; i < 5; i++) 
		cin >> a[i];
	for (int i = 0; i < 2; i++)
		for (int j = 0; j < 3; j++)
			cin >> b[i][j];
	int num1(0), num2(0);
	int *p1 = a, (*p2)[3];
	p2 = b;
	for (int i = 0; i < 5; i++) 
		num1 += *(p1 + i);
	for (int i = 0; i < 6; i++) 
		num2 += *(*p2 + i);
	float aver1 = (float)num1 / 5;
	float aver2 = (float)num2 / 6;
	cout << aver1 << " " << aver2 << endl;
	return 0;
}

问题 C: VC++实验6.3 字符串变量的交换

题目描述

编制程序,调用指针作为参数的函数,实现下面两字符串变量的交换。 char* ap="hello"; char* bp="how are you"; 交换的结果为:ap 指向"how are you",bp 指向"hello"。 (注意:输出语句中的;和.为英文符号)

输入

输出

ap指向how are you;

bp指向hello.

#include <iostream>
using namespace std;
int main() {
	char *ap = "hello.";
	char *bp = "how are you;";
	char *t = NULL;
	t = ap; ap = bp; bp = t;
	cout << "ap指向" << ap << endl;
	cout << "bp指向" << bp << endl;
}

问题 D: VC++实验6.4 动态申请数组

题目描述

动态申请一个一维整型数组,要求用户从键盘输入元素个数,采用new运算符分配空间,从键盘输入数组变量的值.写一个函数void Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序(升序)。将排序后的数组变量的值输出到屏幕上,各数值间用一个空格隔开。

输入

10 1 2 3 4 5 0 7 8 0 10

输出

1 2 3 4 5 7 8 10 0 0

#include <iostream>
using namespace std;
int n; 

bool compare(int a, int b) {
	if (!a) return 1;
	if (!b) return 0;
	return a > b;
}

int main() {
	cin >> n;
	int *p = NULL;
	p = new int[n];
	int *pos = p, *pp = p;
	for (int i = 0; i < n; i++) {
		int k; cin >> k;
		*pos = k; pos++;
	}
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n - i - 1; j++) {
			if (compare(*(pp + j), *(pp + j + 1))) {
				int t = *(pp + j);
				*(pp + j) = *(pp + j + 1);
				*(pp + j + 1) = t;
			} 
		}
	for (int i = 0; i < n - 1; i++) 
		cout << *(p + i) << " ";
	cout << *(p + n - 1);
	delete [] p;
	return 0;
}

问题 E: VC++实验6.5 字符指针数组

题目描述

用字符指针数组,将给定的5个字符串(可以是任意5个国家名字)进行排序并输出。

输入

China American France Spain Greece

输出

American

China

France

Greece

Spain

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	char *name[5];
	char a[5][100];
	for (int i = 0; i < 5; i++)
		cin >> a[i];
	for (int i = 0; i < 5; i++)
		name[i] = a[i];
	for (int i = 0; i < 5; i++)
		for (int j = 0; j < 4 - i; j++) {
			if (strcmp(name[j], name[j + 1]) > 0) {
				char *t = name[j];
				name[j] = name[j + 1];
				name[j + 1] = t;
			}
		}
	for (int i = 0; i < 5; i++)
		cout << name[i] << endl;
	return 0;
}

问题 F: VC++实验6.6 结构体和指针

题目描述

已知有3名学生及五门课程的成绩,要求根据学生的各科平均分排序(降序),并输出学生的所有信息和平均分(用指针数组完成)。

输入

Jane 90 80 75 60 85

Mark 85 78 98 85 86

Lily 56 65 75 68 80

输出

Mark 85 78 98 85 86 86.4

Jane 90 80 75 60 85 78

Lily 56 65 75 68 80 68.8

#include <iostream>
using namespace std;
struct student {
	char name[10];
	int score[5];
	float aver;
} ;

student a[3];

int main() {
	for (int i = 0; i < 3; i++) {
		cin >> a[i].name;
		float num = 0;
		for (int j = 0; j < 5; j++) {
			cin >> a[i].score[j];
			num += (float)a[i].score[j];
		}
		a[i].aver = num / 5;
	}
	student *p[3];
	for (int i = 0; i < 3; i++)
		p[i] = &a[i];
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 2 - i; j++) {
			if (p[j] -> aver < p[j + 1] -> aver) {
				student *temp;
				temp = p[j];
				p[j] = p[j + 1];
				p[j + 1] = temp;
			}
		}
	for (int i = 0; i < 3; i++) {
		cout << p[i] -> name << " ";
		for (int j = 0; j < 5; j++)
			cout << p[i] -> score[j] << " ";
		cout << p[i] -> aver << endl;
	}
	return 0;
}

问题 G: VC++实验6.7 数组合并

题目描述

将两个数组a和b合并,合并后的数组按升序输出。 说明:1)数组a和b的大小和元素的值从键盘输入;先输入数组大小,再输入数组的值; 2)合并后的数组输出时,各数值间以空格分开。

输入

2 1 2

4 1 2 3 4

输出

1 1 2 2 3 4

emmm, 这题还是用水方法吧。

//这个不会要用。。还是水吧
#include <iostream>
using namespace std;
int n, n2;
int main() {
	cin >> n;
	int *p = new int[100];
	int *p1 = p;
	int *p2 = p;
	for (int i = 0; i < n; i++) {
		int k; cin >> k;
		*p1 = k; p1++;
	}
	cin >> n2;
	for (int j = 0; j < n2; j++) {
		int k; cin >> k;
		*p1 = k; p1++;
	}
	for (int i = 0; i < n + n2; i++)
		for (int j = 0; j < n + n2 - i - 1; j++) {
			if (*(p2 +j) > *(p2 + j + 1)) {
				int t = *(p2 + j);
				*(p2 + j) = *(p2 + j + 1);
				*(p2 + j + 1) = t;
			}
		}
	for (int i = 0; i < n + n2 - 1; i++)
		cout << *(p + i) << " ";
	cout << *(p + n + n2 - 1) << endl;
	delete [] p;
	return 0;
}

问题 H: VC++实验6.8 数据插入

题目描述

请编写函数实现将一个数值插入到数组中适当的位置,使新数组按降序排列,并将插入的位置输出到屏幕上。 说明:1)原数组大小和数值由键盘输入,动态创建数组; 2)插入的数值由键盘输入。

3)如果插入数据与原数组中某数据相同,则插在该数据之前。

输入

10 1 4 5 2 3 6 7 8 10 9

11

输出

1

一开始错了,发现如果比所有的都小我的循环完了pos仍然为0

#include <iostream> 
using namespace std;
int flag = 0;
int main() {
	int n, ins;
	cin >> n;
	int *p = new int[1000];
	int *p1 = p;
	int *p2 = p;
	for (int i = 0; i < n; i++) {
		int k; cin >> k;
		*p1 = k; p1++;

	} cin >> ins;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n - i - 1; j++) {
			if (*(p2 +j) < *(p2 + j + 1)) {
				int t = *(p2 + j);
				*(p2 + j) = *(p2 + j + 1);
				*(p2 + j + 1) = t;
			}
		}
	int pos = 0;
	for (int i = 0; i < n; i++) 
		if (*(p + i) <= ins) {
			pos = i;
			flag = 1;
			break;
		}
	if (!flag) pos = n;
	for (int i = n; i > pos; i--)
		*(p + i) = *(p + i - 1);
	*(p + pos) = ins;
	// for (int i = 0; i <= n; i++)
	// 	cout << *(p + i) << endl;
	cout << pos + 1 << endl;
	delete [] p;
	return 0;
}

 

  • 26
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
bupt linux上机作业2 是一项关于Linux操作系统的实践作业,要求对Linux系统进行操作和管理。以下是针对该作业的回答: bupt linux上机作业2 主要涉及以下几个方面的内容: 1. 基本命令的使用:在Linux系统中,我们可以使用一些基本的命令来进行文件和目录的操作,如ls、cd、mkdir、rm等。这些命令的使用是我们平时操作Linux系统的基础,要求掌握它们的基本用法。 2. 文件权限的设置:在Linux系统中,每个文件和目录都有自己的权限,包括读、写、执行等。在这个作业中,我们需要学会如何使用chmod命令来设置文件和目录的权限,以保护系统的安全性。 3. 进程管理和任务调度:Linux系统中的进程管理和任务调度是非常重要的内容。在这个作业中,可以通过使用ps、kill等命令来查看和管理系统中的进程,以及使用cron命令来设置定时任务。 4. 软件包的安装和管理:Linux系统中有很多开源软件包可以供我们使用。在这个作业中,可以学习如何使用apt-get或yum等包管理器来安装和管理软件包,以满足系统中各种软件的需求。 通过完成bupt linux上机作业2,我们可以加深对Linux操作系统的理解和掌握,提升对Linux系统的管理能力。这对于计算机相关专业的学生来说是非常有益的,也是日后工作中可能会用到的技能。希望以上回答能对你有所帮助。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值