c语言学习第三课—简单介绍数组与操作符

简介: c语言学习第三课—简单介绍数组与操作符

数组

数组-用来存储一组数据,是一组相同类型的元素集合。

数组定义    数据类型+数组名[数组大小] =数组元素;

cbf2fb030155413f80214cef7fe2c3b2.png例如:

int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//定义一个整型数组,最多放10个数
  char arr[10] = "abcdefdhig";//定义一个字符数组
  //数组里存放的元素个数必须小于等于你所定义的大小,若小于,剩余数组元素的补充为0
  return 0;
}

数组下标

数组的里的元素下标代表他的位置,第一个从0开始,这里类似高中学的数列。这里可以用数组下边表示数组元素。

int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
               // 0 1 2 3 4 5 6 7 8  9
  printf("%d\n", arr[7]);//打印8,第7的下标。
  //在数组中,我们可以从他的下标来访问c语言里的所有元素。
  //打印全部元素
  //输入数组元素
  int j = 0;
  while (j < 10)
  {
    scanf("%d ", &arr[j]);//重新输入的值保存在数组里
    j++;
  }
  int i = 0;
  while (i < 10)
  {
    printf("%d ", arr[i]);
    i++;
  }
  return 0;
}

操作符

c语言里提供了许多操作符,如图表示


4b14a38c3a4f424cb536a471c9eafc23.jpg

算术操作符

加减乘除与取余,加减乘是数学里的,这里不举例,说一下取余与处,%取余就是取两个数相除所得的余数。注意的是%操作符两边的数必须是整数,/除操作符,两个整形类型相处所得的一个数也是整形,故无小数。

int main()
{
printf("%d",15/2);//7   整形,故为7
printf("%d",15 % 2);//1   余数
//取余操作符两边必须为整数
return 0;
}

移位操作符

>>  <<  移动的是二进制位,向左移动,向右移动二进制序列。这里不做赘述。

  位操作符  

^(按位异或)     &(按位与)      |(按位或)          ~(取反)

在使用位和 移位操作符时需注意:

1.除了取反操作符是单目操作符外,其余都是双目操作符

2.位运算操作符所操作的操作数只能是整形或字符型的数据以及他们的变体

3.操作数的移位运算不改变数原来本身的值

它们的运算按规则是:先将两个操作数化为二进制数,然后再按位运算。

它们的运算规则如下图  

image.jpeg

~操作数的二进制位1变0 0变1;

|  按位或   两个操作数的二进制数一一对应,同假为假,一真为真,同真为真,所得到的二进制序列对应的十进制数为所求得的结果

&按位与   两个操作数的二进制数一一对应,同假为假,一假为假,同真为真,所得到的二进制序列对应的十进制数为所求得的结果

例如按位与:两个操作数的二进制数一一对应,相同为假(0),不同为真(1),所得到的二进制序列对应的十进制数为所求得的结果

int main()
{  
    int a=84; int b=59;
    printf("%d",a&b);//结果为16
return 0;
}

  01 010 100 //84的二进制数

  00 111 011 //59的二进制数

&

  00 010 000 //16的二进制数

且对于按位异或^,有这个特殊操作。

a^a=0,     a^~a=二进制数全为1  ~(a^a)=1

赋值操作符

int main()
{
  int a = 0;//初始化
  a = 100;//赋值
  a += 3;//等价a=a+3;
  a -= 10;//等价a=a-10;
}

一些单目操作符

+是双目操作符,3+5,左右两边有两个操作数,故单目操作符只有一个操作数

!操作符,真变假,假变真

c语言中,0表示假,非0表示真。用于条件的判断

int main()
{
  int flag=5;
  if (flag)//为真
  {
    printf("hehe");
  }
  if (!flag)//为假
  {
    printf("haha");
  }
  //int flag=0;
  //if (!flag)//为真
  //{
  //  printf("haha");
  //}
  return 0;
}

-  负值操作

int main()
{
    int a = 10;//int a=-10;
    a = -a;
    printf("%d", a);
    return 0;

sizeof  计算操作数类型长度  (所占空间的大小) 单位是字节

int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  printf("%d", sizeof(arr));//40
  printf("%d", sizeof(arr[0]));//4
  //用sizeof计算数组中的元素
  printf("%d", sizeof(arr) / sizeof(arr[0]));
}

