”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > CS-第 1 周

CS-第 1 周

发布于2024-08-01
浏览:101

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]删除
最新教程 更多>
  • 使用 Django、Twilio 和 Pinata 构建安全的匿名反馈系统
    使用 Django、Twilio 和 Pinata 构建安全的匿名反馈系统
    在本指南中,我将引导您使用 Django、用于短信通知的 Twilio、用于安全媒体上传的 Pinata 以及用于响应式样式的 TailwindCSS 构建安全匿名反馈系统。在本教程结束时,您将拥有一个功能齐全的反馈系统,用户可以在其中提交反馈、选择上传媒体以及接收短信通知 - 所有这些都考虑到安全...
    编程 发布于2024-11-06
  • 为什么 Tkinter Entry 的 get 函数不返回任何内容?
    为什么 Tkinter Entry 的 get 函数不返回任何内容?
    Tkinter Entry 的 get 函数没有产生任何结果:综合解释当尝试使用 get() 从 Tkinter Entry 小部件检索用户输入时函数时,您可能会遇到空返回值。这个看似令人困惑的问题源于 Tkinter 的异步特性和函数执行的顺序。在提供的代码片段中,您尝试在创建 Entry 后立即...
    编程 发布于2024-11-06
  • 使用 NodeJs 开始使用 RabbitMq
    使用 NodeJs 开始使用 RabbitMq
    RabbitMq简介 RabbitMq 是一个消息代理,允许在不同服务之间发送和接收消息。它是一个实现高级消息队列协议(AMQP)的消息代理。用 Erlang 编程语言编写。 安装 RabbitMq RabbitMq 可以使用各自的包管理器安装在不同的操作系统上。 RabbitMQ需...
    编程 发布于2024-11-06
  • 让网络更加互联
    让网络更加互联
    让网络更加互联 - Infometka 如何解决“隐形网站”问题 作为一名 Web 开发人员和 ???️??????️ 的创建者,我一直热衷于解决现实世界的问题。今天,我想分享我开发的一个解决方案,我相信它可以为无数网站所有者带来重大改变,并在某种程度上使互联网成为一个更加互联的地方。 ...
    编程 发布于2024-11-06
  • 使用 React 构建 Loop Studio
    使用 React 构建 Loop Studio
    介绍 Loop Studio 是一个沉浸式网站,旨在展示各种虚拟现实 (VR) 项目。使用 React,我们可以有效地管理和渲染不同的组件,以构建有凝聚力和交互式的用户体验。该项目采用简洁的设计,带有导航标题、详细的 VR 部分、创作画廊以及带有社交媒体链接的页脚。 ...
    编程 发布于2024-11-06
  • 如何解决用PHP在CURL中发送多维数组时出现“数组到字符串转换”错误?
    如何解决用PHP在CURL中发送多维数组时出现“数组到字符串转换”错误?
    通过 CURL 和 PHP 发送多维数组使用 CURL 发布包含多维数组的表单数据时,遇到“数组到字符串转换”错误是一个常见问题。当尝试使用包含数组的数组设置 CURLOPT_POSTFIELDS 时会发生这种情况。由于 Content-Type 标头必须是 multipart/form-data ...
    编程 发布于2024-11-06
  • 如何在 Selenium 中使用 \"span:contains(\'String\')\" 解决 InvalidSelectorException?
    如何在 Selenium 中使用 \"span:contains(\'String\')\" 解决 InvalidSelectorException?
    Selenium 中的 Invalid SelectorException with "span:contains('String')"在 Firefox 中使用 Python 中的 Selenium 时,尝试使用 CSS 选择器“span:contains(&#...
    编程 发布于2024-11-06
  • 如何将 HTML 附加到容器元素而不出现 InnerHTML 陷阱?
    如何将 HTML 附加到容器元素而不出现 InnerHTML 陷阱?
    在没有innerHTML的情况下将HTML附加到容器元素重新访问当前的问题是如何将HTML附加到容器元素,同时避免限制以及使用innerHTML属性的陷阱。正如OP正确指出的那样,innerHTML由于其替换现有内容的行为,可能会破坏嵌入媒体等动态元素。幸运的是,有一个替代方案可以克服这些问题:in...
    编程 发布于2024-11-06
  • 持续测试:确保 DevOps 管道的质量
    持续测试:确保 DevOps 管道的质量
    持续测试是现代软件开发中的关键实践,尤其是在 DevOps 框架内。它涉及在整个软件交付管道中自动执行测试,以确保对代码库所做的每项更改都得到彻底验证。通过将测试集成到开发过程的每个阶段,持续测试旨在尽早发现和解决缺陷,从而显着降低生产故障的风险。 什么是持续测试? 持续测试是作为软件交付管道的一...
    编程 发布于2024-11-06
  • 背景颜色改变视频
    背景颜色改变视频
    在 Instagram 上关注我们 在本视频教程中,我将指导您使用 HTML、CSS 和 JavaScript 构建令人惊叹的 Instagram 卡片。该卡片具有充满活力的变色边框、圆形个人资料图片和“关注我们”按钮,为您的在线形象增添了吸引力。该项目非常适合增强您的作品集或社交媒体页面,展示了简...
    编程 发布于2024-11-06
  • 如何使用 PHP 清除浏览器缓存?
    如何使用 PHP 清除浏览器缓存?
    使用 PHP 清除浏览器缓存浏览器缓存将经常访问的文件存储在本地,从而缩短网站加载时间。但是,如果缓存的文件已过时,它也会干扰测试和开发。本文介绍如何使用 PHP 清除浏览器缓存。清除浏览器缓存的 PHP 代码以下 PHP 代码将标头发送到客户端浏览器,指示其清除其缓存:header("C...
    编程 发布于2024-11-06
  • AWS Lambda 与 Go,初始样板
    AWS Lambda 与 Go,初始样板
    照片由 Lukáš Vaňátko 在 Unsplash 上拍摄 介绍 Go 由于其简单性一直是我最喜欢的语言之一。最近,我决定弄清楚如何使用用 Go 编写的 lambda 函数创建一个简单的样板无服务器项目。我对工具和开发人员体验很好奇。 目标 我想创建一个 RES...
    编程 发布于2024-11-06
  • 在 Laravel 中对底部为空值和非空值的行进行降序排序
    在 Laravel 中对底部为空值和非空值的行进行降序排序
    使用数据库时,经常会遇到某些字段可能为空或 NULL 的情况。经常出现的一个挑战是如何对记录进行排序,以便具有空字段的行出现在结果集的底部,而具有非空值的行以有意义的方式排序(例如,降序)。在这篇文章中,我将通过一个实际示例向您展示如何在 Laravel 中实现这一目标。 设想 假设...
    编程 发布于2024-11-06
  • 橄榄油的好处
    橄榄油的好处
    橄榄油的好处 橄榄油通常被誉为地中海饮食的基石,不仅可以为各种菜肴增添风味,而且还对健康有益。橄榄油从橄榄树的果实中提取,已经使用了几个世纪,现代研究不断发现它的许多优点。以下是将橄榄油纳入饮食的一些主要好处: 1. 心脏健康 橄榄油富含单不饱和脂肪,尤其是油酸,众...
    编程 发布于2024-11-06
  • JSON Diff:开发人员完整指南
    JSON Diff:开发人员完整指南
    JSON(JavaScript 对象表示法)是一种广泛使用的数据格式,用于在系统之间交换信息。当开发人员使用 API、数据库和配置时,确保 JSON 数据保持一致和准确至关重要。这就是 JSON diff 发挥作用的地方。 JSON diff 工具允许开发人员快速发现两个 JSON 结构之间的差异...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3