【C++】课程常见代码 知识点 期末复习资料

Dev C++ 调试

1. debug调试

Dev C++调试教程
Dev C++调试程序方法详解
注意:对于修改后的程序,调试程序之前一定要先编译程序。

2. cout调试

cout格式化输出

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int n = 141;
    //1) 分别以十六进制、十进制、八进制先后输出 n
    cout << "1)" << hex << n << " " << dec << n << " " << oct << n << endl;
    double x = 1234567.89, y = 12.34567;
    //2)保留5位有效数字
    cout << "2)" << setprecision(5) << x << " " << y << " " << endl;
    //3)保留小数点后面5位
    cout << "3)" << fixed << setprecision(5) << x << " " << y << endl;
    //4)科学计数法输出,且保留小数点后面5位
    cout << "4)" << scientific << setprecision(5) << x << " " << y << endl;
    //5)非负数显示正号,输出宽度为12字符,宽度不足则用 * 填补
    cout << "5)" << showpos << fixed << setw(12) << setfill('*') << 12.1 << endl;
    //6)非负数不显示正号,输出宽度为12字符,宽度不足则右边用填充字符填充
    cout << "6)" << noshowpos << setw(12) << left << 12.1 << endl;
    //7)输出宽度为 12 字符,宽度不足则左边用填充字符填充
    cout << "7)" << setw(12) << right << 12.1 << endl;
    //8)宽度不足时,负号和数值分列左右,中间用填充字符填充
    cout << "8)" << setw(12) << internal << -12.1 << endl;
    cout << "9)" << 12.1 << endl;
    return 0;
}

程序的输出结果是:
1)8d 141 215
2)1.2346e+06 12.346
3)1234567.89000 12.34567
4)1.23457e+06 1.23457e+01
5)***+12.10000
6)12.10000****
7)****12.10000
8)-***12.10000
9)12.10000
需要注意的是,setw() 算子所起的作用是一次性的,即只影响下一次输出。每次需要指定输出宽度时都要使用 setw()。因此可以看到,第 9) 行的输出因为没有使用 setw(),输出的宽度就不再是前面指定的 12 个字符。

输入字符统计

【问题描述】

从键盘输入n个字符,请分别统计大写字母、小写字母、数字、其他字符的个数并输出;还需要输出所有数字字符之和。
【输入形式】

第一行为一个整数n(100>=n>=0),接下来n行每行一个字符。

【输出形式】

输出第1行为4个整数,分别表示大写字母、小写字母、数字、其他字符的个数,第2行为一个数字,表示其中所有数字字符所对应的数字之和,当输入的字符中不包含数字字符时,没有第2行。

#include <iostream>
using namespace std;
int main()
{
	int n,num=0,sum=0;
	cin>>n;
	//n=5;
	char a[n];
	int A[4]={0,0,0,0};
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}

	for(int i=0;i<n;i++)
	{
		if(a[i]>=65&&a[i]<=90)
		{
			A[0]++;
		}
		else if(a[i]>=97&&a[i]<=122)
		{
			A[1]++;
		}
		else if(a[i]>=48&&a[i]<=57)
		{
			A[2]++;
		  num=a[i]-'0';//char类型转换int 类型
			sum =sum+num;
		}
		else if(a[i]<48||(a[i]>=58&&a[i]<=64)||a[i]>122)
		{
			A[3]++;
		}
	}
	for (int j=0;j<4;j++)
	{
		cout<< A[j]<<" ";
	}
	cout<< endl;
	if(A[2]>0)
	{
		cout<< sum;
	}
	return 0;
}

排序

十种排序算法

//选择排序
void choiceSort(int arr[], int n){  
	for(int i = 0;i < n; i++){  
		int m = i;  
        for(int j = i + 1;j < n;j++){  
            //如果第j个元素比第m个元素小,将j赋值给m   
			if(arr[j] < arr[m]){  
                m = j;  
            }  
        }  
        //交换m和i两个元素的位置   
		if(i != m){  
            int t = arr[i];  
            arr[i] = arr[m];  
            arr[m] = t;  
		}  
    }  
}

这个月有多少天?

【问题描述】

输入年份和月份,输出该月份的天数。
【输入形式】

输入一行,两个整数,分别为年份和月份。
【输出形式】

int main()
{
	int x, y, day;
	cin>>x>>y;
	switch(y){ 
		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(x % 4 == 0 && x % 100 !=0 || x % 400 ==0)
				day=29;
			else 
				day=28;
			break;	
		}	
	}
	cout<<day<<endl;
	return 0;
}

今夕何夕

【问题描述】

   今天是2017年8月6日,农历闰六月十五。
   小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。
   为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。
   小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年。
