c 语言学习第三天

字符和字符串

字符

当我们定义了一个字符变量 c 为a时,打印的时候让它使整数形式显示。会出现怎么一个情况?

#include<stdio.h>

int main(){
  char c = 'a';
  printf("c show number is %d \n",c);
  return 0;
}
c show number is 97

当定义变量使用char类型时,把它赋值给数字,会出现什么情况?

#include<stdio.h>

int main(){
  char a = 97,b = 98,c = 99;
  printf("%c,%c,%c \n",a,b,c);
  return 0;
}
a,b,c

声明字符会参照ASIIC 码进行转换。当以字符形式显示,就会显示表中对于的字符显示。当以整数形式显示,就会参照表中定义的数字形式显示。

  • 当然 char 类型也有取值范围,当超过取值范围,就会出现异常显示。
#include<stdio.h>
int main(){
  char a =180 ,b = 190,c = 300;
  printf("a:%d \n",a);
  printf("b:%d \n",b);
  printf("c:%d \n",c);
  return 0;
}
test3.c: In function ‘main’:
test3.c:4:2: warning: overflow in implicit constant conversion [-Woverflow]
  char a =180 ,b = 190,c = 300;
  ^
a:-76
b:-66
c:44

在定义char类型的时候,根据编辑器默认加上signedunsigned,由于编辑器的不同。所以 char 的取值范围不同,signed char取值范围为-128~127,而unsigned char取值范围为0~255

字符串

在 c 语言中,字符串就是一串字符,所以没必要新定义一个字符串类型。只需要在内存中找一块连续的空间来存储字符串即可。

  • 声明字符串
# char 标识符[长度|可不写];
char c[6];

# char 标识符[长度|可不写]= {*,*,*,*};

char c[6]= {'h','e','l','l','o','\0'};
  • 字符串赋值
c[0] = 'h';
c[1] = 'e';
c[2] = 'l';
c[3] = 'l';
c[4] = 'o';
c[5] = '\0';
#include<stdio.h>
int main(){
  char c[]= {'h','e','l','l','o','\0'};
  printf("c is %s\n",c);
  printf("world");
  return 0;
}
hello
world

运算符

算数运算符

双目:+,-,*,/,%.

单目:+,-.

什么是目?目取决于操作数,符号需要连接两个操作数的叫双目运算符。连接一个操作数叫单目运算符。

  • /

整数/整数 = 整数(小数点会被舍弃)

浮点数/浮点数 = 浮点数

  • % 求余

当浮点数求余时会发生报错。

#include<stdio.h>

int main(){
  double a = 5.2 % 3.0;
  printf("a is %f\n",a);
  return 0;
}
test5.c: In function ‘main’:
test5.c:4:17: error: invalid operands to binary % (have ‘double’ and ‘double’)
  double a = 5.2 % 3.0;
                 ^

表达式

用于运算符和括号将操作数连接起来的式子。

运算符优先级

int main(){
  int i ,j ,k;
  i = 1 + 2;
  j = 1 + 2 * 3;
  k = j + j + -1 + pow(2,3);
  printf("i is %d\n",i);
  printf("j is %d\n",j);
  printf("k is %d\n",k);
  return 0;
}
i is 3
j is 7
k is 21

类型转换

为了确保计算的精度,默认以操作数类型占用内存较大的为基础,其余不同类型会转换成占用内存较大的数据类型,然后进行运算,结果也为占用内存较大的数据类型。

  • 例如:
1 + 1.5 = 1.0 + 1.5 = 2.5
#include<stdio.h>
int main(){
  printf("整型输出:%d\n", 1 + 2.0);
  printf("浮点型输出:%f\n",1 + 2.0);
  return 0;
}
整型输出:-1131816200
浮点型输出:3.000000

强制类型转换

在操作数前+(类型)即可。

#include<stdio.h>
int main(){
  printf("整型输出:%d\n", 1 + (int)2.0);
  printf("浮点型输出:%f\n",1 + 2.0);
  return 0;
}
整型输出:3
浮点型输出:3.000000

浮点类型转换 int 类型,会直接把小数点后面的数直接省略。而不是四舍五入。

关系运算符

用关系运算符将两边的变量、数据或表达式连接起来,称之为关系表达式。(有返回值)

int a = 1,b = 0;
1 < 2 // int 1
a < b // int 0
a <= b // int 0
'a' + 'b' <= 'c' // int 0
(a=5) < (b = 10) // int 1

逻辑运算符

  • !:逻辑非,取反,单目运算符
  • &&:逻辑与,全为真才为真
  • ||:逻辑或,有一个为真就为真
#include<stdio.h>

int main(){
  int a = 5,b=3;
  printf("%d \n",!a);
  printf("%d \n",a>b);
  printf("%d \n",!(a+b));
  printf("%d \n",!0 + 1 < 1 || !(3+4));
  return 0;
}
0
1
0
0
  • 短路

&&前面的值为假 或者 当||前面的值为真 会忽略后面的表达式。

posted @ 2021-06-28 16:57  阿政想暴富  阅读(89)  评论(0编辑  收藏  举报