4. 23 C语言:数组

本文讲解了C语言中数组的基本概念、初始化与操作方法,并通过实例介绍了字符串处理、冒泡排序算法的应用,以及多维数组的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言:数组- 

 

知识点预习: 

 

1C语言中如何来存储字符串? 

C语言中,将字符串变量作为字符数组来处理。 

 

2、什么字符用于标识一个字符串的结束,使用时需要注意什么?两种赋值字符串的形式是否都需要显式加上末端字符? 

字符串中的字符逐个存放在数组元素中,以字符 '\0' 作为字符串结束标志。 

注意:字符串两端用 " " 括起来赋初值。 

系统可以在字符串常量最后自动添加 '\0' 

3、如何声明和初始化一维数组,如何来对一维数组进行数据的修改以及访问? 

声明一维数组  

              类型说明符  数组名[常量表达式]; 

                 int         a[10]; 

引用 

   数组名[下标] 

               a[0]      a[9] 

初始化 

          在声明时初始化 

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

 

 

4、如何声明字符串,字符串存储在什么类型变量中,字符串和数组关系如何? 

 

5、如何声明和初始化二维数组,如何来对二维数组进行数据的修改以及访问? 

 

              类型说明符  数组名[常量表达式][常量表达式]; 

                                    int          a[3][4]; 

 

6、熟悉冒泡排序的实现原理 (134) 

 

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法 

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 

 

冒泡排序算法的运作如下:(从后往前) 

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 

  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 

  3. 针对所有的元素重复以上的步骤,除了最后一个。 

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 

 

 

1 

2 

3 

4 

5 

6 

7 

8 

9 

10 

11 

12 

13 

14 

15 

16 

17 

18 

19 

20 

21 

22 

23 

24 

25 

26 

27 

28 

29 

30 

#include<stdio.h> 

#defineSIZE8 

 

voidbubble_sort(inta[],intn); 

 

voidbubble_sort(inta[],intn)//n为数组a的元素个数 

{ 

    inti,j,temp; 

    for(j=0;j<n-1;j++)    //n-1次循环 

        for(i=0;i<n-1-j;i++)   //每次循环 n - 1 - j 次比较 

        { 

            if(a[i]>a[i+1])//数组元素大小按升序排列 

            { 

                temp=a[i]; 

                a[i]=a[i+1]; 

                a[i+1]=temp; 

            } 

        } 

} 

int main() 

{ 

    intnumber[SIZE]={95,45,15,78,84,51,24,12}; 

    inti; 

    bubble_sort(number,SIZE); 

    for(i=0;i<SIZE;i++) 

    { 

        printf("%d",number[i]); 

    } 

    printf("\n"); 

} 

 

7gets()puts()函数的使用; 

146page 


习题: 

1、输入一些数据放入数组,然后找到其中的最大值和最小值。 

 

#include <stdio.h> 

 

int main(int argc, const char * argv[]) { 

     

    int a[60]; 

    int i, j, n , max, min; 

     

    printf("Input some numbers: "); 

    for (i = 0; ; i++) { 

        scanf("%d", &a[i]); 

        n++; 

        if (getchar() == '\n') { 

            break; 

        } 

    } 

    max = a[0]; 

    min = a[0]; 

     

    for (j = 1; j < n; j++) { 

        if (max < a[j]) { 

            max = a[j]; 

        } 

        if (min > a[j]) { 

            min = a[j]; 

        } 

    } 

     

    printf("max = %d\n", max); 

    printf("min = %d\n", min); 

     

    return 0; 

} 

 

2、使用数组实现冒泡排序,要求从大到小排列。 

 

//Exersice 2 

#include <stdio.h> 

 

int main(int argc, const char * argv[]) { 

     

    int a[60]; 

    int i, j, n , temp; 

     

    printf("Input some numbers: "); 

    for (i = 0; ; i++) { 

        scanf("%d", &a[i]); 

        n++; 

        if (getchar() == '\n') { 

            break; 

        } 

    } 

     

     

    for (i = 0; i < n - 1; i++) { 

        for (j = 0; j < n - 1 - i ; j++) { 

            if (a[j] < a[j+1]) { 

                temp = a[j]; 

                a[j] = a[j+1]; 

                a[j+1] =temp; 

            } 

        } 

    } 

     

    for (i = 0; i < n; i++) { 

        printf("%d ", a[i]); 

    } 

    printf("\n"); 

     

    return 0; 

} 

 

3、使用二维数组统计一个学习小组的各科平均分以及最高分。 

           语文   数学  英语 

学生0 98 84 55 

学生1 67 70 92 

学生2 88 91 74 

 

#include <stdio.h> 

 

