本专栏为个人在华清远见嵌入式linux学习期间的笔记,希望能与各位读者共同进步!
文章目录
前言
控制语句:
通过大量编程实例对分支、循环及循环辅助语句进行了系统介绍,对学员的编程进行强化训练。
一、C语言控制语句
1.C语句概述
二、if-else语句
1.if语句概述
if(表达式)
{
语句块1
}
else
{
语句块2
}
2.常见形式
简化形式
if(表达式)语句块
例如: if(x>y) printf(“%d”, x);
阶梯形式
if(表达式1) 语句块1
else if(表达式2) 语句块2
else if(表达式3) 语句块3
else if(表达式4) 语句块4
...
else 语句块n
注意:
语句块:当有若干条语句时,必须用{…}括起来。
表达式:
一般情况下为逻辑表达式或关系表达式
如:if(a == b && x == y) printf("a = b,x = y");
也可以是任意类型(包括整型、实型、字符型、指针类型)
如:if('a') printf("%d",'a');
请区分if(x=1)与if(x == 1)的不同。
例子:
#include <stdio.h>
int main()
{
float a = 4,b = 5,c = 2,t;
if(a > b) {t = a;a = b;b = t;}
if(a > c) {t = a;a = c;c = t;}
if(b > c) {t = b;b = c;c = t;}
printf("%5.2f,%5.2f,%5.2f",a,b,c);
return 0;
}
嵌套形式
if()
if() 语句块1
else 语句块2
else
if() 语句块3
else 语句块4
if语句的嵌套
else总是与它上面的最近的if配对,与书写格式无关。要实行强行的配对关系可以利用{ }
如:
if()
{if() 语句块1}
else 语句块2
三、switch语句
1.选择结构
多分支选择结构
2.switch语句
switch语句的基本形式
switch (表达式)
{
case 常量表达式1:语句块1;break;
case 常量表达式2:语句块2; break;
…
case 常量表达式n:语句块n; break;
default :语句块n+1
}
switch语句的使用:
1.每个常量表达式的值必须各不相同,否则将会出现矛盾。
2.当表达式的值与case后面的常量表达式值相等时,就执行此case后面的语句。
3.switch中的表达式可以是整型、字符型表达式或枚举。
4.case 常量:只起语句标号的作用。
5.break语句用于强行跳出switch体,一般每个case后面应有一个break语句,default分支后的break可以省略。
6.多个case可以执行一组语句。
例子
#include <stdio.h>
int main()
{
float score = 0;
printf("please input score:");
scanf("%f", &score);
if ( !(score >= 0 && score <= 100) )
printf("not in [0,100]\n");
else {
switch ((int)score / 10) {
case 10:
case 9:
printf("A-excellent\n");
break;
case 8:
case 7:
printf("B-good\n");
break;
case 6:
printf("C-OK\n");
break;
default:
printf("D-not pass\n");
}
}
return 0;
}
3.switch语句执行过程
四、循环语句
1.循环语句概述
循环结构程序
goto语句构成循环
while构成循环
do-while循环
for循环
2.goto语句
goto语句构成循环
例子,求1到100的和
int main()
{
int i = 1, sum=0;
if (i <= 100) {
sum = sum+i;
i++;
}
printf("%d",sum);
return 0;
}
如何利用goto语句构成循环?
#include <stdio.h>
int main(int argc, const char * argv[])
{
int i = 1;
int sum = 0;
_loop:
if (i <= 100) {
sum += i;
i++;
goto _loop;
}
printf("1+2+...+%d=%d\n", i, sum);
return 0;
}
3.集中于一处退出函数
循环结构程序
当函数有很多个出口,使用goto把这些出口集中到一处是很方便的,特别是函数中有许多重复的清理工作的时候。
理由是:
-无条件跳转易于理解
-可以减少嵌套
-可以避免那种忘记更新某一个出口点的问题
-算是帮助编译器做了代码优化
4.while语句
while语句构成循环
基本形式
while (表达式) {
statatments;
}
例子,求1到100的和
#include <stdio.h>
int main(int argc, const char * argv[])
{
int i = 1;
int sum = 0;
while (i <= 100) {
sum += i;
i++;
}
printf("1+2+...+%d=%d\n", i, sum);
return 0;
}
5.do-while语句
do-while语句构成循环
基本形式
do {
statatments;
}while(表达式);
例子,求1到100的和
#include <stdio.h>
int main(int argc, const char * argv[])
{
int i = 1;
int sum = 0;
do {
sum += i;
i++;
}while (i <= 100);
printf("1+2+...+%d=%d\n", i, sum);
return 0;
}
打印出所有的“水仙花”数。“水仙花”数是指一个3位数,其各个位数字立方和等于该数本身
#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[])
{
int n = 100;
int a, b, c;//bai shi ge 123
while (n <= 999) {
a = n / 100;
b = n / 10 % 10;
c = n % 10;
//if (a*a*a + b*b*b + c*c*c == n)
if (pow(a, 3) + pow(b, 3) + pow(c, 3) == n)
printf("%d\n", n);
n++;
}
return 0;
}
6.for语句
一般形式
for(expression1(初始值); expression2(终止条件); expression3(自增))
{statements;}
执行过程
1.先求解表达式1;
2.求解表达式2,若为真,则执行循环体,然后执行步骤3;若为假,则执行步骤5;
3.求解表达式3;
4.转回执行步骤2;
5.执行for下面的语句。
for语句构成循环
例如:
for(i=1;i<=100;i++)
{
sum=sum+i;
}
for语句构成循环
表达式1可省略,但循环之前应给循环变量赋值
表达式2可省略,将陷入死循环
表达式3可省略,但在循环体中增加使循环变量值改变的语句
利用for循环打印九九乘法表
#include <stdio.h>
int main(int argc, const char *argv[])
{
int line,column;
for(column = 1; column <= 9; column++)
{
for(line = 1; line <= column; line++)
{
printf("%d*%d=%d\t",line,column,line*column);
}
printf("\n");
}
return 0;
}
五、辅助控制语句
1.break语句
用于从循环体内跳出循环体,即提前结束循环。
break只能用在循环语句和switch语句中。
#include <stdio.h>
#define PI 3.14
int main()
{
int r, area;
for (r = 1; r <= 10; r++) {
area = PI * r * r;
if (area > 100)
break;
printf("%d-%d\n", r, area);
}
return 0;
}
素数
在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。
对一个大于或等于3的正整数,判断它是不是一个素数
S1: 输入整数n的值
S2: i=2
S3: n被i除,得余数r
S4:如果r=0,则打印n“不是素数”,算法结束;否则执行S5
S5: i+1→i
S6:如果i≤√n,返回S3;否则打印n“是素数”;然后算法结束
例子
#include <stdio.h>
#include <math.h>
int main()
{
int n, tmp;
int i;
printf("input n(>3):");
scanf("%d", &n);
i = 2;
tmp = sqrt(n);
while( i <= tmp) {
if (n % i == 0)
break;
i++;
}
if (i <= tmp)
printf("%d not\n", n);
else
printf("%d yes\n", n);
return 0;
}
2.continue语句
结束本次循环,接着判定下一次是否执行循环
注意continue与break的区别
continue直结束本次循环,而break终止本层循环
for(n = 100;n <= 200;n++)
{
if (n%3 == 0)
continue;
printf("%d",n);
}
例子
对判断素数的程序进行完善,若用户输入的不是整数,重新输入。
如何判断是否为整数?
if (scanf("%d", &n) == 0)
输入q if(0)
输入10 if(1)
输入缓冲区的清理
while(1) {
printf("input n(>3):");
if (scanf("%d", &n) == 0) {
if ((ch = getchar()) == '#')//清除输入缓存区 并约定好#退出程序
return 0;// break;
else {
printf("input error!\n");
continue; //重新输入
}
}
完整程序
#include <stdio.h>
#include <math.h>
int fun() {
int r = 5;
return r; //return的例子 退出函数 返回值
}
int main()
{
int n, tmp;
int i;
int ch, ret;;
ret = fun();
printf("ret=%d\n", ret);
while(1) {
printf("input n(>3):");
if (scanf("%d", &n) == 0) {
if ((ch = getchar()) == '#')
return 0;// break;
else {
printf("input error!\n");
continue;
}
}
i = 2;
tmp = sqrt(n);
while( i <= tmp) {
if (n % i == 0)
break;
i++;
}
if (i <= tmp)
printf("%d not\n", n);
else
printf("%d yes\n", n);
}
return 0;
}
3.return语句
return语句的一般形式:
return (<表达式>)
主要用于终止包含它的函数的执行
若终止的为主函数,则主程序结束
例子
int fun() {
int r = 5;
return r; //return的例子 退出函数 返回值
}