华清远见学习笔记—Level1—Day4—控制语句

本专栏为个人在华清远见嵌入式linux学习期间的笔记,希望能与各位读者共同进步!


前言

控制语句:

通过大量编程实例对分支、循环及循环辅助语句进行了系统介绍,对学员的编程进行强化训练。


一、C语言控制语句

1.C语句概述

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:语句块1break;
	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语句执行过程

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的例子 退出函数 返回值
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值