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

分支结构

循环结构

求近似的圆周率

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表示。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容