」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > CS-第 1 週

CS-第 1 週

發佈於2024-08-01
瀏覽:583

bis̊mi allãhi alrāḥmani alrāḥīm
机器只理解二进制。当我们为计算机编写人类可读的指令列表时,机器只能理解我们现在所说的机器代码。该机器码仅由 1 和 0 组成。
使用一种称为编译器的特殊程序,我们可以将源代码转换为机器代码。

我们可以根据3个标准​​来判断好的代码:

  • 正确性(代码是否产生了期望的结果?),
  • 设计(代码设计或结构是否结构良好?),
  • 风格(代码写得怎么样?).

你好世界!

如果我们想在C编程语言中在屏幕上打印一些文本,我们使用printf函数:

#include 

int main(void)
{
    printf("salom, dunyo\n")
}

printf 函数打印文本 hello, world。其中的特殊\字符告诉编译器下一个字符是特殊指令。接下来的n符号表示“换行”换行)。
代码第一行的表达式是一个非常特殊的命令,表示我们想要使用名为 stdio.h 的库的功能。这个库允许我们使用 printf 函数。
是我们可以在代码中使用的现成函数的集合。

变量

让我们用 C 语言编写一些代码,通过询问用户的名字来问候用户:

#include 
#include 

int main(void)
{
    string answer = get_string("Ismingiz nima? ");
    printf("Assalomu alaykum, %s\n", answer);
}

专门为 CS50 课程开发的 cs50.h 库的功能将在本课程中使用。其中之一是 get_string 函数。 get_string函数用于检索用户输入的文本。
答案是一个保留的地方,用于记住用户输入的特殊文本,我们称之为变量。答案的类型为 string。除了intboolchar等之外,还有很多数据类型
%s 是一个名为 format code 的占位符,它告诉 printf 函数准备接受某个字符串变量。
还有其他数据类型的格式代码,例如:
%i 代表 int(整数)。

条件运算符

让我们要求用户输入 int 类型的 x 和 y 变量,并将输入的数字相互比较:

#include 
#include 

