嵌入式初学-C语言-五

news2024/9/17 4:01:00

C语言语句概述

C语句的分类

⑴ 控制语句  用于完成一定的控制功能

     ① if (   ) …… else ……

     ② for (   ) ……

     ③ while (   ) ……

     ④ do …… while (   )

     ⑤ continue

     ⑥ break

     ⑦ switch (   )

     ⑧ return

     ⑨ goto  标号 (无条件跳转语句)

     说明:“(   ) ”中是一个判断条件, “……”表示内嵌的语句。

⑵ 函数调用语句   由一个函数调用加一个分号构成,

例如:

      printf(“This is a C statement.”);

⑶ 表达式语句  由一个表达式加一个分号构成,最典型的是赋值语句,例如:

      a=3       是一个表达式     

      a=3 ;  是一个表达式语句

⑷ 空语句  只有一个分号,什么都不做,例如:

      ;

⑸ 复合语句   用“{……}”括起来的若干个语句,例如:

      { z=x+y;

         t=z/100;

         printf(“%f”,t);

       }

一般形式为 : {语句部分;}

数据输入输出的概念及在C语言中的实现

数据的输入与输出是相对于计算机而言的。其中:

●   从计算机向外部设备输送数据称为输出。通常输出设备包括:显示器、打印机等;

●  从外部设备向计算机输送数据称为输入。通常输入设备包括:键盘、鼠标、扫描仪等

 在C语言中,输入与输出是用标准库函数中的输入、输出函数实现的

库函数已编译成目标文件,在链接时与编译源程序得到的目标文件(.obj)相连接,生成可执行程序。

注意:在使用系统库函数时,要用预编译命令#include将有关的头文件包含到用户源文件中(即在程序的开头)头文件中包含了调用函数时所需的有关信息。

简单的格式输入与输出

用简单的printf函数输出数据

1. printf函数的一般格式

printf ("格式控制",输出表列) ;

⑴ 格式控制 ,用一对双引号括起来,包括两种信息:

① 格式说明  由“%”和特定字符组成,如:%d、%c、%f等,是格式说明符,用于说明输出项目所采用的格式;

② 普通字符  作为说明性的文字、符号等,照原样显示出来。

⑵ 输出表列  中的各项目指出了所要输出的内容,可是常量、变量或表达式。

⑶ 例如:        printf("a=%d  b=%f\n",a,b) ;

2. 基本的格式字符

        %d:按十进制整形数据的实际长度输出

        %c:仅输出一个字符

        %s:输出一个字符串     例:printf("%s\n", "CHINA");输出的结果是字符串 CHINA

        %f:以小数形式输出一个实数(含单双精度数),整数部分全部输出,并输出6位小数。

        %e或%E:一指数形式输出一个实数(含单双精度数)小数点前仅1位非0数字,并输出六位小数

用简单的scanf函数输入数据

1. scanf函数的一般格式

scanf(“格式控制”,地址表列);

作用:

        将从键盘输入的值存入内存中所占的存储单元里面。储存单元由地址标示。

说明:

        “格式控制”的含义同printf函数,说明输入的数据应使用的格式。

        “地址表列”是由若干个地址组成的,可以是变量的地址或字符串的首地址。&是取地址运算符,用于取出变量的地址。

        与格式输出一样,在格式控制中,用于说明输入数据格式的格式说明符总是以%开头,后面紧跟的是具体的格式。

说明

        scanf函数中的“格式控制”后面应当是变量的地址,由取地址运算符和变量名共同组成,不能仅是变量名:

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

        如果“格式控制”中除了格式说明以外还有其它字符,则在输入数据时必须在对应位置输入与之相同的字符:

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

     从键盘输入时必须输逗号:  3,4 ↲

        ⑶ 用%c格式输入字符时,空格和转义字符都作为有效字符输入,应注意:scanf("%c%c%c", &a,&b,&c); 只有输入:xyz (回车)才能使a得到xb得到yc得到z

        ⑷ 在输入数值型数据时,遇到空格、回车、Tab键或遇非法输入,则认为该数据结束:

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

      若输入:1234a123o.26    o为非法字符则会输出: a:1234     b:a     c:123

        ⑸ 对于unsigned型变量所需的数据,可以用%u%d格式输入。

较复杂的输入输出格式控制

按指定格式输出数据的宽度、小数位数、上下行数据按小数点对齐、用八进制、十六进制输出等。

 1.输出数据格式控制

        1 整型格式说明符

十进制形式

        %d 或 %md     用于基本整型                     int

        %ld 或 %mld   用于长整型                         long

        %u 或 %mu     用于无符号基本整型          unsigned

        %lu 或 %mlu   用于无符号长整型              unsigned   long

