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
程序设计大作业
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,表示密文