週報(第二週)11 23 11 29

2021-10-10 23:20:14 字數 4797 閱讀 2340

週報(第二週)

1.定義

存放一組不同型別的資料。定義的形式為:

//第一種方式

struct 結構體名

;//第二種方式

struct

變數名;

2.怎樣使用結構體變數

賦值和初始化

定義的同時可以整體賦初值

如果定義完之後,則只能單個的賦初值

如何取出結構體變數中的每乙個成員

結構體變數名.成員名

2.指標變數名->成員名

指標變數名->成員名 在計算機內部會被轉化成 (*指標變數名).成員名

的方式來執行

所以說這兩種方式是等價的

例子:

struct student

;//分號不能省

intmain

(void);

//初始化,定義的同時賦初值

struct student st2;

//先定義變數,後賦初值

st2.age=10;

st2.score=88;

st2.***=

'f';

return0;

}

關於結構體初始化和儲存類時期的問題;

如果要初始化乙個具有靜態儲存時期的結構體,初始化專案列表中的值必須是常量表示式,

如果儲存時期是自動的,那麼列表的值就不必是常量了;

整體賦值僅限於定義結構體變數的時候,在使用過程中只能對成員逐一賦值。

需要注意的是,結構體是一種自定義的資料型別,是建立變數的模板,不占用記憶體空間;結構體變數才包含了實實在在的資料,需要記憶體空間來儲存。

多級指標就是指標的指標的指標…

假如定義了乙個二級指標

int

**q;

q 的前面有兩個「*」,這個該如何理解呢?與一級指標的理解是一樣的。

int**q 可以把它分為兩部分看,即 int* 和 (q),後面 (q) 中的「」表示 q 是乙個指標變數,前面的 int 表示指標變數 q 只能存放 int* 型變數的位址。對於二級指標甚至多級指標,我們都可以把它拆成兩部分。首先不管是多少級的指標變數,它都是乙個指標變數,指標變數就是乙個「」,其餘的「」表示的是這個指標變數只能存放什麼型別變數的位址。比如「int*a;」表示指標變數 a 只能存放 int型變數的位址。

下面來舉乙個例子。假如定義了乙個指標變數 p 指向乙個 int 型變數:

int i =10;

int*p =

&i;

指標變數的「基型別」用來指定該指標變數可以指向的變數的型別,即該指標變數只能存放什麼型別變數的位址。所以 int*p 表示 p 指向的是 int 型變數,裡面只能存放 int 型變數的位址。雖然 p 是指標變數,但只要是變數就有位址,就可以定義乙個指標變數存放它:

int

**q =

&p;

為什麼存放 &p 要兩個「」呢?因為指標變數 p 的基型別為 int 型,所以 &p 的基型別為 int型 。所以如果要定義乙個能指向 int* 型變數的指標變數,有兩個要求:首先它要是指標變數,即乙個「」;其次,該指標變數指向的是 int 型的資料,或者說存放的是 int* 型變數的位址,所以就是 int**。

以上就是為什麼需要兩個「」的原因。兩個「」表示二級指標,就是指標的指標。二級指標需要兩個「*」才能指向最終的記憶體單元,即 **q==i。變數 q 中存放變數 *q 的位址,變數 *q 中存放變數 **q 的位址,變數 **q 中存放i的內容,即 10。或者說:q 指向 *q,*q 指向 **q,**q 中存放i的內容,即 10。

int**

*r =

&q;

intr 就等價於 intr,所以 r 的基型別就是 int型。而 q 的基型別是 int 型,所以 &q 的基型別是 int 型。所以 r 有三個「」才能指向 q 的位址。三個「」表示**指標,即指標的指標的指標。**指標需要三個「」才能指向最終的記憶體單元,即 ***r==i。

# include

intmain

(void

)

輸出結果:i=10

這就是多級指標。

問題描述:

