目录
- //下列实数是否合法
- .1e0
- 3.0e0.2
- E9
- 9.12E
在C语言中,实数有两种形式:十进制数形式与指数形式
十进制:例如:0.123、.123、123.、0.0等都是合法实数常量。注意:小数形式表示的实数常量必须要加小数点
指数形式:使用"e"或“E”后跟一个整数表示以10为底的幂数。
如:0.23*(10的1次方)可以写为——0.23e1或0.23E1
所以要注意,e或E之前必须要有数字,且e或E后面的指数必须为整数。
由此我们可知,只有.1e0是正确的
- //下列那个数据常量是正确的
- 115L
- 0118
- o115
-
- //115是正确的
十进制:为正负数加数字部分,数字部分不能以0开头
八进制:数字部分要以0开头,如0123(八进制中各位不能有>=8的数)
十六进制:数自部分要以0x开头,如0x123
- 其中八进制和十六进制整形常量一般表示无符号整数,所以前面不应该带正负号
长整型:后缀L或I
无符号型:后缀U或u
- //判断下列哪种输入方式正确
- #include
- main()
- {
- int a1, a2;
- char c1, c2;
- scanf("%d%c%d%c", & a1, & c1, & a2, & c2);
- printf("%d,%c,%d,%c", a1, c1, a2, c2);
- }
-
- //1.
- 12 a 34 b
-
- //2.
- 12a34b
第二种是正确的
输入类型分别为int、char、int、char,在输入多个数据时,格式种没有非格式字符(在sanf的""中并未将各输入类型赋封开)
按照第一种方法输入,变量a为char类型,接收到的字符为空格,与原意不符
- //下列输入格式是什么
- #include
- main()
- {
- float a1;
- char c1;
- scanf("%f", &a1);
- scanf("%c", &c1);
- printf("%f,%c", a1, c1);
- }
整数字符(中间不添加任何元素)
第二个输入的变量为字符变量,在第一个变量后添加任何符号包括换行符,都会被字符型变量接收。
不建议这样写,应该在scanf之间增加一个函数接收内存缓冲器中多余的元素
- //下式为什么是错的?
- a = (b=4) = 3;
(b=4)是一个无法改变的表达式,无法将常量或是变量赋给无法表达的表达式
- //最后的输出值是?
- #include
- #define S(x) 4*(x)*x+1
- #define S1(x) 4*x*x+1
- main()
- {
- int k=5,j=2;
- printf("%d\n",S(k+j));
- printf("%d\n",S1(k+j));
- }
首先我们要明白,define是简单的文本替换
S(k+j):4*(k+j)*k+j+1 最终值为143
S(k+j):4*k+j*k+j+1 最终值为33
- //以下程序的输出值
- #include
- #define PT 3.5;
- #define S(x) PT*x*x;
- int main()
- {
- int a=1,b=2;
- printf("%4.1f\n",S(a+b));
- }
程序错误,无法输出
宏定义变量名PT为 3.5; 代入S(x)为
3.5;*x*x; 表达式错误,不需要分号
- //下面那个switch语句正确
- float x = 1.5;
- int a = 1, b = 3, c = 2;
-
- //1.
- switch (a+b)
- {
- case 1:
- printf("*\n");
- case 2:
- printf("**\n");
- }
-
- //2.
- switch ((int)x);
- {
- case 1:
- printf("*\n");
- case 2:
- printf("**\n");
- }
-
- //3.
- switch (x)
- {
- case 1:
- printf("*\n");
- case 2:
- printf("**\n");
- }
-
- //4.
- switch (a+c)
- {
- case 1:
- printf("*\n");
- case b:
- printf("**\n");
- }
switch后的括号中是存放表达式的,写为两个变量相加没有问题,但必须为整型表达式或字符,浮点型和字符串是不行的,3错误。
case后的括号中是存放常量表达式的,不能将变量带入,4错误。
switch()后一个语句并没有结束,不能在后面直接使用分号
- //求最终输出值
- #include
- struct S
- {
- int a,b;
- }
- data[2]={10,100,20,200};
- main()
- {
- struct S p=data[1];
- printf("%d\n",++(p.a));
- }
data是类型为struct S的数组名,结构体中存放有两个变量,data数组中存放有两组数,其中,10和20是变量x的值,100和200是变量b1的值。
主函数中创建一个结构体类型的变量,并把data数组中第二组数赋给它,所以,p.a==20,p.b==200,最终输出为p.a+1为21
- struct {
- char mark[12];
- int num1;
- double num2;
- }t1,t2;
- //判断是否成立
- t1 = t2;
- t1.mark = t2.mark;
- t1.num1 = t2.num1;
- t1.num2 = t2.num2;
t1.mark = t2.mark是错误的,C语言中不能直接给结构体中的数组赋值。
数组名表示地址,可以看作一个常量,无法给常量直接赋值。
结构体变量是一个变量,可以给它赋值