设为首页 加入收藏

TOP

自问自答学c语言(2)(一)
2014-11-23 23:30:10 来源: 作者: 【 】 浏览:1
Tags:自问 语言

问题11c语言的基本类型?

数字: 整数和小数int 和float; int 有short int long int;float有double

字符: char

逻辑: bool

一个整体:struct,union, enum, 数组[]

操作底层的:指针,void

问题12不同数据类型,空间大小的问题?

sizeof(int) sizeof(float) sizeof(double)sizeof(struct my), 这些根据不同的编译环境一般不同,大体上是

int:4;float 4: short int就为2,double就为8;long 也为4; 还有就是struct的字节对齐的问题影响sizeof;看一下mystru2和mystru3的区别sizeof一个是8一个是12

/*COPYRIGHT drbinzhao@hotmail.com*/

#include

struct myStru

{

char a;

char b;

int c;

};

struct myStru2

{

char a;

char b;

char d;

int c;

};

struct myStru3

{

char a;

char b;

int c;

char d;

};

int main()

{

//copyright drbinzhao@hotmail.com

printf("sizeof(short int)is %d\n",sizeof(short int));

printf("sizeof(long int)is %d\n",sizeof(long int));

printf("sizeof(int) is%d\n",sizeof(int));

printf("sizeof(float) is%d\n",sizeof(float));

printf("sizeof(double) is%d\n",sizeof(double));

printf("sizeof(myStru) is%d\n",sizeof(myStru));

printf("sizeof(myStru2) is%d\n",sizeof(myStru2));

printf("sizeof(myStru3) is%d\n",sizeof(myStru3));

char str[100];

gets(str);

printf("str is%s\n",str);

printf("sizeof(%s) is%d\n",str,sizeof(str));

return 0;

}

问题13sizeof是函数吗?

sizeof是运算符,不是函数; 是c语言中的关键字,同float,int,return一样;c++中的new也是关键字。

问题14ASCII码表

设计计算机时,以英文为语言;只要可以输入基本常用的字符共127个就可以了,于是2的7次方为

16*16/2=128 , 而16*16=(16+6)*10+6*6=220+36=256速算,速算法参我的另一博客文章

而64*64=64*66-128=4224-128=4096

因此一个byte表示所有的127个基本字符,其中高位全置为0.

问题15unsigned char 和signedchar的范围

signed char: 非负数 第八位为0其它全为1; 即0111 1111 大小为2的7次方-1=127因此范围0-127

负数 第八位为1其它为1: 即11111111大小为-1;1000 0000 大小为-128

unisigned char: 0-1111 1111 大小为2的8次方-1=255;

可以这样记忆:

先记忆无符号的8位,范围在2的8次方-1=255 0-255; 符号的范围最小为-2的八次方/2=-128, 最大由于正数里面多了个0,因此到127即-128-127

问题16 scanf printf参数写的是变量名字还是变量地址?

printf("variable a is %d",a);

scanf("%d",&a);

设置时为了方便从stdin输入的东西直接放入变量的地址里就可以了,不必在通过变量寻址存放,因此scanf会设计成直接写入地址。

printf是打印的变量的数据和地址无关,因此这样设计。

我经常犯的毛病是写成scanf("%d",a)了。其次是scanf的输入格式的问题

scanf(“%d %d”,&a,&b)两个空格隔开的则应该输入两个空格

scanf(“a=%d,b=%d”,&a,&b);

问题17没有计算器写个2进制,10进制的转换.

编译器在printf中看到%会认为和后面组成 输出格式, 那就有个问题,我就想输出%d怎么办?

#include

int main()

{

//copyright drbinzhao@hotmail.com

signed int i = -1;

signed int j =0xFFFFFFFF;

printf("i is %d,%x\n",i,i);

printf("j is%d,%x\n",j,j);

printf("%%d");

return 0;

}

还有我一直认为-1是1000 0000其实是1111 1111,因为-1是负数的最大。

问题18输出单个字符,我必须用printf(“%c”,c);吗?

不必,可以下列代码putchar

#include

int main()

{

// copyright drbinzhao@hotmail.com

char c='bc1';//此处int截断为char

char d='b';

putchar(c);

putchar('\n');

putchar(d);

return 0;

}

问题19scanf语句调用后,我不按回车,是否可以无穷尽的输入字符?

显然是不会的,否则和永动机没区别了,实际上用户利用键盘输入时,输入的字符会依次被送到缓冲区中,在此处等待的输入函数只有在用户输入了回车时,才会去缓冲区中取字符。接下来的输入函数也是先去缓冲区中查看当前是否存在字符。如果存在,则会取出字符;如果不存在,则会中断,提示用户输入

所以下面的代码才会有不合理的表现,加上fflush(stdin)后,第二个scanf显然在缓冲区查到不存在字符,因此中断,提示用户输入。一般缓冲区大小为4K

我们敲入的回车键也是作为一个字符送到缓冲区的。也被看成一个字符,和字符1没有什么区别,只是作为字符输入的结束符,当输完回车后,则所有输入的字符包括回车字符,一起被送入缓冲区,并执行此处等待的输入函数。

#include

int main()

{

//copyright drbinzhao@hotmail.com

char a,b;

printf("plea

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一步一步写算法(之内存) 下一篇深入理解子类继承父类中的成员变..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: