搜档网
当前位置:搜档网 › Kinetis SDK1.3 printf输出之二——使能半主机调试打印

Kinetis SDK1.3 printf输出之二——使能半主机调试打印

Kinetis SDK1.3 printf输出之二——使能半主机调试打印
Kinetis SDK1.3 printf输出之二——使能半主机调试打印

Kinetis SDK1.3 printf输出之二——使能半主机调试打印

---ConstYu 201601

在嵌入式调试中,使用串口打印调试信息是一种十分常用的调试手段,但是在很多应用中,如果板子上串口引脚没有引出或者IO资源紧张时,该如何实现信息的打印呢?

在PC端编写C语言时,printf可以向控制台输出,scanf可以从控制台获取输入,这里的printf/scanf都是标准库函数,利用操作系统的这些函数,我们可以很方便的调试程序。在嵌入式设备开发时上,IAR/MDK等开发工具也都提供了printf/scanf标准库函数,那么这些函数是否可以直接使用呢?那么问题来了,printf输出到哪里呢?并且大部分情况下,MCU系统也没有键盘,又如何使用scanf实现输入呢?

于是著名的Semi-Hosting(半主机调试机制)就诞生了,其原理是:通过借助J-link/U-Link等仿真器,使得单片机可以借助PC机的屏幕以及PC机的键盘实现printf的输出和scanf的按键获取。如下的hello,world程序。

#include

int main()

{

//硬件初始化

//....

printf("hello, world");

for(;;);

}

将该程序烧录到单片机中后,仿真器连接接单片机与PC,开始在线调试后,那么这个程序会将"Hello, world"输出到PC机上,对于IAR开发工具,默认会输出到其Terminal IO窗口中显示。这就相当于,单片机借助了PC机的显示/输入设备实现了自己的输出/输入。这种方式无疑可以方便程序开发者调试。

在网上能搜索关键词“printf terminal IO”,可以看到很多基于STM32的应用,那在Kinetis 的SDK中如何实现呢?尽管IAR、Keil等IDE中标准库stdio.h的printf默认都是输出到Terminal IO,但事实上在SDK的例程代码中往往都把printf默认重定向到了硬件的UART 串口。

所以如果想使能Semi-Hosting半自主调试功能,就需要disable SDK中的printf重定向,使之恢复默认打印到Terminal IO。那问题来了,SDK中究竟是在哪里重写的printf呢?很自然的想法是找到Printf的实现,但遗憾的是printf的实现是放在lib库中的,无法找到其实现细节,也有网友指出重写fputc,但是SDK中实现的机制并非是这样。于是经过一番求证,找到解决办法:

找到fsl_debug_console.c 的line323,使用#if 0 #endif或者其他方法注释掉line324-line374行,如下:

#if 0

#pragma weak __write

size_t __write(int handle, const unsigned char * buffer, size_t size)

………….

#pragma weak __read

size_t __read(int handle, unsigned char * buffer, size_t size)

/* Receive data.*/

s_debugConsole.ops.rx_union.Receive(s_debugConsole.base, buffer, size);

return size;

}

#endif

在IAR中保存修改,然后重新编译下载到MCU,打开View->Terminal IO,如下图运行程序可以看到printf打印的内容输出到IAR的Terminal IO,而且可以借助电脑的键盘得到输入信息。从而实现在不占用硬件串口的基础上,灵活的输出调试信息,并实现人机交互,大大提高调试的效率。

scanf用法

