【期末抱佛脚】C++程序设计基础 题库整理(上)

还有一周就要期末了!快把学校的题库做一遍吧 ,说不定期末原题就在其中!!!

(C++题库附详细答案)

第一次实验

1.输入一行字符串,统计元素(易)

【问题描述】输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

【输入形式】根据系统提示,输入一行字符。

【输出形式】输出其中英文字母、空格、数字和其他字符的个数。

【样例输入】

affkd dfd 123 dfj%%**

【样例输出】

enter one line:

letter:11, space:3, digit:3, other:4

【样例说明】根据系统提示,输入一行字符。输出其中英文字母、空格、数字和其他字符的个数。

【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:xt3-16.c或xt3-16.cpp

#include<iostream>
#include<string>
using namespace std;
int main()
{
	int a=0;
	int b=0;
	int c1=0;
	int d=0;
	char c;
	while((c=getchar())!='\n')
	{
		if(c>='a'&&c<='z')
		a++;
		else if(c>='A'&&c<='Z')
		a++;
		else if(c==' ')
		b++;
		else if(c>='0'&&c<='9')
		c1++;
		else 
		d++;
	}
	cout<<a<<b<<c1<<d;
	return 0;
}

(时间紧只打了大概,格式可以上考场在修改)

注意:

用while,结束条件为输入的字符为‘\n’

输入时用getchar函数,不要用cin,cin输入不了空格

这行代码要格外注意不要出错! 

while((c=getchar())!='\n')

2、整数的逆位输出(<5位)(易)

【问题描述】给一个不多于5位的正整数,要求:(1)求出它是几位数;(2)分别打印出每一位数字;(3)按逆序打印出各位数字,例如原数为321,应输出123.

【输入形式】根据系统提示,输入一个不多于5位的正整数。

【输出形式】输出它是几位数、分别输出每一位数字、按逆序输出各位数字。

【样例输入】

564

【样例输出】

enter an integer(0~99999):

place=3

original order:5,6,4

reverse order:465

【样例说明】根据系统提示,输入一个不多于5位的正整数。输出它是几位数、分别输出每一位数字、按逆序输出各位数字。

【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:xt3-12.c或xt3-12.cpp

#include<iostream>
using namespace std;
int main()
{
	int a;
	cin>>a;
	int t;
	for(int i=0;i<5;i++)
	{
		t=a%10;
		cout<<t<<endl;
		a=a/10;
		if(a/10==0)
		{
		cout<<a;
		break;}
	}
	return 0;
}

3、输出成绩等级(太易)

【问题描述】给出一个百分制的成绩,要求输入成绩等级‘A’‘B’‘C’‘D’‘E’。90分以上为‘A’,80-89分为‘B’,70-79分为‘C’,60-69分为‘D’,60分以下为‘E’。如果输入的分数没有在0~100以内,提示“data error,enter data again.”。

【输入形式】根据系统提示,输入学生的分数。

【输出形式】输出学生的分数和等级。

【样例输入】

88.2

【样例输出】

please enter score of student:

score is 88.2, grade is B

【样例说明】根据系统提示,输入学生的分数。输出学生的分数和等级。

【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:xt3-11.c或xt3-11.cpp

 if,if else的应用,很简单,不写也罢

4、求函数值(太易)

编写一程序,输入x,输出y的值。

【一个分段函数.JPG】

【输入形式】根据系统提示,输入x。

【输出形式】输出x的值和函数y的值。

【样例输入】

10

【样例输出】

enter x:

x=10, y=3*x-11=19

【样例说明】根据系统提示,输入x。输出x的值和函数y的值。

【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:xt3-10.c或xt3-10.cpp

 第二次实验

1、回文数(太易)

【问题描述】一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。  

【输入形式】12321回车
【输出形式】
【样例输入】78987
【样例输出】this number is a hui wen

【样例说明】
【评分标准】10分

解略

2、寻找最大最小整数(易)

