嵌入式day4(2022.1.10)

2022-12-02 14:30:14 浏览数 (1)

在 C 语言知识体系中,

数据类型 --- 》 点

运算符 --- 》 线

逻辑结构 --- 》 面

函数 --- 》 体

1. 控制流 - 分支结构

1. if-else 分支: 两路分支一般形式:

代码语言:javascript复制
if( 逻辑表达式 ) { 
// 如果表达式为逻辑真, 则执行分支体 1 
}
 else {
 // 如果表达式为逻辑假, 则执行分支体 2 
}

2 } 多路分支一般形式:

备注:

1. 两路或者多路分支中, else 可省略, 主要看使用场景。

2. 当多路分支中, 某一个为逻辑真, 执行分支体后直接结束分支。

3. 多路分支没有规定分支总数。

4. if-else 分支结构中, 如果分支体只有 1 条语句, 范围括号 {} 可省略。

5. 尽量减少分支、 循环的嵌套, 尽量小于 5 层, 否则导致程序逻辑可读性变差。

2. 入口选择分支: switch-case

备注: 1. 进入某个入口后, 按照顺序向下执行。 如果需要提前结束 swich-case , 可使用 break

练习

.1.从小到大输入 3 个数字(三角形的三边长) a. 判断是否能组成三角形? ( 两短边之和, 大于第三边。) (如果成立继续执行 b , 如果不成立提前结束程序。) b. 判断该三角形属于直角?钝角?锐角?

代码语言:javascript复制
#include <stdio.h>

int main()
{
	int a, b, c;

	scanf("%d %d %d", &a, &b, &c);

/*	// 2层if嵌套
	if(a b > c)
	{
		// 正常的三角形,开始执行b
		if(a*a   b*b == c*c)
			printf("直角三角形n");
		else if(a*a   b*b < c*c)
			printf("钝角三角形n");
		else if(a*a   b*b > c*c)
			printf("锐角三角形n");
	}
	else	// 不是三角形
		printf("不是三角形n");
*/
	// 1层if
	if(a b <= c)
	{
		printf("不是三角形n");
		return -1;	// 返回数值无所谓(一般错误使用负数)
	}

	// 正常的三角形,开始执行b
	if(a*a   b*b == c*c)
		printf("直角三角形n");
	else if(a*a   b*b < c*c)
		printf("钝角三角形n");
	else if(a*a   b*b > c*c)
		printf("锐角三角形n");

	return 0;
}

2.下列代码会打印哪个数字?

代码语言:javascript复制
int a=-1;
	if(  a)
		printf("1n");
	else if(a  )
		printf("2n");
	else if(a  )
		printf("3n");
	else if(a  )
		printf("4n");
	else if(a  )
		printf("5n");
	else
		printf("6n");

	printf("a: %dn", a);

while

代码语言:javascript复制
#include <stdio.h>

int main()
{
/*
	if(逻辑表达式)
	{
		//逻辑真,则执行分支体
		// 执行完毕后,结束。
	}

	while(逻辑表达式)
	{
		//逻辑真,则执行循环体。
		// 执行完毕后,再次判断
	}
*/
	int var1 = 1;
	while(var1<=10)
	{
		printf("var1: %dn", var1);
		var1  ;
	}
	// 可简化为:
	int var1 = 1;
	while(var1<=10)
		printf("var1: %dn", var1  );


	return 0;
}

作业:

1、编写一个程序,要求用相应的控制流语句往屏幕打印 26 个小写字母。

代码语言:javascript复制
#include<stdio.h>
int main()
{
    for (int i = 97; i <=122; i  )
    {
        char a=i;
        printf("%ct",a);
    }
    printf("n");
   return 0;
}

2、编写一个程序,用户输入某个大写字母,产生一个金字塔图案。例如用户输入字母 E,则产生如下图案:

代码语言:javascript复制
#include<stdio.h>
int main()
{
    printf("请输入一个大写字母n");
    char a;
    scanf("%c",&a);while (getchar()!='n');
    
    int asciiCode=(int)a-64;
    printf("现在有%d数n",asciiCode);
    int lineNum;
    for (int i = 0; i <asciiCode; i  )
    {
        for (int z = 2*asciiCode-1-i; z>=  0; z--)printf(" ");
        for (int j = 0; j <i 1; j  )
        {
            printf("%c",(char)65 j);
             if(j==i){
                for (;j>0;j--)
                {
                    printf("%c",(char)65 j-1);
                }
                j=i;
            }
        }
        printf("n");
    }

   return 0;
}

3、编写一个程序,该程序读取输入直到遇到#字符,然后报告读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。

代码语言:javascript复制
#include <stdio.h>
int main(int argc, char **argv)
{
	char ch;
	int space = 0;//空格数
	int line = 0; //换行数
	int otherchars = 0; //其他字符数
	
	printf("请输入文本:(输入'#'结束)n");
	while(1)
	{
		scanf("%c", &ch);
		
		if(ch == '#') //遇到'#'就结束循环
		{
			break;
		}
		if(ch == ' ') //遇到空格,space 1
		{	
			space  ;
		}
		else if(ch == 'n') //遇到换行,line 1
		{
			line  ;
		}

		else
		{
			otherchars  ;
		}
	}
	
	printf("空格数:%dn", space);
	printf("换行数:%dn", line);
	printf("其他字符数:%dn", otherchars);

	return 0;
}

4、编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。

代码语言:javascript复制
#include<stdio.h>
void sushu(int a) {
//素数(质数)计算方法
		int  i,j;
		for (i = 1; i <= a; i  ) {
			for (j = 2; j < i; j  ) {
				if (i % j == 0) {
                //    printf(i "不是素数n");
					break;
				}
			}
			if (i == j) {
                printf("%dt",i);
			}
		}
}
int main()
{
    int a;
    printf("输入一个整数n");
    scanf("%d",&a);
    // unsigned char b;
    sushu(a);
   return 0;
}

5、输入一个华氏温度,要求输出摄氏温度。要求结果保留 2 位小数。

转换公式为:c = 5(F-32)/9

代码语言:javascript复制
#include<stdio.h>
int main()
{
    float a;
    printf("输入一个华氏温度");
    scanf("%f",&a);
    float c=5*  (a-32)/9;
    //1 华氏度(华氏温度)=-17.222222222 摄氏度
   // printf("%.2f华氏度=%.2f℃n",a,a*17.222);
   printf("%.2f华氏度=%.2f℃n",a,c);
   return 0;
}

6.打印如下图案:

代码语言:javascript复制
#include<stdio.h>

int main()
{
	int i, j, k;
	for (i = 0; i < 4; i  )				//先输出前四行
	{
		for (j = 0; j < 3 - i; j  )		//随行数增加而减少每行空格的输出
		{
			printf(" ");
		}
		for (k = 0; k <= 2 * i; k  )		//随行数增加而增加每行*的输出
		{
			printf("*");
		}
		printf("n");
	}
	for (i = 0; i < 3; i  )				//输出后三行
	{
		for (j = 0; j < i 1; j  )		//随行数增加而增加空格的输出
		{
			printf(" ");
		}
		for (k = 0; k <= 4-2*i; k  )	//随行数的增加而减少*的输出
		{
			printf("*");
		}
		printf("n");
	}
	return 0;
}

7、将一个十进制数转换为十六进制数。比如输入 10,输出 0xA

代码语言:javascript复制
#include<stdio.h>
int main()
{
    int a;
    printf("输入一个10进制数:n");
    scanf("%d",&a);
    printf("转为16进制数是:0x%xn",a);
   return 0;
}

0 人点赞