scanf()函数是所有C语言学习者在学习C语言过程中所遇到的第二个函数(第一个函数是printf(),Brian W.Kerninghan & Dennis M.Ritchie的“hello,world”程序基本上是所有的C语言学习者第一个范例),所以scanf()函数应当是C学习者能熟练运用的一个函数,但有很多初学者对此函数不能很好的运用,在实际编程中错误使用scanf()函数,导至程序产生某种错误不能正常运行,以至产生“scanf()函数有BUG”,“scanf()函数无用论”等等错误观点。 本文结合笔者在编程实践中及论坛上网友所遇到的问题作一释疑,但笔者水平有限(菜鸟级),难免有谬误之处,还望达人指点一二。(Email:knocker.k@https://www.sodocs.net/doc/de5223520.html,) 本文分上,下两篇讲述了C语言中的scanf()函数的用法,重点阐述使用scanf()函数过程中出现的常见错误及对策。当然,文中某些解决方法,均可以采用其他函数和方法来更好地解决,但本文仅限讨论scanf()函数本身。 上篇,详细介绍了scanf()函数控制串的构成。下篇,用实际例程介绍scanf()函数控制串运用出现的常见错误及对策技巧。 二、scanf()函数的控制串 函数名: scanf 功能: 执行格式化输入 用法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为: scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF。 其控制串由三类字符构成: 1。格式化说明符; 2。空白符; 3。非空白符; (A)格式化说明符

C语言输入输出函数printf与scanf的用法格式

C 语言输入输出函数printf 与scanf 的用法格式 printf()函数用来向标准输出设备(屏幕)写数据; scanf() 函数用来从标准输入设备(键盘)上读数据。下面详细介绍这两个函数的用法。 一、printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式控制字符, 以"%"开始, 后跟一个或几个控制字符,用来确定输出内容格式。 参量表是需要输出的一系列参数,可以是常量、变量或表达式,其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。 例如: printf("a=%d b=%d",a,b); 1. 格式控制符Turbo C 2.0提供的格式化规定符如下: 格式控制字符 参量表 正常字符

━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号作用 ────────────────────────── %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e,%E 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g,%G 自动选择合适的表示法 ━━━━━━━━━━━━━━━━━━━━━━━━━━ printf的附加格式说明字符 字符说明 l 用于长整型数或双精度实型,可加在格式 符d、o、x、u和f前面 m(代表一个正整数据最小输出显示宽度

c++ printf使用及参数详解

c++ printf使用及参数详解 1.调用格式为 printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。 2.格式化字符 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g 自动选择合适的表示法 说明: (1). 可以在"%"和字母之间插进数字表示最大场宽。例如: %3d 表示输出3位整型数, 不够3位右对齐。%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6, 小数点占一位, 不够9位右对齐。超过9位,按实际输出。%8s 表示输出8个字符的字符串, 不够8个字符右对齐。如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出; 若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。另外, 若想在输出值前加一些0, 就应在场宽项前加个0。例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度为4位。如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度, 小数点前的数字代表最小宽度。例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。 (2). 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。例如: %ld 表示输出long整数, %lf 表示输出double浮点数。 (3). 可以控制输出左对齐或右对齐, 即在"%"和字母之间加入一个"-" 号可说明输出为左对齐, 否则为右对齐。例如: %-7d 表示输出7位整数左对齐,%-10s 表示输出10个字符左对齐。 3. 一些特殊规定字符 \n换行 \f清屏并换页 \r回车 \t Tab符 \xhh表示一个ASCII码用16进表示, 其中hh是1到2个16进制数

自己写的printf()和scanf()函数

自己来写printf()和scanf()函数 一、预备知识——C语言中的可变参数函数 1.先举一个例子: #define bufsize 80 char buffer[bufsize]; /**************************************************************** * 这个函数用来格式化带参数的字符串 *****************************************************************/ int vspf(char *fmt, ...) { va_list argptr; //声明一个转换参数的变量 int cnt; va_start(argptr, fmt); //初始化变量 //将带参数的字符串按照参数列表格式化到buffer中 cnt = vsnprintf(buffer,bufsize ,fmt, argptr); va_end(argptr); //结束变量列表,和va_start成对使用 return(cnt); } /**************************************************************** * 主函数 *****************************************************************/ int main(int argc, char* argv[]) { int inumber = 30; float fnumber = 90.0; char string[4] = "abc"; vspf("%d %f %s", inumber, fnumber, string); printf("%s\n", buffer); return 0; } 下面我们来探讨如何写一个简单的可变参数的C函数. 2.写可变参数的C函数要在程序中用到以下这些宏: void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr );

输入输出答案1

输入输出 一、选择题 1.C语言中调用printf进行输出时需要注意,在格式控制串中,格式说明与输出项的个数必须相同。如果格式说明的个数小于输出项的个数,多余的输出项将A;如果格式说明的个数多于输出项的个数,则对于多余的格式将输出不定值(或0)。 如printf(“%d,%d”,a,b,c); 只输出a和b的值,c不输出 A)不予输出B)输出空格 C)照样输出D)输出不定值或0 2.在scanf函数的格式控制中,格式说明的类型与输入的类型应该一一对应匹配。如果类型不匹配,系统 B 。 A)不予接收 B)并不给出出错信息,但不可能得出正确信息数据 C)能接受正确输入 D)给出出错信息,不予接收输入 3.下列说法正确的是 D 。 A)输入项可以是一个实型常量,如scanf("%f",4.8); B)只有格式控制,没有输入项也能进行正确输入,如scanf("a=%d,b=%d"); C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%5.3f",&f); D)当输入数据时,必须指明变量的地址,如scanf("%f",&f); 4.根据题目中已给出的数据的输入和输出形式,程序中输入/输出语句的正确是 B 。 main() { int a;float x; printf("input a,x:"); 输入语句 输出语句 } 输入形式input a,x:3 2.1 输出形式a+x=5.10 A)scanf("%d,%f",&a,&x); printf("\na+x=%4.2f",a+x); B)scanf("%d %f",&a.&x); printf("\na+x=%4.2f",a+x); C)scanf("%d %f",&a,&x); printf("\na+x=%6.1f",a+x); D)scanf("%d %3.1f",&a,&x); printf("\na+x=%4.2f",a+x); 5.以下程序的输出结果是 D 。 main() { int i=010,j=10,k=0x10; printf("%d,%d,%d\n",i,j,k);

