ACM_编程与调试重点记录(六)

来源:互联网 发布:千牛mac下载 编辑:程序博客网 时间:2024/06/05 17:54

三十六、格式字符说明

  %a,%A 读入一个浮点值(C99有效)

  %c 读入一个字符

  %d 读入十进制整数

  %i 读入十进制,八进制,十六进制整数

  %o 读入八进制整数

  %x,%X 读入十六进制整数

  %c 读入一个字符

  %s 读入一个字符串,遇空格、制表符或换行符结束。

  %f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。

  %p 读入一个指针

  %u 读入一个无符号十进制整数

  %n 至此已读入值的等价字符数

%[] 扫描字符集合

%% %符号

三十七、

scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。

   遇空格、回车跳格键。

   遇宽度结束。

遇非法输入。

 

三十八、strcpymemcpy memset等函数说明

strcpy
原型:extern char *strcpy(char *dest,char *src);
用法:#i nclude
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:srcdest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#i nclude
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:srcdest所指内存区域不能重叠,函数返回指向dest的指针。
memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#i nclude
功能:把buffer所指内存区域的前count个字节设置成字符c
说明:返回指向buffer的指针。

三十九、#include<stdio.h>

main()                                  E

{                                       E

int i;                                    G

char j;                                  G

for(i=0;i<3;i++){                         H

        scanf(" [北方民族大学1] %c",&j);                       H

    printf("%c/n",j);

}

}

三十七、for(i=1;i<=n;i++)

{

        sum=pow(2,i);

        printf("pow(2,%d)=%d/n",i,pow(2,i)[微软用户2] );

}

三十八、关于进制转换

)、数制

计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二进制的缩写。

 

一般计数都采用进位计数,其特点是:

(1)N进一,N是每种进位计数制表示一位数所需要的符号数目为基数。

(2)采用位置表示法,处在不同位置的数字所代表的值不同,而在固定位置上单位数字表示的值是确定的,这个固定位上的值称为权。

在计算机中:D7 D6 D5 D4 D3 D2 D1 D0 只有两种01

8 4 2 1

 

)、数制转换

不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的。也就是说,若转换前两数相等,转换后仍必须相等。

有四进制

十进制:有10个基数:0 ~~ 9 ,逢十进一

二进制:有2 个基数:0 ~~ 1 ,逢二进一

八进制:有8个基数:0 ~~ 7 ,逢八进一

十六进制:有16个基数:0 ~~ 9ABCDEF (A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一

 

1、数的进位记数法

N=a n-1*p n-1+a n-2*p n-2+…+a2*p2+a1*p1+a0*p0

2、十进制数与P进制数之间的转换

十进制转换成二进制:十进制整数转换成二进制整数通常采用除2取余法,小数部分乘2取整法。例如,将(30)10转换成二进制数。

(30)10转换成二进制数

2| 30 ….0 ----最右位

2 15 ….1

2 7 ….1

2 3 ….1

1 ….1 ----最左位

(30)10=11110)2

(30)10转换成八、十六进制数

8| 30 ……6 ------最右位

3 ------最左位

(30)10 =(36)8

 

16| 30 …14(E)----最右位

1 ----最左位

30)10 =1E)16

3、将P进制数转换为十进制数

把一个二进制转换成十进制采用方法:把这个二进制的最后一位乘上20,倒数第二位乘上21……,一直到最高位乘上2n,然后将各项乘积相加的结果就它的十进制表达式。

把二进制11110转换为十进制

111102=1*24+1*23+1*22+1*21+0*20=

=16+8+4+2+0

=3010

 

把一个八进制转换成十进制采用方法:把这个八进制的最后一位乘上80,倒数第二位乘上81……,一直到最高位乘上8n,然后将各项乘积相加的结果就它的十进制表达式。

把八进制36转换为十进制

368=3*81+6*80=24+6=3010

把一个十六进制转换成十进制采用方法:把这个十六进制的最后一位乘上160,倒数第二位乘上161……,一直到最高位乘上16n,然后将各项乘积相加的结果就它的十进制表达式。

把十六制1E转换为十进制

1E16=1*161+14*160=16+14=3010

3、二进制转换成八进制数

(1)二进制数转换成八进制数:对于整数,从低位到高位将二进制数的每三位分为一组,若不够三位时,在高位左面添0,补足三位,然后将每三位二进制数用一位八进制数替换,小数部分从小数点开始,自左向右每三位一组进行转换即可完成。例如:

将二进制数1101001转换成八进制数,则

(001 101 001)2

| | |

( 1 5 1)8

( 1101001)2=(151)8

 

(2)八进制数转换成二进制数:只要将每位八进制数用三位二进制数替换,即可完成转换,例如,把八进制数(643.503)8,转换成二进制数,则

(6 4 3 . 5 0 3)8

| | | | | |

(110 100 011 . 101 000 011)2

(643.503)8=(110100011.101000011)2

4、二进制与十六进制之间的转换

(1)二进制数转换成十六进制数:由于24次方=16,所以依照二进制与八进制的转换方法,将二进制数的每四位用一个十六进制数码来表示,整数部分以小数点为界点从右往左每四位一组转换,小数部分从小数点开始自左向右每四位一组进行转换。

(2)十六进制转换成二进制数

如将十六进制数转换成二进制数,只要将每一位十六进制数用四位相应的二进制数表示,即可完成转换。

例如:将(163.5B)16转换成二进制数,则

( 1 6 3 . 5 B )16

| | | | |

(0001 0110 0011. 0101 1011 )2

(163.5B)16=(101100011.01011011)2

 


 [北方民族大学1]看清楚,此处为空格,且scanf%c后面没有换行符。输出结果将是左边这样。当没有空格时,没输出一个字符将输出两个空行

 [微软用户2]不可如此表示!——结果全为0.改为sum即可

原创粉丝点击