【问题描述】编写一个程序,用户输入若干整数,试找出其中的最大数和最小数。

【输入形式】用户在第一行待输入数据个数,在第二行输入数据。

【输出形式】程序在下一行输出数据的最大值和最小值

【样例输入】

5

 89 62 96 74 52

【样例输出】

96 52

【样例说明】用户第一次输入的为数据个数,在下一行依次输入数据。输出为5个数中的最大值和最小值,输出时候两个数之间用空格分隔。

【评分标准】 结果完全正确得10分,每个测试点2分。提交程序名为:getmaxandmin.c或getmaxandmin.cpp

图方便用的STL,不知道考试时行不行,应该可以吧

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int main()
{
	deque<int>d1;
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int x;
		cin>>x;
	    d1.push_back(x);
	}
	sort(d1.begin(),d1.end());
	cout<<d1[0]<<" "<<d1[n-1];
	return 0;
}

用数组做也是可以的,但要注意把多余的元素赋一个很小很小的值

第三次实验

1、银行本息计算 (太易)

【问题描述】已知银行整存整取存款不同期限的月息利率分别为:

0.315% 期限一年

0.330% 期限二年

0.345% 期限三年

0.375% 期限五年

0.420% 期限八年

(其他情况认为利率为零)要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。

【输入形式】用户依次存钱的本金和期限。

【输出形式】程序在下一行输出从银行得到的利息与本金的合计。

【样例输入】

120000 3

【样例输出】

Total=134904

【样例说明】用户依次存钱的本金和期限。输出为从银行得到的利息与本金的合计。

【评分标准】 结果完全正确得10分,每个测试点2分。提交程序名为:deposit.c或deposit.cpp

注:这是一道很长知识的题哈哈哈,第一次做的时候错在了没有生活经验上

解略

2、简单的计算器程序(太易)

【问题描述】编写一个简单计算器程序,输入格式为:data1 op data2。其中data1和data2是参加运算的两个数,op为运算符,它的取值只能是+、-、*、/。

【输入形式】用户依次输入data1、op 和data2分别对应的值。

【输出形式】程序在下一行输出运算形式及运算结果。

【样例输入】

5 * 3

【样例输出】

5*3=15

【样例说明】用户依次输入data1、op 和data2分别对应的值。输出为运算形式及运算结果。

【评分标准】 结果完全正确得10分,每个测试点2分。提交程序名为:counter.c或counter.cpp

解略

第四次实验

 

1.评委打分(中)

【问题描述】当前许多歌手大奖赛评分时,为了体现公平,在评委给出分数后统计平均得分时,都会去掉最高分和最低分。编写程序,读入评委打分(分数都是整数,评委人数大于等于5,小于等于50),去掉两个最高分和两个最低分,计算并输出平均得分(小数点后保留两位有效数字)。

【输入形式】从控制台输入评委人数,然后在下一行输入评委的打分(以一个空格分隔的整数)。

【输出形式】输出平均得分(小数点后保留两位有效数字)。

【样例输入】

15

90 98 99 100 92 97 98 95 91 90 100 92 93 98 90

【样例输出】

Please enter the number of judges:

Please enter the scores given by the judges:

Average score:94.82

【样例说明】输入评委打分有15个,去掉两个最高分100和100,两个最低分90和90,计算平均得分为:94.82。

【评分标准】 要求输出平均得分,共有5个测试点,提交程序文件名为:pingwei.c或pingwei.cpp

想了很久也不是很明白数组怎么做比较简单,又是用STL做的

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int main()
{
	deque<int>d1;
	int n;
	int total=0;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int x;
		cin>>x;
	    d1.push_back(x);
	}
	sort(d1.begin(),d1.end());
	//cout<<d1[0]<<" "<<d1[n-1];
	d1.pop_back();
	d1.pop_back();
	d1.pop_front();
	d1.pop_front();
	for(int j=0;j<n-4;j++)
	{
		total=+d1[j];
	}
	int t2=total/(n-4);
	cout<<t2;
	return 0;
}

