嵌入式day4(2022.1.10)

简介: 嵌入式day4(2022.1.10)

在 C 语言知识体系中,


数据类型 --- 》 点


运算符 --- 》 线


逻辑结构 --- 》 面


函数 --- 》 体


1. 控制流 - 分支结构


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

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. 判断该三角形属于直角?钝角?锐角?


#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.下列代码会打印哪个数字?


int a=-1;
  if(++a)
    printf("1\n");
  else if(a++)
    printf("2\n");
  else if(a++)
    printf("3\n");
  else if(a++)
    printf("4\n");
  else if(a++)
    printf("5\n");
  else
    printf("6\n");
  printf("a: %d\n", a);


while


#include <stdio.h>
int main()
{
/*
  if(逻辑表达式)
  {
    //逻辑真,则执行分支体
    // 执行完毕后,结束。
  }
  while(逻辑表达式)
  {
    //逻辑真,则执行循环体。
    // 执行完毕后,再次判断
  }
*/
  int var1 = 1;
  while(var1<=10)
  {
    printf("var1: %d\n", var1);
    var1++;
  }
  // 可简化为:
  int var1 = 1;
  while(var1<=10)
    printf("var1: %d\n", var1++);
  return 0;
}


作业:



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


#include<stdio.h>
int main()
{
    for (int i = 97; i <=122; i++)
    {
        char a=i;
        printf("%c\t",a);
    }
    printf("\n");
   return 0;
}


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



 

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


#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("空格数:%d\n", space);
  printf("换行数:%d\n", line);
  printf("其他字符数:%d\n", otherchars);
  return 0;
}


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


#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("%d\t",i);
      }
    }
}
int main()
{
    int a;
    printf("输入一个整数\n");
    scanf("%d",&a);
    // unsigned char b;
    sushu(a);
   return 0;
}


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


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


#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.打印如下图案:



 

#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


#include<stdio.h>
int main()
{
    int a;
    printf("输入一个10进制数:\n");
    scanf("%d",&a);
    printf("转为16进制数是:0x%x\n",a);
   return 0;
}
相关文章
|
7月前
|
机器学习/深度学习 人工智能 安全
嵌入式会越来越卷吗?
嵌入式系统,融合硬件与软件,正以前所未有的速度普及和多样化。从智能手机到医疗保健,它们无处不在,推动着技术边界不断扩展。随着AI和IoT的发展,嵌入式系统变得更智能、高效。然而,技术进步也带来了安全挑战,数据保护和系统稳定性成为重要议题。未来,嵌入式系统将在物联网中扮演关键角色,同时教育和跨领域合作将塑造其发展路径。面对挑战,我们需要创新与合作,确保其健康且持续的进步。
|
7月前
|
Linux API C语言
嵌入式
嵌入式
106 2
|
存储 Java C#
day10嵌入式(2022.1.16)
day10嵌入式(2022.1.16)
|
传感器 人工智能 安全
有什么是嵌入式不能满足的?
从20世纪60年代开始,嵌入式系统就已经开始出现,当时主要应用于航空航天、国防、工业自动化等领域
|
存储 编译器
day8嵌入式(2022.1.14)
day8嵌入式(2022.1.14)
|
机器学习/深度学习 C语言
嵌入式day5(2022.1.11)
嵌入式day5(2022.1.11)
|
数据安全/隐私保护 C语言
day12嵌入式(2022.1.18)
day12嵌入式(2022.1.18)
|
传感器 设计模式 Ubuntu
嵌入式到底该怎么学
其实一直有人问我嵌入式怎么学,今天跟大家讲讲我的理解。因为嵌入式是一个泛的概念,可能很多人认为嵌入式就是嵌入式Linux。但是其实并不仅仅只有Linux, 像STM32,51单片机也属于这个范畴之内的,它们有的也可以跑协议栈,跑ucos等系统。所以其实嵌入式是有很多方向的,选择一个方向,做好,做精,都是有前途的。接下来,跟大家探讨一下嵌入式的一些方向,和如何去学习。我以前也是摸索着过来的,没人告诉我如何学习,也没有学习线路,所以走了很多弯路。所以希望这篇文章可以帮助到一些正在学习的人,当然这些内容可能有主观的东西,欢迎大家一起探讨吧。
|
Java 编译器 C++
嵌入式C++(六)
嵌入式C++(六)
嵌入式C++(六)