作業資訊
這個作業屬於哪個課程 | 2024-2025-1-計算機基礎與程式設計 |
---|---|
這個作業要求在哪裡 | 2024-2025-1計算機基礎與程式設計第十一週作業 |
這個作業的目標 | 電腦科學概論(第七版)第15,16章 並完成雲班課測試,《C語言程式設計》第10章並完成雲班課測試 |
作業正文 | ... 本部落格連結 |
教材學習內容總結
1.以下是《電腦科學概論》第七版第15、16章的內容總結:
第15章:資料庫與資訊管理
- 資料庫基礎:資料庫是有組織的電子資料集合。資料庫管理系統(DBMS)用於建立、管理和運算元據庫,常見的有MySQL、Oracle、Microsoft SQL Server等。
- 資料模型:關係模型以行和列儲存資料,表代表實體,透過鍵值關聯;物件關係模型結合關係模型與物件導向方法,支援複雜資料型別;層次模型與網路模型是較舊的資料結構,分別以樹形和網狀方式組織資料。
- SQL語言:基本操作包括SELECT(檢索資料)、INSERT(新增新記錄)、UPDATE(修改記錄)、DELETE(刪除記錄)。還可透過WHERE子句、ORDER BY、GROUP BY等進行條件查詢、資料過濾和排序,以及使用JOIN操作從多表中提取相關資料。
- 資料庫設計:規範化可消除資料冗餘,保證一致性,透過將資料分解到多個表實現。主鍵用於唯一標識表中的記錄,外來鍵用於建立表之間的關係。
- 事務管理與併發控制:事務具有ACID特性,即原子性、一致性、隔離性、永續性。併發控制技術如鎖機制、時間戳等可防止資料衝突。
- 資料安全性與隱私:資料備份與恢復可防止資料丟失。使用者授權與身份驗證確保只有授權使用者可訪問或修改資料,同時要遵循隱私保護法律法規,實現資料最小化原則。
第16章:計算機網路
- 網路概述:計算機網路是透過通訊鏈路連線的計算機系統,用於資料交換和資源共享。
- 網路型別:區域網(LAN)侷限於較小地理範圍,速度快、成本低;廣域網(WAN)覆蓋廣泛區域,由多個區域網組成,速度較慢,使用公共或租用線路;網際網路是全球最大的計算機網路,實現全球資訊共享。
- 網路協議:TCP/IP協議棧是網路通訊的基礎。傳輸層的TCP負責可靠的資料傳輸和順序控制,UDP則更注重效率;網路層的IP負責地址定址與路由選擇;應用層有HTTP、FTP、SMTP等協議支援各種實際應用程式。
- 網路安全:網路面臨病毒、惡意軟體、DDoS攻擊等威脅。相應的安全措施包括使用SSL/TLS協議加密資料傳輸、設定防火牆監控流量、採用入侵檢測和預防系統(IDS/IPS)識別和響應網路攻擊。
- 網路應用:電子郵件透過SMTP、IMAP/POP3等協議實現點對點訊息傳遞;網頁瀏覽藉助HTTP/HTTPS協議,瀏覽器負責解析和展示網頁內容;檔案傳輸可透過FTP和P2P技術快速共享檔案 。
2.以下是關於C語言結構體內容的總結:
結構體的定義
結構體是一種使用者自定義的資料型別,它允許將不同型別的資料成員組合在一起,用來表示一個更復雜的實體。其定義的基本語法形式如下:
struct 結構體名 {
資料型別 成員1;
資料型別 成員2;
// 可以有多個成員
資料型別 成員n;
};
例如,定義一個表示學生資訊的結構體:
struct Student {
char name[20];
int age;
float score;
};
結構體變數的宣告與初始化
- 宣告:在結構體定義完成後,可以宣告該結構體型別的變數,有以下幾種常見方式。
- 先定義結構體型別,再宣告變數:
struct Student stu1;
- 在定義結構體型別的同時宣告變數:
struct Student {
char name[20];
int age;
float score;
} stu2;
- 使用 `typedef` 關鍵字給結構體型別定義別名後宣告變數,這樣後續使用更簡潔:
typedef struct Student {
char name[20];
int age;
float score;
} Stu;
Stu stu3;
- 初始化:可以在宣告結構體變數時進行初始化,用花括號按成員順序依次給出初始值,例如:
struct Student stu4 = {"Tom", 18, 85.5};
結構體成員的訪問
透過結構體變數名使用 .
(點運算子)來訪問其成員,格式為“結構體變數名.成員名”。例如:
struct Student stu = {"Jerry", 20, 90.0};
printf("學生姓名:%s\n", stu.name);
stu.age++;
如果是透過指標來指向結構體變數,那就需要使用 ->
(箭頭運算子)來訪問成員,例如:
struct Student stu = {"Alice", 19, 88.0};
struct Student *p = &stu;
printf("學生分數:%f\n", p->score);
結構體陣列
可以定義結構體型別的陣列,用來儲存多個同型別的結構體變數。例如:
struct Student class[3] = {
{"Bob", 18, 78.0},
{"Lily", 17, 82.0},
{"Mike", 19, 85.0}
};
訪問結構體陣列元素中的成員,同樣使用 .
運算子,比如遍歷結構體陣列輸出學生資訊:
for (int i = 0; i < 3; i++) {
printf("第 %d 個學生姓名:%s,年齡:%d,分數:%f\n", i + 1, class[i].name, class[i].age, class[i].score);
}
結構體作為函式引數
結構體可以作為函式的引數進行傳遞,有兩種常見方式:
- 值傳遞:將結構體變數的值複製一份傳遞給函式,函式內對引數的修改不會影響原結構體變數,這種方式在結構體較大時可能產生較大的開銷。例如:
void printStudent(struct Student s) {
printf("姓名:%s,年齡:%d,分數:%f\n", s.name, s.age, s.score);
}
- 地址傳遞(指標傳遞):傳遞結構體變數的地址給函式,函式內可以透過指標修改原結構體變數的內容,效率相對更高,常用這種方式來處理結構體引數,例如:
void updateAge(struct Student *p, int newAge) {
p->age = newAge;
}
結構體的巢狀
結構體中成員的資料型別也可以是另一個結構體,這就是結構體巢狀。例如定義一個包含日期結構體的學生結構體:
struct Date {
int year;
int month;
int day;
};
struct StudentWithDate {
char name[20];
struct Date birthday;
float score;
};
訪問巢狀結構體中的成員時,需要使用多層 .
運算子,比如:
struct StudentWithDate stu = {"David", {2005, 3, 15}, 80.0};
printf("學生生日:%d年%d月%d日\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
基於AI的學習
程式碼除錯中的問題和解決過程
問題1
在連續輸入一串數字,並以-1為結束條件時
int number[10],i=0;
while(number[i]!=-1)
{
scanf("%d",&number[i]);
i++;
}
上述程式碼並不會在遇到-1時結束,而是繼續輸入。
原因
在判斷循壞條件時,並沒有判斷剛輸入的number[i],而是在i++後,才進行判斷,此時相當於在判斷number[i+1],而該數字並沒有輸入任何值,相當於一個隨機數,所以number[i+1]並不會一定等於-1
解決方案
int number[10],i=0;
while(number[i-1]!=-1)
{
scanf("%d",&number[i]);
i++;
}
或者
int num,number[10],i=0;
while(1)
{
scanf("%d",&num);
if(num!=-1)
{
number[i]=num;
i++;
}
else
{
break;
}
}
上週考試錯題總結
錯誤1
用字元指標作函式引數程式設計實現如下功能:在字串中刪除與某字元相同的字元。
輸入格式要求:"%s"
輸入提示資訊:
"Input a string:"
"Input a character:"
輸出格式要求:"Results:%s\n"
程式執行示例1如下:
Input a string:hello,world!
Input a character:o
Results:hell,wrld!
請按如下框架程式設計:
#include <stdio.h>
#include <string.h>
#define N 100
void Squeeze(char *s, char c);
int main()
{
char str[20], ch;
printf("Input a string:");
gets(str);
printf("Input a character:");
ch = getchar();
......
printf("Results:%s\n", str);
return 0;
}
void Squeeze(char *s, char c)
{
......
}
解決方法
理解情況
在刪除相同字元時,借用了一個變數i來記錄相同字元的位置
其他(感悟、思考等,可選)
需要繼續努力
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第八週 | 1400/2000 | 1/2 | 20/20 | |
第九周 | 1600/2000 | 1/4 | 18/38 | |
第十週 | 1700/2000 | 1/7 | 22/60 | |
第十一週 | 1900/3000 | 1/9 | 30/90 |