2023.2.28上机练习

1.成绩处理
描述
输入5个学生,4门课成绩,二维数组stu表示,行标表示学生,列标表示课程成绩.

使用指针完成地址传递,主函数完成数组输入和输出。

分别编写函数aver()、fals()和well()完成:

求第一门课的平均分;

统计有2门以上课程不及格的同学人数;

平均成绩在90分以上或者全部课程成绩在85分以上的同学视为优秀,统计人数,

输入说明
输入二维浮点型数组stu

输出说明
输出第一门课程平均分(保留1位小数)、2门以上不及格人数和成绩优秀人数,数据之间空一格。

输入样例
85 73 59 92
93 95 89 88
86 88 88 87
59 51 52 68
78 32 59 91

输出样例
80.2 2 2

//输出结果感觉不太对,但不会改......
#include<iostream>
using namespace std;
int main()
{
	float stu[5][4];
	int i, j;
	float aver(float(*n)[4]);
	int fals(float(*n)[4]);
	int well(float(*n)[4]);

	//二维数组输入 
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 4; j++)
			cin >> stu[5][4];
	}
	//输出 
	cout << aver(stu) << " " << fals(stu) << " " << well(stu);

	return 0;
}

//(*n)[列数]是二维数组传参形式
float aver(float(*n)[4])
{
	int i;
	//sum为总分,av为平均分 
	float sum = 0, av;
	for (i = 0; i < 5; i++)
		sum += *(n + i)[0];
	av = sum / 5;
	return av;
}

int fals(float(*n)[4])
{
	//num为每个人低于60的个数,sum为人数 
	int i, j, num = 0, sum = 0;
	float* p = &n[0][0];
	//用p++是考虑到二维数组在我们考虑来是二维的,但是在内存中是一个连续的空间储存的 
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 4; j++)
		{
			if (*p < 60)
				num++;
			p++;
		}
		if (num >= 2)
			sum++;
		num = 0;
	}
	return sum;
}

int well(float(*n)[4])
{
	//num是每人大于85的个数,sum是每人的总分,end是符合条件的人数 
	int i, j, num = 0, sum = 0, end = 0;
	float* p = &n[0][0];
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 4; j++)
		{
			sum += *p;
			if (*p >= 85)
				num++;
			p++;
		}
		if (sum >= 360 || num == 4)
			end++;
		sum = 0;
		num = 0;
	}
	return end;
}

2.元素放置
描述

定义一个一维整形数组num[50],输入正整数m、n(2≤m≤n≤7),输入一个m*n整形矩阵(值小于100)

编写函数place()完成矩阵元素S型放置,从小到大排列

使用指针完成地址传递,主函数完成数组输入和输出。

输入说明
输入正整数m和n(2≤m≤n≤7),输入一个mn整形矩阵,含mn个元素(值小于100)。

输出说明
格式输出:按行输出处理后的矩阵,S型排列,%3d,每行换行,最后一行不换行。

输入样例
3 3

15 14 21 34 22 37 40 16 50

输出样例
16 15 14
21 22 34
50 40 37

#include<iostream>
#include<algorithm>
using namespace std;
void place(int* num, int n, int m, int(*s)[7])
{
	int i, j;
	for (i = 0; i < m; i++)
	{
		if (i % 2 == 0)
		{
			for (j = n - 1; j >= 0; j--)
				s[i][j] = *num++;//*num++代表取值后,num的地址加一
		}
		else
		{
			for (j = 0; j < n; j++)
				s[i][j] = *num++;
		}
	}
}
int main()
{
	int num[50], m, n, arr[7][7];
	cin >> m >> n;
	for (int i = 0; i < m*n; i++)
	{
			cin >> num[i];
	}
	sort(num, num + m*n);
	place(num, m, n, arr);
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
			cout<< arr[i][j]<<" ";
		cout << endl;
	}
}

在这里插入图片描述

3.字符统计
描述

定义一个一维字符数组string[100],输入一个字符串,含N个字符(N≤100)

定义一个整形数组num[5],用于存放统计结果数据

编写函数count()统计字符串中大写字母、小写字母、空格、数字以及其他字符的个数

使用指针完成地址传递,主函数完成数组输入和统计结果输出。

输入说明
输入一行字符串,100个以内。

输出说明
格式输出:输出大写字母、小写字母、空格、数字以及其他字符的个数信息,数据之间空一格。

输入样例
A 3cp &! 91 tD M

输出样例
3 3 5 3 2