带格式的输出语句及输入语句

带格式的输出语句及输入语句 一、输入语句(读语句) 在程序中可以用赋值语句给变量获得一个确定的值,但是变量的值经常变化,尤其初始化时,则必须使用输入语句──读语句,将更为方便。读语句是在程序运行时由用户给变量提供数据的一种很灵活的输入动作,它有两种格式: 1.读语句的一般格式: read(<变量名表>); readln[(<变量名表>)]; 其中变量名表是用逗号隔开的若干个变量名组成的。 功能:从标准输入(即INPUT,一般对应着键盘)中读入数据,并依次赋给相应的变量。 说明: ①read和readln是标准过程名,它们是标准标识符。 ②执行到read或readln语句时,系统处于等待状态,等待用户从键盘上输入数据,系统根据变量的数据类型的语法要求判断输入的字符是否合法。如执行read(a)语句,a是整型变量,则输入的字符为数字字符时是合法的,合法的情况下将输入的整数赋给变量a。 ③在输入数值型(整型或实型)数据时,数据间要用空格或回车分隔开各个数据,一定要输入足够个数的数据,否则仍要继续等待输入,但最后一定要有回车,表示该输入行结束,直到数据足够,读语句执行结束,程序继续运行。 例3. 设a、b、c为整型变量,需将它们的值分别赋以10,20,30,写出对应下列语句的所有可能输入格式。 Read(a,b,c); 解 根据③,即可列出所有可能输入格式 (a)10□20□30←┘ (b)10□20←┘ 30←┘ (c)10←┘ 20□30←┘ (d)10←┘ 20←┘ 30←┘ 其中"←┘"表示回车键。 ④read语句与readln语句的第一个区别是:

read语句是一个接一个地读数据,在执行完本Read语句(读完本语句中变量所需的数据)后,下一个读语句接着从该数据输入行中继续读数据,也就是说,不换行。如: Read(a,b); Read(c,d); Read(e); 如果输入数据行如下: 1□2□3□4□5□6□←┘ 则a,b,c,d,e的值分别为1,2,3,4,5,如果后面无读语句则数据6是多余的,这是允许的。 Readln则不同,在读完本Readln语句中变量所需的数据后,该数据行中剩余的数据多余无用,或者说,在读完本Readln语句中变量所需数据后,一定要读到一个回车,否则多余的数据无用。 例4 设要达到例1同样的目的,但语句改为: readln(a,b);readln(c) 则例3中的4种输入格式只有(b)(d)是有效的. ⑤readln语句与read语句的第二个区别是:read后一定要有参数表,而readln 可以不带参数表,即可以没有任何输入项,只是等待读入一个换行符(回车)。经常用于暂停程序的运行,直到输入一个回车。 例5 设有下列语句: read(a,b,c); readln(d,e); readln; readln(f,g); 其中,所有变量均为整型。再设输入的数据如下: 1□2←┘ 3□4□5□6□7□8←┘ 9□10←┘ 11←┘ 12□13←┘ 列表给出每个变量的值.

c语言printf()输出格式

c语言printf()输出格式大全 1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G) 浮点数不显无意义的零"0" %i 有符号十进制整数(与%d相同) %u 无符号十进制整数 %o 八进制整数 e.g. 0123 %x(%X) 十六进制整数() e.g. 0x1234 %p 指针 %s 字符串 %% "%" 2.标志 左对齐:"-" e.g. "%-20s" 右对齐:"+" e.g. "%+20s" 空格:若符号为正,则显示空格,负则显示"-" e.g. "% " #:对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x; 对e,g,f 类当结果有小数时才给出小数点。 3.格式字符串(格式) [标志][输出最少宽度][.精度][长度]类型 "%-md" :左对齐,若m比实际少时,按实际输出。 "%m.ns":输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n e.g. "%7.2s" 输入CHINA 输出" CH" "%m.nf":输出浮点数,m为宽度,n为小数点右边数位 e.g. "%" 输入3852.99 输出3853.0 长度:为h短整形量,l为长整形量 printf的格式控制的完整格式: % - .n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少。

