吹泡泡之路( 2015.4.26)

2015-04-26 12:04:19 +08:00
 zhufree

发现最近不管睡得多晚,总能早早爬起来_(:з」∠)_今天六点多醒的,然后刷手机到八点起床,打开计蒜客忽然想入个键盘,于是就去买了个键盘,顺带写了几句话
今天的内容从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,哪个代表行哪个代表列,晕死。


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

967 次点击
所在节点    C
6 条回复
puncsky
2015-04-26 12:46:35 +08:00
coding style 有点儿乱
oott123
2015-04-26 16:57:58 +08:00
吹泡泡是啥意思……
zhufree
2015-04-27 13:56:38 +08:00
@oott123 吹泡泡=cpp=c++
zhufree
2015-04-27 13:57:26 +08:00
@puncsky 额,我的习惯是左大括号不换行,代码有部分是题目给的所以左大括号换行了 - -
puncsky
2015-04-27 14:32:41 +08:00
可以看下 code complete 或者 Google 的 coding style guideline
zhufree
2015-04-27 22:23:45 +08:00
@puncsky 好哒,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/186402

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX