易错点与思路总结】(c++基础笔记向)

本文总结了编程中常见的十个错误类型,包括字符处理、浮点运算、经验性问题、代码结构、计算细节、变量初始化、大写数字转换、字符串处理、排序算法及递归应用,强调了正确理解和运用编程规范的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、【错误1:漏字符】

超级玛丽 鼠标复制时漏空格。(洛谷p1000)

《马里奥》:用了raw string literal(原始字符串字面值),即::::cout<<R"(XXXX)";

2、【错误2:浮点数】

《级数求和》:n分之一,分子分母至少一个要用浮点数。

Sn=1+1/2+1/3.....+1/n ——————Sn 和 n都须设为浮点数。(浮点!!!都!!!)

(或:仅Sn实数,计算时用1.0/n)

3、【错误3:经验主义】(小错真难发现。。)

①惯性把a[i]写成a[n]......

②还有把n/=10写成n/=n(怪不得没输出。。)

③scanf(“请输入月份:%d”,&a)了,应该是printf的工作。

4、【错误4:大括号位置】

for(int i=0;i<7;++i) {if(x==c[i]) {cout<<i+1; break;}}

最后一个for循环,原本if后面忘{}到一起了,只考虑到for的{}。

(结果是c【0】检查后就直接break了,导致无输出。)

5、【错误5:计算细节】

端点,范围加以注意。(如日期需-1,大于还是>=)

②还有就是计算过程简化,别超时。(比如质数判断,%到sqrt(n)代替%到n)

③题目条件!阴间题目说明放末尾:输入的整数在 [1,4×10的18次方]内。

④数据类型:如char c,但是(c+32)值为不再为char类型。

!!!(入门2001求两整数和竟然错了!)

总结:①int和long:10位; long long:19位数字

一定要看全要求和提示!!小心阴间。

6、用一些变量最好赋一下初值。。(一些错误的具体原因尚不知)

7、《大写数字》不会输汉字,①使用字符指针;②wchar尚未掌握;

③switch或if接打印就好了。

③#include <stdio.h>
int main(){
int x,f=1,d;
scanf("%d",&x);
d=x;int len;
while(d){
d/=10;
len++;
f= f*10;
}
f/= 10;
while(len){
len--;
if(x/f==0) printf("零");
if(x/f==1) x-=f,printf("一");
if(x/f==2) x-=f*2,printf("二");
if(x/f==3) x-=f*3,printf("三");
if(x/f==4) x-=f*4,printf("四");
if(x/f==5) x-=f*5,printf("五");
if(x/f==6) x-=f*6,printf("六");
if(x/f==7) x-=f*7,printf("七");
if(x/f==8) x-=f*8,printf("八");
if(x/f==9) x-=f*9,printf("九");
f /= 10;
}
return 0;
}

8、《校门外的树》 :0和1作为两类-----标记

9、【数字位数 i 】for( i=0;m>0;++i) m/=10;

10、【回文】

int loop(int x){
int i=0,n=x;
while(n){
i=i*10+n%10;
n/=10;
}
return i;}

11、【冒泡法从小到大排序】:    // n个数字,比较n-1轮,每轮 n-(轮数)次//

for(j=0;j<N;++j)
for(i=0;i<=N-j-1;++i) if(x[i]>x[i+1]) {
a=x[i];
x[i]=x[i+1];
x[i+1]=a;
}

12、【递归与找规律类题目】(以及看一下函数递归调用如下)

特殊法写几项来观察,如走楼梯问题(一次上一级或二级)。

【问题描述】

假设有n阶(n>=1)楼梯,小明一次可以选择走1阶,也可以选择走2阶,问多少种走法。比如有5阶台阶,共有8种走法。1 1 1 1 1;1 1 1 2;1 1 2 1;1 2 1 1;1 2 2;2 1 1 1;2 1 2;2 2 1。要求使用递归解法。

【输入形式】在键盘输入数据
【输出形式】在下一行输出楼梯的走法的总数
【样例输入】5
【样例输出】8

·分析:   到第五节的前提是
              1.从第四节跨一步
              2.从第三节跨两步

所以f5=f4+f3。

·变式,若一次上1/2/3,则f5=f2+f3+f4。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int lyric(int n);
    int n;
    cin>>n;
    cout<<lyric(n);
    return 0;
}
int lyric(int n){
    int t;
    if(n==1) t=1;
    else if(n==2) t=2;
    else t=lyric(n-1)+lyric(n-2);
    return t;
}

13、(不高兴的津津)

【1】判断7天中是否存在0:

①c[0]=0且c[1]=0......

②想到赋值n=0,最后输出n(否则是1),但不可行,n终值独裁。

累加法,皆0和亦为0。//good法也!

【2】无需设置 三个数组。

如下,根本一个都不用设。

学习此处for,只需先设变量,然后在for里反复多次利用。

int a,b,s,max=0,i,day=0;  //a,b是我们津津(以下简称JJ)每天上课时间,s意为sum是上课时间之和 
    for (i=1;i<8;i++)   // i为循环变量,day是JJ一周最不高兴的一天 
      {
        cin>>a>>b;    //输入a,b 
        s=a+b;   //计算一天的上课时间 
        if ((s>max)&&(s>8)) max=s,day=i;  

14、&&短路特性。

15、三个概念注意点:

①cout,cin为iostream类的对象,不是关键字

②c++仅直接提供了赋值表达式

③printf,scanf实际上是函数而非语句

16、c++流类库

·stdin标准输入设备为参数,使cin与设备关联。(cin流:标准输入流)

·istream(ostream也是)类中重载<<,对不同类型都要分别重载一次。

·cout<<"111"等价于cout.operator<<("111") 调用的重载是(char *)型-----字符串111值为其首字节的地址。

·cout将数据插入到cout流,函数返回流对象cout。

17、有格式输入输出

①使用控制符(<iomanip>),如setfill('*'),setw(2)

②cout的成员函数:

precision()
width()
fill()
setf() //对应控制符setiosflags
unsetf()  //resetiosflags
设置格式状态用的格式标志:
ios::left
ios::internal
ios::hex
ios::showbase(OCT:0,HEX:0x)
ios::showpoint
ios::showpos(正数显示“+”)
ios::uppercase(HEX和SCI的E)
//ios::unitbuf(输出后刷新流)
//ios::stdio(输出后刷新stdout,stderr)

注意:a、宽度width和setw之对后面第一个输出项有效;

b、默认十进制输出数字,若要改变格式,

      需要先cout.unsetf(ios::dec);(只有int成功输出hex了)

18、【错误6】char虽然可以表示整数-128~127,但cin一个char时只会读取一位字符或数字。

可以用此原理来回文输入。

19、格式标志、输入输出方式,都是枚举值(枚举常量)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值