八进制形式

        %o 或 %mo       用于基本整型                   int

        %lo 或 %mlo     用于长整型                       long

十六进制形式

        %x 或 %mx       用于基本整型                   int

        %lx 或 %mlx      用于长整型                      long

  m表示输出的整型数据所占总宽度(即列数),其中:当实际数据的位数不到m位时,数据前面将用空格补满;若实际数据位数大于m,则以数据的实际位数为准进行输出。

  一个int型整数也可以%u格式输出,反之一个unsigned型整数也可以%d、%o、%x格式输出。按相互赋值的规则处理。

    2.字符型格式说明

字符char型

%mc  输出的字符占m列,如:

printf(“%3c”,’a’); 

实际输出为:空格 空格 a

字符串

        %ms  输出的字符串占m列。若串长>m,全部输出;若串长<m,左面补空格。

        %-ms  输出的字符串长<m,右面补空格

        %-m.ns  只取字符串前n个字符。若n<m,右面补空格;若n>m,m自动取n值。

 

  一个整数,只要其值在0~255范围内,也可义用“%c”格式使其按字符形式输出。

  在输出前,系统会自动将该整数作为ASCII码转换成相应的字符;反之,一个字符也可以输出成一个整数。

     3.实型格式说明符

十进制数形式:    %m.nf或%-m.nf

指数形式:            %m.ne或%-m.ne

%g或%G形式:       根据数值的大小,自动选%f 或 %e中宽度较短的一种格式,

                              不输出无意义的0。

在输出实型数据时,格式说明符中的m表示整个数据所占的宽度,n表示小数点后面所占的位数。

        如果在小数点后取n位后,所规定的数据宽度m不够输出数据前面的整数部分(包括小数点),则按实际的位数进行输出。

      需要指出的是,在C语言中,用于输出单精度实型数据与双精度实型数据格式说明符是一样的。

例如:

#include <stdio.h>

int main()
{
 double x = 34.567;
 
 printf("x = %f\n",x);
 printf("x = %d\n",x);
 printf("x = %d\n",(int)x);
 
 return 0;
}

 编译结果如下:

显然,这个程序中的第二个格式输出语句输出的结果是错误的,这是因为在第二个格式输出语句中,格式说明符%d是基本整型格式说明符,而输出项目是双精度型的数据,它们是不匹配的。

输入数据格式控制

  整型格式说明

十进制形式

        %d 或 %md      用于一般整型

        %ld 或 %mld     用于长整型

        %u 或 %mu       用于无符号基本整型

        %lu 或 %mlu     用于无符号长整型

八进制形式

        %o 或 %mo       用于一般整型

        %lo 或 %mlo      用于长整型

十六进制形式

        %x 或 %mx        用于一般整型

        %lx 或 %mlx     用于长整型

可见:用于输入与输出整型数据的格式说明符是完全一样的。  m表示输入数据时的宽度(即列数)。与输出情形一样,对于八进制形式与十六进制形式的输入格式,主要用于输入无符号整型的数据。

实型格式说明符

单精度实型: %f或%e

双精度实型: %if

与输出不同,输入时无论是单精度还是双精度实型,都不能用m.n来指定输出的宽度和小数点后的位数;

可以指定输入数据所占的列数,系统自动按它截取所需数据,如:scanf(“%3d%3d”,&a,&b); 当输入1234567时,a得到123,b得到456,多余的7无用;

若在%号后有一个“*”和一个数字,表示跳过它指定的列数,如:scanf(“%2d%*3d%3d”,&a,&b);当输入12345678时,a得到12, %*3d表示读入345这3个数但不赋给变量, b得到678。

当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入数据时分为以下两种情况:

    ① 如果各格式说明符之间没有其它字符,则在输入数据时,两个数据 之间用"空格"、或"Tab"、或"回车"来分隔。

    ② 如果各格式说明符之间包含其它字符,则在输入数据时,应输入与 这些字符相同的字符作为间隔。

   若输入语句为   scanf("%d%d%f%f",&a,&b,&c,&d);(即格式说明符中没有宽度说明,各格式说明符之间也没有其他字符。)则输入数据的形式应为   12  78  12.5  7.6(回车)(两个数据之间用空格来分隔,当然也可用“Tab”或“回车”来分隔。)        

     若输入语句为  scanf("%d,%d,%f,%f",&a,&b,&c,&d);(格式说明符中没有宽度说明,但各格式说明符之间有其它字符,即逗号)则输入数据的形式应为   12,78,12.5,7.6(回车)(即在输入的两个数据之间同时要输入逗号。)        

    若输入语句 scanf(“a=%d,b=%d,c=%f,d=%f”,&a,&b,&c,&d);(即格式说明符中没有宽度说明,但各格式说明符之间有其它字符。)  输入数据的形式应为   a=12,b=78,c=12.5,d=7.6(回车)(即在输入的两个数据之间同时要输入这些非格式说明符的字符。) 

