}
输出: 1 2 3 4 5 6 7 8 9 10 输出位 f g d e h j k
\\t跳格的绝对位置8个。但,如果已经有2个了,就跳6格再接着打印跟在后面的字符,如下: 1、前面有2个,如:21\\tx // 输出6个空格 则会输出:21空空空空空空x // 第9个位置上打印x 2、前面没有,如: \\tx // 输出8个空格 则会输出:空空空空空空空空x // 第9个位置上打印x 3、前面有7个,如:1234567\\t // 输出1个空格 则会输出:1234567 x // 第9个位置上打印x 4、前面有8个,如:12345678\\tX // 输出8个空格 则会输出:12345678X // 第17个位置上打印x 5、前面有9个,如:123456789\\tX // 输出7个空格 则会输出:123456789空空空空空空空X // 第17个位置上打印x
举例:
#include
{ printf(“21\\t3\\n”); //出现6个空格,第9位是3 printf(“\\t3\\n”); //出现8个空格,第9位是3 printf(“1234567\\tx\\n”); //出现1个空格,第9位是x
printf(“12345678\\tx\\n”); //出现8个空格,第17位是x printf(“123456789\\tx\\n”); //出现7个空格,第17位是x }
5.2.2 变量
在程序运行过程中,其值可以改变的量称为变量。C语言中遇到的所有变量都必须先定义,然后才能使用。定义变量时需要确定变量的名字和数据类型。 1、变量名
变量名应该采用一个合法的表示符,如average(平均)、price(价格)、sum(总数)等,其中的英文字母习惯用小写字母。变量名的选择应尽量遵循“见名知义”的原则,用有明确含义的英文单词(或拼音)来作为名字,这样看到变量名就知道它代表的含义,便于自己或他人阅读程序。 变量名中的英文字母习惯上用小写字母。 2、变量的类型
C语言中,常量的数据类型通常由书写格式决定,而变量的数据类型在定义时指定。用于定义变量的基本数据类型见表5.1所示。 3、变量的定义方法
变量定义的一般形式是: 类型名 变量表;
类型名必须是有效的数据类型,变量表中可以有一个变量名或由逗号间隔的多个变量名。 定义变量需要确定变量的名字和数据类型,每个变量必须有一个名字作为标识,变
6
量名代表内存中的一个存储单元,用于存放该变量的值,而该存储单元的大小由变量的类型决定。例如:字符型变量用来存放字符,需个1个字节,而整型变量用来存放整数,需4各字节。 4、变量的使用 定义变量后,就可以使用它,在程序中使用变量,就是使用该变量所代表的存储单元。 对变量的使用,包括赋值和引用。在定义变量后,首先应该对它赋值,然后就可以在该程序中引用它的值,必要时还可以改变它的值,即再次赋值。 对变量的赋值有3种方法。
(1)在定义变量时对它赋值,称为变量赋初值。例如:
int a = 5 , b = 3 ;
(2)在可执行语句中,用赋值表达式对变量赋值。例如: int a , b ; a = 5; b = 3;
(3)调用输入函数对变量赋值。例如: int a , b;
scanf(“%d%d”,&a,&b);
运行时输入: 5 3 对变量a 和 b 分别赋值5和3。
5.3 数据的输入和输出
C语言中,数据的输入和输出都是通过函数调用来实现的。
5.3.1 整型数据的输入和输出
调用函数scanf()和printf()实现整型数据的输入和输出时,应根据数据的类型和输入输出的形式,在函数调用的格式控制字符中使用相应的格式控制说明,见表5.3所示。 基本的格式控制说明有:%d ( 以十进制形式输入/输出一个整数)、%o (以八进制形式输入/输出一个整数) 、%x (以十六进制形式输入/输出一个整数),%u (以十进制形式输入/输出一个无符号整数)。
在格式控制说明中,可以加宽度限定词,指定整型数据的输出宽度。例如:输出格式控制说明为%md,指定了数据的输出宽度为m( 包括符号位 ),若数据的实际位数(含符号位)小于m,则左侧补空格,若大于m,则按实际位数输出。
表5. 3 格式控制说明 ( 整型数据 )
数据类型 输入输出形式
十进制 八进制 十六进制 int %d %o %x long %ld %lo %lx unsigned %u %o %x unsigned long %lu %lo %lx
7
例5.2 使用基本格式控制说明%d、%o、%x输入输出整型数据 #include
{ printf(\ printf(\ printf(\ return 0; }
运行结果: 10,12,a
10,8,16
10,a
可以看出数据以十进制、八进制、十六进制3种形式输出一个整数;输出结果以格式控制说明为准。例如,八进制数012就可以用十进制和十六进制的形式输出。因此,不管一个整数采用哪种表现形式,它的数值是确定的。 例5.3 用%o输入整型数据示例 #include
printf(\
scanf(\ // 输进一个8进制数和一个十进制数 printf(\ // ]指定变量b的输出宽度为5 return 0;
}
运行结果:input a,b: 17 17 // 第一个17为8进制数,第二个17是十进制数 15 17 // 8进制17,十进制是15
输入时,用格式控制说明指定的形式来读入数据,以八进制形式读入17,相当于将017(即十进制15)赋值给变量a。以]输出b的值17,左端补了3个空格。 5.3.2 实型数据的输入和输出
调用函数scanf()和printf()实现实型数据的输入和输出时,在函数调用的格式控制字符串中使用相应的格式控制说明,见表5.4所示。 表 5. 4 格式控制说明( 实型数据 )
函数 数据类型 格式 含义 printf float %f 以小数形式输出浮点数(保留6位小数)
double %e 以指数形式输出浮点数(小数点前面有且仅有一位非零的数字
%f
scanf float %e 以小数形式或指数形式输入一个单精度浮点数 %lf
double %le 以小数形式或指数形式输入一个双精度浮点数
8
输出浮点数时,单精度和双精度浮点型数据使用相同的格式控制说明%f和%e;输
入浮点数时,格式控制说明%f和%e可以通用。但是,输入double型数据时,在格式控制说明中必须加限定字符 ? l ? ( ? l ? 是long的首字母 )。
双精度double型数据的输入格式控制说明必须用%lf或%le 。
在输出格式控制说明中,可以加宽度限制,指定实数数据的输出宽度。例如,输出格式控制说明%m.nf,指定输出浮点型数据时,保留n位小数,且输出宽度是m ( 包括符号位和小数点 )。若数据的实际位数小于m,左端补空格,若大于m,按实际位数输出。
例5.4 输出数值 #include
{ double pi=3.1415926; printf(\
printf(\ return 0; }
运行结果:
3.141593, 3.141593e+000 3.142, 3.14, 3.14
输出pi的值3.1415926时,%5.3f输出3.142 (保留3位小数),%5.2f输出3.14(保留2位小数,左端补1个空格),%.2f输出3.14(保留2位小数,按实际位数)。
5.3.3 字符型数据的输入和输出
字符的输入输出可以调用函数getchar()、putchar()和scanf()、printf() 。 getchar()函数和putchar()函数只能处理单个字符的输入和输出。
scanf()函数和printf()函数除处理整型数据和浮点型数据的输入输出外,也可以处理字符型数据的输入和输出。此时,在函数调用格式控制字符串中相应的格式控制说明用 %c 。
例5.5 输入输出字符 #include
{ char ch1,ch2,ch3;
scanf(\
printf(\}
运行结果: 输入 abc 输出 a # b # c
若输入 a bc 输出 a # # b
若printf() 函数里是连续的%c%c%c,则输入多个字符时,这些字符之间不能有间隔。
9
如果使用了间隔符(如空格 ? ? )。由于它本身也是字符,该间隔符就被作为输入字符。输入字符 a 后,输入了一个空格,所以ch2的值是? ?,ch3的值是 ? b ? 。 与字符型常量在程序中的表示不同,输入/输出字符时,字符两侧没有单引号(如ch1、ch2、ch3)。
C语言中,一个字符型数据在内存中用一个字节存储它的ASCII码,它即可以按字符形式输出,也可以按整型形式输出。按字符形式输出时,可以调用函数putchar()或printf()(格式控制说明用%c),系统自动将存储的ASCII码转换为相应的字符后输出;按整数形式输出时,可以调用函数printf()(格式控制说明选用%d、%o、%x等),直接输出它的ASCII码。
同样,一个整型(在有效的ASCII码范围内)也可以按字符形式输出,此时,输出字符的ASCII码等于该数。
例5.6 已知字符 ? b ? 的ASCII码值是98 ,? A ? 的ASCII码值是65,写出下列程序的运行结果。 #include
{ char ch = 'b';
printf(\ printf(\ printf(\
printf(\
return 0; }
运行结果: b , 98 b , 98 a , 97 B,66
程序中包括了一些字符运算,这在实际编程中是很有用的。例如,如变量ch的值是小写字母 ? a ? ~ ? z ?,则运算ch - ? a ? + ? A ? 把小写字母转换为大写字母。又如,若变量ch的值是数字字符?0 ? ~? 9 ?,运算ch – ? 0 ? 把数字字符转换为数字;若变量val的值是数字0~9,运算val + ? 0 ? 把数字转换为数字字符。
练习1、输入一个十进制数,输出相应的八进制数和十六进制数。例如,输入31,输出37和1F。 练习2、在例5.2源程序2中,如果将程序中的 scanf ( “ %o%d “,&a,&b ); 改为:
scanf (“ %x%d “,&a,&b); 输入不变,输出是什么?
练习3、如果变量ch的值是大写字母,怎样的运算可以把它转换为小写字母?
5.4 类型转换
在C语言中,不同类型的数据可以混合运算。但这些数据首先要换成同一类,然后再作运算。数据类型的转换包括自动转换和强制转换。自动转换由C语言编译系统自动完成,强制转换则通过特定的运算完成。
10