#include <stdio.h>
#include <stdlib.h>
void main() {
/* some comments */
printf("Hello World!");
system("PAUSE");
return 0;
}
我们一步一步拆开来看看
#include <stdio.h>
#include <stdlib.h>
这是在 C program 编译之前要处理的内容,我们称为预处理命令(preprocessing command)。预处理命令还有很多,它们也都以 #
开头,并且不用分号结尾。
而 stdio
是 standard input output 的缩写,也就是有关输入输出的标头档(head file)
stdlib
也就是 standard library,包含了 C 与 C++ 里最常用的一些函数。
void main()
main function
,从这里开始执行 C program。
/* some comments */
注解,C program 不会编译执行里面的任何内容。单行注解的话使用双斜线 //
printf("Hello World!");
printf
指令可以输出内容显示在萤幕上。
system(“PAUSE”);
return 0;
程序暂停,按任意键继续。
Types | Data Types |
---|---|
Basic data types | int , char , float , double |
Enumeration data type | enum |
Derived data type | pointer , array , structure , union |
Void data type | void |
列举 (
enum
或enumeration
) 是另一种复合型别,主要是用在宣告仅有少数值的型别,像是一星期内的日期 (day of week) 或是一年内的月份等。
int
是用来宣告整数资料型态。Keyword | Byte | Format String | Comment |
---|---|---|---|
float | 4 bytes | %f |
浮点数 |
double | 8 bytes | %lf 、%l |
双精度浮点数 |
%c
用来宣告字元资料型态。Variable is a named location in a memory where a program can manipulate the data. This location is used to hold the value of the variable.
变数宣告需要在变数「初次」使用前完成,不可在其被使用後才进行宣告。
至於宣告的位置并没有特别规定,可以在任何地方进行宣告。
不过还是习惯於最一开始的时候先进行宣告。
printf
& scanf
printf
, scanf
)是 C语言非常重要的函式,也是 C语言必学的两个函式。在 C语言的程序中,几乎每一个程序都会使用到这两个函式,尤其是输出函式。printf
或者是 scanf
,那麽在撰写时就需要引用标头档(head file)stdio.h
。stdio 为 standard input output 的缩写,而这两个函式就包含在这个标头档里。printf
的功能很强大,用法灵活,比较难掌握;而 scanf
用法相对比较固定。printf
printf
,print format 的缩写。Syntax:
# include <stdio.h>
int printf (const char *format, ...);
标准语法如上。
以下举几个例子来示范 printf
的使用方法。
printf("字符串\n");
# include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
\n
表示换行的意思,是一个跳脱字元。n
为 new line 的缩写。printf
里必须使用双引号("
),双引号内的字幅串可以是英文,也可以是中文。printf("输出控制符",输出参数);
# include <stdio.h>
int main(void)
{
int i = 10;
printf("%d\n", i);
return 0;
}
i
以十进制的方式输出。i
本身就是十进制,又为甚麽还要将 i
以十进制输出?因为程序码中,虽然写的是 i=10
,但是在记忆体中并不是将「10
」这个十进制的值存进去,而是以二进制的方式存进去。所以我们在输出的时候就必须要有「输出控制符」(或称格式指定字,format specifier)来告诉系统应该怎麽解读这个二进制的数值。scanf
scanf
,scan format 的缩写。scanf
与 printf
的用法几乎完全一样。但是需要注意以下两点:
\n
&
,不过字元或阵列不需要加上&
(至於为甚麽,等之後上到指标的时候会再解释)。以下也示范几个例子说明 scanf 的使用方法。
#include <stdio.h>
int main() {
int a = 0, b = 0, c = 0, d = 0;
scanf("%d", &a);
scanf("%d", &b);
printf("a+b = %d\n", a+b);
scanf("%d %d", &c, &d);
printf("c*d = %d", c*d);
return 0;
}
从键盘上输入 12
,按下 Enter 键之後,scanf()
就会读取输入数据并给定给变数 a
,本次输入结束。接着执行下一个 scanf()
,再从键盘输入 60
,按下 Enter 键就会将 60
给定给变数 b
。
後面的 scanf()
有两个用空格分开的 %d
,後面跟着两个变数 c
、d
,这个代表我们要一次输入两个整数,并且会分别给定给 c
和 d
。注意,%d %d
之间是有空格的,所以我们在输入数据时也要有空格。对於 scanf()
,输入数据的格式要和控制字符串的格式一样。
scanf(“%d %d”, &a, &b); // 获取使用者输入的两个整数,分别给定变数a和b
printf(“%d %d”, a, b); // 将变数a和b的值在萤幕上输出
scanf 和 printf 非常相似,只是功能相反。
两者都有格式控制字符串,都有变数,不同的是 scanf 的变数前需要加一个 &
符号。
而 &
称为取址符号,也就是可以获得变数在记忆体的位址。(详细内容会在指标单元详细介绍)
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d %d", &a, &b);
printf("a+b=%d\n", a+b);
scanf("%d %d", &a, &b);
printf("a+b=%d\n", a+b);
scanf("%d, %d, %d", &a, &b, &c);
printf("a+b+c=%d\n", a+b+c);
scanf("%d is bigger than %d", &a, &b);
printf("a-b=%d\n", a-b);
return 0;
}
使用者每次按下 Enter 键,程序就会认为完成了一次输入操作,scanf()
开始读取使用者的输入内容,并且根据格式控制符中提取有效的数据,只要使用者输入的内容和格式控制符匹配,就能够正确提取。
scanf
连续输入我们将前两个程序码改写看看!
scanf()
读取完後并没有抛弃多余的值,而是将它们保存在某个地方,下次接着使用。scanf()
把前面两个整数给读进去了,此时剩下一个整数 60
。而第三个 scanf()
要求要输入两个整数,一个单独的整数 60
并不能满足其要求,所以我们还是必须输入数值凑足两个整数以後,第三个 scanf()
才能正确读取。所以,从基本上我们可以发现从键盘输入进去的数值并没有直接交给
scanf()
,而是放入一个「缓冲区」,直到我们按下 Enter,scanf()
才会到缓冲区去读取数值。如果缓冲区的数值符合scanf()
的要求,那麽就可以读取结束;如果不符合要求,那麽就继续等待用户输入,或者乾脆读取失败。
以此算式为例:
Types of Operators | Description |
---|---|
Arithmetic operators | 用於执行数学计算,例如:加减乘除和取余数。 |
Assignment operators | 用在为变数分配值(value)。 |
Relational operators | 用来比较两个变数的值。 |
Logical operators | 对给定的变数执行逻辑运算。 |
Bit wise operators | 对於给定的两个变数执行 bit operations。 |
Conditional (ternary) operators | 如果条件为 true,则条件运算子会回传一个值;如果是 false,则回传另一个。 |
Increment / decrement operators | 用於将变数的值增加或减少一。 |
Special operators | &、*、sizeof() 和 ternary operators。 |
++
递增运算子与 --
递减运算子顺序 | 运算子 |
---|---|
1 | () 小括号 |
2 | + 正数、- 负数 |
3 | * 、/ 、% |
4 | + 、- |
5 | < 、<= 、> 、>= |
6 | = 、!= |
7 | && |
8 | \|\| |
9 | = assign、*= 、/= 、%= 、+= 、-= |
<<: 06 - Uptime - 掌握系统的生命徵象 (4/4) - 使用合成监控 (Synthetics Monitor) 从使用者情境验证服务的运作状态
先前提过,手动发身份认证码给使用者,再让使用手动输入验证码的流程太不友善,今天就开始着手优化这个步骤...
网路是甚麽? 非常多的主机与设备连接起来,交换讯号,媒介可能是光纤、铜线、波(无线),设备间沟通的标...
一、前言 在大家入行当网页工程师前,一定都会做很多功课,了解前後端工程师技能树与後期发展性等等,...
在建置网页的时候,有时候会需要知道来源端它的环境是什麽,可能是需要记录来源的 IP,或是依照来源的作...
Vanishing Gradient Problem 昨天我们提到当你的Network很深的时候,设...