C语言Printf之使用及在单片机中的用法

一、printf常用说明 printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少。 ②-:有-表示左对齐输出,如省略表示右对齐输出。 ③0:有0表示指定空位填0,如省略表示指定空位不填。 ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。 ⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。 ---------------------------------- 格式字符 格式字符用以指定输出项的数据类型和输出格式。 ①d格式:用来输出十进制整数。有以下几种用法: %d:按整型数据的实际长度输出。 %md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 %ld:输出长整型数据。 ②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。例: main() { int a = -1; printf("%d, %o", a, a); } 运行结果:-1,177777 程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。 ③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式输出。 ④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。 ⑤c格式:输出一个字符。

1.2.1输入、输出语句和赋值语句(教、学案)

1. 2.1输入、输出语句和赋值语句 【教学目标】 1.正确理解输入语句、输出语句、赋值语句的结构。 2.会写一些简单的程序。 3.掌握赋值语句中的“=”的作用 【重点与难点】 教学重点:正确理解输入语句、输出语句、赋值语句的作用。 教学难点:准确写出输入语句、输出语句、赋值语句。 【教学过程】 1.情境导入 在现代社会里, 计算机已经成为人们日常生活和工作不可缺少的工具, 如:听MP3, 看 电影, 玩游戏, 打字排版, 画卡通画, 处理数据等等, 那么, 计算机是怎样工作的呢? 计算机完成任何一项任务都需要算法, 但是, 我们用自然语言或程序框图描述的算法, 计算机是无法“看得懂, 听得见”的。因此还需要将算法用计算机能够理解的程序设计语言(programming language )翻译成计算机程序。 程序设计语言有很多种。为了实现算法中的三种基本的逻辑结构:顺序结构、条件结构、 和循环结构, 各种程序设计语言中都包含下列基本的算法语句: 输入语句 输出语句 赋值语句 条件语句 循环语句 2..探究新知 我们知道, 顺序结构是任何一个算法都离不开的基本结构。 输入、输出语句和赋值语句基本上对应于算法中的顺序结构。(如右图)计算机从上而下按照语句排列的顺序执行这些语句。 输入语句和输出语句分别用来实现算法的输入信息, 输出结果的功能。 用描点法作函数3 2 32430y x x x =+-+的图象时, 需要求 出自变量与函数的一组对应值。编写程序, 分别计算当5,4,3,2,1,0,1,2,3,4,5x =-----时的函数值。 程序: (一)输入语句 在该程序中的第1行中的INPUT 语句就是输入语句。这个语句的一般格式是:

printf和scanf

格式化占位符[编辑] 格式化字符串中的占位符用于指明输出的参数值如何格式化。格式化占位符(format placeholder) 语法是: %[parameter][flags][field width][.precision][length]type Parameter可以忽略或者是: Flags可为0个或多个:

Field Width给出显示数值的最小宽度,典型用于制表输出时填充固定宽度的表目。实际输出字符的个数不足域宽,则根据左对齐或右对齐进行填充。实际输出字符的个数超过域宽并不引起数值截断,而是显示全部。宽度值的前导0被解释为0填充标志,如上述;前导的负值被解释为其绝对值,负号解释为左对齐标志。如果域宽值为*,则由对应的函数参数的值为当前域宽。 Precision通常指明输出的最大长度,依赖于特定的格式化类型。对于d、i、u、x、o的整型数值,是指最小数字位数,不足的位要在左侧补0,如果超过也不截断,缺省值为1。对于a,A,e,E,f,F的浮点数值,是指小数点右边显示的数字位数,必要时四舍五入;缺省值为6。对于g,G的浮点数值,是指有效数字的最大位数。对于s的字符串类型,是指输出的字节的上限,超出限制的其它字符将被截断。如果域宽为*,则由对应的函数参数的值为当前域宽。如果仅给出了小数点,则域宽为0。 Length指出浮点型参数或整型参数的长度。此项Microsoft称为“Size”。可以忽略,或者是下述:

此外,在ISO C99广泛接受前,还有几个平台相关的length选项: ISO C99的头文件inttypes.h包含了许多宏,用于平台独立的printf编码。例如:

人教课标A版高中数学必修三课后作业5输入语句、输出语句和赋值语句

