C语言/C++练习题

这篇具有很好参考价值的文章主要介绍了C语言/C++练习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++练习题

1、计算某个月有多少天

题目:从键盘输入年份和月份,输出这个月的天数。
【样例输入】2023 1

【样例输出】31

【样例输入】2020 2

【样例输出】29
提示:当输入的月份为2月份时,需要判断该年年份是否为闰年。
判断闰年的条件:年份为4的倍数并且不是100的倍数,或者年份是400的倍数。

int main(){	
	int year,month,day=0;
	cout<<"请输入年份和月份,以空格分隔:";
	cin>>year>>month;
	switch(month){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:day=31;break;
		case 4:
		case 6:
		case 9:
		case 11:day=30;break;
		case 2:
			if(year%4==0&&year%100!=0||year%400==0){
				day=29;
			}else{
				day=28;
			}
			break;
		default:cout<<"月份输入有误。";
	}
	if(day!=0){
		cout<<year<<"年"<<month<<"月有"<<day<<"天";
	}
}

2、输出1-200之间的质数。

在控制台打印输出1-200之间所有的质数,以空格分割。

提示:只有1和这个数本身能被它自己整除的数就是质数。

int main(){
	bool flag; 
	for(int i=2;i<=200;i++){
		flag=false;
		for(int j=2;j<i;j++){
			if(i%j==0){
				flag=true;
				break;
			}
		}
		if(!flag){
			cout<<i<<" ";
		}
	} 
}

3、计算矩阵边缘元素之和

输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

输入描述

第一行分别为矩阵的行数m和列数n(m<100,n<100),两者之间以一个空格分开。
接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。

输出描述

输出对应矩阵的边缘元素和。

用例输入 1

3 3
3 4 1
3 7 1
2 0 1

用例输出 1

15
#include<iostream>
using namespace std;

int main()
{
    int n,m;
    cin>>m>>n;
    int arr[m][n];
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            cin>>arr[i][j];
        }
    }
	int sum=0;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(i==0||i==m-1){
                sum+=arr[i][j];
            }else if(j==0||j==n-1){
                sum+=arr[i][j];
            }
        }
    }
    cout<<sum;
}

4、判断数字位数

编写一个函数get_length(…),计算输入的正整数有多少位。

输入描述

一个正整数(不超过10位)。

输出描述

一个整数,表示输入的正整数的位数

用例输入 1

123456

用例输出 1

6
#include<iostream>
using namespace std;
int get_length(int n);
int main()
{
	int n;
	cin>>n;
	cout<<get_length(n);
 } 

int get_length(int n){
	//正整数的位数最少也有1位,所以初始值赋值为1
    int i=1;
	while(n/10!=0){
		n/=10;
		i++;
	}	
	return i;
}

5、整数重组

任意给定一个正整数,把它重新组成一个最大值和一个最小值,求出两数的差。例如:3721,可以重新组成的最大数为7321,组成的最小数为1237,两数之差为7321-1237=6084。

输入描述

x(整数1≤x≤100000)

输出描述

最大值和最小值的差

用例输入 1

3721

用例输出 1

6084
#include<iostream>
using namespace std;

int X(int *a,int n){
	int i=0;
	while(n!=0){
		a[i]=n%10;
		n=n/10;
		i++;
	}
	//对数组元素升序排序 
	for(int k=0;k<i;k++){
		for(int j=0;j<k;j++){
			if(a[k]>a[j]){
				int t=a[k];
				a[k]=a[j];
				a[j]=t;
			}
		} 
	}
	//返回整数的位数 
	return i;
} 
int main()
{
	int n;
	cin>>n;
	int a[100]={};
	//统计输入数字的位数,并将所有数位上的数以升序存到数组a中 
	int count=X(a,n);
	int max=0,min=0;
	int x=1,y=1;
	//最小值则以数组元素从前往后结合,最大值则以数组元素从后往前结合 
	for(int i=0,j=count-1;i<count;i++,j--){
		//最小值从前往后遍历,最大值从后往前遍历 
		//从个位开始,依次用数位上的数字x1,x10,x100,...... 
		min+=a[i]*x;
		x*=10;
		max+=a[j]*y;
		y*=10;
	}
	cout<<max-min;
 } 

