週報(第二週)
1.定義
存放一組不同型別的資料。定義的形式為:
//第一種方式2.怎樣使用結構體變數struct 結構體名
;//第二種方式
struct
變數名;
賦值和初始化
定義的同時可以整體賦初值
如果定義完之後,則只能單個的賦初值
如何取出結構體變數中的每乙個成員
結構體變數名.成員名
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...