编程中易混知识点

一、格式符含义

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

int a=8;

int b[a+1]; //错误: a+1表达式在运行才确定,但数组需要在编译时有具体大小

int x=8;

int *y=new int[x];//用简单地用指针指向堆数组地址

注:用指针指向堆数组后需要用delete[] tmp; 释放动态分配的内存

堆数组可以用一般方式与数组方式取值

1

2

*(heap_var+num);

heap_var[num];

四、字符串长度计算 

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)(里面的“,”会忘记)

单引号如何打:在冒号与回车键之间' '

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值