##MySixthLog

本文档提供了多个编程题目,涉及字符串处理、字符类型统计、字符串排序、时间计算、整数处理、数字后移、成绩记录与统计等。通过自定义函数解决这些问题,包括查找元音字母、统计字符类型、实现字符串拷贝、整数排序及结构体数据处理。题目涵盖了基础的算法和数据结构应用。
摘要由CSDN通过智能技术生成

题目 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值