cspj基础编程入门


cpp编程基础:

信息学奥赛选择题:https://www.bilibili.com/video/BV1vM4y1G7bt

信息学奥赛一本通在线评测网站:http://ybt.ssoier.cn:8088/

 冒泡排序动画1:https://www.bilibili.com/video/BV1Zz4y1D7ZE

冒泡排序动画2: https://www.bilibili.com/video/BV1kq4y1R7ez

排序方法比较:https://www.bilibili.com/video/BV1ex411e7eb

一、程序基本结构:

1 #include<bits/stdc++.h>
2 using namespace std;
3 
4 int main(){
5   
6   return 0;
7 }

解释说明:

1行是万能头,万能头会增加编译的时间(智能编译的时间),编译完成之后,程序才会运行,所以不会增加运行的时间,不会增加运行的内存(复赛编程后,判分时,限制运行时间和运行内存不能超某大小)。 baidu有说法是不建议用万能头,理由是不利于理解c++,老师建议是使用万能头,理由是可以简化学习难度。避免入门就打击学习兴趣。初学,重基础(变量类型,基本语句),头文件,不是基础。

头文件的分类使用,目的是为了简化难度和减小最终程序的体积,如设计的游戏程序,必须用游戏头文件,游戏头文件可能很大。而非游戏的程序,可能就没必要用游戏的头文件。编译过程是智能的,会自动判断需要万能头中的哪些头文件。现状:我们的复赛,支持使用万能头。

2行是启用命名空间“std”,c++功能超级强大,为了避免复杂程序的可能性冲突,启动了“std”,个人自定义的空间都放入“std”中,虽然我们现在用不了以后的可能性冲突,程序为了避免,已经这样定义了,我们不启用“std”,就不能自定义空间。明白吗?不明白的话,提意见,我再修改这行的描述。 

4行,几乎所有编程软件都会定义main()函数,一个程序启动后,都会去找入口函数,如入口main(),并运行main()。main()是程序运行后的入口函数。  linux操作系统程序结束后,需要返回 int 型值 0,才能正常退出。我们的评分是运行在linux中的,所以,我们在windows系统中编程写程序的时候,也得用 int  声明  main()函数的返回值类型,声明写前面,就写成了  int   mian() 。 并且  main()函数的程序体  {  },{  }结束时,使用   return 0;语句结束。 明白吗?不明白的话,提意见,我再修改这行的描述。

6、7行的解释,在4行中解释中。 

另:语句体 {   } 中写程序的具体语句。if  和for等都可以用{  } ,需要注意{  } 的开始和结束位置,必须配对使用。

 

 

二、加法

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

int main(){
    int a,b,c;
    cin>>a>>b;
    c=a+b;
    cout<<c;

    return 0;
}    

5行,int 声明整数类型,a,b,c 语句结束用;

a和b和c,老师习惯说成房间名,他们是变量名。int的声明让它们中只能存放整数。

6行,c控制,in 入,cin控制输入,输入默认从键盘输入, >>  数据流的方向,cin>>a 控制“数据流”从键盘流向a,

8行,c控制,out出,cout控制输出,输出默认输出到屏幕,<<数据流的方向,cout<<c 控制“数据流”c流向屏幕。

这里每一行的结束,都用英文分号结束。

 

 

三、小数(保留2位小数)

#include<bits/stdc++.h>
using namespace std;
#define PI 3.1415926

int main(){
    const double pi=3.1415926;
    double r,s;
    cin>>r;
    s=pi*r*r;
    printf("%.2f",s);

    return 0;
}

注意:只要用到小数的地方,尽量声明为double,并且,计算的时候,计算1+2 的时候,用1.0+2,明白吗?做多了题,你可能会碰到,1*a不对,1.0*a就对了。

define 与 const 定义固定值。编程可以不用。初赛笔试会有这样的语句。

 

 

四、字符(ASCII码)

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

int main(){
    char a;
    int b;
    cin>>a;
    b=a;
    cout<<b;
    
    return 0;
} 

ASCII码(美国标准信息交换码):单引号'a'、'A'是整数97、65。单引号'b'、'B'是整数98、66。键盘的任何一个按键都会对应一个ASCII的整数。ascii的范围大于键盘按键数量。ascii共128个,足够英文使用。

一个字节占8位,8位2进制能表示0-255,ascii只用了0-127

学习二进制。 学习链家以后补充。

二进制加法、减法。十进制减法会转化为二进制加法,乘法和除法也会转化为加法,这样简化了计算机的制造,只需要制造加法器就可以,为此,数学家设计了二进制的补码(反码再得到补码)实现只用加法器实现十进制的四则运算。

计算机科学家首先是数学科学家。数学科学家不一定是计算机科学家。很会计算机的,不一定语文很好。出的计算机题,误解多多,木办法。

 

 