6、冰雹猜想

冰雹猜想:它首先流传于美国,不久传到欧洲,后来由一位叫角谷的日本人带到亚洲。通俗地讲,冰雹猜想的内容是这样的:任意给定一个自然数n,当n是偶数时,将它除以2,即将它变成n/2;当n是奇数时,就将它变成3n+1,……,若干步后,总会得到1。
在上述演变过程中,将每一次出现的数字排列起来,就会出现一个数字序列。
我们现在要解决的问题是:对于给定的n,求出数字序列中第一次出现1的位置。

输入描述

输入一个自然数n。输出序列中第一次出现1的位置。

输出描述

输出序列中第一次出现1的位置。

用例输入 1

6

用例输出 1

9
#include<iostream>
using namespace std;

int main()
{
	long long n;
	cin>>n;
	long long index=0;
	while(true){
		index++;
		if(n==1){
			cout<<index;
			break;
		}
		if(n%2==0){
			n=n/2;
		}else{
			n=3*n+1;
		}
		
	}
 } 

7、长方形比大小

长方形家族有个很俗气的传统:谁大谁优先。 “比大小”的规则是:

  1. 面积大的优先
  2. 面积相同时,周长长的优先

请将n个长方形按“比大小”的规则排序后,输出每个长方形的序号。长方形的序号是1~n,和长方形的输入顺序一致。

输入描述

第1行,输入一个小于100的正整数,表示长方形的个数;
接下来的n行,每行输入一个长方形的长和宽(都是正整数),中间用单个空格隔开。

输出描述

输出n个正方形的序号。每个长方形占一行。

用例输入 1

5 
9 7
3 4
2 3
2 6
3 21

用例输出 1

5
1
4
2
3

代码:

#include <bits/stdc++.h>
using namespace std;
struct stu{
	int a;
	int b;
	int c;
};
stu s[100];
bool cmp(stu x,stu y){
    if(x.a*x.b==y.a*y.b){
        return x.a+x.b>y.a+y.b;
    }else{
        return x.a*x.b>y.a*y.b;
    }
}

int main(){
    int num;
    cin>>num;
    for(int i=0;i<num;i++){
        cin>>s[i].a>>s[i].b;
        s[i].c = i+1;
    }
    sort(s,s+num,cmp);
    for(int i=0;i<num;i++){
        cout<<s[i].c<<endl;
    }
    return 0;
}

8、生日排序

小童知道CSP兴趣小组中每个同学的生日,想编程将小组成员按照年龄从大到小的顺序排序。但是小童编程水平很菜,忙活了半天都没有实现自己的想法。请身为编程小能手的你,帮他完成排序。

输入描述

输入共有 n+1 行,第 1 行为 CSP兴趣小组总人数 n;
第 2 行至第 n+1 行分别是每个人的姓名 s、出生年 y、月 m、日 d。
1<n<100。保证年月日实际存在,且年份在1990~2022范围内。包括1990和2022。

输出描述

输出共有 n 行,即 n 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)。

用例输入 1

3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1

用例输出 1

Luowen
Yangchu
Qiujingya

代码:

#include<bits/stdc++.h>
#include<string>
using namespace std;

struct stu{
    string name;
	int year;
    int month;
    int day;
};
stu s[100];
bool cmp(stu x,stu y){
    if(x.year!=y.year){
        return x.year<y.year;
    }else{
        if(x.month!=y.month){
        	return x.month<y.month;	
		}else{
			if(x.day!=y.day){
				return x.day<y.day;
			}else{
				return true;
			}
		}
	}
}