棋盤上 aa 點有乙個過河卒,需要走到目標 bb 點。卒行走的規則:可以向下、或者向右。同時在棋盤上 cc 點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為「馬攔過河卒」。

棋盤用座標表示, aa 點 (0, 0)(0,0) 、 bb 點 (n, m)(n,m) ( nn , mm 為不超過 2020 的整數),同樣馬的位置座標是需要給出的。

現在要求你計算出卒從 aa 點能夠到達 bb 點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。

輸入輸出格式

輸入格式:

一行四個資料,分別表示 bb 點座標和馬的座標。

輸出格式:

乙個資料,表示所有的路徑條數。

輸入輸出樣例

輸入樣例#1:

6 6 3 3

輸出樣例#1:

6在這裡我想了兩種方法來解決這個問題:

第一種

#include

intmain()

;long

long

int f[20]

[20]=

;int dx[9]

=;int dy[9]

=;scanf

("%d %d %d %d"

,&n,

&m,&x,

&y);

g[x]

[y]=1;

for(i=

1;i<=

8;i++)}

for(i=

1;i<=n;i++

)for

(j=1

;j<=m;j++

)for

(i=1

;i<=n;i++)}

printf

("%lld\n"

,f[n]

[m])

;return

0;

第二種:

#include

#include

#include

intmain()

;//馬可以走的地方

int f[20]

[20];

//用於記錄路徑

int g[20]

[20];

// 用於判斷馬的位置

scanf

("%d %d %d %d"

,&n,

&m,&x,

&y);

//輸入資料

//初始化

memset

(f,0

,sizeof

(f))

;memset

(g,0

,sizeof

(g))

;for

(int i =

0; i<

9; i++

)//第一列初始化

for(

int i=

1; i <= n ; i++

)//第一行初始化

for(

int i =

1; i<= m ;i++

)//動態規劃求路徑

for(

int i=

1; i<=n ; i++

)printf

("%d\n"

,f[n]

[m])

;return0;

}

emmmmmmmmmmmmmmmm,還有從網上摘錄的一種解法:

#include

#include

#define debug 0

#define format \

bx++; \

by++; \

hx++; \

hy++; \

map[1][0] = 1; \

h_map[hx][hy] = 1;

typedef

long

long ll;

typedef

unsigned

char uchar;

ll map[25]

[25]=

;bool h_map[25]

[25]=

;//限制點

const

int hforbidx=

;const

int hforbidy=

;int

main()

for(

int i =

1; i <= bx; i++

)//狀態轉移方程

map[i]

[j]= map[i -1]

[j]+ map[i]

[j -1]

;//測試點2

#if debug

printf

("map[%d][%d] = %d\n"

, i, j, map[i]

[j]);if

(0== j %5)

#endif

// debug}}

printf

("%lld\n"

, map[bx]

[by]);

return0;

}

19 08 24 第二週 週報

周一周二深圳杯,週三趕路回學校,周四趕路回家,周五在家休息一天,週六趕路回學校。來回折騰太累了。深圳杯我們隊是二等獎,還算可以,從六月份就開始忙活,整個暑假的計畫也頻繁被建模打斷,總感覺拿個二等獎對不起這快要結束的暑假。這周一直在趕路,整個人都很虛。不過好在我對將來讀研還是工作有了更清晰的認識。這件...

資料探勘第二週週報

由於我們得到的資料集是經過處理的比較規整的資料,所以上面的步驟可以簡單一下 1,匯入標準庫 importing the libraries import numpy as np import pandas as pd import matplotlib.pyplot as plt data trai...

高階實訓第二週週報

實踐 對部分有缺失值的特徵做了簡單的填充處理 數值類用均值替代,類別類用眾數替代 重點擊取部分與貸款數額 評級 收入與償還能力相關的屬性,使用knn模型進行訓練 因其較簡單,執行速度較快 由於測試集不含標籤,我使用sklearn將原訓練集隨機劃分為訓練集 測試集,其中測試集佔比為0.3,即24000...