• Linux C基础(5)


    Day5

    1、循环结构

    循环:重复做某一件事

    循环三要素

     (1)循环的初始条件 (2)循环的中止条件 (3)循环变量的变化

    1.1 for循环

     
    1. for(表达式1;表达式2;表达式3)
    2.  {
    3.      语句
    4.  }
    5.  //for(i=0;i<3;i++)
    1.  表达式1:循环的初始条件
    2.  表达式2:循环的终止条件
    3.  表达式3:循环变量的变化

    先执行表达式1的值,然后再执行表达式2的值,如果表达式2的值为真,执行循环体,再执行表达式3的 值,如此反复,直到表达式2的值为假,跳出循环

    输出1+2+···+9

    省略表达式1的值

    注意:表达式1,2,3的值都可省略,但是分号不能省略

    案例

    案例

    1.2 while语句

    1.  while(表达式)
    2.  {
    3.   语句;
    4.  }
    5.  //判断表达式的值是否为真,为真执行循环体,否则,跳出循环

    1.3 do while语句

    1.  do
    2.  {
    3.      语句;
    4.  }while(表达式);
    5.  //先执行一次语句,然后再判断表达式的值是否真,如果为真继续执行,否则跳出循环

    总结:

    1.  while先判断,再执行,循环体至少执行0
    2.  do while先执行,再判断,循环体至少执行1

    转向语句

    1.4 break

     (1)跳出switch语句 (2)跳出循环

    1.5 continue

    作用:结束本次循环,开始下一次循环

    1.6 死循环

    1.  (1)
    2.  while(1)
    3.  {
    4.   ;
    5.  }
    6.  (2)
    7.  for(;1;)
    8.  {
    9.   ;
    10.  }
    11.  3
    12.  LOOP:
    13.  ;
    14.  goto LOOP;

    1.7 goto语句

    无条件跳转语句,一般格式goto语句标号

    语句标号:符号标识符的命名规范

    程序执行到goto时跳回到语句标记loop的位置

    2、数组

    整型数组、字符数组、二维数组

    2.1 概念

    一组数据类型相同的元素的集合

    (1)数据类型相同	(2)地址连续

    2.2 数组的定义

    1. 存储类型 数据类型 变量名
    2. auto int a;
    3. 存储类型 数据类型 数组名[元素的个数];
    4. 存储类型:auto(修饰局部变量,存储在栈区)
    5. static(局部和全局,存储在静态区;延长局部生命周期,只需初始化一次;限制全局变量在本程序内)
    6. register局部,寄存器,无空闲,在栈区
    7. extern 全局,静态区
    8. 数据类型:数组中每一个元素的数据类型
    9. 去掉变量名剩下的都是数据类型
    10. 数组的数据类型:数据类型[元素的个数]
    11. 数组名:(1)数组名代表的是数组首元素的地址 (2)代表整个数组
    12. 元素的个数:必须是一个确定的数(整型变量)

    2.3 数组的初始化

    2.3.1 部分初始化

    1. int a[5] = {1,2,3};
    2. a[0] = 1,a[1] = 2,a[2] = 3,a[3]=0,a[4]=0

    1. 总结:部分初始化时,若未被赋值,默认为0,因此我们利用这一特点给数组清零 int a[5] = {0};
    2. 未初始化时,默认为随机值;(64位为0

    2.3.2全部初始化

    1. int a[5] = {1,2,3,4,5};
    2. int b[];//error,元素个数必须是确定的
    3. int b[] = {1,2,3};//数组中的元素个数由后面的复制的具体个数决定

    总结:

    1. (1)如果数组定义函数体内部,如果没有初始化,其值为随机值
    2. (2)如果数组定义在函数体外部,如果没有初始化,其值为0
    3. (3)如果用static修饰,没有初始化,其值为0

    2.4 数组的访问

    2.5 数组的输入输出

    1. (1)
    2. int a[5];
    3. a[5] = {1,2,3,4,5};//error a[5]:数组a中第五个元素
    4. (2)
    5. int a[5];
    6. a= {1,2,3,4,5};//error 数组名:(1)数组名代表的是数组首元素的地址
    7. (3)
    8. int a[] ={0};//没有意义,代表数组中只有一个元素
    9. (4)
    10. int a[];//error

    作业

    1、打印9*9乘法表

    1. #include
    2. //打印一个9x9乘法表
    3. #define N 9
    4. int main(void)
    5. {
    6. int i,j=0;
    7. for(i=1;i<=N;i++)
    8. {
    9. for(j=i;j<=N;j++)
    10. {
    11. printf("%d*%d=%d\t",i,j,i*j);
    12. }
    13. printf("\n");
    14. }
    15. return 0;
    16. }

    2、求数组中的最大值(不能使用冒泡排序)

    1. #include
    2. int Max=0;
    3. int main()
    4. {
    5. int i=0;
    6. int a[5]={100,300,200,800,600};
    7. for(i=0;i<5;i++)
    8. {
    9. if(a[i]>Max)
    10. Max=a[i];
    11. }
    12. printf("Max:%d\n",Max);
    13. }

    3、求数组中的次大值

    1. #include
    2. int main()
    3. {
    4. int arr[5]={5,6,3,4,9};
    5. int max= arr[0]; //定义最大值
    6. int mid= arr[0]; //定义次大值
    7. for(int i = 0;i<5;i++){
    8. //因为arr[i]是固定的 ,所以可以用arr[i]先和max比较,如果大于max 则把max的值赋给mid的值,然后把arr[i]赋给max
    9. //这样max肯定比mid大
    10. if(arr[i]>max)
    11. {
    12. mid = max;
    13. max = arr[i];
    14. }
    15. else if(arr[i]>mid&&arr[i]
    16. {
    17. //另一种情况 arr[i]在两者之间*/
    18. mid = arr[i];
    19. // 把arr[i]赋给mid
    20. }
    21. }
    22. printf("max=%d,mid=%d\n",max,mid);
    23. return 0;
    24. }

  • 相关阅读:
    基于ADB Shell 实现的 Android TV、电视盒子万能遥控器 — ADB Remote ATV
    js 设置网页标题(兼容微信内置浏览器)
    Spring框架的两大核心IOC&DI
    2023年中国儿童滑板车优点、市场规模及发展前景分析[图]
    React学习笔记
    SpringBoot+Vue项目在线小说阅读平台
    决定迭代次数的两种效应
    Java实现单链表
    cesium结构图
    Ascii码表
  • 原文地址:https://blog.csdn.net/m0_58540923/article/details/134235172