注意

这里数组里共有10个整形数据,一个整型占空间大小为4个字节,一共40个

如何计算数组中的元素,这里的总单位字节大小除以一个元素大小,就是数组中的元素。

sizeof操作符,当数组名放在sizeof()中计算的所有元素所占空间大小。

字符数组同理

int main()
{
  char arr[7] = "abcdefg";
  printf("%d", sizeof(arr));//8
  printf("%d", sizeof(arr[0]));//1
  //这里的一个字符所占空间大小为一个字节
  //
  //这里也可以直接用函数strlen来计算
  printf("%d", strlen(arr));//7
}

注意

因为,sizeof计算的是算占空间大小,这里的‘\0’即字符串的结束标志,也当作是一个字符,转义字符,故这里的大小为7+1;而strlen只看字符的个数,以\0为结束,故为7个。

++操作符符

给原来的元素+1,这里区分一下前置++与后置++。

//后置++
int  main()
{
  int a = 10;
  int b = a++;//后置++。a先使用,在加1;
  printf("a=%d\n", a);//11,这里的a使用之后加1;
  printf("b=%d\n", b);//10,这里的b在a赋值时,先使用,先赋值,故b还是为10;
  //b=a++;可以理解为 int b=a;a=a+1;
  return 0;
}
//前置++
int main()
{
  int a = 10;
  int b = ++a;//前置++,先++,在使用
  printf("a=%d\n", a);//11,这里的a先加1;
  printf("b=%d\n", b);//11,这里的b在a赋值时,先加加变为11,再赋值,故b为11;
  //int b=++a;可以理解为 a++;int b=a;
}

--操作符同理

int main()
{
  int a = 10;
  int b = --a;
  printf("a=%d\n", a);//9
  printf("b=%d\n", b);//9
  int a = 10;
  int b = a--;
  printf("a=%d\n", a);//9
  printf("b=%d\n", b);//10
  return 0;
}

强制类型转换

也是一个单目操作符

int main()
{
  //int a=3.14   报警,类型不匹配
  int a = (int)3.14;//强制转换为整形 3
}

关系操作符

很简单

就是>= (大于等于)<=(小于等于) >(大于) < (小于)   ==(等于),这里用法注意一下==与=的区别,一个=是赋值操作。==判断两边是否一样,一样为真否则为假。

逻辑运算符

&&  || 逻辑与和逻辑或

&&逻辑与,a&&a就是a且a,两个必须同时满足才为真,a||a就是a或a,满足其中一个就为真。 这两个通常用于条件的判断。

int mian()
{
  int score1 = 0;
  int score2 = 0;
  scanf("%d %d", &score1, &score2);
  if (score1 >= 90 && score2 >=90)
  {
    printf("两成绩都大于等于90");
  }
  else if (score1 > 90 || score2 > 90)
  {
    printf("可能存在有一门小于九十的");
  }
  else
  {
    printf(" ")
  }
  return 0;
}

今日学习完毕,大家一起加油。

相关文章
|
1天前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
1天前
|
C语言
【C语言刷题每日一题】一维数组的交换
【C语言刷题每日一题】一维数组的交换
|
1天前
|
C语言
C语言逻辑操作符的短路问题
C语言逻辑操作符的短路问题
|
1天前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
1天前
|
存储 编译器 C语言
c语言学习历程【1】
c语言学习历程【1】
7 1
|
2天前
|
C语言
【C语言】:详解函数指针变量,函数指针数组及转移表
【C语言】:详解函数指针变量,函数指针数组及转移表
8 2
|
2天前
|
C语言
【C语言】:详解指针数组,数组指针及(二维)数组传参(2)
【C语言】:详解指针数组,数组指针及(二维)数组传参(2)
6 1
|
2天前
|
Serverless C语言
【C语言】:对(一维)数组与指针的深入理解(1)
【C语言】:对(一维)数组与指针的深入理解(1)
5 1
|
1天前
|
C语言
【C语言刷题系列】轮转数组
【C语言刷题系列】轮转数组
|
1天前
|
C语言
【C语言基础篇】数组传参规则详解
【C语言基础篇】数组传参规则详解