一、格式符含义
1、d格式符:按十进制格式输出。
%d 输出数字长度为变量数值的实际长度
%md 输出m位(不足补空格,大于m位时按实际长度输出)
%ld,%mld l(小写字母L)表示输出“长整型”数据
%0md,%0mld 0(数字0)表示位数不足m时补0
注:%后面的m(位数控制)、0(位数不足补0)对于其他格式符也适用。
例:(□表示空格)
int i=123;
long j=123456;
printf("%d□5d□05d,□ld□8ld□08ld",i,i,i,j,j,j);
输出:123□□□123□00123,□123456□□□123456□00123456
2、o(字母)格式符:按八进制格式输出。(不会出现负数格式)
3、x格式符:按十六进制格式输出。(不会出现负数格式)
4、u格式符:用于输出unsigned类型数据。
例:main()
{
unsigned int a=65535;
int b=-2;
printf("a=%d,%o,%x,%u\n",a,a,a,a);
printf("a=%d,%o,%x,%u\n",b,b,b,b);
}
输出:a=-1,177777,ffff,65535
b=-2,177776,fffe,65534
5、c格式符:以字符形式输出。
6、s格式符:以字符串格式输出。
例:printf("%s","CHINA");
%ms m指定宽度(不足时左补空格,大于时按实际宽度输出)
%-ms 左对齐,不足m时右补空格
%m.ns 输出占m个字符位置,其中字符数最多n个,左补空格
%-m.ns 同上,右补空格
7、f格式符:按实数格式输出。
%f 按实数格式输出,整数部分按实际位数输出,6位小数
%m.nf 总位数m(含小数点),其中n位小数
%-m.nf 同上,左对齐
例:main()
{ float x, y;
x=111111.111; y=222222.222;
printf("%f", x+y);
}
程序输出: 333333.328152(实数运算中误差不可避免)
例:main()
{ double x,y; double x2,y2;
x=1111111111111.111111111; y=2222222222222.222222222;
x2=1111111111111.111; y2=2222222222222.222;
printf("%f %f", x+y, x2+y2); /* 13位整数,9位小数 */
}
程序输出: 3333333333333.333010 3333333333333.333010(相同)
注意
从以上两例可以看出,实数运算中误差不可避免,double比float精度高。
float实数(单精度)的有效位数是7位,double实数(双精度)的有效位数是16位,超过有效位数的输出和输入均无意义。
例:
main()
{ float f=123.456;
printf("%f□□%10f□□%10.2f□□%.2f□□%-10.2f",f,f,f,f,f);
}
输出结果:
123.455994□□123.455994□□□□□□123.46□□123.46□□123.46
8、e格式符:以指数形式输出实数。
%e 输出13位,其中:1位整数,1位小数点,6位小数,5位指数(含字符e和指数的符号)
9、g格式符:根据数值大小,自动选择f或e格式输出。
使用注意
1、%是printf()的格式说明符,若要直接输出字符%,在格式控制中使用两个连续的%。
例:printf("%f%%", 1.0/3) 输出: 0.333333%。
2、通常在有格式字符o和x按八进制和十六进制形式输出整数时,在数值前不出现0和0x,可在%和格式字符间插入#来实现。
例:printf(“%o,%#o,%x,%#x\n”,10,10,10,10);
输出:12,012,a,0xa
3、指定输出宽度的同时指定左对齐可在宽度前插入“—”来实现。
4、注意
float,单精度浮点型,对应%f。精度6~7位。
double,双精度浮点型,对应%lf。精度约15位。
在用于输出时:float类型可以使用%lf格式,但不会有任何好处。double类型如果使用了%f格式可能会导致输出错误。
在用于输入时:double 类型使用了%f格式,会导致输入值错误。float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。
二、自增/减运算符
a=i++相当于a=i,i=i++ 若i=5,a=i++,则a=5,i=6;
a=++i相当于i=i+1,a=i 若i=5,a=++i,则a=6,i=6;
b=i--,若i=5则b=5,i=4
b=--i,若i=5则b=4,i=4
三、数组的定义
由于c++是静态编译,所以数组大小在编译时确定可以采用堆数组,堆数组用new创建,堆变量在运行时确定
1 2 3 4 5 |
|
注:用指针指向堆数组后需要用delete[] tmp; 释放动态分配的内存
堆数组可以用一般方式与数组方式取值
1 2 |
|
四、字符串长度计算
1)运用strlen
注:运用该函数时需注意包含string.h头函数
#include<stdio.h>
#include<string.h>
int main()
{
char ch[] = "abcdefg";
int len = strlen(ch);
printf("字符串长度为%d\n", len);
return 0;
}
2)自定义my_strlen函数
注:拿“abcdefg”字符串举个例子,它在内存中存储的样式为a b c d e f g \0,统计字符串的长度也就是要统计“\0”之前的字符有多少。因此,设置两个变量,一个用来依次访问字符串中的每一个字符,一个用来统计数量。
#include<stdio.h>
int my_strlen(char ch[])
{
int i = 0;
int num = 0;
while (ch[i] != '\0')
{
i++;
num++;
}
return num;
}
int main()
{
char ch[] = "abcdefg";
int len = my_strlen(ch);
printf("字符串长度为%d\n", len);
return 0;
}
五、其他
输入两个数scanf("%d%d", &n, &m)(里面的“,”会忘记)
单引号如何打:在冒号与回车键之间' '