前言

又到了一周一次的计算机程序课堂,今天老师讲的内容也是比较简单。今天大概讲了注释的两种方式,如果代码错误会发生什么,并让我们自己探索输入和比较两到三个数的大小,那我今天就来记录下我的代码。

上一篇关于环境设置的在:

【C语言学习之路】第一节课——软件准备和你好世界

注释方式

C 语言有两种注释方式:

第一种是以 // 开始的单行注释,这种注释可以单独占一行。

例如:


//单行注释

第二种是以/* */ 这种格式的注释,可以单行或多行。

例如:

/*
 多行注释
 多行注释
 多行注释
 */

但是注意不能在注释内嵌套注释,注释也不能出现在字符串或字符值中。


数据输入

对于数据,我们在之前的学习中已经知道了printf()语句是c语言中标准的输出语句,是在stdio.h这个头文件中定义的。那么同样的我们也有一个与之对应的输入语句:scanf()

scanf语句的定义是参数是这样的:scanf(const char *format, ...); 即:

scanf("输入控制符", 输入参数);

函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。

format 可以是一个简单的常量字符串,但是也可以和printf一样分别指定 %d、%c、%f 等来输出或读取整数、字符、浮点数等。还有许多其他可用的格式选项,可以根据需要使用。

例如:

#include<stdio.h>
int main(void)
{
    int a;
    scanf("%d",&a);//输入了一个a
    printf("The number is %d.\n",a);
    return 0;
}

显而易见,就是当上面的代码被编译和执行时,它会等待你输入一个整数,当您输入一个整数并按下回车键时,程序会继续并读取输入这个a,然后再输出来。

scanf() 期待输入的格式与你给出的 %d 的format相同,这意味着你必须提供有效的输入。

还有一个问题:&是一个取地址运算符,&后面加变量名表示“该变量的地址”,所以&a就表示变量 a 的地址。&a又称为“取地址a”,就相当于将数据存入以变量 a 的地址为地址的变量中。

那么以变量 a 的地址为地址的变量是哪个变量呢?就是变量 a。所以程序中 scanf 的结果就把输入的值,例如:123 放到变量a中。

综上所述,scanf 语句的意思就是:从键盘上输入字符 123,然后%d将这三个字符转化成十进制数 123,最后通过“取地址 a”找到变量 a 的地址,再将数字 123 放到以变量 a 的地址为地址的变量中,即变量 a 中,所以最终的输出结果就是The number is 123.

另外,在读取字符串时,只要遇到一个空格,scanf() 就会停止读取,所以 "this is test" 对 scanf() 来说是三个字符串。

这些就是简单的scanf()语句输入格式,当然还有更复杂的,但没必要在这里写。


判断语句

这个老师上课没有讲,但让我们自己去探索,索性我就直接写出来吧。

判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。

C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。

下面是大多数编程语言中典型的判断结构的一般形式:

C 语言提供了两种判断语句,分别是if...(else)...或者是switch,在这里只讲用得多的if()语句和if()...else...语句。

if 语句


if(boolean_expression)//括号内为一个判断表达式,作为是否成立的条件。
{
   /* 这里面写如果表达式为真将执行的语句 */
}

如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。

C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。

if...else 语句

if(boolean_expression) //如果真的意思
{
/* 如果布尔表达式为真将执行的语句 */
}
else //否则的意思
{
/* 如果布尔表达式为假将执行的语句 */
}

如果布尔表达式为 true,则执行 if 块内的代码。如果布尔表达式为 false,则执行 else 块内的代码。

C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。

举个例子:


#include <stdio.h>
int main ()
{
   int a=10;
   /* 使用 if 语句检查布尔条件 */
   if(a<20)
   {
       /* 如果条件为真,则输出下面的语句 */
       printf("1\n" );
   }
   printf("a 的值是 %d\n", a);
   return 0;
}

这个代码中因为a确实是小于20,那么就会执行输出“1”的代码,故最后输出为:

1
a的值是10

还有一个例子:


#include <stdio.h>
int main ()
{
   int a=30;
   /* 使用 if 语句检查布尔条件 */
   if(a<20)
   {
       /* 如果条件为真,则输出下面的语句 */
       printf("1\n" );
   }
   else 
   {
       /* 如果条件为假,则输出下面的语句 */
       printf("2\n");
   }
   return 0;
}

这个代码中因为a是大于20,那么就会执行输出“2”的代码,故最后输出为:

2

这些大概就是基本的if()判断语句的写法了。


比较大小

比较两个数的大小

比较两个数的大小这个很简单,在C语言中没有max函数,我们可以自己定义,也可以用最基本的if()判断句写法。

不用函数:


#include<stdio.h>
#include<math.h> //不是必要的头文件
int main(void)
{
    int a,b,c=-32767;//定义c为int 的最小值,其实就是防止最大值比初始值还小的情况
    scanf("%d %d",&a,&b);
    if(a>c) c=a;
    if(b>c) c=b;
    printf("Max number is %d.\n",c);
    return 0;
}

这里就引入了一个第三方变量c,这个用来存储最大的答案。算法大概是先把c赋值到比较小的数,如果a比c大,则把a赋值到c中,同理b,这样就有最大值了。

有函数版(进阶,建议别看):


#include<stdio.h>
#include<math.h>
int max(int x,int y)
{
    if(x>y) return x;
    else return y;
}
int main(void)
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("Max number is %d.\n",max(a,b));
    return 0;
}

这个要解释的有点多,因为大家没学到一些表达,所以就让我这个曾经考过noip的人先写着。


比较三个数的大小

这个比上面稍微复杂一点点,不过和之前的思想是一样的


#include<stdio.h>
#include<math.h>
int main(void)
{
    int a,b,c,t=-32767;
    scanf("%d %d %d",&a,&b,&c);
    if(a>t) t=a;
    if(b>t) t=b;
    if(c>t) t=c;
    printf("Max number is %d.\n",t);
    return 0;
}

有函数版(进阶,真的别看)


#include<stdio.h>
#include<math.h>
int max(int x,int y,int z)
{
    int t,tmp[3]={0};
    tmp[1]=x;tmp[2]=y;tmp[3]=z;
    t=x;
    for(int i=2;i<=3;i++) if(tmp[i]>t) 
            t=tmp[i];
    return t;
}
int main(void)
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    printf("Max number is %d.\n",max(a,b,c));
    return 0;
}

这里的一切都有始有终,却能容纳所有的不期而遇和久别重逢。
最后更新于 2024-01-14