上一篇我们大概的介绍程序的结构,也出了一个小作业,不晓得大家有没有试试看呢?
其实写程序真的没有想像中那麽困难的,就像学英文一样好好的学习、理解文法,就可以很好上手了,希望大家不要害怕来跟着一步一步学习吧!
方法一、
#include <stdio.h>
int main(){
printf("*\n");
printf("**\n");
printf("***\n");
printf("****\n");
printf("*****\n");
return 0;
}
方法二、
#include <stdio.h>
int main(){
printf("*\n**\n***\n****\n*****\n");
return 0;
}
方法一定不只这两种,也不是只有这两种方法才是对的,多去尝试吧!
可能大家对运算子这个名词有点陌生,所以我们来举个一定使用过的「+ - * /」,这个加减乘除大家一定是很熟悉的,这些符号在资讯领域我们会称它为运算子;那说到加减乘除的话不可不提的,就是被运算子运算的运算元了,运算元举简单的例子「3+2」来说,其中的「3」、「2」就是运算元,是会被运算子处理的资料。
可能大家现在有点头晕了,简单来说运算子负责运算、处理运算元(资料),而「3+2」这整个式子我们会称为运算式。
我们来用图解结论一下:
然後除了这些当然还有很多很多,就不再一一介绍了,接下来我们来测试看看吧!(其他详细资讯可以到wiki这里参考)
以下只是简单的介绍与测试,欢迎自己改数字等等的尝试看看。
#include <stdio.h>
int main(){
printf("%d\n", 5 + 2);
printf("%d\n", 5 - 2);
printf("%d\n", 5 * 2);
printf("%d\n", 5 / 2);
printf("%d\n", 5 % 2);
printf("---我是分隔线---\n");
printf("%f\n", 5.0 + 2);
printf("%f\n", 5.0 - 2);
printf("%f\n", 5.0 * 2);
printf("%f\n", 5.0 / 2);
return 0;
}
而上段程序码输出的结果会为:
其中如果不看printf语法(之後会再提),比较特别的大概是「%」了,它是用於取余数的运算子,所以「5%2」时会列印出无法被整除的余数「1」;而「/」则是因为在程序码中,若其运算的两个运算元都是整数,会预设输出可以被整除的商「2」。
而如果运算的两个运算元有一方或双方为浮点数(小数),输出就会为浮点数了,但输出为浮点数的情况下就不能使用「%」。
(2) + - (正负号)
我们以下面的程序码来进行测试:
#include <stdio.h>
int main(){
printf("%d\n", + 2);
printf("%d\n", - 2);
printf("---我是分隔线---\n");
printf("%f\n", + 2.0);
printf("%f\n", - 2.0);
return 0;
}
而上段程序码输出的结果会为:
(3) ++ -- (递增、递减)
这里我们就不多介绍了怕太混乱,有兴趣的朋友可以自行爬文,查查看它的使用方式。
(或是可以查看这个网页的介绍,写的很清晰也有解释前缀後缀时的差异)
以下范例若列印出1为ture、0则为false。
(1) > < >= <= (大於、小於、大於等於、小於等於)
我们以下面的程序码来进行测试:
#include <stdio.h>
int main(){
printf("> 之结果:\n");
printf("%d\n", 5 > 2);
printf("%d\n", 2 > 5);
printf("%d\n", 5 > 5);
printf("------\n");
printf("< 之结果:\n");
printf("%d\n", 5 < 2);
printf("%d\n", 2 < 5);
printf("%d\n", 5 < 5);
printf("------\n");
printf(">= 之结果:\n");
printf("%d\n", 5 >= 2);
printf("%d\n", 2 >= 5);
printf("%d\n", 5 >= 5);
printf("------\n");
printf("<= 之结果:\n");
printf("%d\n", 5 <= 2);
printf("%d\n", 2 <= 5);
printf("%d\n", 5 <= 5);
printf("------\n");
return 0;
}
而上段程序码输出的结果会为:
(2) != == (不等於、等於)
我们以下面的程序码来进行测试:
#include <stdio.h>
int main(){
printf("== 之结果:\n");
printf("%d\n", 5 == 2);
printf("%d\n", 5 == 5);
printf("------\n");
printf("!= 之结果:\n");
printf("%d\n", 5 != 2);
printf("%d\n", 5 != 5);
printf("------\n");
return 0;
}
而上段程序码输出的结果会为:
(3) && || (条件and比较、条件or比较)
我们以下面的程序码来进行测试:
#include <stdio.h>
int main(){
printf("&& 之结果:\n");
printf("%d\n", (5 == 5) && (2 == 2));
printf("%d\n", (5 != 5) && (2 == 2));
printf("%d\n", (5 != 5) && (2 != 2));
printf("------\n");
printf("|| 之结果:\n");
printf("%d\n", (5 == 5) || (2 == 2));
printf("%d\n", (5 != 5) || (2 == 2));
printf("%d\n", (5 != 5) || (2 != 2));
printf("------\n");
return 0;
}
而上段程序码输出的结果会为:
「&&」在左右条件皆为ture的情况,输出为ture,反之则为false;「||」在左右条件任一方为ture或两方都为ture时,输出为ture,反之双方皆为false时则输出false。
(4) ! (取反逻辑)
我们以下面的程序码来进行测试:
#include <stdio.h>
int main(){
printf("! 之结果:\n");
printf("%d\n", (5 == 5));
printf("%d\n", !(5 == 5));
printf("%d\n", (5 != 5));
printf("%d\n", !(5 != 5));
printf("------\n");
return 0;
}
而上段程序码输出的结果会为:
我们以下面的程序码来进行测试:
int main(){
printf("<< 之结果:\n");
printf("%d\n", 4 << 1);
printf("%d\n", 4 << 2);
printf("------\n");
printf(">> 之结果:\n");
printf("%d\n", 4 >> 1);
printf("%d\n", 4 >> 2);
printf("------\n");
return 0;
}
而上段程序码输出的结果会为:
虽然大概知道怎麽使用,但大家可能还对位元运算有点模糊,下面我用小画家图解一下原因:
(对二进制有疑惑的朋友可以另外查看这个页面,这个是介绍数字系统的)
(2) & | (位元and运算、位元or运算)
我们以下面的程序码来进行测试:
#include <stdio.h>
int main(){
printf("& 之结果:\n");
printf("%d\n", 0 & 5);
printf("%d\n", 0 & 10);
printf("%d\n", 15 & 5);
printf("%d\n", 15 & 10);
printf("------\n");
printf("| 之结果:\n");
printf("%d\n", 0 | 5);
printf("%d\n", 0 | 10);
printf("%d\n", 15 | 5);
printf("%d\n", 15 | 10);
printf("------\n");
return 0;
}
而上段程序码输出的结果会为:
运算子跟上一个一样都是位元上的运算,而且是每个位元间的运算,都把数字转成二进制会比较好理解,前面可能没有把and、or说清楚,我们稍微图解一下。
第一步骤:我们先来了解and跟or的规则
a. and
值1 | 值2 | 输出 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
b. or
值1 | 值2 | 输出 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
第二步骤:知道了and、or的规则我们再来把进制转换一下。
十进制 | 二进制 |
---|---|
0 | 0 |
5 | 101 |
10 | 1010 |
15 | 1111 |
第三步骤:转换完二进制後再进行「&」跟「|」的运算
举四个例子:
a. 0 & 5
项目 | 二进制 | 十进制 |
---|---|---|
值1 | 0000 | 0 |
值2 | 0101 | 5 |
and 运算 | ---- | ---- |
结果 | 0000 | 0 |
b. 15 & 10
项目 | 二进制 | 十进制 |
---|---|---|
值1 | 1111 | 15 |
值2 | 1010 | 10 |
and 运算 | ---- | ---- |
结果 | 1010 | 10 |
c. 0 | 5
项目 | 二进制 | 十进制 |
---|---|---|
值1 | 0000 | 0 |
值2 | 0101 | 5 |
or 运算 | ---- | ---- |
结果 | 0101 | 5 |
d. 15 | 10
项目 | 二进制 | 十进制 |
---|---|---|
值1 | 1111 | 15 |
值2 | 1010 | 10 |
or 运算 | ---- | ---- |
结果 | 1111 | 15 |
我们以下面的程序码来进行测试:
#include <stdio.h>
int main(){
int data;
data = 777;
printf("%d\n", data);
data = 8787;
printf("%d\n", data);
return 0;
}
而上段程序码输出的结果会为:
可以看到当「data = 777;」时,data变数就存进了777,列印data时显示的结果就是777;而当我们第二次赋值时,「data = 8787;」会覆盖掉上次的值,在列印data时显示的就变成8787了。
(2) += -= *= /= %= (运算後赋值)
我们以下面的程序码来进行测试:
#include <stdio.h>
int main(){
int data;
data = 2;
printf("%d\n", data);
data += 3;
printf("%d\n", data);
return 0;
}
而上段程序码输出的结果会为:
其实这类的运算子是由两个步骤组成,先进行算术运算、最後再赋值,就不多做其他的例子了,有兴趣可以自行尝试看看这些运算子,而+=时如下图解。
>>: What is The Best Way to Save Emails in Outlook?
昨日[Day 26]-【STM32系列】UART/USART TX 资料传送篇(上)我们体验了UAR...
282. Expression Add Operators https://leetcode.com...
前言 上一篇介绍了jmap基本的应用,接着就要讲jmap的重点!!导出内存映像文件,而导出的方式分为...
开发环境 Windows系统开发PHP的主流环境有两种:wamp和xampp。网路上有很多教学了,这...
开始施工 今天我们要来制作 Transformer Decoder 的部分,一样先上个图方便施工 以...