# 课程资料

  • help50: help50 make buggy0 解决编译产生的问题,如果 make 程序时出现很多 cryptic messages ,那么可以使用它。

  • debug50: debug50 ./buggy2 调试程序

  • check50: cs50/problems/hello 连接 GitHub 检验源码

  • style50: style50 hello.c 美化源码风格

  • 一些基本的命令行指令 ls cd rm cp mkdir rmdir

# 函数

什么是函数?就是通过一些法则,将输入的内容输出。arguments(参数)就是函数的输入,函数有两种输出,一种是 return values(返回值)通常存储在变量中,另一种是副作用?例如屏幕显示、音响发声。

int get_positive_int(void) 来说, void 表示它不需要任何输入, int 表示其输出的类型。

# 编译命令

clang -o hello hello.c
例如引用了函数 get_string 后,做两件事:

  1. #include<cs50.h>
  2. clang -o hello hello.c -lcs50 -l 表示 link
    因此引出了不需要 -o -l 参数的程序 make

# 数据类型及一些符号

Single characters or chars 只有一个字节。
bool / char —> 1 byte
int / float —> 4 bytes
long / double —> 8 bytes
string —> ? bytes

int 在 32 位系统中,占用 32 位 4 字节,范围是 -2^31 ~ 2^31-1, unsigned int 是 0 ~ 2^32-1。

  • 单引号:Single quotes in C are necessary for chars.(字符)
  • 双引号:对于 string 字符串,用双引号。 string s = "HI!" ,三个字符,使用双引号。
    满足条件的一些写法: and ---> && or ---> ||
或者的用法
char c = get_char("Do you agree?\n");
if (c == 'Y' || c == 'y')
{
  printf("Agree.\n");
}
else if (c == 'N' || c == 'n')
{
  printf("Not Agree.\n");
}
  • 注意这里的字符 Y,用单引号引用。
  • 若输入不满足 y/n 等要求,并不会重复问,直接退出。

# 一些循环

# 无限次循环

问一个问题,true 进入循环,无限次循环

while1
while (true) // 5 == 5,只要是布尔判断为 true 的
{
  printf("...");
}

# 有限次循环

for
for (int i = 0; i < n; i++)
{
  printf("...");
}
while2
int i = 0;
while (i < 50) //do the following n times.
{
  printf("...");
  i++;
}

# do-while 循环

几乎和 while 一样,只是会不断地检查一件事。

do-while
int get_posotive_int(void)
{
  int n; //do the following while n is less than 1.
  do {
      n =get_int("Positive Integer: ");
  }
  while (n < 1);
  return n;
}

scope(范围)问题: 在大括号内声明一个变量,变量的作用域是它所在的代码行,如果 int n = get_int("Positive Integer: "); 在这一行定义,定义的 n 只在 do 的大括号中,do 完成后会消失,不能与 while(n < 1) 比,也不能返回 n。

区别: do-while 先干一件事,再看条件。while 先看条件,再干事。

  • do-while 循环定义变量不能在循环内部,需要提前定义类型。
  • 若输入不满足 Positive Integer 要求会重复问。
return
int get_positive_int(void)
int main(void)
{
  int i = get_positive_int("x: "); // 这就是为什么会有 return value。
  printf("%i", i);
}

# 参数化函数

origin
void cough(void); //prototype 原型
int main(void)
{
  for (int i = 0; i < 3; i++)
  {
    cough();
  }
}
void cough(void)
{
  printf("cough\n");
}
parameterized
void cough(int n);
int main(void)
{
  cough(3);
}
void cough(int n)
{
  for (int i = 0; i < n; i++)
  {
    printf("cough\n");
  }
}