• C言语教程第四章: 数组(2)




    数组元素的表示法子

      数组元素是构成数组的基础单元。数组元素也是一种变量, 其标识法子为数组名后跟一个下标。 下标表示了元素在数组中的次序号。数组元素的平凡体式款式为: 数组名[下标] 此中的下标只能为整型常量或整型表达式。如为小数时,C编译把自动取整。例如,a[5],a[i j],a[i ]都是合理的数组元素。 数组元素但凡也称为下标变量。必需先界说数组, 本领运用下标变量。在C言语中只能逐个地运用下标变量, 而不克不及一次援用整个数组。 例如,输入有10 个元素的数组必需运用循环语句逐个输入各下标变量:
    for(i=0; i<10; i )  printf("%d",a[i]); 而不克不及用一个语句输入整个数组,下面的写法是错误的: printf("%d",a);
    void main()
    {
    int i,a[10];
    for(i=0;i<10;i )
    a[i ]=2*i 1;
    for(i=9;i>=0;i--)
    printf("%d",a[i]);
    printf("\n%d %d\n",a[5.2],a[5.8]);
    }
      本例中用一个循环语句给a数组各元素送入奇数值,然后用第二个循环语句从大年夜到小输入各个奇数。在第一个 for语句中,表达式3省略了。鄙人标变量中运用了表达式i ,用以批改循环变量。当然第二个for语句也可以如许作, C言语许可用表达式表示下标。 法式中末了一个printf语句输入了两次a[5]的值, 可以看出当下标不为整数时把自动取整。数组的赋值给数组赋值的法子除了用赋值语句对数组元素逐个赋值外, 还可接纳初始化赋值和静态赋值的法子。数组初始化赋值数组初始化赋值是指在数组分析');时给数组元素授予初值。 数组初始化是在编译阶段截至的。如许把增加运转时光,提高效用。

      初始化赋值的平凡体式款式为: static 范例榜样分析');符 数组名[常量表达式]={值,值……值}; 此中static表示是静态存储范例榜样, C言语端正只需静态存储数组和内部存储数组才可作初始化赋值(有关静态存储,内部存储的不雅观点在第五章中介绍)。在{ }中的各数据值即为各元素的初值, 各值之间用逗号隔绝。例如: static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相称于a[0]=0;a[1]=1...a[9]=9;

      C言语对数组的初始赋值另有以下几点端正:
    1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给背面部分元素赋值。例如: static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,此后5个元素自动赋0值。
    2.只能给元素逐个赋值,不克不及给数组全体赋值。 例如给十个元素全部赋1值,只能写为: static int a[10]={1,1,1,1,1,1,1,1,1,1};而不克不及写为: static int a[10]=1;
    3.如不给可初始化的数组赋初值,则全部元素均为0值。
    4.如给全部元素赋值,则在数组分析');中, 可以不给出数组元素的个数。例如: static int a[5]={1,2,3,4,5};可写为: static int a[]={1,2,3,4,5};静态赋值可以在法式执行进程中,对数组作静态赋值。 这时可用循环语句共同scanf函数逐个对数组元素赋值。
    void main()
    {
    int i,max,a[10];
    printf("input 10 numbers:\n");
    for(i=0;i<10;i )
    scanf("%d",&a[i]);
    max=a[0];
    for(i=1;i<10;i )
    if(a[i]>max) max=a[i];
    printf("maxmum=%d\n",max);
    }
      本例法式中第一个for语句逐个输入10个数到数组a中。 然后把a[0]送入max中。在第二个for语句中,从a[1]到a[9]逐个与max中的内容对比,若比max的值大年夜,则把该下标变量送入max中,因而max老是在已对比过的下标变量中为最大年夜者。对比截至,输入max的值。
    void main()
    {
    int i,j,p,q,s,a[10];
    printf("\n input 10 numbers:\n");
    for(i=0;i<10;i )
    scanf("%d",&a[i]);
    for(i=0;i<10;i ){
    p=i;q=a[i];
    for(j=i 1;j<10;j )
    if(q<a[j]) { p=j;q=a[j]; }
    if(i!=p)
    {s=a[i];
    a[i]=a[p];
    a[p]=s; }
    printf("%d",a[i]);
    }
    }
      本例法式中用了两个并列的for循环语句,在第二个for 语句中又嵌套了一个循环语句。第一个for语句用于输入10个元素的初值。第二个for语句用于排序。本法式的排序接纳逐个对比的法子截至。在i次循环时,把第一个元素的下标i赋于p,而把该下标变量值a[i]赋于q。然落伍入小循环,从a[i 1]起到末了一个元素止逐个与a[i]作对比,有比a[i]大年夜者则把其下标送p,元素值送q。 一次循环截至后,p即为最大年夜元素的下标,q则为该元素值。若此时i≠p,分析');p,q值均已不是进入小循环之前所赋之值,则交换a[i]和a[p]之值。 此时a[i]为已排序截至的元素。输入该值之后转入下一次循环。对i 1此后各个元素排序。



    版权声明: 原创作品,许可转载,转载时请务必以超链接体式款式标明文章 原始因由 、作者信息和本声明。不然将追究执法责任。

  • 相关阅读:
    Python学习札记(十五) 高级特性1 切片
    LeetCode Longest Substring Without Repeating Characters
    Python学习札记(十四) Function4 递归函数 & Hanoi Tower
    single number和变体
    tusen 刷题
    实验室网站
    leetcode 76. Minimum Window Substring
    leetcode 4. Median of Two Sorted Arrays
    leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions 、434. Number of Islands II(lintcode) 并查集 、178. Graph Valid Tree(lintcode)
    刷题注意事项
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975611.html
Copyright © 2020-2023  润新知