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

CS-第 1 周

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

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]删除
最新教程 更多>
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-05-14
  • 使用jQuery如何有效修改":after"伪元素的CSS属性?
    使用jQuery如何有效修改":after"伪元素的CSS属性?
    在jquery中了解伪元素的限制:访问“ selector 尝试修改“:”选择器的CSS属性时,您可能会遇到困难。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    编程 发布于2025-05-14
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-05-14
  • Python不会对超范围子串切片报错的原因
    Python不会对超范围子串切片报错的原因
    在python中用索引切片范围:二重性和空序列索引单个元素不同,该元素会引起错误,切片在序列的边界之外没有。这种行为源于索引和切片之间的基本差异。索引一个序列,例如“示例” [3],返回一个项目。但是,切片序列(例如“示例” [3:4])返回项目的子序列。索引不存在的元素时,例如“示例” [9] ...
    编程 发布于2025-05-14
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-05-14
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-05-14
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-05-14
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-05-14
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-05-14
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-05-14
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“检测”中的错误:在功能检测中。”当Face Cascade分类器(即面部检测至关重要的组件)未正确加载时,通常会出现此错误。要解决此问题,必须...
    编程 发布于2025-05-14
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-05-14
  • 用户本地时间格式及时区偏移显示指南
    用户本地时间格式及时区偏移显示指南
    在用户的语言环境格式中显示日期/时间,并使用时间偏移在向最终用户展示日期和时间时,以其localzone and格式显示它们至关重要。这确保了不同地理位置的清晰度和无缝用户体验。以下是使用JavaScript实现此目的的方法。方法:推荐方法是处理客户端的Javascript中的日期/时间格式化和时...
    编程 发布于2025-05-14
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-05-14
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-05-14

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

Copyright© 2022 湘ICP备2022001581号-3