#include<bits/stdc++.h>
using namespace std;
int Date(int y,int m,int d){
	if(m==1||m==2){
		y--;
		m+=12;
	}
    int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
	return week;
}
bool leap(int y){
	if((y%4==0&&y%100!=0)||y%400==0)return true;
	return false;
}
int main(){
	int t,y,m,d,week;
	scanf("%d",&t);
	for(int i=0;i<t;i++){
		scanf("%d-%d-%d",&y,&m,&d);
		week=Date(y,m,d);
		for(int j=y+1;j<10000;j++){
			if(leap(y)&&m==2&&d==29){
				if(!leap(j))continue;
			}
            if(week==Date(j,m,d)){
				printf("%d\n",j);
				break;
			}
		}
	}
	return 0;
} 

字符串反转(指针实现)

【问题描述】
从键盘输入一个长度不超过200的字符串,将该字符串反转后输出。
【输入形式】
输入为一行一个字符串
【输出形式】
输出反转后的字符串
【样例输入】
student
【样例输出】
tneduts
【样例说明】
【评分标准】

小希练打字

【问题描述】

小希打字太慢了,因此他在苦练打字技巧。他用了一个教学 App,可以一个个显示自己打出来的英文单词。

当小希输入一个词时,他需要花0.2 秒输入第一个字母。而对于接下来的每个字母,如果在标 准指法下和前一个字母使用同侧手输入,则需要 0.4 秒;否则只需 0.2 秒。输入一个词所需的时间 为输入每个字母所需时间之和。不过,如果小希之前练过这个词,那么所需的时间可以降为初次 输入时的一半。

小希输入的内容只包含26个英文字符(区分大小写),字符要求按照标准指法规定输入,其中"qwertasdfgzxcvb"这15个字符为左手字符,“yuiophjklnm”这11个字符为右手字符。

给定小希在练习中依次输入的词,请计算小希的总耗时。

【输入形式】

每组数据的第一行包含一个整数 N。接下来 N 行,每行包含一个字符串,代表小希输入的词。

【输出形式】

对于每组数据,输出一行,包含一个整数,代表小希的总耗时,单位为十分之一秒。

E-mail地址

【问题描述】
e 妹儿公司的一个主要业务是提供电子邮件服务,每天都有数以万计的用户在使用该平台收发电子邮件e-mail。然而不幸的是,最近公司的邮件服务器遭受到了网络攻击,几乎所有的邮件内容都受到了破坏,每个邮件都只留下了一个长长的字符串。恢复所有邮件是不可能完成的任务,但似乎从这串留下的字符串中还可以解析出一些可能的e-mail地址,这样公司可以通过向这些解析出的e-mail地址发送邮件以减少用户的损失。
一个有效的e-mail地址的形式符合以下原则:
1、邮件开始部分必须是字母、数字和‘’组成的串,但必须以字母开头
2、接着必须为字符‘@’
3、接着是非空的字母或数字序列
4、接着必须为‘.’
5、地址必须以非空的字母串结束,不能含有数字,'
‘,和’.’
你很幸运地承担了这项工作,但请注意子串的区分,子串是指一个字符串中某些连续的字符组成的串。对于两个子串,其中一个组成的字符编号为l1、l1+1、l1+2、…、r1,另外一个组成的字符编号为l2、l2+1、l2+2、…、r2,如果l1≠l2或r1≠r2,则认为这是两个不同的子串。

【输入形式】

   输入仅有一行,为一个字符序列s1s2...sn( 1≤ n ≤ 106),为给定的字符串。输入保证这个字符串中只包含小写字母、数字以及字符 '.'、'_'、'@'。

【输出形式】

   输出为一个数,表示可以解析出的有效e-mail地址的数量(允许重复)。

【样例输入1】

gerald.agapov1991@gmail.com
【样例输出1】

18
【样例输入2】

x@x.x@x.x_e_@r1.com
【样例输出2】

8

程序设计大作业

在这里插入图片描述

重要:大作业博客
大作业博客2

H大学图书馆邀请你建立一个图书馆信息管理系统。请使用面向对象思想完成该问题,具体要求如下:

一、设计一款文字式交互的图书管理系统,要求具备注册登录、浏览图书、借还图书等基本功能;

二、要求以外部文件的形式存储书籍信息、馆藏记录、借阅记录、用户信息等。【可参考提供的书籍清单】

三、图书信息包含但不限于:
题名
ISBN/ISSN
作者
出版社
价格
……(可自行扩展)

期末复习题

练习四 5. 幸运数字

【问题描述】

	今年圣诞节,小明收到了很多礼物,每个礼物上都有一个数字,表示对小明的祝福。可是小明有自己的想法,对小明来说,4或者7的倍数才是幸运数字。

	现在,小明想知道所有数字中幸运数字之和是多少?请帮帮小明!