2、韩信点兵(易)

【问题描述】相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据包含3个整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100。输入到文件结束为止。

【输入形式】用户输入表示每种队形排尾的人数a,b,c(a<3,b<5,c<7),输入到文件结束为止。

【输出形式】输出总人数的最小值(或报告无解)。

【样例输入】

2 4 6

1 1 1

1 4 5

1 3 1

【样例输出】

Case 1: No answer

Case 2: No answer

Case 3: 19

Case 4: 43

【样例说明】用户输入表示每种队形排尾的人数a,b,c(a<3,b<5,c<7)。输出总人数的最小值(或报告无解)。

【评分标准】 结果完全正确得10分,每个测试点5分。提交程序名为:hanxin.c或hanxin.cpp

#include<iostream>
using namespace std;
int main()
{
	int a,b,c,d;
	cin>>a>>b>>c;
	for(int i=10;i<=100;i++)
	{
		d=i;
		if(d%3==a&&d%5==b&&d%7==c)
		{
		  cout<<d<<endl;
		  break;
		}
		if(i==100)
		cout<<"no answer";
	}
	return 0;
}

 3、拍桌子(易)(输出格式)

【问题描述】输入一个100以内的数字n,从1开始数到数字n,如果数字个位含有7,或者十位含有7,或者该数字是7的倍数,打印敲桌子,其余数字直接打印输出(输出要求左对齐,每个数据占20列宽度,且每输出5个数据换行)。

【输入形式】从控制台输入一个100以内的数字n。

【输出形式】如果数字个位含有7,或者十位含有7,或者该数字是7的倍数,打印敲桌子,其余数字直接打印输出(输出要求左对齐,每个数据占20列宽度,且每输出5个数据换行)。

【样例输入】

20

【样例输出】

Please enter an ending number within 100:

1                    2                            3                   4                             5    

6                    knock the table     8                   9                             10

11                  12                          13                  knock the table     15

16                  knock the table     18                  19                           20

【样例说明】输入20,则从1开始数到20,遇到7、14、17打印敲桌子,其他数字直接输出。

【评分标准】 要求按正确格式输出,共有5个测试点,提交程序文件名为:qiaozhuozi.c或qiaozhuozi.cpp

#include<iostream> 
#include<iomanip>
using namespace std;
int main()
{
	int n;
	cout<<"Please enter an ending number within 100:"<<endl;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		//for(int j=1;j<=n;j++){
		
		if(i%10==7||i==7)
		{
			cout<<setiosflags(ios::left);
			cout<<setfill(' ')<<setw(20)<<"knock the table";
		}
		else if(i>10&&i%7==0)
		{
			cout<<setiosflags(ios::left);
			cout<<setfill(' ')<<setw(20)<<"knock the table";
		}
		else
		{
			cout<<setiosflags(ios::left);
			cout<<setw(20)<<i;
		}
		if(i%5==0&&i>=5)
		cout<<endl;
	//}
	}
	return 0;
}

输出格式要背!不然考试格式错误就没法满分啦 

第五次实验

1、打印日历(难)

真说难其实也就那样,但数很大而且错误不太好找 

 【问题描述】已知:公元1年1月1日是星期一,根据输入的年份和月份来输出该年月的日历。如下图所示

上图中每个星期几占5个字节,右对齐,由于简写显示本身就占3个字节,所以只需要在简写前面多输出两个空格就好了。每个日期数字占5个字节,也是右对齐,这样能使输出的日历上下对齐。

1、定义函数leapYear:判断闰年;

2、定义函数whatDay:计算某年某月的1号是星期几;

3、定义函数printMonth:按要求的格式打印某年某月的日历。

【输入形式】输入所要打印的年份和月份。

【输出形式】输出该年月的日历,其中每个星期几占5个字节,右对齐,由于简写显示本身就占3个字节,所以只需要在简写前面多输出两个空格就好了。每个日期数字占5个字节,也是右对齐,这样能使输出的日历上下对齐。

