问题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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
int main()
{
//copyright drbinzhao@hotmail.com
char a,b;
printf("pleaseinput a and b as the format: a=123\n");
scanf("a=%c",&a);
//fflush(stdin);
scanf("b=%c",&b);
printf("a=%c,b=%c",a,b);
return 0;
}
问题20:运算符的优先级是什么?
想到最基础的运算符+-*/%,需要2个操作数,叫做双目运算符;
相应还有单目的,三目的;
单目的有: 自减,自加;* & !还有 (int) (double)类型转换,还有一个是sizeof
三目的有:?:, 常用在a>=b?a:b
还有移位,逻辑,关系,赋值运算符。
速记如下: 单目的肯定高了;
处长想当局长了(移位运算符<<>>),于是去找关系跑官(< ><= >= == !=),这种思维很符合现代中国人的逻辑(&& ||), 但是局长推托说不符合条件(?:)不能安排,给你个副局长干干(副职->赋值= += *=)
移位》关系》逻辑》条件》赋值

被折叠的 条评论
为什么被折叠?



