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

分支结构

循环结构

求近似的圆周率

C

#include
#include
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
#include
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<

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
#include
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
#include
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<

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
#include
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
#include
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<

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
#include
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

C++

#include
#include
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>arr[i];
    }
    cin>>x;
    cout<

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

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
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

C++

#include
#include
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<>m>>n;
    for(int i = 0;i < m;i++){
        for(int j = 0;j>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 函数与控制流 伪代码实现)