學期:2024-2025-1 學號:20241303 《計算機基礎與程式設計》第十一週學習總結

段蕾發表於2024-12-07

作業資訊

這個作業屬於哪個課程 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

相關文章