int main(){
    int num;
    cin>>num;
    for(int i=0;i<num;i++){
        cin>>s[i].name>>s[i].year>>s[i].month>>s[i].day;
    }
    sort(s,s+num,cmp);
    for(int i=0;i<num;i++){
        cout<<s[i].name<<endl;
    }
    return 0;
}

9、候选人投票

有3个候选人:姓氏分别是“li”、“zhang”、“sun”。有n个选民,每个选民只能投票选择一个候选人。输入n个选民的选票,输出3个候选人各自的得票结果。要求:使用结构体解题。

输入描述

第1行是一个正整数n。(10 ≤ n ≤ 100)
第2行是n个字符串。每个字符串都是一个候选人的姓氏。

输出描述

共3行。按“li”、“zhang”、“sun”的顺序输出3个候选人的得票情况,格式是“姓氏:得票数”。

用例输入 1

10
zhang li sun sun li sun sun zhang zhang li

用例输出 1

li:3
zhang:3
sun:4
#include<bits/stdc++.h>
using namespace std;

struct stu{
    char name[100];
    int num;
};
stu s[100];

int main(){
	strcpy(s[0].name,"li");
	s[0].num=0;
	strcpy(s[1].name, "zhang");
	s[1].num=0;
	strcpy(s[2].name, "sun");
	s[2].num=0;
	
    int n;
    cin>>n;
    string c[100];
    int i=0;
    //将n个选民的投票情况保存到数组中 
	while(cin >> c[i])
    {
    	i++;
    	if(cin.get()=='\n'){
    		break;
		}		
	}
	//遍历数组,和结构体数据比较,如果姓氏相同,则候选人票数增加 
    for(i=0;i<n;i++){
	   for(int j=0;j<3;j++){
			if(s[j].name==c[i]){
				s[j].num+=1;
				break;
			}
	   }
    }
    for(i=0;i<3;i++){
        cout<<s[i].name<<":"<<s[i].num<<endl;
    }
    return 0;
}

10、病人排队

请编写一个病人排队看病的程序。
病人有登记序号、年龄和ID三个信息。ID是一个长度小于10的字符串,每个病人的ID各不相同且只含数字和字母。
排队规则是:
1.老年人(年龄 ≥ 60岁)比非老年人优先看病。
2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
3.非老年人按登记的先后顺序看病。

输入描述

第1行,输入一个小于100的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的ID和年龄,中间用单个空格隔开。
病人的登记序号是1~n,和病人的输入顺序一致。

输出描述

按规则排序后的病人ID,每行一个。

用例输入 1

5
021075 40
004003 15
010158 67
021033 75
102012 30

用例输出 1文章来源地址https://www.toymoban.com/news/detail-463963.html

021033
010158
021075
004003
102012
#include<iostream>
#include <bits/stdc++.h>
using namespace std;

struct s{
	char id[21];
	int age;
	int I;
};
s stu[100];
s old[100];
s young[100];
bool cmp_o(s x,s y){
    if(x.age==y.age){
        return x.I<y.I;
    }else{
        return x.age>y.age;
    }
}

bool cmp_y(s x,s y){
    return x.I<y.I;
}

int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>stu[i].id>>stu[i].age;
		stu[i].I=i;
		cin.get();
	}
	
	int j=0,k=0;
	for(int i=0;i<n;i++){
		if(stu[i].age>=60){
			old[j++]=stu[i];
		}else{
			young[k++]=stu[i];
		}
	}
	//排序
	sort(old,old+j,cmp_o);
	sort(young,young+k,cmp_y);
	for(int i=0;i<j;i++){
		cout<<old[i].id<<endl;
	} 
	for(int i=0;i<=k;i++){
		cout<<young[i].id<<endl;
	} 
 } 