【样例输入】

2020 4

【样例输出】

Please enter the year and month:

【样例说明】用户输入所要打印的年份和月份。输出该年月的日历,其中每个星期几占5个字节,右对齐,由于简写显示本身就占3个字节,所以只需要在简写前面多输出两个空格就好了。每个日期数字占5个字节,也是右对齐,这样能使输出的日历上下对齐。

【评分标准】 结果完全正确得20分,每个测试点4分。提交程序名为:calendar.c或calendar.cpp

#include<iostream>
#include<iomanip>
using namespace std;
bool leapYear(int year) 
{
	bool a;
	if(year%4==0&&year%100!=0||year%400==0)
	{
		a=true;
		return a;
	}
	else
	{
	a=false;
	return a;
    }
}

int YearDays(int year)
{
	int yearday;
	if(leapYear(year))
	{
		yearday=366;
	}
	else
	{
		yearday=365;
	}
	return yearday;
}
 
int MonthDays(int monthnum,int year){
	int monthday;
	switch(monthnum)
 {
	case 4:
	case 6:
	case 9:
	case 11:
	//monthday=30;
	   return 30;
	case 2:
	if(leapYear(year))
	{
		//monthday=29;
		return 29;
	 } 
	else
	{
		//monthday=28;
		return 28;
	}
	default:
	return 31;
 }
}

int TotalDays(int year,int monthnum)
{
	long int totalday;
	int day1=0;
	int day2=0;
	for(int i=1;i<year;i++)
	{ 
	  day1+=YearDays(i);
	} 
	
	for(int j=1;j<monthnum;j++)
	{
		day2+=MonthDays(j,year);
	}
	totalday=day1+day2;
	return totalday;
}

int main()
{
	int year;
	int monthnum;
	cout<<"Please enter the year and month:"<<endl;
	cin>>year>>monthnum;
	cout<<"  Mon  Tue  Wed  Thu  Fri  Sat  Sun"<<endl;
	int week;
	long int totalday=TotalDays(year,monthnum);
	week=totalday%7;
	//if(week==0)
	//week=0;
	for(int i=0;i<week;i++)
	{
		cout<<"     ";
	}
	int monthday=MonthDays(monthnum,year);
	for(int j=1;j<=monthday;j++)
	{
		
		cout<<setiosflags(ios::right)<<setw(5)<<j;
		
		if((totalday+j)%7==0)
		{
			cout<<endl;
		}
	}
	cout<<endl;
	return 0;
}

思路:

1.判断闰年

返回值为布尔型

(后面if(yearday(a))直接判断ture or false)

注意判断条件的写法:不等于是!=0

 

2.得出年份天数

return值为年份天数

3.判断并得月天数

可以用switch case,也可以用if

注意switch语法!

 

switch(monthnum)
 {                            //!!!!!花括号!
	case 4:                   //后面是冒号
	case 6:
	case 9:
	case 11:
	   return 30;
	case 2:                   //case2后面有判断闰年的if
	if(leapYear(year))
	{
		return 29;
	 } 
	else
	{
		return 28;
	}
	default:                 //default不要忘了!!!!!
	return 31;
 }
4.计算总天数

分成年 月 两部分

for循环

注意:年月从1开始for(int i=1;...;...)

5.计算每个月的第一天是星期几
long int totalday=TotalDays(year,monthnum);
	week=totalday%7;                                  //总天数%7得这月一号是周几
	for(int i=0;i<week;i++)                           //周几就在前面打n-1的空格
	{
		cout<<"     ";
	}

 

6.输出格式(遇到周日换行)
int monthday=MonthDays(monthnum,year);
	for(int j=1;j<=monthday;j++)                       //输出日期数字啦
	{                                                  //=
        
		cout<<setiosflags(ios::right)<<setw(5)<<j;     //输出格式右对齐5字节
		
		if((totalday+j)%7==0)                           //遇到周日换行
		{
			cout<<endl;
		}
	}

 