课后作业(五) (时间45分钟) 学业水平合格练(时间25分钟) 1.下列赋值语句正确的是() A.S=S+i2B.A=-A C.x=2x+1 D.P=x [解析]在程序语句中乘方要用“∧”表示,所以A项不正确;乘号“*”不能省略,所以C项不正确;D项中x应用SQR(x)表示,所以D项不正确;B选项是将变量A的相反数赋给变量A,则B项正确. [答案] B 2.下列正确的语句的个数是() ①输入语句INPUT a+2 ②赋值语句x=x-5 ③输出语句PRINT M=2 A.0 B.1 C.2 D.3 [解析]①中输入语句只能给变量赋值,不能给表达式a+2赋值,所以①错误;②中x=x-5表示变量x减去5后再赋给x,即完成x=x-5后,x比原来的值小5,所以②正确;③中不能输出赋值语句,所以③错误. [答案] B 3.下列程序运行的结果是() M=3 N=M+1 M=M-1 y=M+N PRINT y END

A.6 B.7 C.8 D.9 [解析]该程序的运行过程是 M=3, N=3+1=4, M=3-1=2, y=2+4=6, 输出6. [答案] A 4. 在如图所示的程序中输入x=1000,y=2,则输出的结果M 是( ) C.2020 D.2015 [解析]由程序得M=2×1000+6×2+3=2015. [答案] D 5.给出下面的程序: INPUT“实数”;x1,y1,x2,y2 a=x1-x2 m=a^2 b=y1-y2 n=b^2 S=m+n d=SQR(S) PRINT d END

此程序的功能是() A.求点到直线的距离 B.求两点之间的距离 C.求一个多项式函数的值 D.求输入的值的平方和 [解析]输入的四个实数可作为两个点的坐标,程序中的a,b 分别表示两个点的横、纵坐标之差,而m,n分别表示两点横、纵坐标之差的平方;S是横、纵坐标之差的平方和,d是平方和的算术平方根,即两点之间的距离,最后输出此距离. [答案] B 6.下列程序的运行结果为________. m=1 n=2, p=3 p=m n=p m=n PRINT m,n,p END [解析]此程序主要以赋值语句来设计,其作用是首先对变量m,n,p分别赋值1,2,3,然后将变量m的值赋给p,再将变量p的值赋给n,最后将变量n的值赋给m,所以最后变量m,n,p的值都等于1,运行结果输出1,1,1. [答案]1,1,1 7.读下列程序,完成问题。 程序:

单片机程序巧用printf

