首页 > 其他分享 >嵌入式初学-C语言-五

嵌入式初学-C语言-五

时间:2024-07-29 10:25:35浏览次数:14  
标签:输出 说明符 嵌入式 初学 整型 格式 C语言 数据 输入

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得到x,b得到y,c得到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。

标签:输出,说明符,嵌入式,初学,整型,格式,C语言,数据,输入
From: https://blog.csdn.net/MaBaB/article/details/140723252

相关文章

  • 嵌入式移动互联综合实训室解决方案
    一、前言在快速迭代的数字时代背景下,移动互联与嵌入式技术已成为推动社会进步与产业升级的关键力量。为了积极响应市场需求,培养具备扎实理论基础与卓越实践能力的复合型人才,唯众特别推出了嵌入式移动互联综合实训室,旨在为学生搭建一个集教学、实践、创新于一体的综合性学......
  • 嵌入式开发测试实训室解决方案
    一、建设背景随着物联网、人工智能等技术的飞速发展,嵌入式系统作为这些技术的重要载体,其重要性日益凸显。为了满足市场对嵌入式技术人才的需求,培养具有扎实理论基础、熟练实践技能及创新能力的嵌入式开发工程师,设计并建设一个高效、全面的嵌入式开发测试实训室显得尤为重......
  • C语言 #具有展开功能的排雷游戏
    文章目录前言一、整个排雷游戏的思维梳理二、整体代码分布布局三、游戏主体逻辑实现--test.c四、整个游戏头文件的引用以及函数的声明--game.h五、游戏功能的具体实现--game.c六、老六版本 总结前言路漫漫其修远兮,吾将上下而求索。一、整个排雷游戏的思维......
  • C语言中的关键字有哪些,分别代表什么意思
    C语言中的关键字是C语言编译器事先定义的、具有特定意义的标识符,它们用于构成C语言程序的基本框架。C语言一共有32个关键字,根据它们的作用,可以将这些关键字分为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。以下是这些关键字的详细解释:一、数据类型关键字(12......
  • C语言中的预处理指令有哪些
    C语言本身是一种过程式编程语言,它的执行是通过编写函数、语句和控制结构(如if-else、循环等)来完成的,而不是通过类似于某些预处理器指令的“处理指令”来直接控制编译或运行时的行为。然而,如果你的意思是C语言中与预处理相关的指令,那么这些通常被称为预处理指令(PreprocessorDirect......
  • C语言新手小白详细教程(5)数组
    希望文章能够给到初学的你一些启发~如果觉得文章对你有帮助的话,点赞+关注+收藏支持一下笔者吧~阅读指南:开篇说明一.一维数组的定义与引用1.定义一个一维数组2.引用一维数组内的元素3.一维数组内的初始化4.举个例子二.二维数组的定义与引用1.定义二维数组2.引用二维......
  • C语言 -- sizeof和strlen的用法
    C语言--sizeof和strlen的用法1.sizeof和strlen的对比​1.1sizeof​1.2strlen​1.3sizeof和strlen的对比​2.数组和指针笔试题解析2.1一维数组​2.2字符数组​2.3二维数组3.指针运算笔试题解析3.1题目1:3.2题目2​3.3题目3​3.4题目4​3.5题目5​3.6......
  • 学习嵌入式的第五天---选择语句,循环语句
    任何一个程序,都是这三种结构组成(顺序结构、选择结构、循环结构)比较----------选择提供判断条件--------------进行选择c语言中通过关系运算和逻辑运算构造,选择判断条件关系运算> >= < <= == !=  intn;  n>5---------关系表达式,表达式都是有值,结果反映一......
  • C语言笔记(第n版):编译器与构建系统
    一、C语言标准与编译器        C编译器是软件开发中至关重要的工具,它的主要作用是将人类可读的C语言源代码转换为计算机能够理解和执行的可执行代码。    (一)C语言标准的制定C语言标准的制定是一个逐步发展和完善的过程。在早期,C语言缺乏统一的标准,这导致......
  • C语言进阶版—扫雷游戏
    文章目录1.打印棋盘2.游戏逻辑3.游戏框架3.1打印菜单3.2do……while实现主逻辑3.3创建棋盘3.4初始化棋盘3.5设置雷3.6排查雷完整游戏代码1.打印棋盘  在正式讲解扫雷游戏之前,我们简单来看一下打印出来的棋盘.  第一步我们要打印每行的框架printf("......