C learning_3(下)

简介: C learning_3

C learning_3(上):https://developer.aliyun.com/article/1424322


8.数组的下标


       有了上述的数组,我们该怎么拿到每个同学的成绩呢?C语言规定:数组的每个元素都有一个下标,下标是从0开始的。 数组可以通过下标来访问的。


       比如:

#include<stdio.h>
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
  //要拿到元素5 - 用下标4访问
  printf("%d", arr[4]);
  //拿到所有元素 - 遍历下标即可
  int i = 0;
  for (i = 0; i < 10; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}


9.操作符


算术操作符


+         -         *         /         %

#include<stdio.h>
int main()
{
  int x = 10;
  int y = 6;
  printf("%d\n", x + y);//16
  printf("%d\n", x - y);//4
  //乘号不能写成 - x
  printf("%d\n", x * y);//60
  /*  
  除法 - /
    1.计算结果是整除之后得到的商
    2.除法有:
    整数除法
    浮点数除法 - 保证除数和被除数至少有一个是浮点数
  取模/取余 %
    得到的是余数 - 操作符两边的数都必须是整型
  */
  printf("%d\n", x / y);//1
  printf("%lf\n",10 / 6.0);//1.666667
  printf("%lf\n", 10.0 / 6.0);//1.666667
  printf("%lf\n", 10.0 / 6);//1.666667
  printf("%d\n", x % y);//4
  return 0;
}


移位操作符


>>         <<


位操作符


&         ^         |


赋值操作符


=         +=         -=         *=         /=         &=         ^=          |=            >>=           <<=

#include<stdio.h>
int main()
{
  int a = 0;
  a = 5;//赋值
  a = a + 5;//等价 a += 5; - 复合赋值
  return 0;
}


单目操作符


!                                          逻辑反操作

-                                          负值

+                                         正值

&                                         取地址

sizeof                                  操作数的类型长度(以字节为单位)

~                                         对一个数的二进制按位取反

--                                         前置、后置--

++                                       前置、后置++

*                                          间接访问操作符

(解引用操作符) (类型)         强制类型转换

#include<stdio.h>
int main()
{
  //双目操作符 - 只有一个操作数
  //单目操作符 - 只有一个操作数
  //在C语言中,非0 - 表示真,0 - 表示假
  int a = 5;
  if (a)//a为真进入if
    printf("X\n");
  if (!a)//a为假进入if
    printf("x\n");
  printf("%d\n", !a);//0
  int a = 5;
  int b = 0;
  b = -a;
  printf("%d\n", b);
  int a = 0;
  //sizeof 操作符,不是函数
  //sizeof计算的是变量所占有内存的大小、单位是字节
  printf("%d\n", sizeof(a));//4
  printf("%d\n", sizeof a);//4
  printf("%d\n", sizeof(int));//4
  printf("%d\n", sizeof int);//error
  int a = 1;
  int d = ++a;//前置++ - 先加加后使用
  /*
    a = a+1;
    d = a;
    a = 2 , d = 2
  */
  int e = a++;//后置++ - 先使用后加加
  /*
    e = a;
    a = a+1;
    a = 2 , e = 1
  */
  return 0;
}


接下来,我们看一段关于前置++和后置++配合使用的代码,看看输出的结果是什么?

#include<stdio.h>
int main()
{
  int a = 1;
  int b = (++a) + (++a) + (++a);
  printf("%d", b);
}


vs2022测试的结果:


IDEA2020测试的结果


关系操作符

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int a = 4;
  int b = 5;
  if (a == b)//测试相等
  {
    printf("1\n");
  }
  else//a != b - 测试不相等
  {
    printf("2\n");
  }
  return 0;
}


>         >=         <         <=         !=   用于测试“不相等”         ==      用于测试“相等”


逻辑操作符

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  //并且 && 逻辑与 两个操作数都为真才为真,只要有一个为假就为假
  //或者 || 逻辑或 两个操作数都为假才为假,只要有一个为真就为真
  int a = 0;
  int b = 5;
  if (a && b)//假
  {
    printf("1\n");
  }
  if (a || b)//真
  {
    printf("2\n");
  }
  return 0;
}


&&     逻辑与         ||          逻辑或


条件操作符

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  //exp1 ? exp2 : exp3 - 三目操作符
  /*
    exp1为真,执行exp2,不执行exp3
    exp1为假,执行exp3,不执行exp2
  */
  int a = 0;
  int b = 0;
  //输入
  scanf("%d %d", &a, &b);
  //找到a和b之间的最大值
  /*
  int m = 0;
  if (a > b)
    m = a;
  else
    m = b;
  */
  /*不推荐
  int m = 0;
  (a > b) ? (m = a) : (m = b);
  */
  /*三目操作符的使用
  int m = 0;
  m = a > b ? a : b;
  */
  return 0;
}


exp1 ? exp2 : exp3


逗号表达式

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  //逗号表达式
  //exp1, exp2, exp3......
  //从左向右依次计算,结果是最后一个表达式的结果
  int a = 3;
  int b = 2;
  int c = 5;
  int d = (a += 3, b = 5, c = a + b, c - 4);
  //       a=6     b=5    c=11       c=7
  return 0;
}


exp1, exp2, exp3, …expN


下标引用、函数调用和结构成员

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
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
  //数组下标从0开始
  //[]是一个下标引用操作符
  printf("%d\n", arr[5]);//6
  return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Add(int x, int y)
{
  return x + y;
}
int main()
{
  int z = Add(3, 5);//函数调用操作符
  printf("Hello");//函数调用操作符
  return 0;
}


[]         ()         .         ->


9.操作符的优先级


       当操作配合使用时,我们要牢记以下口诀,才能在以后的使用出现不必要的错误


口诀:

单目运算排第一;

乘除余二加减三;

移位四,关系五;

等和不等排第六;

位与、异或和位或;

短路与和短路或;

依次从七到十一;

条件排在第十二;

赋值一定是最后;

相关文章
|
9天前
|
人工智能 运维 安全
|
7天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
702 23
|
8天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
人工智能 数据可视化 数据挖掘
Quick BI 体验&征文有奖!
瓴羊生态推出Quick BI 征文激励计划,鼓励用户分享数据分析实践经验与技术洞察,征集高质量原创文章。内容围绕AI功能体验与BI案例实践,设季奖、年奖及参与奖,优秀作者可获现金奖励、产品内测资格及官方认证形象。投稿截止至2026年3月31日。
Quick BI 体验&征文有奖!