我是靠谱客的博主 昏睡哑铃,这篇文章主要介绍【C语言笔记】05.表达式、语句、流程控制,现在分享给大家,希望可以做个参考。

系列文件git地址:https://gitee.com/HappyTeemo/my_c_test

表达式

表达式由运算符和运算对象组成。比如:

复制代码
1
2
3
4
5
4 4+21 q=5*3 x>5

每个表达式都有一个值,关系表达式不是真(非0)就是假(0)。

语句

一条语句相当于一条完整的计算机指令。最简单的是空语句,即;
有很多语句,啥也不干,不算真正有用的语句。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h> int main(void) /* 计算前20个整数的和 */ { int count, sum; /* 声明(声明不是语句 */ int port; /* 不是表达式,没有值 */ count = 0; /* 表达式语句 */ sum = 0; while (count++ < 20) /* while 迭代语句,也叫结构化语句 */ sum = sum + count; /* 表达式语句 */ printf("sum = %dn", sum);/* 表达式语句 */ return 0; /* 跳转语句 */ } /* C语言中,赋值和函数调用都是表达式,没有“赋值语句”和“函数调用语句” */

分支结构:

笑话:程序员买瓜,老婆说:“买菜的时候带两个桃子回来吧,如果看到西瓜了,就买一个。”如果一般人看到了西瓜会买两个桃子和一个西瓜,但是程序员只会买一个桃子回来。因为他的心中会执行判断:没看到西瓜,买两个桃子;看到了西瓜,买一个桃子。这就是程序员的思维,但是这个笑话的笑点在于,程序员怎么会有老婆。。。。。。
笑话中的程序员的内心就执行了一种叫分支结构的判断,就是给程序的河流加一个岔路口,如果是真,则走一边;如果是假,则走另一边。写法是:

if

复制代码
1
2
3
4
5
6
7
8
9
If(判断条件:是否看到西瓜) //判断条件不用分号结尾。 { 看到西瓜,买一个桃子。 } Else { 没看到西瓜,买两个桃子。 }

也就是说,if后面的扩号加的是判断条件,为真,则执行if后面的大括号中的语句;为假,则执行else后面大括号中的语句。
If后面不一定要有else,但是else前面必须有if。
还有一些写法比如:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
if(1) //非0就是真 int I = 8; //如果只有一句话可以省略大括号,但是不介意新手这样。 //或者: Bool B = true; if(B){} //此时的B为真,一样执行if后面的语句。 //还可以: If(1 > 2) //1并不大于2,则判断条件为假 //如果使用一个istream对象作为条件时: Int I = 0; While (std::cin >> i); //其效果是检测流的状态,如果流是有效的,则为真。当遇到结束运算符,或者无效的输入时(例如读入的值不是定义的类型,例子中为整型),则为假。

小技巧:if(12 == x)可以有效防止写成x = 12

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h> #define SPACE ' ' #include <Windows.h> #include <ctype.h> //输入字符打印后一个字母(按ASC表) int main() { char cStr; int nNumOfStr = 0; cStr = getchar(); while (cStr != 'n') //while ((cStr = getchar()) != 'n') { // if (cStr == SPACE)//如果是空格 // putchar(cStr); // else // putchar(cStr + 1); if (isalpha(cStr)) //如果是字母 { putchar(cStr+1); nNumOfStr++; } else { putchar(cStr); } cStr = getchar(); } putchar(cStr); printf("There are %d non-quote characters.n", nNumOfStr); system("pause"); return 0; }