int main(void)
{
    int x = get_int("x ni kiriting: ");
    int y = get_int("y ni kiriting: ");

    if (x 



这里我们创建两个 int 类型的变量(整数),x 和 y。它们的值是使用cs50.h库的get_int函数填充的。使用条件运算符,我们比较 x 和 y 值,并根据结果在屏幕上显示一条消息。

框图是我们检查计算机程序如何工作的一种方式。通过这种方法我们可以检查代码的效率。
让我们看看上面代码的框图:
Conditional 1

我们可以通过如下编码来改进程序:

#include 
#include 

int main(void)
{
    int x = get_int("x ni kiriting: ");
    int y = get_int("y ni kiriting: ");

    if (x  y)
    {
        printf("x soni y sonidan katta\n");
    }
    else
    {
        printf("x soni y soniga teng\n");
    }
}

现在考虑所有可能的情况。我们看一下它的框图:
Conditional 2

重复运算符

让我们打印“meow” 3次:

#include 

int main(void)
{
    printf("meow\n");
    printf("meow\n");
    printf("meow\n");
}

我们编写的代码工作正常,但我们可以通过避免重复来改进我们的程序:

#include 

int main(void)
{
    int i = 0;
    while (i 



在此,创建了int类型的变量i,并为其赋值了值3。然后创建一个 while 循环,持续执行 i 我们可以通过使用for循环来进一步改进我们的程序设计:

#include 

int main(void)
{
    for (int i = 0; i 



for 循环需要三个参数。
第一个参数:int i = 0 初始化我们的计数器。
第二个参数:i 最后, i 参数告诉我们,每次 i 增加 1。
我们还可以创建自己的函数:

void meow(void)
{
    printf("meow\n");
}

void - 表示该函数不返回任何值。括号中 (void) - 表示该函数不接受任何参数。 我们在主函数中使用这个创建的喵函数:

#include 无效喵(无效); int 主函数(无效) { for (int i = 0; i #include void meow(void); int main(void) { for (int i = 0; i 函数原型在代码顶部给出为 void meow(void) ,以便我们可以在主函数中调用 meow 函数。

算术运算符和抽象

让我们用 C 语言制作一个计算器:


#include #include int 主函数(无效) { // 输入x的值 int x = get_int("x: "); // 输入 y 的值 int y = get_int("y:"); // 执行添加操作 printf("%i\n", x y); }
#include 

void meow(void);

int main(void)
{
    for (int i = 0; i get_int函数要求用户输入整型变量x和y的值。然后 printf 函数使用整数的格式代码 - %i 符号打印 x y 的值。

算术运算符是编译器支持的数学运算。 C 中的算术运算符包括:

    - 加上;
  • - - 相减;
  • * - 相乘;
  • / - 用于除法;
  • % - 计算一个数字除以另一个数字时的余数。
抽象

是通过将问题分解为更小的部分来简化代码的艺术。 我们可以将上面的代码抽象如下:

#include #include int add(int a, int b); int 主函数(无效) { // 输入x的值 int x = get_int("x: "); // 输入 y 的值 int y = get_int("y:"); // 执行添加操作 printf("%i\n", 添加(x, y)); } int add(int a, int b) { 返回 a b; }

#include 
#include 

int add(int a, int b);

int main(void)
{
    // x qiymati kiritilsin
    int x = get_int("x: ");

    // y qiymati kiritilsin
    int y = get_int("y: ");

    // Qo'shish amalini bajarish
    printf("%i\n", add(x, y));
}

int add(int a, int b)
{
    return a   b;
}

评论

注释

是计算机程序的基本部分,是我们向其他程序员以及我们自己做出的清晰简洁的注释,解释我们编写的代码在做什么。我们只用两个 // 标签来写评论:
#include #include int 主函数(无效) { // 输入一个正整数 整数n; 做 { n = get_int("请输入一个正整数:"); } 而(n

#include 
#include 

int main(void)
{
    // Musbat butun son kiritilsin
    int n;
    do
    {
        n = get_int("Musbat butun son kiriting: ");
    }
    while (n 

数据类型

指定可以存储在变量中的数据类型。例如,变量可以存储数字、字符或布尔值。变量的类型告诉计算机如何处理该数据。 C中常见的数据类型有:

bool:可以保存布尔值,例如
    true
  • (true)或false(false)。 char:只能存储一个字符。
  • float:带小数的实数。
  • int:不带小数点的整数。
  • long:可以存储比int更大的整数,因为它使用更多的位。
  • string:可以存储字符序列(例如单词)。
  • 每个物种都有其自身的局限性。例如,由于内存限制,int 的最大值可以是 4294967295。如果我们尝试对超过其最大值的 int 进行计数,这将导致变量存储无效值(
整数溢出

)。 内存使用不当可能会导致我们的代码出现错误或问题。为了避免出现问题,我们需要确保使用正确的数据类型。

本文使用CS50x 2024源码。

版本聲明 本文轉載於:https://dev.to/udilbar/cs50-week-1-4p7i如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 如何修復 PHP 透過 SSH 連接 MySQL 時的 mysqli_connect() 參數問題?
    如何修復 PHP 透過 SSH 連接 MySQL 時的 mysqli_connect() 參數問題?
    在 PHP 中透過 SSH 連接到 MySQL 伺服器使用 PHP 函數透過 SSH 建立與遠端 Linux 電腦上託管的 MySQL 資料庫的連接可能具有挑戰性。使用提供的程式碼時,可能會出現錯誤「mysqli_connect()期望參數6為字串,給定資源」。 理解問題程式碼嘗試使用mysqli_...
    程式設計 發佈於2024-11-06
  • 微服務項目
    微服務項目
    ⚙️微服務專案的靈感來自@sqshq「Alexander Lukyanchikov」的piggymetrics,但這個實作使用了PostgreSQL和更簡單的業務邏輯,這個專案的主要目標是展示微服務架構的範例。 TechStack:PostgreSQL、Spring、Docker 我正在考慮可以添...
    程式設計 發佈於2024-11-06
  • 優化 AWS ECS 的 Java 堆設置
    優化 AWS ECS 的 Java 堆設置
    我們在 AWS Elastic Container Service(ECS) Fargate 上執行多個 Java 服務 (Corretto JDK21)。每個服務都有自己的容器,我們希望使用為每個進程支付的所有可能的資源。但這些步驟可以應用於 EC2 和其他雲端。 服務正在運行批次作業,延遲並不...
    程式設計 發佈於2024-11-06
  • PHP 初學者必備知識:釋放網站的全部潛力
    PHP 初學者必備知識:釋放網站的全部潛力
    PHP基礎:釋放網站潛能PHP是強大的伺服器端腳本語言,廣泛用於建立動態網站。對於初學者來說,掌握PHP基礎知識至關重要。本文將提供一個全面的指南,涵蓋PHP編程的基本要素,並透過實戰案例鞏固理解。 安裝並設定PHP要開始使用PHP,您需要安裝PHP解釋器和相關的軟體。遵循以下步驟:- 下载并安装P...
    程式設計 發佈於2024-11-06
  • 如何確定 PHP 標頭的正確圖片內容類型?
    如何確定 PHP 標頭的正確圖片內容類型?
    確定PHP 標頭的圖像內容類型確定PHP 標頭的圖像內容類型使用Header() 函數從Web 根目錄之外顯示圖像時,用戶可能會遇到困惑關於指定的內容類型:image/png。然而,儘管內容類型固定,但具有各種擴展名的圖像(例如, JPG、GIF)仍然可以成功顯示。 $filename = base...
    程式設計 發佈於2024-11-05
  • ByteBuddies:使用 Python 和 Tkinter 建立互動式動畫寵物
    ByteBuddies:使用 Python 和 Tkinter 建立互動式動畫寵物
    大家好! 我很高興向大家介紹 ByteBuddies,這是一個用 Python 和 Tkinter 創建的個人項目,展示了互動式動畫虛擬寵物。 ByteBuddies 將引人入勝的動畫與使用者交互相結合,提供了展示 GUI 程式設計強大功能的獨特體驗。該項目旨在透過提供互動式虛擬寵物來讓您的螢幕充...
    程式設計 發佈於2024-11-05
  • 如何解決“TypeError:\'str\'物件不支援專案分配”錯誤?
    如何解決“TypeError:\'str\'物件不支援專案分配”錯誤?
    'str'物件項目分配錯誤疑難排解'str'物件項目分配錯誤疑難排解嘗試在Python 中修改字串中的特定字元時,您可能會遇到錯誤「類型錯誤:「str」物件不支援專案分配。」發生這種情況是因為Python 中的字串是不可變的,這意味著它們無法就地更改。 >>...
    程式設計 發佈於2024-11-05
  • 如何緩解 GenAI 程式碼和 LLM 整合中的安全問題
    如何緩解 GenAI 程式碼和 LLM 整合中的安全問題
    GitHub Copilot and other AI coding tools have transformed how we write code and promise a leap in developer productivity. But they also introduce new ...
    程式設計 發佈於2024-11-05
  • Spring 中的 ContextLoaderListener:必要的邪惡還是不必要的複雜?
    Spring 中的 ContextLoaderListener:必要的邪惡還是不必要的複雜?
    ContextLoaderListener:必要的邪惡還是不必要的複雜? 開發人員經常遇到在 Spring Web 應用程式中使用 ContextLoaderListener 和 DispatcherServlet。然而,一個令人煩惱的問題出現了:為什麼不簡單地使用 DispatcherServle...
    程式設計 發佈於2024-11-05
  • JavaScript 機器學習入門:TensorFlow.js 初學者指南
    JavaScript 機器學習入門:TensorFlow.js 初學者指南
    機器學習 (ML) 迅速改變了軟體開發世界。直到最近,由於 TensorFlow 和 PyTorch 等函式庫,Python 仍是 ML 領域的主導語言。但隨著 TensorFlow.js 的興起,JavaScript 開發人員現在可以深入令人興奮的機器學習世界,使用熟悉的語法直接在瀏覽器或 Nod...
    程式設計 發佈於2024-11-05
  • extjs API 查詢參數範例
    extjs API 查詢參數範例
    API 查詢 參數是附加到 API 請求 URL 的鍵值對,用於傳送附加資訊至伺服器。它們允許用戶端(例如 Web 瀏覽器或應用程式)在向伺服器發出請求時指定某些條件或傳遞資料。 查詢參數加入到 URL 末端問號 (?) 後。每個參數都是鍵值對,鍵和值之間以等號 (=) 分隔。如果有多個查詢參數,...
    程式設計 發佈於2024-11-05
  • 如何解決Go中從不同套件匯入Proto檔案時出現「Missing Method Protoreflect」錯誤?
    如何解決Go中從不同套件匯入Proto檔案時出現「Missing Method Protoreflect」錯誤?
    如何從不同的套件導入Proto 檔案而不遇到「Missing Method Protoreflect」錯誤在Go 中,protobuf 常用於資料序列化。將 protobuf 組織到不同的套件中時,可能會遇到與缺少 ProtoReflect 方法相關的錯誤。當嘗試將資料解組到單獨套件中定義的自訂 p...
    程式設計 發佈於2024-11-05
  • 為什麼MySQL在查詢「Field = 0」非數位資料時傳回所有行?
    為什麼MySQL在查詢「Field = 0」非數位資料時傳回所有行?
    不明確的查詢:理解為什麼MySQL 回傳「Field=0」的所有行在MySQL 查詢領域,一個看似無害的比較,例如“SELECT * FROM table WHERE email=0”,可能會產生意外的結果。它沒有按預期過濾特定行,而是返回表中的所有記錄,從而引發了對資料安全性和查詢完整性的擔憂。 ...
    程式設計 發佈於2024-11-05
  • 伺服器發送事件 (SSE) 的工作原理
    伺服器發送事件 (SSE) 的工作原理
    SSE(服务器发送事件)在 Web 开发领域并未广泛使用,本文将深入探讨 SSE 是什么、它是如何工作的以及它如何受益您的申请。 什么是上交所? SSE 是一种通过 HTTP 连接从服务器向客户端发送实时更新的简单而有效的方法。它是 HTML5 规范的一部分,并受到所有现代 Web ...
    程式設計 發佈於2024-11-05
  • 如何從字串 TraceID 建立 OpenTelemetry Span?
    如何從字串 TraceID 建立 OpenTelemetry Span?
    從字串 TraceID 建構 OpenTelemetry Span要建立 Span 之間的父子關係,必須在上下文傳播不可行的情況下使用標頭。在這種情況下,追蹤 ID 和跨度 ID 包含在訊息代理程式的標頭中,這允許訂閱者使用父追蹤 ID 建立新的跨度。 解決方案以下步驟可以使用追蹤ID 在訂閱者端建...
    程式設計 發佈於2024-11-05

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3