int main(int argc, const char * argv[]) { 

     

    int a[3][3] = {{98,84,55},{67,70,92},{88,91,74}}; 

     

    int i; 

    int ChineseHighSore = 0; 

    int MathHighSore = 0; 

    int EnglishHighSore = 0; 

    int Sum_Chinese = 0; 

    int Sum_Math = 0; 

    int Sum_English = 0; 

     

    float ChineseAverageSore = 0; 

    float MathAverageSore = 0; 

    float EnglishAverageSore = 0; 

     

    for (i = 0; i < 3; i++) { 

        Sum_Chinese += a[i][0]; 

        Sum_Math += a[i][1]; 

        Sum_English += a[i][2]; 

         

        if (ChineseHighSore < a[i][0]) { 

            ChineseHighSore = a[i][0]; 

        } 

        if (MathHighSore < a[i][1]) { 

            MathHighSore = a[i][1]; 

        } 

        if (EnglishHighSore < a[i][2]) { 

            EnglishHighSore = a[i][2]; 

        } 

    } 

     

    ChineseAverageSore = Sum_Chinese / 3.0 ; 

    MathAverageSore = Sum_Math /3.0 ; 

    EnglishAverageSore = Sum_English /3.0 ; 

     

    printf("ChineseAverageSore = %.2f\n", ChineseAverageSore); 

    printf("MathAverageSore = %.2f\n", MathAverageSore); 

    printf("EnglishAverageSore = %.2f\n", EnglishAverageSore); 

    printf("\n"); 

     

    printf("ChineseHighSore = %d\n", ChineseHighSore); 

    printf("MathHighSore = %d\n", MathHighSore); 

    printf("EnglishHighSore = %d\n", EnglishHighSore); 

    printf("\n"); 

     

    return 0; 

} 

 

4、输入一些书籍名称,然后排序整理,按照字母顺序输出。 

 

#include<stdio.h> 

#include<string.h> 

 

int main(int argc, const char * argv[]) 

{ 

    char book[5][80]; 

    char temp[80]; 

    int i,j; 

     

    printf("Please input 5 book names:\n"); 

     

    for (i = 0;i < 5;i++) 

    { 

        fgets(book[i],40,stdin); 

    } 

     

    for (i = 0;i < 5;i++) 

    { 

        for (j = i + 1 ; j < 5; j++) 

         

        { 

            if (strcmp(book[i],book[j]) > 0) 

            { 

                strcpy(temp,book[i]); 

                strcpy(book[i],book[j]); 

                strcpy(book[j],temp); 

            } 

        } 

    } 

    printf("The strings:\n"); 

    for (i = 0; i < 5; i++) 

    { 

        puts(book[i]); 

    } 

    return 0; 

} 

 

 

 

5、编写一个C程序,用于处理用户购物单据,思路如下: 

a) 首先定义一个数组,存储5个价格,例如:3.324.351.993.1010.87 

b) 然后用户输入各个商品的购买数量,存入一个数组。 

c) 最终将各个商品的金额存储到另外一个数组中。然后打印如下清单以及总金额: 

商品价格 商品数量 金额 

---------------------- 

3.32     10       33.2 

…… 

---------------------- 

    总金额:xxx 

 

#include<stdio.h> 

 

 

int main(int argc, const char * argv[]) 

 

{ 

    

    float price[5] = {3.32,4.35,1.99,3.10,10.87}; 

    int quantity[5]; 

    float sum_money[5]; 

    float total = 0.0; 

    int i, j; 

     

    printf("Milk = $3.32 , Beef = $4.35\n"); 

    printf("Bread = $1.99, Fruit = $3.10, Vodka = $10.87\n"); 

    printf("Input quantity of each product: "); 

     

    for (i = 0; i < 5; i++) { 

        scanf("%d", &quantity[i]); 

    } 

     

    for (i = 0; i < 5; i++) { 

        sum_money[i] = price[i] * quantity[i]; 

    } 

     

    for (j = 0; j < 5; j++) { 

        total += sum_money[j]; 

    } 

     

   

    printf("         Welcome!     \n"); 

    printf("\n"); 

    printf("Price   Quantity     Amount\n"); 

    printf("---------------------------\n"); 

    for (int j = 0; j < 5; j++) { 

        printf("%5.2f %7d %12.2f\n" , 

               price[j], quantity[j], sum_money[j]); 

    } 

    printf("---------------------------\n"); 

    printf("              Total: %3.2f\n", total); 

     

 

    return 0; 

} 

 

6、编写一个程序,将两个字符串连接起来,不要使用strcat函数; 

 

#include <stdio.h> 

 

int main(int argc, const char * argv[]) { 

 

    char s1[100] = "232w32e4dsddjhwqvdqewdqwdscz3422"; 

    char s2[100] = "w2324ee3wsdsdsedajdbw"; 

    

    int i, j; 

    while(s1[i] != '\0') 

          i++;  //length of s1 

     

    j = 0; 

    while(s2[j] != '\0') 

          s1[i++] = s2[j++];  //copy s2 behind s1 

     

    s1[i] = '\0'//now "i" refers to total length of s1 and s2 

     

    printf("%s\n", s1); //make s1 stop 

     

    return 0; 

} 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值