美文网首页
程序设计导论-2 函数与控制流 伪代码实现

程序设计导论-2 函数与控制流 伪代码实现

作者: CraXyG | 来源:发表于2019-11-11 18:40 被阅读0次

    分支结构

    循环结构

    求近似的圆周率

    C

    #include<stdio.h>
    #include<math.h>
    int main(){
        int n;
        scanf("%d",&n);
        double pi = 0;
        double cnt = 0;
        double item = 1;
        while(fabs(item)>pow(0.1,n)){
            item = pow(-1,cnt)/(2*cnt+1);
            pi = pi + item *4;
            cnt = cnt + 1;
        }
        printf("%lf",pi);
        return 0;
    }
    

    C++

    #include<iostream>
    #include<cmath>
    using namespace std;
    int main(){
        int n;
        cin>>n;
        double pi = 0;
        double cnt = 0;
        double item = 1;
        while(fabs(item)>pow(0.1,n)){
            item = pow(-1,cnt)/(2*cnt+1);
            pi = pi + item *4;
            cnt = cnt + 1;
        }
        cout<<pi<<end;
        return 0;
    }
    

    Java

    public class piapprox{
        public static void main(String args[]){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            double pi = 0;
            double cnt = 0;
            double item = 1;
            while(Math.abs(item)>Math.pow(0.1,n)){
                item = Math.pow(-1,cnt)/(2*cnt+1);
                pi = pi + item *4;
                cnt = cnt + 1;
            }
            System.out.println(pi);
        }
    }
    

    Python

    n = int(input())
    pi = 0.
    cnt = 0.
    item = 1
    while abs(item) > pow(0.1,n):
        item = pow(-1,cnt)  /(2*cnt+1)
        pi = pi + item*4
        cnt = cnt +1
    print(pi)
    

    求近似的自然对数e

    C

    #include<stdio.h>
    #include<math.h>
    int prod(int n){
        int prd = 1;
        for(int i = 1; i<= n;i++){
            prd = prd * i;
        }
        return prd;
    }
    int main(){
        int n;
        scanf("%d",&n);
        double e = 0;
        int cnt = 0;
        double item = 1;
        while(fabs(item)>pow(0.1,n)){
            item = 1.0 / prod(cnt);
            e = e + item;
            cnt = cnt + 1;
        }
        printf("%lf",e);
        return 0;
    }
    

    C++

    #include<iostream>
    #include<cmath>
    using namespace std;
    int prod(int n){
        int prd = 1;
        for(int i = 1; i<= n;i++){
            prd = prd * i;
        }
        return prd;
    }
    int main(){
        int n;
        cin>>n;
        double e = 0;
        int cnt = 0;
        double item = 1;
        while(fabs(item)>pow(0.1,n)){
            item = 1.0 / prod(cnt);
            e = e + item;
            cnt = cnt + 1;
        }
        cout<<e<<endl;
        return 0;
    }
    

    Java

    public class eapprox{
        public static int prod(int n){
            int prd = 1;
            for(int i = 1; i<= n;i++){
                prd = prd * i;
            }
            return prd;
        }
        public static void main(String args[]){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            double e = 0;
            int cnt = 0;
            double item = 1;
            while(Math.abs(item)>Math.pow(0.1,n)){
                item = 1.0 / prod(cnt);
                e = e + item;
                cnt = cnt + 1;
            }
            System.out.println(e);
        }
    }
    

    Python

    def prod(n):
        prd = 1.0
        for i in range(1,n+1):
            prd = prd * i
        return prd
    n = int(input())
    e = 0
    cnt = 0
    item = 1
    while abs(item) > pow(0.1,n):
        item = 1.0  /prod(cnt)
        e = e + item
        cnt = cnt +1
    print(e)
    

    递归

    斐波那契数列

    C

    #include<stdio.h>
    #include<math.h>
    int fib(int n){
        if(n==1){
            return 1;
        }
        if(n==2){
            return 1;
        }
        return fib(n-1)+fib(n-2);
    }
    int main(){
        int n;
        scanf("%d",&n);
        printf("%d",fib(n));
        return 0;
    }
    

    C++

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

    Java

    public class fib{
        public static int fib(int n){
            if(n==1){
                return 1;
            }
            if(n==2){
                return 1;
            }
            return fib(n-1)+fib(n-2);
        }
        public static void main(String args[]){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            System.out.println(fib(n));
        }
    }
    

    Python

    nin = int(input())
    def fib(n):
        if n == 1:
            return 1
        if n == 2:
            return 1
        return fib(n-1) + fib(n-2)
    print(fib(nin))
    

    分治

    二分搜索

    C

    #include<stdio.h>
    #include<math.h>
    int binarysearch(int arr[],int l,int r,int x){
        int mid = l+r/2;
        if (arr[mid]==x){
            return mid;
        }
        if (l >= r)
            return -1;
        else if(arr[mid] >x){
            return binarysearch(arr,l,mid-1,x);
        }
        else
            return binarysearch(arr,mid+1,r,x);
    }
    int main(){
        int n;
        int arr[1000];
        int x;
        scanf("%d",&n);
        for(int i = 0;i<n;i++){
            scanf("%d",&arr[i]);
        }
        scanf("%d",&x);
        printf("%d",binarysearch(arr,0,n,x));
        return 0;
    }
    

    C++

    #include<iostream>
    #include<cmath>
    using namespace std;
    int binarysearch(int arr[],int l,int r,int x){
        int mid = l+r/2;
        if (arr[mid]==x){
            return mid;
        }
        if (l >= r)
            return -1;
        else if(arr[mid] >x){
            return binarysearch(arr,l,mid-1,x);
        }
        else
            return binarysearch(arr,mid+1,r,x);
    }
    int main(){
        int n;
        int arr[1000];
        int x;
        cin>>n;
        for(int i = 0;i<n;i++){
            cin>>arr[i];
        }
        cin>>x;
        cout<<binarysearch(arr,0,n-1,x)<<endl;
        return 0;
    }
    

    Java

    class binarysea{
        public static int binarysearch(int arr[],int l,int r,int x){
            int mid = (l+r)/2;
            if (arr[mid]==x){
                return mid;
            }
            else if (l >= r){
                return -1;
            }
            else if(arr[mid] >x){
                return binarysearch(arr,l,mid-1,x);
            }
            else
                return binarysearch(arr,mid+1,r,x);
        }
        public static void main(String args[]){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int arr[] = new int[1000];
            for(int i = 0;i<n;i++){
                arr[i]=sc.nextInt();
            }
            int x = sc.nextInt();
            System.out.println(binarysearch(arr,0,n,x));
        }
    }
    

    Python

    arr = input().split(" ")
    x = input()
    def binarysearch(arr,l,r,x):
        mid = int((l + r)/2)
        if arr[mid] == x:
            return mid
        elif l >= r:
            return -1
        elif arr[mid] > x:
            return binarysearch(arr,l,mid-1,x)
        else :
            return binarysearch(arr,mid+1,r,x)
    print(binarysearch(arr,0,len(arr)-1,x))
    

    回溯--图的遍历

    输入
    6 6 //图的大小
    # # # # # #
    # * * # * #
    # # * * * #
    # * * # * #
    # # # * * #
    # # # # # #
    3 3 // 起始点
    

    C

    #include<stdio.h>
    int visited[1000][1000];
    char graph[1000][1000];
    int detect(int x,int y){
        if(visited[x][y]!= 1 && graph[x][y] != '#')    return 1;
        else return 0;
    }
    void huisu(int x,int y){
        visited[x][y] = 1;
        printf("%d %d\n",x,y);
        int arr[4][2] = {{x+1,y},{x-1,y},{x,y+1},{x,y-1}};
        for(int i = 0;i < 4;i++){
            if(detect(arr[i][0],arr[i][1])){
                huisu(arr[i][0],arr[i][1]);//!!!
            }
        }
    }
    int main(){
        int m,n;
        scanf("%d %d",&m,&n);
        for(int i = 0;i < m;i++){
            for(int j = 0;j<n;j++){
                scanf(" %c",&graph[i][j]);
            }
        }
        int st_x,st_y;
        scanf("%d %d",&st_x,&st_y);
        huisu(st_x,st_y);
    }
    

    C++

    #include<iostream>
    #include<cmath>
    using namespace std;
    int visited[1000][1000];
    char graph[1000][1000];
    int detect(int x,int y){
        if(visited[x][y]!= 1 && graph[x][y] != '#')    return 1;
        else return 0;
    }
    void huisu(int x,int y){
        visited[x][y] = 1;
        cout<<x<<" "<<y<<endl;
        int arr[4][2] = {{x+1,y},{x-1,y},{x,y+1},{x,y-1}};//!!!
        for(int i = 0;i < 4;i++){
            if(detect(arr[i][0],arr[i][1])){
                huisu(arr[i][0],arr[i][1]);
            }
        }
    }
    int main(){
        int m,n;
        cin>>m>>n;
        for(int i = 0;i < m;i++){
            for(int j = 0;j<n;j++){
                cin>>graph[i][j];
            }
        }
        int st_x,st_y;
        cin>>st_x>>st_y;
        huisu(st_x,st_y);
    }
    

    Java

    import java.util.Scanner;
    public class graphgothr{
        public static int visited[][] = new int[1000][1000];
        public static char graph[][] = new char[1000][1000];
        public static boolean detect(int x,int y){
            if(visited[x][y]!= 1 && graph[x][y] != '#')    return true;
            else return false;
        }
        
        public static void huisu(int x, int y) {
            visited[x][y] = 1;
            System.out.println(x + " " + y);
            int arr[][] = { { x + 1, y }, { x - 1, y }, { x, y + 1 }, { x, y - 1 } };//!!!
            for (int i = 0; i < 4; i++) {
                if (detect(arr[i][0], arr[i][1])) {
                    huisu(arr[i][0], arr[i][1]);
                }
            }
        }
    
        public static void main(String args[]) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int m = sc.nextInt();
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    graph[i][j] = sc.next().toCharArray()[0];
                }
            }
            int st_x = sc.nextInt();
            int st_y = sc.nextInt();
            huisu(st_x, st_y);
        }
    }
    

    Python

    m,n = [ int(i) for i in input().split()]
    graph = [ [j for j in input().split()] for i in range(m)]
    st_x ,st_y =  [ int(i) for i in input().split()]
    visited = [[0 for j in range(n)]for i in range(m)]
    def detect(x,y):
        global visited,graph,m,n
        if visited[x][y] != 1 and graph[x][y] != '#':
            return True
        else:
            return False
    def huisu(x,y):
        global visited,graph,m,n
        visited[x][y] = 1
        print(x,y)
        diec = [(x+1,y),(x-1,y),(x,y+1),(x,y-1)]#!!!
        for i in range(4):
            if detect(diec[i][0],diec[i][1]):
                huisu(diec[i][0],diec[i][1])
    huisu(st_x,st_y)
    

    通用额外问题

    1. 掌握控制流。
    2. 掌握全局变量的使用。
    3. 掌握递归。
    4. 了解程序中标注了!!!的地方的使用技巧。
    5. 了解如何用递归树和主定理判断程序复杂度。
    6. 了解分治和回溯。

    语言特性问题

    C

    1. 了解math.h里的内容。
    2. 掌握浮点数的使用及浮点数运算时会出现的问题(提示:2进制表示方法)。
    3. 理解scanf(" %c",&graph[i][j])这段" %c"的处理方式。
    4. 了解C语言的字符处理。
    5. 掌握C语言利用函数返回值作为判断条件的使用。

    C++

    1. 了解cmath里的内容。
    2. 掌握浮点数的使用及浮点数运算时会出现的问题(提示:2进制表示方法)。
    3. 了解C++的字符处理。
    4. 了解C++的泛型。
    5. 掌握C++里的Boolean变量。

    Java

    1. 了解java.Math的内容。
    2. 掌握浮点数的使用及浮点数运算时会出现的问题(提示:2进制表示方法)。
    3. 理解"graph[i][j] = sc.next().toCharArray()[0]"这段的处理方式。
    4. 掌握java里的静态方法。
    5. 了解java里的String对应的方法。
    6. 掌握java里的Boolean变量。

    Python

    1. 掌握python的浮点数处理。
    2. 掌握其中的列表推导式。
    3. 掌握python的global关键字。
    4. 掌握python的True、False表示。

    相关文章

      网友评论

          本文标题:程序设计导论-2 函数与控制流 伪代码实现

          本文链接:https://www.haomeiwen.com/subject/vpfxictx.html