单片机程序巧用printf 当我们在调试代码时,通常需要将程序中的某个变 量打印至PC机上,来判断我们的程序是否按预期的运行,printf函数很好的做到了这一点,它能直接以字符的方 式输出变量名和变量的值。 printf函数在使用时,不仅仅要初始化串口,还需要其 它的一些设置或者要调用其它的一些函数否则printf 函数将不能按我们想要的方式执行。 由于不同的编译器studio函数不一样,所以使用的方法也不一样,这需要大家去看编译器的help帮助选项,这里我们以STM32、51和AVR整理了几个串口打印程序,供需要的朋友参考。 1、在KEIL下使用printf函数,以STM32为例 在uart.c中添加如下代码 View Code /************************************************ ******************************* 函数名:fputc 输入: 输出:

功能说明: 重定义putc函数,这样可以使用printf函数从串口 1打印输出 ************************************************* ******************************/ int fputc(int ch, FILE *f) { /* Place your implementation of fputc here */ /* e.g. write a character to the USART */ USART_SendData(USART1, (uint8_t) ch); /* Loop until the end of transmission */ while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} return ch; } /************************************************ ******************************* 函数名:fputc 输入:

C语言中printf格式

2009-05-03 10:55 Turbo C2.0 标准库提供了两个控制台格式化输入、输出函数printf( ) 和scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据。 printf()函数用来向标准输出设备(屏幕)写数据; scanf() 函数用来从标 准输入设备(键盘)上读数据。下面详细介绍这两个函数的用法。 一、printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输 出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原 样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。 参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输 出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意 想不到的错误。 1. 格式化规定符 Turbo C2.0提供的格式化规定符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号作用 ────────────────────────── %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g 自动选择合适的表示法 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 说明: (1). 可以在"%"和字母之间插进数字表示最大场宽。 例如: %3d 表示输出3位整型数, 不够3位右对齐。 %9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6, 小数点占一位, 不够9位右对齐。 %8s 表示输出8个字符的字符串, 不够8个字符右对齐。 如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出; 若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。 另外, 若想在输出值前加一些0, 就应在场宽项前加个0。 例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽 度为4位。

第1章 1.2.1 输入语句、输出语句和赋值语句 学案

§1.2 基本算法语句 1.2.1 输入语句、输出语句和赋值语句 【明目标、知重点】 1.理解输入语句、输出语句、赋值语句的作用. 2.理解这些语句与相应逻辑结构的关系,并能转化为程序语句. 【填要点、记疑点】 1.输入语句 (1)格式:INPUT “提示内容”;变量 (2)功能:输入提示内容要求的相应信息或值.即把程序中新输入的值赋给变量. 2.输出语句 (1)格式:PRINT “提示内容”;表达式 (2)功能:????? ①输出常量、变量的值和系统信息;②进行数值计算并输出结果. 3.赋值语句 (1)格式:变量=表达式. (2)功能:将表达式所代表的值赋给变量.即将表达式所代表的值赋给变量,一般先计算“=”右边表达式的值,然后把这个值赋给“=”左边的变量. 【探要点、究所然】 [情境导学] 前面我们学习了算法的步骤设计、算法的程序框图的画法,为了让计算机能够 理解算法步骤、程序框图,我们必须把它们转换成算法语句.我们先一起来学习输入、输出语句和赋值语句. 探究点一 简单的程序设计语言 思考1 想一想计算机能够“理解”的语言与人的语言有什么区别? 答 计算机不同于人,人有大脑,可以思考问题,而计算机对自然语言和程序框图描述的算法无法识别,必须转化为其能理解的语言,即程序语言. 思考2 阅读教材21页回答基本的算法语句有哪些?各自对应怎样的算法结构? 答 基本的算法语句????? ? ????输入语句输出语句赋值语句对应顺序结构条件语句——对应条件结构循环语句——对应循环结构

探究点二输入语句、输出语句 问题用描点法作函数y=x3+3x2-24x+30的图象时,需要求出自变量和函数的一组对应值.编写程序,分别计算当x=-5,-4,-3,-2,-1,0,1,2,3,4,5时的函数值. 思考1如何设计算法步骤?如何根据算法步骤画出程序框图? 答第一步,输入一个自变量x的值. 第二步,计算y=x3+3x2-24x+30. 第三步,输出y. 其程序框图: 思考2如果将思考1中的程序框图中第一个程序框省略,后四个程序框中的内容依次写成算法语句,就得到该算法的计算机程序: INPUT “x=”;x y=x^3+3*x^2-24*x+30 PRINT y END 在上述计算程序中包含哪几种语句? 答1.这个程序由4个语句行组成,分别是输入语句、赋值语句、输出语句,最后一行的END语句表示程序到此结束. 思考3阅读教材22页下半页,谈谈输入语句的一般格式及注意事项分别是什么? 答输入语句的一般格式:INPUT“提示内容”;变量?INPUT“x”;x. 注意事项:(1)INPUT语句的作用:用来向变量提供数据,实现算法的输入信息功能.可以给多个变量赋值,例如INPUT“a,b,c=”;a,b,c. (2)“提示内容”提示用户输入什么样的信息,变量是指程序在运行时其值是可以变化 的量. (3)输入语句要求输入的值只能是具体的常数,不能是函数、变量或表达式. (4)提示内容与变量之间用“;”隔开,若输入多个变量,变量与变量之间用“,”隔开. (5)“提示内容”和它后面的“;”可以省略;如INPUT“x”;x或INPUT x. (6)无计算功能,用户由键盘输入的数据必须是常量.

Printf格式

printf( )格式 printf()格式转换的一般形式如下 %(flags)(width)(.prec)type 以括号括起来的参数为选择性参数,而%与type则 是必要的。底下先介绍type的几种形式 %d 整数的参数会被转成一有符号的十进制数字 %u 整数的参数会被转成一无符号的十进制数字 %o 整数的参数会被转成一无符号的八进制数字 %x 整数的参数会被转成一无符号的十六进制数 字,并以小写abcdef表示 %X 整数的参数会被转成一无符号的十六进制数 字,并以大写ABCDEF表示浮点型数 %f double 型的参数会被转成十进制数字,并取到小 数点以下六位,四舍五入。 %e double型的参数以指数形式打印,有一个数字 会在小数点前,六位数字在小数点后,而在指数部 分会以小写的e来表示。 %E 与%e作用相同,唯一区别是指数部分将以大写 的E 来表示。 %g double 型的参数会自动选择以%f 或%e 的格式 来打印,其标准是根据欲打印的数值及所设置的有 效位数来决定。 %G 与%g 作用相同,唯一区别在以指数形态打印时 会选择%E 格式。 字符及字符串 %c 整型数的参数会被转成unsigned char型打印出。 %s 指向字符串的参数会被逐字输出,直到出现 NULL字符为止 %p 如果是参数是“void*”型指针则使用十六进制 格式显示。 prec 有几种情况 1. 正整数的最小位数。 2. 在浮点型数中代表小数位数 3. 在%g 格式代表有效位数的最大值。 4. 在%s格式代表字符串的最大长度。 5. 若为*符号则代表下个参数值为最大长度。 width为参数的最小长度,若此栏并非数值,而是*

printf格式化输出详解

printf()格式化输出详解 2009年03月28日星期六 13:39 本文来自:https://www.sodocs.net/doc/de5223520.html,/language/20080420/7060.html printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少。 ②-:有-表示左对齐输出,如省略表示右对齐输出。 ③0:有0表示指定空位填0,如省略表示指定空位不填。 ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。 ⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。 --------------------------------------- 格式字符 格式字符用以指定输出项的数据类型和输出格式。 ①d格式:用来输出十进制整数。有以下几种用法: %d:按整型数据的实际长度输出。 %md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 %ld:输出长整型数据。 ②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。 例: main() { int a = -1; printf("%d, %o", a, a); } 运行结果:-1,177777 程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。 ③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式输出。 ④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。 ⑤c格式:输出一个字符。 ⑥s格式:用来输出一个串。有几中用法 %s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。

C语言的printf输出格式

C语言的printf输出格式控制 printf大家都耳熟能详,但是能真正将其用法弄透的估计很少见。 转一篇,改天整理。 1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G) 浮点数不显无意义的零"0" %i 有符号十进制整数(与%d相同) %u 无符号十进制整数 %o 八进制整数 %x(%X) 十六进制整数0f(0F) e.g. 0x1234 %p 指针 %s 字符串 %% 输出字符% 2.标志 左对齐:"-" 比如:"%-20s" 右对齐:"+" 比如:"%+20s" 空格:若符号为正,则显示空格,负则显示"-" 比如:"% 6.2f" #:对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点。 printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少。 ②-:有-表示左对齐输出,如省略表示右对齐输出。 ③0:有0表示指定空位填0,如省略表示指定空位不填。 ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。未指定n时,隐含的精度为n=6位。 ⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。 格式字符 格式字符用以指定输出项的数据类型和输出格式。

pascal-带格式的输出语句及输入语句

1.文件的打开与保存 2.文件的输入与输出语句(结合常量与变量、数的科学记数法) 3.类型:溢出的理解 带格式的输出语句及输入语句 一、写语句的输出格式 在pascal语言中输出数据时是可以按照一定格式的,对整数隐含的输出形式为按十进制数形式。对实数的输出,隐含的形式是科学记数法形式(如果不想用科学记数法输出而用小数形式输出,要自己另行定义)。 事实上,输出语句中的每个输出项中的表达式之后可以加上格式说明,若输出项后没有加格式说明,则数据按系统隐含的格式输出,还可加上一定格式符号按特定格式输出。 ⒈隐含的输出格式 pascal语言为整型量、实型量、布尔型量和字符串( 用一对单引号括起来的字符序列)规定了每种数据所占的宽度(即一个数据占几列) ,一个数据所占的宽度称为"场宽"或"字段宽"。系统给出的隐含场宽称为标准场宽。每一种pascal版本给定的标准场宽不尽相同。下表给出标准pascal和pc机上两种pascal版所规定的标准场宽。 标准场宽 ━━━━━━━━━━━━━━━━━ 数据类型标准pascal Turbo pascal ───────────────── integer 10 实际长度 real 22 17 布尔型10 4或5 字符串串长串长 ━━━━━━━━━━━━━━━━━ 在Turbo Pascal系统中,对于整型字符串的输出都是按数据本身长度输出,对于布尔型数据(只有True和False两种值),TRUE为4列,FALSE为5列,一律采用大写输出。而real 型数据的输出时,则按17列输出,其中第一列为符号位,正号不显示,后四位为"E±nn",中间的12列为尾数部分。如: writeln(sqrt(75)); 则输出□8.6602540379E+00。 而writeln(sqrt(81)); 则输出□9.0000000000E+00。 有时,在程序中往往根据实际情况,需要自己定义场宽。 ⒉指定场宽 在写语句中输出项含有格式符号时,就是为了指定场宽。 ⑴指定单场宽. 格式:write(表达式:N)或writeln(表达式:N),其中N为自然数,指定单场宽后,所有数据不再按标准场宽输出,而按指定场宽输出。若数据实际长度小于指定场宽时,则一律"向右

C语言printf函数详解

功能: 产生格式化输出的函数。 用法: printf(格式控制字符串,参数1,参数2,…,参数n); 格式控制字符串定义为: %[flags][width][.perc][F|N|h|l]type type d有符号10进制整数 i有符号10进制整数 o无符号8进制整数 u无符号10进制整数 x无符号的16进制数字,并以小写abcdef表示 X无符号的16进制数字,并以大写ABCDEF表示 f浮点数 E/e用科学记数法表示浮点数 g用%f和%e表示中,总的位数最短的来表示浮点数。G同g格式,但表示为指数c单个字符 s字符串 S wchar_t字符(宽字符)类型字符串 %显示百分号本身 p显示一个指针,near指针表示为:XXXX,far指针表示为:XXXX:YYYY n相连参量应是一个指针,其中存放已写字符的个数 flags:规定输出格式 无右对齐,左边填充0和空格 -左对齐,右边填充空格 +在数字前增加符号+或- 0 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用-) 空格输出值为正时冠以空格,为负时冠以负号 #当type=c,s,d,i,u时没有影响;当type=o,x,X时,分别在数值前增加'0',"0x","0X"; 当type=e,E,f时,总是使用小数点;当type=g,G时,除了数值为0外总是显示小数点。 width:用于控制显示数值的宽度 n(n=1,2,3...)宽度至少为n位,不够以空格填充 0n(n=1,2,3...)宽度至少为n位,不够左边以0填充 *格式列表中,下一个参数还是width prec:用于控制小数点后面的位数 无按缺省精度显示 0当type=d,i,o,u,x时,没有影响;当type=e,E,f时,不显示小数点 n(n=1,2,3...)当type=e,E,f时,表示的最大小数位数

C语言图形输出习题

【4.4】输入n值,输出如图所示矩形。 【4.5】输入n值,输出如图所示平行四边形。 【4.6】输入n值,输出如图所示高为n的等腰三角形。 【4.7】输入n值,输出如图所示高为n的等腰三角形。 【4.8】输入n值,输出如图所示高和上底均为n的等腰梯形。

【4.9】输入n值,输出如图所示高和上底均为n的等腰空心梯形。 【4.10】输入n值,输出如图所示边长为n的空心正六边型。 【4.11】输入n值,输出如图所示图形。 【4.12】输入n值,输出如图所示图形。 【4.13】输入n值,输出如图所示图形。

【4.14】输入n值,输出如图所示图形。 【4.15】输入n值,输出如图所示图形。 【4.16】输入n值,输出如图所示图形。(例为n=6时) 【4.17】编写程序,输出如图所示sin(x) 函数0到2π的图形。

【4.18】编写程序,在屏幕上输出一个由*号围成的空心圆。 【4.19】编写程序,在屏幕上绘制如图余弦曲线和直线。若屏幕的横向为x轴,纵向为y轴,在屏幕上显示0~360度的cos(x)曲线与直线x=f(y)=45*(y-1)+31的迭加图形。其中cos图形用"*"表示,f(y)用"+"表示,在两个图形的交点处则用f(y)图形的符号。

【4.20】编写程序,输出如图所示高度为n的图形。 【4.21】编写程序,输出如图所示高度为n的图形。 【4.22】输入n值,输出如图所示图形。

【4.23】输入n值,输出如图所示的n×n(n<10)阶螺旋方阵。 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 图4.19 n=5时的螺旋方阵 【4.24】输入n值,输出如图所示回型方阵。 【4.25】输出如图所示的数字金字塔

C语言Printf和Scan函数的使用方法

C语言Printf和Scan函数的使用方法 一printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。 参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想 不到的错误。 格式化字符串的格式是: %[标志][输出最小宽度][.精度][长度]格式字符 1. 标志:标志字符为-、+、#、空格四种,其意义下表所示: 标志意义 - 结果左对齐,右边填空格 + 输出符号(正号或负号) 空格输出值为正时冠以空格,为负时冠以负号 # 对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点(??????) 例1: #include main() { int a=100; float b=123.255; printf("a=%d ",a); printf("a=%10d ",a); printf("a=%-10d ",a); printf("a=%+d ",a); printf("a=% d ",a); printf("a=%#o ",a); printf("a=%#x ",a); printf("b=%#f ",b); } 运行结果 a=100

相关主题