2、登月纸桥(中)

其实也不难,只是我第一遍怎么也做不对

【问题描述】已知:月球离地球最近距离(近地点)为363300千米,最远距离(远地点)为405500千米,一张纸的厚度一般为0.088到0.114毫米。

编写一个foldTimes函数,计算需要把纸折叠多少次(假设纸张足够大,可以无限次折叠),其厚度才能搭建一座登月纸桥,考虑到将来需要到更远的星球,所以函数需要根据具体距离计算纸张折叠的次数并返回。

【输入形式】输入星际距离(单位千米)和纸张厚度(单位毫米)。

【输出形式】输出需要折叠的次数。

【样例输入】

363300 0.088

【样例输出】

Please enter the interstellar distance and paper thickness:

Need to fold 42 times!

【样例说明】用户输入星际距离(单位千米)和纸张厚度(单位毫米)。输出需要折叠多少次,其厚度才能搭建一座登月纸桥。

【评分标准】 结果完全正确得10分,每个测试点2分。提交程序名为:moon_landing.c或moon_landing.cpp

#include <iostream>
using namespace std;
int times(double dis,double thick);
int main(){
	cout<<"Please enter the interstellar distance and paper thickness:"<<endl;
double dis,thick;
cin>>dis>>thick;
cout<<"Need to fold "<<times(dis,thick)<<" times!"<<endl;
return 0;
} 
int times(double dis,double thick)
{
int sum=0;
dis=1000000*dis;                                          //统一单位为mm;1000(m) 00(cm) 0(mm)
while(thick<dis){
	thick*=2;                                             //不断*2
	sum++;}                                               //折叠次数+1
return sum;
}

下面这个也行哈 

#include<iostream>
using namespace std;
int main()
{
	double a=0.088;
	double b=363300000000;
	int i,t;
	t=0;
	for(i=1;;i++)
	{
		a*=2;
		t++;
		if(a>b)
		break;
	}
	cout<<t;
	return 0;
 } 

3、斐波那契数列(中)

【问题描述】已知:斐波那契级数模型的特点是

1,1,2,3,5,8,13,21,34,55,89,144,233……

特点是前面相邻两项之和,构成了后一项。请用递归的方法编写函数求Fibonacci级数。

【输入形式】输入要求斐波那契级数的第几项。

【输出形式】输出该项的值。

【样例输入】

20

【样例输出】

Please enter the item of Fibonacci sequence required:

The value of the 20 item of the sequence is: 6765

【样例说明】用户输入要求斐波那契级数的第20项。输出第20项的值是172。

【评分标准】 结果完全正确得10分,每个测试点2分。提交程序名为:fibonacci.c或fibonacci.cpp

#include<iostream>
using namespace std;
int F(int n)                    //利用return递归
{
	if(n==1||n==2)              //n=1或n=2时F=1
	{
		return 1;
	}
	else{
	return F(n-1)+F(n-2);
    }
}
int main()
{
	int n;
	cin>>n;
	cout<<F(n);
	return 0;
}

4、整数顺位输出(中)

【问题描述】请采用递归函数实现:输入一个正整数,然后把该整数的每一位数字从高位到低位顺序输出,每个数字占一行。

【输入形式】输入一个正整数。

【输出形式】输出该整数的每一位数字从高位到低位顺序输出,每个数字占一行。

【样例输入】

12345

【样例输出】

Please enter a positive integer:

The sequential output from high to low is:

1

2

3

4

5

【样例说明】提示用户输入一个正整数。从高位到低位顺序输出该正整数的每一位数字,每个数字占一行。

【评分标准】 结果完全正确得10分,每个测试点2分。提交程序名为:int_dec.c或int_dec.cpp

#include<stdio.h>
void Print(int n)
{
    if(n>9)
    {
       Print(n/10);
    }
    printf("%d ",n%10);
}
int main()
{
    int n;
    scanf("%d",&n);
    Print(n);
    return 0;
}

  • 37
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值