Switch :

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch(i) //Switch后的表达式(控制表达式)一般为字符或整形表达式(表达式的值不是整数自动取整),不能为实型。 { case 0: { printf("input 0n"); return 0; } //Case后的常量表达式应是字符型或整型,不允许含有变量或者函数调用,必须与switch后面括号内的表达式一个类型,且值要互不相同。 case 1: { printf("input 1n"); return 0; } default://默认值,如果表达式的值与所有case后的值都不相等,则执行default后的语句 }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <Windows.h> #include <stdio.h> int main() { int i; scanf("%d",&i); switch(i) //Switch后的表达式(控制表达式)一般为字符或整形表达式(表达式的值不是整数自动取整),不能为实型。 { case 0: { printf("input 0n"); return 0; } //Case后的常量表达式应是字符型或整型,不允许含有变量或者函数调用,必须与switch后面括号内的表达式一个类型,且值要互不相同。 case 1: { printf("input 1n"); return 0; } default://默认值,如果表达式的值与所有case后的值都不相等,则执行default后的语句 printf("defaultn"); } system("pause"); return 0; }

枚举类型(enum):
自定义数据类型,表示取值只有有限种情况的数据。很像一系列命名常量,case标识符一般就用枚举类型。

循环结构

复制代码
1
2
3
4
5
6
7
8
循环分为 入口条件循环(entry-condition cycle),不确定循环(indefinite loop)和计数循环(counting loop) 出口条件循环(exit-condition loop),do-while 计数循环: 1.必须初始化计数器; 2.计数器与有限的值作比较; 3.每次循环时递增计数器。

while和do-while

While可以一次都不执行,do-while必须执行一次。do-while末尾记得加分号。
While中的表达式的值一直为非零常量,则形成死循环;若为零,则循环体内的语句一次也不会执行。

复制代码
1
2
3
4
while (逻辑表达式) { 反复执行的语句 }
复制代码
1
2
3
4
5
6
7
8
int I = 1;//习惯性地赋值时初始化 int sum = 0; While(i<=100) { Sum + = I; //sum = sum +I;组合写法。 I++; }
复制代码
1
2
3
4
do { 反复执行的语句 } while (逻辑表达式)

For

复制代码
1
2
3
4
For(初值;终值;增值)即初始化,控制条件,修改循环变量使循环趋于结束。 C++可以直接在for语句中定义变量。 for( ;1 ;)也可以造成死循环。
复制代码
1
2
3
4
5
6
7
int i = 1; int sum = 0; For(;i<=100;i++) //For(初值;终值;增值)初值可以没有,也可以加上:for(i=1;i<=100;i++) { sum += i ; }

循环语句一定要注意结束条件,如果结束条件有错误则会造成死循环!

跳出循环

复制代码
1
2
3
4
Break 终止并跳出最近一层的循环体。即循环结束。 Continue 结束本次循环。回到循环开始,继续循环。 return 结束函数体。用于跳出多层循环。跳出多层循环还可以设置flag。

拓展:

分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。
答:

复制代码
1
2
3
4
5
6
BOOL : if ( !a ) or if(a) int : if ( a == 0) float : const EXPRESSION EXP = 0.000001 if ( a < EXP && a >-EXP) pointer : if ( a != NULL) or if(a == NULL)

一个利用流程控制判断字符数、单词数、行数的例子:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h> #include <ctype.h>// 为isspace()函数提供原型 #include <stdbool.h>// 为bool、true、false提供定义 #define STOP '|' int main(void) { char c; // 读入字符 char prev; // 读入的前一个字符 long n_chars = 0L; // 字符数 int n_lines = 0; // 行数 int n_words = 0; // 单词数 int p_lines = 0; // 不完整的行数 bool inword = false; // 如果c在单词中,inword 等于 true printf("Enter text to be analyzed (| to terminate):n"); prev = 'n';// 用于识别完整的行 while ((c = getchar()) != STOP) { n_chars++;// 统计字符 if (c == 'n') n_lines++;// 统计行 if (!isspace(c) && !inword) { inword = true;// 开始一个新的单词 n_words++;// 统计单词; } if (isspace(c) && inword) inword = false;// 打到单词的末尾 prev = c;// 保存字符的值 } if (prev != 'n') p_lines = 1; printf("characters = %ld, words = %d, lines = %d, ",n_chars, n_words, n_lines); printf("partial lines = %dn", p_lines); return 0; }

最后

以上就是昏睡哑铃最近收集整理的关于【C语言笔记】05.表达式、语句、流程控制的全部内容,更多相关【C语言笔记】05内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部