练习四 7. 贪心的阿迪

【问题描述】

     阿迪和他的朋友一共k个人,分吃n颗糖,每颗糖只能分给他们中的某个人或者丢弃。

     人的编号从1到k,阿迪是第1号。阿迪将选择一个正整数x来分糖,他先给自己x颗,然后给下一个人x颗,再给第三个人x颗,如此继续,循环往复。剩余的(不能整除x的部分)将会丢弃。

     阿迪不能选择大于M的x去分配,因为这样会被别人认为太贪心(嘿嘿,其实他真的很贪心)。还有,他不能选择一个小的x,使得有人会收到糖的次数超过D,这样会被认为分得太慢。

     阿迪想请你找出一个有效的x,保证让阿迪能得到最多的糖。

练习四 9. 猴导师

【问题描述】

   猴子王国里有n只猴子,第i只猴子有ri种技能。

   猴子a可以是猴子b的导师,当且仅当猴子a的技能严格大于猴子b的技能(ra>rb),并且a和b无性格冲突,有性格冲突的猴子在一起会打架。

   给定每个猴子的技能值,以及有性格冲突的k对猴子。对于每只猴子,找出可以成为其他猴子导师的个数。

练习四(加强) 5. 小女孩与楼梯

【问题描述】

   小女孩塔雅在一栋多层建筑中攀爬楼梯,每次爬过一个楼梯,她喜欢从1到顶数楼梯的台阶级数,并大声地说出每个数字。如果她爬了两个楼梯,第一个有3级,第二个有4级,她将读出数字1、2、3、1、2、3、4。

   给出塔雅读出的所有数字,判断她爬了多少楼梯,且输出每个楼梯有多少台阶级数?

【输入形式】

   输出的第一行为一个整数n,表示塔雅读出了多少个数字。

   第二行包含n个整数a1、a2、...、an,表示塔雅攀爬楼梯时读出的数字,按顺序从第1个到最后一个,当攀爬一个有x级的楼梯时,她将依次读

练习四(加强) 8. 松雅的花园

【问题描述】

   冬天到了,松雅觉得是时候给她的花园浇水了。

   她的花园由 n 个连续的苗圃组成,编号从 1~n。其中的 k 个苗圃安装有水龙头(第 i 个水龙头位于苗圃 xi),当水龙头打开的时候,可以同时给相邻的苗圃浇水。1个时间单位后,她可以给苗圃 xi 浇好水,2个时间单位后,她可以给 [xi-1, xi+1] 范围内的苗圃(如果有)浇好水,在 j 个时间单位后,她可以给[xi-(j-1),xi+(j-1)]内的苗圃(如果有)浇好水。

练习五 2. 最大公约数和最小公倍数

【问题描述】

    从键盘输入两个正整数,求他们的最大公约数和最小公倍数。

【输入形式】

    输入为一行,两个正整数

练习五(强化) 1. 余数定理

【问题描述】

   模运算,即求余运算,是数论中的重要内容,在加密领域有非常重要的应用,其运算公式为 ab mod p, 其中 a、b、p 均为正整数,输入a、b、p 的值,求上述运算的结果,建议用递归实现。

【输入形式】

   输入为一行三个数a、p (1≤a、p ≤1000,1≤ b <10000)

练习七 1. 全字母短句

【问题描述】

     在一个单词或者一个句子中,如果每个字母都至少出现过一次,则称为全字母短句。

     输入若干句子,请判断这些句子是否为全字母短句。

【输入形式】

     输入的第一行为T,表示有T个测试用例,接下来的T行,每行为一个句子。

练习七 4. 古老的语言

【问题描述】

  小雅正在学习一种古老的语言,这种语言使用拉丁字母,其中'a'、'o'、'u'、'i'和'e'是元音字母,其它的称为辅音字母。

  在这种语言中,每个辅音字母后必须是一个元音字母,但在元音字母后可以是任何字母。唯一的例外是辅音字母'n',这个字母后面可以是任何字母,或者没有字母。例如,单词"harakiri"、"yupie"、"man"和"nbo"是合法的,而"horse"、"my"是非法的。

   输入一个单词s,请判断s是否为合法的。   

【输入形式】

	输入一行为一个字符串,全部由小写拉丁字母组成

练习七 6. 加密与解密

【问题描述】

  一个长度为n(1=<n<=1000)的字符串s(原文,可能包括空格)可以通过以下算法进行加密

   a). 按递减顺序迭代n的所有因子,也就是从n到1

   b). 对于每个因子d,反转字符串s的前d个字符s[0,...,d-1],从而形成新的s

   给定一个已加密的字符串t(密文),你的任务是找出原始字符串s(原文),输入保证字符串s是存在且唯一的。

【输入形式】

    输入为一行一个字符串t,表示密文
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值