#include<iostream>
#include<string.h>
#include<ctype.h>
using namespace std;
void count(char s[],int n[])
{
	for (int i = 0; i < strlen(s); i++)
	{
		if (isupper(s[i]))
			n[0]++;
		else if (islower(s[i]))
			n[1]++;
		else if (isspace(s[i]))
			n[2]++;
		else if (isdigit(s[i]))
			n[3]++;
		else
			n[4]++;
	}
}
int main()
{
	char string[100];
	int N;
	int n[5] = { 0 };
	gets_s(string);
	count(string,n);
	for (int i = 0; i < 5; i++)
		cout << n[i] << " ";
	return 0;
}

在这里插入图片描述

4.最长单词的长度
描述

给定一个英文句子,统计这个句子中最长单词的长度,并在屏幕上输出。

输入说明

从键盘输入一个英文句子,句子中只含有英文字符和空格,句子以’.’结束。句子总长不超过100个字符。

输出说明

输出一个整数,表示这个句子中最长单词的长度。允许句子中有相同长度的单词。

输入样例 输出样例
I am a student. 7
The cat gets a job. 4

#include<iostream>
using namespace std;
int main()
{
	char s[100], * p = s;
	gets_s(s, 100);
	int num, max;
	for (num = 0, max = 0; *(p - 1) != '.'; p++)
	{
		if (*p != ' ' && *p != '.')
			num++;
		else
		{
			if (num > max)
				max = num;
			num = 0;
		}
	}
	cout << max << endl;
	return 0;
}

在这里插入图片描述

5.判断字符串是否是回文
描述

给定一个字符串,判断该字符串是否是回文,并在屏幕上输出判断结果。如“abcba”即是回文。

输入说明

从键盘输入一个字符串,该字符串中字符可以是字母、数字和空格,字母区分大小写。字符串总长不超过100个字符。

输出说明

若该字符串是回文,则输出yes,否则输出no。

输入样例 输出样例
abcba yes
Abccba no

#include<iostream>
using namespace std;
int main()
{
	char s[100];
	gets_s(s);
	int len = strlen(s);
	bool flag = true;

	for (int i = 0; i < len / 2; i++)
	{
		if (s[i] != s[len - i - 1])
		{
			flag = false;
			break;
		}
	}
	if (flag == false)
		cout << "no" << endl;
	else
		cout << "yes" << endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述

6.灰度直方图
问题描述
一幅m×n的灰度图像可以用一个二维矩阵表示,矩阵中的每个元素表示对应像素的灰度值。
灰度直方图表示图像中具有每种灰度级的象素的个数,反映图像中每种灰度出现的频率。
假设图像灰度为16级(灰度值从0-15),现给出一个矩阵表示的灰度图像,输出各级灰度的像素个数。

输入说明
输入数据第一行为两个整数m 和n分别表示图像的宽度和高度(0<=m,n<=256),其后是n行数据,每行m个整数,分别表示图像各个像素的灰度值。
输出说明
输出n行数据,每行数据由两个整数组成,分别表示灰度级和该灰度级像素个数,整数之间用空格分隔,灰度级输出顺序为从低到高,
如果某灰度级像素个数为0,则不输出该灰度级的统计结果。

输入样例
5 4
0 1 0 2 8
3 4 8 5 9
12 14 10 6 7
1 15 3 6 10

输出样例
0 2
1 2
2 1
3 2
4 1
5 1
6 2
7 1
8 2
9 1
10 2
12 1
14 1
15 1

#include<iostream>
using namespace std;
int main()
{
	int m, n, arr[256][256], num[16] = { 0 };
	cin >> m >> n;
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> arr[i][j];
		}
	}
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (arr[i][j] == 0)
				num[0]++;
			else if (arr[i][j] == 1)
				num[1]++;
			else if (arr[i][j] == 2)
				num[2]++;
			else if (arr[i][j] == 3)
				num[3]++;
			else if (arr[i][j] == 4)
				num[4]++;
			else if (arr[i][j] == 5)
				num[5]++;
			else if (arr[i][j] == 6)
				num[6]++;
			else if (arr[i][j] == 7)
				num[7]++;
			else if (arr[i][j] == 8)
				num[8]++;
			else if (arr[i][j] == 9)
				num[9]++;
			else if (arr[i][j] == 10)
				num[10]++;
			else if (arr[i][j] == 11)
				num[11]++;
			else if (arr[i][j] == 12)
				num[12]++;
			else if (arr[i][j] == 13)
				num[13]++;
			else if (arr[i][j] == 14)
				num[14]++;
			else
				num[15]++;
		}
	}
	for (int i = 0; i < 16; i++)
		cout << i << " " << num[i] << endl;
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值