V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhufree
V2EX  ›  C

吹泡泡之路( 2015.4.26)

  •  1
     
  •   zhufree · 2015-04-26 12:04:19 +08:00 · 1102 次点击
    这是一个创建于 3496 天前的主题,其中的信息可能已经有所发展或是发生改变。

    发现最近不管睡得多晚,总能早早爬起来_(:з」∠)_今天六点多醒的,然后刷手机到八点起床,打开计蒜客忽然想入个键盘,于是就去买了个键盘,顺带写了几句话
    今天的内容从while开始(感觉像重新学了一遍C = =)

    几种控制语句

    while和for算的是1加到100,do-while算的是1加到num(输入值)。


    while循环

    #include<iostream>
    using namespace std;
    int main()
    {
        int sum=0;
        int i=1;
        while(i<=100){
            sum=sum+i;
            i=i+1;
        }
        cout<<sum<<endl;
        return 0;
    }
    

    Do-while循环

    #include<iostream>
    using namespace std;
    int main(){
        int num;
        cin>>num;
        int sum=0;
        int i=1;
        do{
            sum=sum+i;
            i++;
        }while(i<=num);
        cout<<sum<<endl;
        return 0;
    }
    

    For循环

    #include<iostream>
    using namespace std;
    int main()
    {
        int i,sum=0;
        for(i=1;i<=100;i++){
            sum=sum+i;
        }
        cout<<sum<<endl;
        return 0;
    }
    

    countinue语句

    #include<iostream>
    using namespace std;
    int main()
    {
        int i,sum=0;
        for(i=1;i<11;i++){
            sum+=i;
            continue;
            cout<<i<<endl;
        }
        cout<<sum<<endl;
        return 0;
    }
    

    测试:判断质数

    #include<iostream>
    using namespace std;
    bool is_prime(int n){
        if(n<2){
            return false;
        }
        for (int i=2;i*i<=n;i++){
            if(n % i == 0){
                return false;
            }
        }
        return true;
    }
    int main(){
        int N;
        cin>>N;
        if(is_prime(N)){
            cout<<"YES"<<endl;
        }else{
            cout<<"NO"<<endl;
        }
    
        return 0;
    }
    

    艾玛又不会写了,百度了答案要么就是直接return 0然后break的,要么就是写成函数再判断的,一直搞不清楚怎么在i自增完了之后再输出YES,算法渣渣。


    函数


    函数声明

    #include<iostream>
    using namespace std;
    int add(int a,int b);
    int main()
    {
        int x;
        x = add(1,2);
        cout<<x<<endl;
        return 0;
    }
    int add(int a,int b){
        return a+b;
    }
    

    这里直接举先声明后面再实现内容的函数了,到目前为止,看上去和C还是没什么区别= =


    递归调用

    #include<iostream>
    using namespace std;
    int sum(int max);
    int main(){
        cout<<sum(100)<<endl;
        return 0;
    }
    int sum(int max){
        if(max>1){
            return max+sum(max-1);
        }else{
            return 1;
        }
    }
    

    测试:斐波那契数列

    斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加。用数学公式定义斐波那契数列则可以看成如下形式:
    F0=0
    F1=1
    Fn=Fn-1+Fn-2

    我们约定Fn表示斐波那契数列的第n项,你能知道斐波那契数列中的任何一项吗?

    输入包括一行,包括一个数字N(0≤N≤50)。

    输出包括一行,包括一个数字,为斐波那契数列的第N项的值。

    #include<iostream>
    using namespace std;
    int add(int n){
        if(n==0||n==1){
            return n;
        }else{
            return add(n-1)+add(n-2);
        }
    
    }
    int main(){
        int N;
        cin>>N;
        cout<<add(N)<<endl;
    }
    

    数组


    一维数组

    #include <iostream>
    using namespace std;
    int main(){
        int arr[5]={4,5,3,1,9};
        arr[2]=55;
        int sum=0,i;
        for(i=0;i<5;i++){
            sum+=arr[i];
        }
        cout<<sum<<endl;
        return 0;
    }
    

    二维数组

    #include<iostream>
    using namespace std;
    int main(){
        int arr[2][3],arr2[3]={0,0,0};
        int i,j;
        for(i=0;i<2;i++){
            for(j=0;j<3;j++){
                cin>>arr[i][j];
                arr2[j]+=arr[i][j];
            }
        }
        cout<<arr2[0]<<" "<<arr2[1]<<" "<<arr2[2]<<endl;
        return 0;
    }
    

    测试:矩阵翻转

    输入第一行包括由空格分开的整数M、N、T(0 < M < 200,0 < N < 200,T=0或1),其中M和N分别表示待处理矩阵的行数与列数,T为0时表示左右翻转,为1时表示上下翻转。

    输出包括M行N列,每个数字之间用一个空格分隔,每一行行末均有一个空格,表示的是按照要求翻转后的矩阵。

    #include<iostream>
    using namespace std;
    int main(){
        int M,N,T;
        cin>>M;
        cin>>N;
        cin>>T;
        int arr[M][N];
        int i,j,temp;
        for(i=0;i<M;i++){
            for(j=0;j<N;j++){
                cin>>arr[i][j];
            }
        }
        if(T==0){
            for(i=0;i<M;i++){
                for(j=0;j<N/2;j++){
                    temp=arr[i][j];
                    arr[i][j]=arr[i][N-1-j];
                    arr[i][N-1-j]=temp;
                }
            }
        }else{
            for(j=0;j<N;j++){
                for(i=0;i<M/2;i++){
                    temp=arr[i][j];
                    arr[i][j]=arr[M-1-i][j];
                    arr[M-1-i][j]=temp;
                }
            }
        }
        for(i=0;i<M;i++){
            for(j=0;j<N;j++){
                cout<<arr[i][j]<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
    

    每次做到这个题目,做肯定是能做出来,但总要折腾半天,老是弄混M,N和i,j,哪个代表行哪个代表列,晕死。


    待会要去开会了,今天到此结束。

    6 条回复    2015-04-27 22:23:45 +08:00
    puncsky
        1
    puncsky  
       2015-04-26 12:46:35 +08:00
    coding style 有点儿乱
    oott123
        2
    oott123  
       2015-04-26 16:57:58 +08:00
    吹泡泡是啥意思……
    zhufree
        3
    zhufree  
    OP
       2015-04-27 13:56:38 +08:00
    @oott123 吹泡泡=cpp=c++
    zhufree
        4
    zhufree  
    OP
       2015-04-27 13:57:26 +08:00
    @puncsky 额,我的习惯是左大括号不换行,代码有部分是题目给的所以左大括号换行了 - -
    puncsky
        5
    puncsky  
       2015-04-27 14:32:41 +08:00   ❤️ 1
    可以看下 code complete 或者 Google 的 coding style guideline
    zhufree
        6
    zhufree  
    OP
       2015-04-27 22:23:45 +08:00
    @puncsky 好哒,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5667 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:28 · PVG 14:28 · LAX 22:28 · JFK 01:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.