到了这里,关于C语言/C++练习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第二天-C++类与对象练习题(物联技术666)

    网盘链接:https://pan.baidu.com/s/1TKdHdeuDI8XPaakepvSLZQ?pwd=1688  提取码:1688 设计一个学生类,包括学号、姓名、成绩,并设计接口函数用来输出这些学生数据并计算平均分。并编写main函数进行测试: 输出如: 学号 姓名 成绩 1 张XX 98 2 王XX 90 3 XXX 89 平均成绩: XX //*******************

    2024年01月16日
    浏览(11)
  • JAVA面向对象练习题,课后编程题。题目为:公司员工分为5类,每类员工都有相应的封装类。

    某公司的员工分为5类,每类员工都有相应的封装类,这5个类的信息如下 (1)Employee:这是所有员工的父类。 ①属性:员工的姓名、员工的生日月份。 )方法:getSalary(int month)根据参数月份确定工资。如果该月员工过生日,则公司会额外发放100元。 (2)SalariedEmployee:Employee 

    2024年02月05日
    浏览(13)
  • C 语言练习题更新

    目录(先不要看答案,首先自己做才能更好的领悟,做不来没关系) 题目一:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是 1、2、3、4,组成所有的排列后再去掉不满足条件的排列。 题目

    2024年02月14日
    浏览(9)
  • C语言之练习题

    C语言之练习题

    欢迎来到我的: 世界 希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 ! 这期文章由:两题问答题+四道编程题;小孩在文章中写有详细解题思路,感谢大家支持支持。 思路: 首先我们要知道 x=x(x-1) 的含义; 假设x=3;也就是 011 ; 而x-1=2;是 010 ;

    2024年02月10日
    浏览(14)
  • 习题练习 C语言(暑期)

    习题练习 C语言(暑期)

    今天为大家分享我暑假期间所练习的一些小题目! 相信大家看完之后都会有所提升的! 加油! 以下不正确的定义语句是( ) A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0}; B: char c2[] = {‘x10’, ‘xa’, ‘8’}; C: char c1[] = {‘1’,‘2’,‘3’,‘4’,‘5’}; D: int y[5+3]={0, 1, 3, 5, 7, 9}; 题目解

    2024年02月10日
    浏览(11)
  • C语言习题练习

    C语言习题练习

    首先我们要了解什么是offsetof宏: . 此具有函数形式的宏返回数据结构或联合类型中成员成员的偏移值(以字节为单位)。 . 返回的值是size_t类型的无符号整数值,其字节数位于指定成员与其结构开头之间。 什么意思呢,可以看到下面这张图片: 下面我们来看到这一习题:

    2024年02月15日
    浏览(16)
  • 习题练习 C语言

    习题练习 C语言

    首先我们要了解什么是offsetof宏: . 此具有函数形式的宏返回数据结构或联合类型中成员成员的偏移值(以字节为单位)。 . 返回的值是size_t类型的无符号整数值,其字节数位于指定成员与其结构开头之间。 什么意思呢,可以看到下面这张图片: 下面我们来看到这一习题:

    2024年02月14日
    浏览(11)
  • C语言之数组练习题

    C语言之数组练习题

    第1关:数组插入元素 300 任务要求 参考答案 评论106 任务描述 相关知识 数组 数组元素的表示方法 编程要求 测试说明 任务描述 本关需要你将一个数插入到一组已经排好序的数组并输出。 相关知识 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式

    2024年02月05日
    浏览(11)
  • 【C语言】练习题整理:11

    今天是10道选择题 下面代码段的输出结果是: -12 自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。 如x=y=z,由于“=”的右结合性,应先执行y=z,再执行x=(y=z)运算。 C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。 计算顺序是

    2024年02月11日
    浏览(11)
  • C语言/C++练习题

    题目:从键盘输入年份和月份,输出这个月的天数。 【样例输入】2023 1 【样例输出】31 【样例输入】2020 2 【样例输出】29 提示:当输入的月份为2月份时,需要判断该年年份是否为闰年。 判断闰年的条件:年份为4的倍数并且不是100的倍数,或者年份是400的倍数。 ​ 在控制

    2024年02月06日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包