在用于输入的实型格式说明符中不能用m.n来指定输入的宽度和小数点后的位数(这是与输出的不同之处)。

        例如:    scanf(“%7.2f”,&a);× 此用法是错误的

为了便于程序执行过程中从键盘输入数据,在一个C程序开始执行时,  系统就在计算机内存中开辟了一个输入缓冲区,用于暂存从键盘输入的数据。开始时该输入缓冲区是空的。当执行到一个输入函数时,就检查输入缓冲区中是否有数据:

        如果输入缓冲区中已经有数据(上一个输入函数剩下的),则依次按照“格式控制”中的格式说明符从输入缓冲区中取出数据转换成计算机中的表示形式(二进制),最后存放到内存地址表中指出的对应地址中。

顺序结构

含义:程序中所有语句都是按自上而下的顺序执行的,不发生跳转

例题:

从键盘输入一个大写字母,要求用小写输出。

分析:

        大写字母与小写字母的ASCII码值相差32。

        对从键盘输入的大写字母加32即变为相应的小写字母。

程序如下:

#include <stdio.h>
void  main()
{ 
  char c1,c2;
  scanf(“%c”,&c1);
  printf("%c,%d\n",c1,c1);
  c2=c1+32;
  printf("%c,%d\n",c2,c2);
}

输入:A

运行结果: A,56         a,97;

小结

一个具有良好结构的程序均是由以下三种基本结构组成的:

①顺序结构      ②选择结构       ③循环结构

由这三种结构组成的程序:结构合理、思路清晰、容易理解、便于维护

●  C语言中语句使计算机执行特定的操作,所以称执行语句;

●  对变量的定义是为了在编译时给变量指定类型、分配空间;

●   “表达式+分号”构成语句。“赋值表达式+分号”构成赋值语句;  

●   赋值时应注意赋值号两边的类型应该兼容,以免丢失数据;

●   数据的输入输出靠调用函数实现,熟练掌握scanf和printf函数;

●  格式控制、格式说明%d、格式字符d,f,u,c,s,i,e,g、格式修饰符%3d, %7.2f, %-10.3f。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1952503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter Dio网络请求报错FormatException: Unexpected character

最近开发Flutter项目&#xff0c;网络请求采用的是Dio框架&#xff0c;在发起网络请求的时候报错&#xff1a; 网络请求返回的数据为&#xff1a; var returnCitySN {\"cip\": \"127.0.0.1\", \"cid\": \"00\", \"cname\"…

【漏洞复现】用友时空KSOA PreviewKPQT SQL注入漏洞

0x01 产品简介 用友时空KSOA是建立在SOA理念指导下研发的新一代产品&#xff0c;是根据流通企业最前沿的I需求推出的统一的IT基础架构&#xff0c;它可以让流通企业各个时期建立的IT系统之间彼此轻松对话&#xff0c;帮助流通企业保护原有的IT投资&#xff0c;简化IT管理&…

B站录播姬 v2.12.0 中文版

一个方便好用免费开源的哔哩哔哩直播录制工具。 B站录播姬是一款适用于B站的直播录制工具&#xff0c;该软件使用简单&#xff0c;功能强大&#xff0c;为你录制每一次的直播&#xff0c;用户只需要添加主播的直播号&#xff0c;当主播直播时&#xff0c;软件将自动为你录制直…

文件包涵漏洞(ctfshow 无条件竞争)

Web78 payload: ?filephp://filter/readconvert.base64-encode/resourceflag.php Web79 <?php system(cat flag.php); Data协议写入内容读取 payload: ?filedata://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs Web80 ?file/var/log/nginx/access.log…

结构体,联合体,指针和浮点代码笔记

系列文章 : 深入理解计算机系统笔记 文章目录 系列文章3.9 异质的数据结构3.9.1 结构3.9.2 联合3.9.3 数据对齐 3.10 在机器级程序中将控制和数据结合起来3.10.1 理解指针3.10.2 应用&#xff1a;使用GDB调试器3.10.3 内存越界引用和缓冲区溢出3.10.4 对抗缓冲区溢出攻击3.10…

(最新)华为 2024 届校招-硬件通⽤/单板开发——第十一套和十二套

