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