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
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
#include
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
#include
#include
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
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
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
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;
}