五、字符串

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main(){
 5     char a[101]="hello";
 6     string b;
 7     b="china";
 8     cout<<a<<" "<<b;
 9     
10     return 0;
11 } 

 计算机还不够智能,不能代替人。

计算机是从最低级发展过来的,会越来越智能。

向前兼容,会让以前的程序也能正常运行。

1+2==3和“hello”+“word”==“helloword”,

所以又出了个“1”+"2"=="12" ,自己理解吧。

以前的计算机科学家为了让计算机速度能更快,1+1和1.0+1 ,前面说过不同?自己理解吧。可以百度学习一下运算符重载。

如有更正确的理解,欢迎反馈给老师,谢谢。

常用的字符类型:整型,双精度浮点型,字符型,字符串。等等。

以后再学个数组。数组不是数据类型。

 

 

六、判断闰年

普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。

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

int main(){
    int a;
    cin>>a;
    if(a%400==0 or (a%4==0 and a%100!=0)){
        cout<<a<<"年,是闰年";
    }else{
        cout<<a<<"年,不是闰年";
    }
    
    return 0;
} 

if 与 eles ,不难理解。配套的 { } 可以嵌套,注意以后去理解{ }的嵌套。

与0或1,异或异1,0是假,1是真,这是老师总结的顺口溜。

and与,or或,xor异或,&&与,||或, not非,!非。

%取余数,c++ 没有乘方运算, 二进制的异或把那个符号^占用了。

c和c++的优点是也能操作硬件,编译后的程序速度会快很多,所以操作系统一般都用c写的,c++是c的发展。 

安卓用java写的,但是安卓的底层是linux,linux是用c写的。

编程语言:二进制(低级语言)、汇编语言(低级语言?)、c语言等(高级语言)。也有说法把c当中级语言,老师还是认为c是高级语言,老师认为高级低级的区别是能否让让英语母语的人容易看懂。

(道可道,非常道;名可名,非常名。无名,天地之始,有名,万物之母。概念都是后人定义的,老师不喜欢考察定义,老师也喜欢用定义去解释某些东西,迷茫加矛盾,自己悟)

 

 

七、循环

输入3行,第一行1个数字,控制第2行数字的个数,第3行1个数字。输出一个数字,第3行数字在第2行中出现的次数。

所有数字x都满足0 ≤x ≤100。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main(){
 5     int a,b[101],c,d;
 6     d=0;
 7     cin>>a;
 8     for(int i=1;i<=a;i++){
 9         cin>>b[i];
10     }
11     cin>>c;
12     for(int i=1;i<=a;i++){
13         if(c==b[i]){
14             d++;
15         }
16     }
17     cout<<d;
18     
19     return 0;
20 } 

 { } 的嵌套使用出现了。

学习 for( ) 的规则,注意()中只使用了2个分号。 for(初值;终值;步长变化)

 这里用了数组,数组的下标从0开始。声明语句 int  a[3] 后,可以用a[0],a[1],a[2],这三个;不能用a[3]和3以后的数字下标。

 

 

八、最大余数

除数a,b≤被除数 ≤c,依次输入a,b,c三个数,输出最大的余数。

数据范围:2≤a≤b≤c≤e9

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

int main(){
    int a,b,c;
    cin>>a>>b>>c;
    cout<<a-1;
    return 0;
}
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main(){
 5     int a,b,c,d,s,t;
 6     s=0;
 7     cin>>a>>b>>c;
 8     d=c-b;
 9     if(d>=a){
10         cout<<a-1;
11         return 0;
12     }
13     for(int i=0;i<=d;i++){
14         t=c%a;
15         if(t>s){
16             s=t;
17         }
18         c--;
19     }
20     cout<<s;
21     
22     return 0;
23 }
#include<bits/stdc++.h>
using namespace std;

int main(){
    int a,b,c,d,m2,m3;
    cin>>a>>b>>c;
    d=c-b;
    if(d>=a){
        cout<<a-1;
        return 0;
    }

    m2=c%a;
    m3=b%a;
    if(m2<m3){
        cout<<a-1;
    }else{
        cout<<m2;
    }

    return 0;
} 

 

 

九、统计字符个数

输入1行字符串,包含大小写字母、数字、空格。统计字母和数字的个数。输出这个数。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 string n;
 4 
 5 int main(){
 6     int s;
 7     getline(cin,n);    
 8     for(int i=0;i<=4;i++){
 9         if(n[i]>='0' and n[i]<='9'){
10             s++;
11         }
12         if(n[i]>='A' and n[i]<='Z'){
13             s++;
14         }
15         if(n[i]>='a' and n[i]<='z'){
16             s++;
17         }    
18     }
19     cout<<s;
20     return 0;
21 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM