前言
又到了一周一次的计算机程序课堂,今天老师讲的内容也是比较简单。今天大概讲了注释的两种方式,如果代码错误会发生什么,并让我们自己探索输入和比较两到三个数的大小,那我今天就来记录下我的代码。
上一篇关于环境设置的在:
注释方式
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”的代码,故最后输出为:
1a的值是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;}