为什么c语言运算符中函数printf的参数不需要寻址运算符

C语言printf函数输出表达式中的计算顺序
C,VC++6.0都是按从右到左进行计算的,但注意自增和自减运算。
看下面一个例子:
#include &stdio.h&
&& &printf%d,
%d, %d, %d\n",i,--i,i,i--);
&运行结果:7, 7, 8, 8
为什么会有这样的结果呢?这就涉及到自增、自减运算符的问题了。
i自增1后再参与其它运算。
i自减1后再参与其它运算。
i参与运算后,i的值再自增1。
i参与运算后,i的值再自减1。
& 再看一个例子加深理解:
#include &stdio.h&
&& &printf("%d,
%d, %d, %d, %d, %d\n",i++,i++,i++,i++,i++,i++);
&&&&printf("%d\n\n",i);
&& &printf("%d,
%d, %d, %d, %d, %d\n",++i,++i,++i,++i,++i,++i);
&printf("%d\n",i);
运行结果:
8, 8, 8, 8, 8, 8
14, 13, 12, 11, 10, 9
Press any key to continue
另外,虽然printf()函数是从右往左计算表达式的,但输出时是从左往右输出的。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。C语言 printf函数对参数的计算顺序自加自减的讨论
C语言 printf函数对参数的计算顺序自加自减的讨论
发布时间: 21:18:08
编辑:www.fx114.net
本篇文章主要介绍了"C语言 printf函数对参数的计算顺序自加自减的讨论",主要涉及到C语言 printf函数对参数的计算顺序自加自减的讨论方面的内容,对于C语言 printf函数对参数的计算顺序自加自减的讨论感兴趣的同学可以参考一下。
C语言 printf函数对参数的计算顺序自加自减的讨论
首先看如下一个例子:
voidmain()
printf(&%d,%d,%d,%d,\n&,i++,++i,i,i++);
printf(&%d\n&,i);
它的打印结果是多少呢?我们需要考虑哪些呢?
首先,应该说明的是在不同的编译环境中结果是不一样的。&
关于本段代码在VC++6.0中的规则如下:&
1、printf函数的执行顺序是由右到左的&
2、前自增运算符(++i)先加1,再使用i,此时i已经加了1;&
3、后自增运算符(i++)先使用i,再加1,***注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的,(VC++6.0比较变态)***&
所以:printf(&%d,%d,%d,%d,\n&,i++,++i,i,i++);&从右往左运算过程如下:&
i++得到2(i=2,后加1在整条语句执行完才进行,这里先记下)&
i还是2(i=2,原因见上一行)&
++i得到3(i=3,先加1,后使用)&
i++得到3(i=3,后加1在整条语句执行完才进行,这里先记下)&
因此输出结果为:3,3,2,2&
然后再计算刚才的两次后自增运算后,i=5&
printf(&%d\n&,i); ---------》结果是5
-----------------------------------------------------------------------------------
再来看下面的程序:
voidmain()
inta=5,b=2;
printf(&%d%d\n&,b=a+1,a=a+1);
输出结果是:7 6;而不是:6 6
这是为什么呢?
原因很简单,主要是因为printf函数的计算是从右向左进行的。
另外关于下面程序的解释:
int i=7; printf(&%d\n&, i++ *i++);&
输出结果是:49而不是56
int i=7;printf(&%d%d\n&,++i,i++);
输出结果是:8 7而不是9,7这并不违背分割新上面关于printf函数从右向左计算的原因。
产生这种结果的原因是:
以下内容引自:《C-FAQ》http://c-faq-chn.sourceforge.net/ccfaq/node1.html
尽管后缀自加和后缀自减操作符 ++ 和 --在输出其旧值之后才会执行运算, 但这里的``之C printf函数对参数的计算顺序,是从右往左的&
printf(&%d%d\n&,++i,i++);后&常常被误解。没有任何保证确保自增或自减会在输出变量原值之后和对表达式的其它部分进行计算之前立即进行。也不能保证变量的更新会在表达式 ``完成& (按照 ANSI C 的术语, 在下一个 ``序列点& 之前)之前的某个时刻进行。本例中,编译器选择使用变量的旧值相乘以后再对二者进行自增运算。&
我们在这就可以想到两个问题:我怎样才能理解复杂表达式?``序列点&是什么?&
序列点是一个时间点(在整个表达式全部计算完毕之后或在||、 &&、 ? : 或逗号 运算符处, 或在函数调用之前), 此刻尘埃落定, 所有的副作用都已确保结束。ANSI/ISO C 标准这样描述:
在上一个和下一个序列点之间,一个对象所保存的值至多只能被表达式的计算修改一次。而且前一个值只能用于决定将要保存的值。
第二句话比较费解。它说在一个表达式中如果某个对象需要写入,则在同一表达式中对该对象的访问应该只局限于直接用于计算将要写入的值。这条规则有效地限制了只有能确保在修改之前才访问变量的表达式为合法。例如i = i+1 合法, 而 a[i] = i++ 则非法 。
为什么这样的代码: a[i] = i++;不能工作? 子表达式 i++ 有一个副作用 --- 它会改变 i 的值 --- 由于 i 在同一表达式的其它地方被引用,这会导致无定义的结果, 无从判断该引用(左边的 a[i] 中)是旧值还是新值。(注意:C 标准却强烈声明它是无定义的。)
总结:到这里,要掌握的是两点:
一是:printf函数中的计算是从右向左进行的。
二是:我们在写代码时,应该尽量避免类似下面的无确定意义的表达式出现,因为很有可能不同的编译器,会采用不同的理解方式。
a+=a++;
a[i]=i++;
printf(&%d%d\n&,++i,i++);后&常常被误解。没有任何保证确保自增或自减会在输出变量原值之后和对表达式的其它部分进行计算之前立即进行。也不能保证变量的更新会在表达式 ``完成& (按照 ANSI C 的术语, 在下一个 ``序列点& 之前, 参见问题 3.7)之前的某个时刻进行。本例中,编译器选择使用变量的旧值相乘以后再对二者进行自增运算。&
版权声明:本文为博主原创文章,未经博主允许不得转载。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:C语言中要注意的一些问题;下面列出了一些C语言中常见的问题和注意事项,跟考;1、C语言中规定,每条语句结束时末尾加分号,而不;2、在用scanf和printf函数输入和输出时;和double跟%f对应,否则不能正确输入和输出;3、使用scanf函数时,在双引号中最好只出现各;随意增加其它字符,以免画蛇添足,增加输入的麻烦;4、通过scanf(“%s”,字符数
C语言中要注意的一些问题
下面列出了一些C语言中常见的问题和注意事项,跟考试无关,有些表达不是很严格,仅供辅助学习。
1、 C语言中规定,每条语句结束时末尾加分号,而不是每行末尾加分号!
2、 在用scanf和printf函数输入和输出时,一定要记得int跟%d对应,long跟%ld对应,float
和double跟%f对应,否则不能正确输入和输出数据。
3、 使用scanf函数时,在双引号中最好只出现各种格式控制符,如”%d%d%f%c”,而不要
随意增加其它字符,以免画蛇添足,增加输入的麻烦。
4、 通过scanf(“%s”,字符数组名)和gets(字符数组名)都可以输入一个字符串,并将
其存储在指定的字符数组中。区别在于,前者当输入字符中遇到空格就认为输入结束,后者则可以接收包含空格的字符串。
5、 在数值运算时,要注意防止数据的溢出。特别是int类型数值范围较小,比较容易溢出。
一旦溢出,结果出错。
6、 要注意各种运算符的优先级,需要时可以加()来保证运算顺序满足要求。
7、 参加关系和逻辑运算的数据可以是任意类型和任意值,计算机将所有非零数理解为1
(真),而0则为假,然后进行运算。得到的结果只有两种,要么是1,要么是0。
8、 整数的比较可以使用关系运算;浮点型数据在比较是否相等时,一般这样实现 fabs(表达式或变量)&=1e-6
而字符串比较必须通过strcmp函数实现。
9、 strcpy(字符数组1,字符数组2或字符串常量)的功能相当于
字符数组1=字符数组2或字符串常量
(程序中绝对不能写成这样!)
10、 变量和数组在定义时若未赋初值(未初始化),则其内容是随机数(不确定)。数组
若是部分初始化,则未指定初值的数组元素自动赋值为0(也可以理解为字符’\0’)
11、 for循环非常常用,要注意后面括号中三个表达式的执行顺序。若非必要,最好不
要省略三个表达式。若循环体多于一条语句,必须用{}将它们括起来,变成语句块。(对于while和do..while循环也是这样)
12、 数组元素是一个挨一个放在内存一片连续的空间中。对于多维数组,则采用行主序
组织存放。比如二维数组arr[M][N],看作有arr[0], arr[1], …, arr[M-1]个一维数组,每个一维数组有N个元素
arr[0][0],
arr[0][1],
arr[0][N-1] ←第0行
arr[1][0],
arr[1][1],
arr[1][N-1] ←第1行
arr[M-1][0],
arr[M-1][1],
arr[M-1][N-1] ←第M-1行
首先存放第0行元素,接着是第1行,??。
二维数组实际上也可以形象地看作一张二维表格。
13、 单个数组元素就是一个独立的变量,只是访问时应该写成
数组名[下标]
下标可以是常量、变量或表达式(当然表达式的结果应该是整数),第一个数组元素下标必定为0。编译器不对下标越界(下标值超出数组定义的大小),须程序设计者自己保证。
14、 若要逐个访问数组中的每个元素,一般通过循环(常用for)。一维数组用一重循环,
二维数组用二重循环,以此类推。比如对于二维数组arr[M][N]
for ( i=0; i&M; i++)
/*外循环,i控制外循环的次数。在这里i控制访问二
维数组的第i行*/
for( j=0; j&N; j++)
/*内循环,j控制内循环的次数。在这里j控制访问二维数
组的第j列*/
arr[i][j]=…;
/*访问数组中的某个元素*/
当然,调换一下,外循环控制列,内循环控制行也是可以的,完全看你的需要。
16、 一个C程序可以由多个文件组成,每个文件包含若干个函数,其中只能有一个main
函数。各个函数可以相互调用,甚至自我调用(即递归调用),但不能调用main函数。计算机一定从main函数开始执行(实际上就是操作系统调用main函数),最终在main函数结束。
17、 函数也有类型,称函数类型,实际上是指该函数返回值的类型。当确定一个函数没
有返回值时,最好指定函数类型为void,否则默认类型为int,容易造成误解。
18、 函数调用和返回时,若类型不一致,计算机会做自动类型转换。例如:
int fun( float a){
/*由于函数类型为int,而x是float,因此计算机自动将float转换为int,然后将结果送回主调函数(这里是main函数)*/
/*实参a的类型为int,而形参类型为float,当实参赋给形参时,自动类型转换int?float;当fun函数返回时,返回值为int,而b是long,赋值时又自动进行类型转换*/
在实际应用当中,要注意高精度数据类型向的低精度数据类型转换时,可能造成精度损失甚
至数据溢出。
19、 无论如何,在函数调用时,实参将值赋给形参,也就是说,形参得到的是实参的复
制品,它们是互不相干的。任何时候都不要企图通过改变形参的值而去影响实参的值!..
也许你会指出,我把数组名作为参数传递时,那调用函数后,数组的内容不是就发生变...
化了吗?不要有这样的误解!(详见第20点)
20、 习惯上,我们通常在文件的最开头进行函数的声明(也就是写出函数的原型),顺
假设这是一个
名称为abc.c的
C源程序文件
21、 在函数内部定义的变量称为“局部变量”,一般在函数最开始处统一定义,仅在本
函数内部有效;在函数外部定义的变量称为“全局变量”(或外部变量、全程变量),一般在文件最开始处定义,对于本文件中所有函数都有效,但尽量限制(少用)全局变量。当全局变量与局部变量同名时,在局部变量作用范围内,全局变量被屏蔽。
22、 指针就是地址。若用一个变量来存储地址,那么这个变量称为指针变量。指针变量
也有类型。指针变量只能存放地址(指针),也就是说要么通过&运算符将某个变量(同类型的)的地址赋予指针变量,要么将另一个指针变量(同类型的)的值赋予它。例如下面的语句是正确的。
a, *p, *q;
p=&a; /*赋值后,我们称指针变量p指向变量a*/
23、 当定义了指针变量后,应明确给它赋值,否则该指针变量“悬空”,很容易导致程
序运行异常。这种情况在编译时会有警告,应当注意。
24、 假如某个函数中定义了一些变量,
希望通过调用另一个函数后这些变量的值发生变
化,必须这样设计:
①. 主调函数将这些变量的地址作为实参传递给被调函数; ..
②. 被调函数用指针变量作为形参接收传过来的地址;
③. 在被调函数中通过地址去改变相应内存单元的内容。
25、 数组名是指针常量,它永远指向该数组第一个元素(数组的起始地址)。
26、 当数组名作为参数传递时,实际上传的是数组的首地址。如:
func( a, 10 ); /*函数调用时,形参p得到实参a的值*/
void func( int *p, int
/*形参p的值发生变化,但实参a的值不会变化。而且a是指针常量,也不可能发生变化*/
*p=254; /*a[1]的值变化了。这是由于此时p的值是a[1]的地址,计算机根据该地址对相应内存单元进行赋值。*/
27、 假设p是指针变量,它的值是2000。那么p++或p--后,p是指向后一个(或前一
个)数据,也就是说计算机会根据指针变量的类型,自动调整跳过的内存单元数,这也是指针变量为什么要定义类型的原因之一。因此,利用指针对数组进行操作可以达到通过数组下标访问数组元素同样的效果,而且效率更高。
下面两段程序效果一样
for( i=0; i&N; i++)
/*指针变量定义后必须赋值,否则悬空*/
for( i=0; i&N; i++)
/*根据运算符的优先级,这句实际上是*p = p++;*/
当然,通过下标访问数组比较直观一些。
28、 多维数组的指针的确比较难懂,下面以二维数组为例说明
int a[10][5];
int i,j,*k,*p;
p=&a[0][0];k=p;
for(i=0;i&10;i++)
for(j=0;j&5;j++)
{if (*k&*p) k=p;p++;}
printf(&Max=a[%d][%d]=%d\n&,(k-&a[0][0])/5,(k-&a[0][0])%5,*k);
这段程序是在二维数组中找到最大值及其下标,通过指针实现。它利用了多维数组采用“行主序”存储的特点(参见前面第12点)。p=&a[0][0]得到二维数组第一个元素的地址,每次p++就可以指向下一个元素。
以下内容是其它地方摘录的,供参考
C语言本身没有输入输出语句 (什么意思???)
在C程序中要输入或输出,是调用printf、scanf等函数实现,这些并不是C的语句。若有需要,我们完全可以设计自己的printf、scanf等函数,实现不同功能的输入输出。
C语言语句一行写不下时,可以(在任意一空格处换行)(什么意思???)
例如int x=0一句,我们可以写成
因为C编译器是根据;(分号)判断一条语句的结束。
int a=8,b;b=++a++;(不对???)
printf(&%d,%d&,a,b++);
我不清楚++a++到底要实现什么目的。但不管++a++解释为(++a)++或解释为++(a++),都是不行的,因为自增或自减运算符只能用于变量,不能用于常量或表达式,++a或a++都是表达式。
char c=getchar( );
putchar((int)c);
(int似乎没有作用?)
你要注意putchar函数的形参类型是char,见教材p376。也就是说,虽然你将c强制转换为int,但将结果作为参数传递给putchar函数时,由于形参与实参类型不一致,计算机又会作一次隐含类型转换,将int转换为char。
表达式5%(-3)的值是
,表达式-5%(-3)的值是
(不明白)
这个问题我的理解是,首先有以下关系
三亿文库包含各类专业文献、幼儿教育、小学教育、各类资格考试、高等教育、行业资料、文学作品欣赏、中学教育、C语言中要注意的一些问题81等内容。 
 注意:如果使用 strcpy 等字符串处理函数需要加#include&string.h& 变量需要先定义...C语言程序设计中的注意事... 3页 免费 三星C语言注意事项1 4页 1下载券
...  1、 %d 是按照十进制整数形式输出, %nd 中的 n 表示有效数字的位数; %c ...学习C语言 一些需要注意... 3页 免费
二级C语言机试注意事项 4页 免费 C...  =0 D) ~e //C 语言中没有逻辑类型的数据,所以...在循环体内的变化,做循环的题要注意变量的值发生的...题 10 分,后 2 题各 15 分) 1.猴子吃桃问题...  如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 重要!C语言需注意的一些细则 隐藏&& ?函数是 C 程序的基本单位 ?C...  如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 C语言特别注意的问题 隐藏&& int main() { int x=10,y=x++; ...  如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处...第三章 特别要注意:c 语言中是用非 0 表示逻辑真的,用 0 表示逻辑假的。...  C、酒后滋事。 D、聚众闹事。 15、邓小平同志指出:...22、在勤工俭学中应注意哪些问题?(ABCD) A、要...D、对贵重物品,最好有意识作一些特殊的记号,即便...  对于一些看似不可能解决的问题,应该持有的做法不包括...列出所有问题 C 忘记记录问题 D 注意力焦点错位 2...B 正确 12.一个人要想在职业生涯中取得成功,只...  倒装结构中应注意的几个问题_高三英语_英语_高中教育_教育专区。高三如何把握倒装...no 不是否定意义的副词或连词,正确答案为 C 5.一些学生错选答案 A .句中 ...C语言输出函数(printf)和输入函数(scanf)
我的图书馆
C语言输出函数(printf)和输入函数(scanf)
前面的几个例子都用到了输出函数printf,例1-3还用到了输入函数scanf,这里我们先简单介绍一下它们的格式,以便后面使用。scanf和 printf这两个函数分别称为格式输入函数和格式输出函数。其意义是按指定的格式输入输出值。因此,这两个函数在括号中的参数都由以下两部分组成:1) 格式控制串:格式控制串是一个字符串,必须用双引号括起来,它表示了输入输出量的数据类型。在printf函数中可以在格式控制串内出现非格式控制字符,这时在显示屏幕上会显示源字符串。各种类型的格式表示方式请参考:C语言格式输出函数printf()详解。在scanf函数中也可以在格式控制串内出现非格式控制符,这时会将输入的数据以该字符为分隔。各种类型的格式表示方式请参考:C语言scanf()函数。2) 参数表:参数表中给出了输入或输出的变量。当有多个变量时,用英文逗号(,)分开。例如:printf('sine of %lf is %lf\n',x,s);// %lf为格式字符,表示按双精度浮点数处理,它在格式串中两次现,对应了x和s两个变量// 其余字符为非格式字符则照原样输出在屏幕上。scanf('%d %fa%c', &intNum, &floatNum, &c);// %d, %f, %c为格式字符// 表示将输入的数据分别以整数、浮点数和字符形式赋值给变量intNum, floatNum,c// 其中的空格和a为分隔符// 变量intNum, floatNum,c都有一个'&'符号,表示取地址【例1-4】对例1-3稍加修改,在printf中使用多个参数,在scanf中使用'|'作为分隔符。#include // 包含stdio.h头文件int max(int, int); // 函数声明int main(){ int a, b, // 声明两个整型变量 printf('Input two integers: '); // 以空格为分隔 // 以'|'为分隔符,将输入的两个整数分别赋值给a, b scanf('%d|%d', &a, &b); // 以整数形式输出a、b和最大值,a, b, max(a,b)为参数列表 n = max(a, b); printf('The max between %d and %d is %d.\n', a, b, n); return 0;}// 函数定义int max(int num1, int num2){ // num1, num2为形式参数(形参) if(num1>num2){ // 如果num1大于num2 return num1; // 返回num1并结束max函数 }else{ // 如果num2大于num1 return num2; // 返回num2并结束max函数 }}运行结果:Input two integers: 12|34↙The max between 12 and 34 is 34.上面例中程序的功能是由用户输入两个整数,程序执行后输出其中较大的数。本程序由两个函数组成,主函数main和max 函数。函数之间是并列关系。可从主函数中调用其它函数。max 函数的功能是比较两个数,然后把较大的数返回给调用函数 -- main函数。max函数是一个用户自定义函数。因此在使用前要给出说明(程序第3行)。可见,在程序的说明部分中,不仅可以有变量说明,还可以有函数说明。关于函数的详细内容将在后续章节介绍。上例中程序的执行过程是,首先在屏幕上显示提示,请用户输入两个数,以'|'为分隔,回车后由scanf函数语句接收这两个数送入变量a、b中,然后调用max函数,并把x、y的值传送给max函数的参数a、b。在max函数中比较a、b的大小,把大者返回给main函数中的变量n。
TA的最新馆藏C语言基础(03-先学2个库函数)_C语言基础教程_C语言_最全面的网站教程
当前位置:&&&&&&C语言基础(03-先学2个库函数)
C语言基础(03-先学2个库函数)
C语言中的库函数――我们编写C语言程序时要写许多代码,这些代码是用基本程序语句如运算符、表达式、几种语句结构来组成。这些语句组成了多个不同的函数,由多个函数组成一个完整的程序。实际上如果程序中的语句都要由自己来写的话,那么工作量是很大的了。并且有一些完成基本任务的函数如输入输出函数是经常需要使用的。这样的一些常用的完成基本任务的函数有许多已经由提供编译程序的公司为我们写好了。这些已经写好的函数放在TC或者BC编译器的文件中。所谓“库函数”,就是存放“函数”的“仓库”。在TC中,函数的“仓库”在哪里呢?在TC的.\LIB目录中。编写程序的时候,如果我们需要使用某个库函数,就要在这个程序开头指明这库函数存放在哪里,以便让编译程序到这个地方去找。这个指明库函数路径的语句称为“包含”语句,写做#include。完整的写法是:#include &stdio.h&#include 是包含的意思,&stdio.h& 是指明要使用的库函数在 stdio.h这个文件里面有说明。尖括号&&是必须要写的。而实际上,编译程序在stdio.h之个文件里根据库函数名可以在.\LIB目录下的LIB文件里找到相关的代码,写进程序里面去。使用不同的库函数时要用不同的包含,关于怎样使用#include,可以查看库函数的帮助。有了众多的库函数,给编写程序带来了很大的方便。就象做房子要用砖和瓦一样。如果没有砖和瓦,做房子自己要挖土烧砖,可想而知,那样做房子的难度有多大。写程序也是这样,有了库函数,在需要完成某些任务时,找到相应的库函数调用一下就可以了,不需要自己一点一点的写代码。在学习编程的同时要多多了解一些库函数的特点及用法,对编写程序是有很大的好处的。(在Windows下编写程序,需要了解的“库函数”就更多了,可以说不了解库函数就不会编程。VC中用的是MFC,Win32中用的是API,它们都是函数库)
先了解二个库函数――1、scanf函数   /*格式化控制台输入函数*/函数原型:int scanf(control_string....);&& /*看上去很复杂。没关系,以后自然会明白的*/使用例:void main(){&&& int a,b,c;&&& /*定义了三个整型变量*/&&& scanf("%d%d",&a,&b);& /*从键盘输入二个整数到娈量a和b中*/&&& c=a+b;&&&&&& /*把变量a与b相加的和送给变量c*/}下面仔细讲一下scanf函数各参数的用法:可以看到在小括号里有二个%d,后面有二个变量a和b。二个%d的写法为"%d%d",注意凡是这样的符号都要写在双引号里面,而变量则写在双引号的外面并用逗号分隔。这个%d我们称为格式化说明符,第一个%d用于说明第一个变量a,第二个%d用于说明第二个变量b,这样的顺序是一一对应的。%d格式符说明了后面输入的变量值是整型数。另外注意的是二个%d是靠在一起的 %d%d,凡是这样的写法,在输入数时,对于二个数之间的分隔是用“空隔键”来实现的。如输入30和50这二个数形式为 30& 50 如果二个%d写成%d,%d中间有一个逗号,那么在输入数据时也一定要在输入的数之间加上逗号,如 30,50。再来看一下变量的写法,可以看到在每一个变量名的前面都有一个&号,这个&号是取变量地址的意思,那么&a写在一起就是变量a的地址,&b写在一起就是变量b的地址。上面的scanf函数的作用就是把从键盘上输入的二个整数分别送到变量a和变量b的地址里面去。这个&号是非常重要,不要写漏了。scanf函数的格式说明符(格式说明符说明了下一步将读的是什么类型的数据)
读一单字符
读一个浮点数
读一个浮点数
读一个浮点数
读一个浮点数
读一个八进制数
读一字符串
读一十六进制数
读一个指针收一个等于到目前为止输入的字符数止的整数
读一无符号整数
扫描一字符集
例:从键盘输入二个字符,一个大写,一个小写,然后把这个小写字符转换成大写,大写字符转换成小写。#include&stdio.h&&&&& /*因为在程序里用到了库函数scanf,所以要使用包含#include&stdio.h&*/void main(){&&& char&ch,&&& /*定义了二个字符型变量*/&&&&scanf("%c%c",&ch,&chh);&& /*从键盘输入二个字符,一个大写,另一个小写*/&&&&ch=ch+32;&&&& /*大写转成小写*/&&&&chh=chh-32;& /*小写转成大写*/}&2、printf函数    /*格式化输出函数*/函数原型:int printf(const char *control_string....);说明:printf把变量的值或常量字符串输出到控制台(一般是显示屏)使用例:#include&stdio.h&void main(){&&& int a,b,c;&&& &&& scanf("%d%d",&a,&b);&&& c=a+b;&&& printf("输出二个整数相加的和");& /*输出字符串常量,这里没有用到格式化说明符*/&&& printf("%d",c);    /*把变量c的值用整型格式输出,这里%d是整型格式说明符*/}如果有几个变量的值要输出,用这样的形式:printf("%d& %d& %d",a,b,c);从这个printf输出的格式中看出,每一个格式符对应一个变量,其对应顺序也是一一对应的,第一个%d对应第一个变量a,以此类推。注意在printf函数中,变量前面就不要加&符号了。注意printf函数中几个%d之间留了一些空格,这里的用法与scanf相比有一点不同。在printf函数中格式符之间留多少空隔,输出的时候每一个输出的值之间就有多少空隔。如printf("%d& %d& %d",a,b,c);输出则为:20& 30& 50 (这里的数是假设的)。如果写为printf("%d,%d,%d",a,b,c);则输出形式为 20,30,50printf函数的格式符:
科学法表示
科学法表示
十进制浮点数
用%e或%f中较短的的一个(如果是%e,用小写e)
用%e或%f中较短的的一个(如果是%E,用大写E)
以八进制形式输出
无符号十进制数
十六进制数(小写)
十六进制数(大写)
显示一个指针
相关变量是整型指针,它所指处存放至今要写入字符的总数
打印一个%号
上一篇:下一篇:}

我要回帖

更多关于 c语言运算符 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信