题目 1033: [编程入门]自定义函数之字符提取
题目描述
写一函数,将一个字符串中的元音字母复制到另一个字符串,然后输出。
输入格式
一行字符串
输出格式
顺序输出其中的元音字母(aeiou)
样例输入
abcde
样例输出
ae
MYCPP;//正确答案
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
char c1[100];
gets_s(c1);
int len = strlen(c1);
for (int i = 0; i < len; i++)
{
if (c1[i] == 'a')
{
cout << c1[i];//如果是元音直接输出 不用赋值给新的数组再输出了 想复杂了
}
else if (c1[i] == 'e')
{
cout << c1[i];
}
else if (c1[i] == 'i')
{
cout << c1[i];
}
else if (c1[i] == 'o')
{
cout << c1[i];
}
else if (c1[i] == 'u')
{
cout << c1[i];
}
}
return 0;
}
题目 1035: [编程入门]自定义函数之字符类型统计
题目描述
编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
输入格式
一行字符串
输出格式
统计数据,4个数字,空格分开。
样例输入
!@#$%^QWERT 1234567
样例输出
5 7 4 6
MYCPP;//正确答案
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
char c1[100];
int arr[100]={0};
gets_s(c1);
int len = strlen(c1);
for (int i = 0; i < len; i++)
{
if (c1[i] >= 'a' ==c1[i] <= 'z' || c1[i] >= 'A' && c1[i] <= 'Z')
{
arr[0]+=1;
}
else if (c1[i] >='0'&&c1[i]<='9')
{
arr[1] += 1;
}
else if (c1[i] == ' ')
{
arr[2] += 1;
}
else arr[3]+= 1;
}
cout << arr[0] << " " << arr[1] << " " << arr[2] << " " << arr[3] << endl;
return 0;
}
题目 1044: [编程入门]三个字符串的排序
题目描述
输入三个字符串,按由小到大的顺序输出
输入格式
3行字符串
输出格式
按照从小到大输出成3行
样例输入
cde
afg
abc
样例输出
abc
afg
cde
MYCPP;//正确答案 //使用中的 sort排序算法和stl容器vector
#include<vector>
#include<algorithm>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
string s1, s2, s3;
cin >> s1 >> s2 >> s3;
vector<string>st1;
st1.push_back(s1);
st1.push_back(s2);
st1.push_back(s3);
sort(st1.begin(), st1.end());
cout << st1[0] << endl;
cout << st1[1] << endl;
cout << st1[2] << endl;
return 0;
}
题目 1049: [编程入门]结构体之时间设计
题目描述
定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
输入格式
年月日
输出格式
当年第几天
样例输入
2000 12 31
样例输出
366
MYCPP;//正确答案 ,函数设计比较合理 直观
struct timing
{
int year;
int month;
int day;
};
struct timing tim[100];
void days(int year,int month,int day)
{
int arr[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int sum1 = 0, sum2 = 0;
for (int i = 0; i < month-1; i++)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
arr[1] = 29;
}
sum1 += arr[i];
}
sum2 += day;
int sum = sum1 + sum2;
cout << sum;
}
int main()
{
cin >> tim->year >> tim->month >> tim->day;
days(tim->year, tim->month, tim->day);
return 0;
}
第0到a项和从len-1到len-1-a项进行交换;
//自己想出来的 虽然没有题可以用 但是我觉得挺不错的
void swap(int arr[],int a,int len)//第0到a项和从len-1到len-1-a项进行交换;
{
int m = len - 1;
for (int i =1; i <= a;i++)
{
int temp = arr[i-1];
arr[i-1] = arr[m];
arr[m] = temp;
m--;
}
}
题目 1045: [编程入门]自定义函数之整数处理
题目描述
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。
输入格式
10个整数
输出格式
整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)
样例输入
2 1 3 4 5 6 7 8 10 9
样例输出
1 2 3 4 5 6 7 8 9 10
MYCPP;//50%样例通过 不仔细 没认真审题
//注意审题 题目要求先找到最小数与第一个数交换 再找到最大数与最后一个交换 , 而不是简单的进行升序排序
void bubblesort(int arr[], int len);
void print(int arr[], int len);
int main() {
int arr[10];
for (int i = 0; i < 10; i++)
{
cin >> arr[i];
}
bubblesort(arr, 10);
print(arr, 10);
return 0;
}
void bubblesort(int arr[], int len)
{
for (int i = 0; i < len - 1; i++)
{
for (int j = i + 1; j < len; j++)
{
if (arr[i] > arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
void print(int arr[], int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
}
//正确答案
int main()
{
int a[10],m=0,n=0,max=0,min=0;
for (int i = 0; i < 10; i++)
{
cin >> a[i];
}
max = a[0];//假设第一个数为最大值
min = a[0];//假设第一个数为最小值
for (int i = 1; i < 10; i++)
{
if (a[i] > max)//如果a[i]比max大
{
max = a[i];//令max等于该数值
m = i; //并用m记录下标i
}
}
for (int i = 1; i < 10; i++)
{
if (a[i] < min)//如果a[i]比min小
{
min = a[i];//令min等于该数值
n = i; //并用n记录下标i
}
}
int t = a[m]; a[m] = a[9]; a[9] = t;//最大值a[m]与最后一个数交换
int k = a[n]; a[n] = a[0]; a[0] = k;//最小值a[n]与第一个数交换
for (int i = 0; i < 10; i++)//循环输出所有数
{
cout << a[i] << " ";
}
return 0;
}
题目 1046: [编程入门]自定义函数之数字后移
题目描述
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
输入格式
输入数据的个数n n个整数 移动的位置m
输出格式
移动后的n个数
样例输入
10
1 2 3 4 5 6 7 8 9 10
2
样例输出
9 10 1 2 3 4 5 6 7 8
//正确答案
也就是说在第9位置上的“9”来到了第1号位置,第10位置的“10”来到了第二号的位置,其他的数全部向后移动了两位。
向后移动两位就是下标+2来实现,而对于9号位10号位+2以后会变成11和12,超出数组范围,他们应该在1号和2号才对。取余操作恰好可以实现这一点, 11%10=1 12%10=2。 对于超出了多少,就会回到多少,11号超出了1个位置,就会回到1位置。
int main(){
int n,k;
int p[1007],s[1007];
cin>>n;
for(int i=0;i<n;i++){
cin>>p[i];
}
cin>>k;//需要移动多少位
for(int i=0;i<n;i++){
s[(i+k)%n]=p[i];//核心代码,取余归位
}
for(int i=0;i<n;i++){
cout<<s[i]<<" ";//打印输出
}
return 0;
}
题目 1050: [编程入门]结构体之成绩记录
题目描述
现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出N<100
输入格式
学生数量N占一行 每个学生的学号、姓名、三科成绩占一行,空格分开。
输出格式
每个学生的学号、姓名、三科成绩占一行,逗号分开。
样例输入
2
a100 clang 70 80 90
b200 dotcpp 90 85 75
样例输出
a100,clang,70,80,90
b200,dotcpp,90,85,75
MYCPP;//正确答案
#include<iostream>
using namespace std;
#define N 1000
struct student
{
string number;
string name;
int score1;
int score2;
int score3;
};
struct student stu[100];***//注意这里要定义结构体数组用于存***放数据
void input(int n)
{
for (int i = 0; i < n; i++)
{
cin >> stu[i].name >> stu[i].number >> stu[i].score1 >> stu[i].score2 >> stu[i].score3;
}
}
void print(int n)
{
for (int i = 0; i < n; i++)
{
cout << stu[i].name <<","<< stu[i].number << "," << stu[i].score1 << "," << stu[i].score2 << "," << stu[i].score3 << endl;
}
}
int main()
{
int n;
cin >> n;
input(n);
print(n);
return 0;
}
题目 1051: [编程入门]结构体之成绩统计2
题目描述
有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
输入格式
学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
输出格式
各门课的平均成绩 最高分的学生的数据(包括学号、姓名、3门课成绩)
样例输入
2
1 blue 90 80 70
b clan 80 70 60
样例输出
85 75 65
1 blue 90 80 70
MYCPP;//只写出来了平均数,对于成绩最高只能判定当n=2时,当n是另一值的时候没想出来
struct student
{
string number;
string name;
int score1;
int score2;
int score3;
};
struct student stu[99];//定义结构体数组为stu,99的含义是题目中说N<100
void input(int n)
{
for (int i = 0; i < n; i++)
{
cin >> stu[i].name >> stu[i].number >> stu[i].score1 >> stu[i].score2 >> stu[i].score3;
}
}
void print1(int n)//求n组数据的三个成绩分别的平均值函数
{
int temp1, temp2, temp3,sum1=0, sum2 = 0, sum3 = 0;
for (int j = 0; j < n; j++)
{
sum1 += stu[j].score1;
sum2 += stu[j].score2;
sum3 += stu[j].score3;
}
temp1 = sum1 / n;
temp2 = sum2 / n;
temp3 = sum3 / n;
cout << temp1 << " "<<temp2 << " " << temp3<<endl;
}
int main()
{
int n;
cin >> n;
input(n);
print1(n);
return 0;
}
//求n组数据中哪位同学的成绩最好,且输出该同学的各项数据。
//存放最高成绩的学生
int max=0;
//lop保存最高成绩的学生下标
int i=0,lop=-1;
for(;i<n;i++){
int tempmax=sp[i].grade[0]+sp[i].grade[1]+sp[i].grade[2];
//如果当前成绩大于最高成绩,则将当前成绩放入最高成绩变量中
if(max<tempmax){
lop=i;
max=tempmax;
}
题目 1048: [编程入门]自定义函数之字符串拷贝
题目描述
有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
输入格式
数字n 一行字符串 数字m
输出格式
从m开始的子串
样例输入
6
abcdef
3
样例输出
cdef
MYCPP;//正确答案//运用的方法是创立两个数组 把1的后m项传入数组2中 输出新的数组
int main()
{
char ch1[100];
char ch2[100];
int n, m;
cin >> n;
for (int i = 0; i < n; i++)//这里如果用scanf和gets会报错;
{
cin >> ch1[i];
}
cin >> m;
for (int j = 0; j <= n - m+1; j++)//j<=n-m-+1数组下标是从0开始的
{
ch2[j] = ch1[j + (m-1)];
}
for (int i = 0; i < n - m+1; i++)//n-m+1是因为数组下标是从0开始 而后m项和的首个元素在数组1中的下标是m-1
{
cout << ch2[i];
}
return 0;
}