&#xff08;最新&#xff09;华为 2024 届校招-硬件通⽤/单板开发——第十一套和十二套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;仅供参考&#xff09;&#xff08;共十二套&#xff09;&#xff08;谢绝白嫖哈&#xff09; …

leetcode日记(56)文本左右对齐

不难想但是很难写&#xff0c;需要考虑情况。 我是先写出代码框架&#xff08;先看一行可以加入接下来几个字母和对应空格&#xff0c;然后用空格数和字母数相除取模计算出字母间可以塞多少个空格&#xff0c;循环塞入这些空格和字母&#xff0c;添加进结果中&#xff09;&…

MongoDB教程(二十三):关于MongoDB自增机制

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…

青少年绘画大赛兰州站:童梦起航 致敬科学 续写降压0号之父强国梦

2024年7月21日&#xff0c;“鹤舞童梦致敬科学精神”青少年绘画大赛在兰州隆重启幕。 活动邀请了多位重量级嘉宾担任评委&#xff0c;包括中国美术家协会会员、甘肃省油画协会常务理事马爱兵&#xff0c;兰州交通大学天佑美术馆馆长王欣&#xff0c;以及国家一级美术师蔡晓斌。…

【Java基础系列】RBAC:介绍与原理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【C++】模板详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

Activiti 本地画流程 http://localhost:8080/activiti-app/#/

http://localhost:8080/activiti-app/#/ 1、本地安装了Tomcat 2、本地安装了Activiti 3、拷贝Activiti中这两个文件到Tomcat中的webapps目录下 4、启动startu.bat 5、http://localhost:8080/activiti-app/#/ 账号&#xff1a;admin 密码&#xff1a;test

Redis-jenkins

1. 什么是jenkins Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 2. 为什么使用jenkins 使用 Jenkins之前使用 Jenkins之…

【图形图像-1】SDF

在图形图像处理中&#xff0c;SDF&#xff08;Signed Distance Field&#xff0c;带符号的距离场&#xff09;是一种表示图形轮廓和空间距离的数学结构。它通常用于计算机图形学、文本渲染、碰撞检测和物理模拟等领域。 SDF&#xff08;Signed Distance Field&#xff0c;带符号…

白鲸开源CEO郭炜荣获「2024中国数智化转型升级先锋人物」称号

2024年7月24日&#xff0c;由数据猿主办&#xff0c;IDC协办&#xff0c;新华社中国经济信息社、上海大数据联盟、上海市数商协会、上海超级计算中心作为支持单位&#xff0c;举办“数智新质力拓未来 2024企业数智化转型升级发展论坛——暨AI大模型趋势论坛”数据猿“年中特别策…

.h264 .h265 压缩率的直观感受

1.资源文件 https://download.csdn.net/download/twicave/89579327 上面是.264 .265和原始的YUV420文件&#xff0c;各自的大小。 2.转换工具&#xff1a; 2.1 .h264 .h265互转 可以使用ffmpeg工具&#xff1a;Builds - CODEX FFMPEG gyan.dev 命令行参数&#xff1a; …

二叉树详解-第四篇 二叉树链式结构的实现

目录 1.二叉树的遍历 1.1前序遍历&#xff1a; 1.2 中序遍历&#xff1a; 1.3 后序遍历&#xff1a; 2.二叉树链式结构的实现 2.1 Tree.h 2.2 Tree.cpp 2.2.1 前序遍历 void PreOrder(TNode* Root) 2.2.2 中序遍历 void InOrder(TNode* Root) 2.2.3 后序遍历 void Bac…

Linux中断框架

不管是裸机实验还是 Linux 下的驱动实验&#xff0c;中断都是频繁使用的功能&#xff0c;在裸机中使用中断我们需要做一大堆的工作&#xff0c;比如配置寄存器&#xff0c;使能 IRQ 等等。Linux 内核提供了完善的中断框架&#xff0c;我们只需要申请中断&#xff0c;然后注册中…

【rockyLinux】rockyLinux 9.4 安装 java jdk

一、安装 java 1.选择版本 yum list | grep jdk各个版本之间的区别&#xff1a; 2.选择了&#xff1a;java-17-openjdk-devel.x86_64&#xff08;开发者版本&#xff09;&#xff0c;开始安装 建议安装在 /usr/local 这个目录下&#xff0c;可以创建一个 app 目录来收录它…

重生奇迹MU 三个阶段三种体验

重生奇迹MU的玩家们通常按等级分为三个阶段。在这三个不同的阶段里&#xff0c;游戏中的玩家好像深入了三个不同的世界&#xff0c;经历了三种不同的游戏体验&#xff0c;收获了三种不同的精彩&#xff01; 从刚开始游戏一直到达到400级&#xff0c;是游戏中的第一个阶段&…