蓝鸥C语言学习第四天

今天主要学习数组,什么叫是数组呢?

数组:就是存放相同类型的若干变量的集合。数组属于构造类型。

一维数组的定义方式:类型  数组名[元素个数] = {元素1, 元素2, .........};

int a[5];

注意:[]只能放在数组名的后面,下面的都是错误写法:

1 int a[5] a;// 错误
2 int[] b; // 错误

**[]里面的个数必须是一个固定值,可以是常量(比如7、10)、常量表达式(比如3+4、5*7)。绝对不能使用变量或者变量表达式来表示元素个数,大多数情况下不要省略元素个数(当数组作为函数的形参和数组初始化时除外)

下面的写法是正确的:

1 int  a[7];   // 整型常量
2 int  b[‘A‘];  // 字符常量,其实就是65
3 int  c[3*4];  // 整型常量表达式

下面的写法是错误的:

1 int a[]; // 没有指定元素个数,错误
2
3 int i = 9;
4 int a[i]; // 用变量做元素个数,错误

定义数组时,系统将按照数组类型和个数分配一段连续的存储空间来存储数组元素,如int a[3]占据了连续的12字节存储空间(在64位编译器环境下,一个int类型占用4个字节)。要注意的是,数组名代表着整个数组的地址,也就是数组的起始地址,即第一个元素的地址就是整个数组的地址。

初始化的一般形式是:类型  数组名[元素个数] = {元素1, 元素2, ...};

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

相当于:

int a[5];

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

注意的是:1、C语言中数组下标都是从0开始的。

     2、C语言中编译器是不会对数组下标越界进行检查的,所以自己访问数组元素时要小心

**元素值列表可以是数组所有元素的初值,也可以是前面部分元素的初值

int a[5] = {2, 5};

当数组为整型时,初始化未确定初值的元素,默认为0,所以上面的a[2]、a[3]、a[4]都为0

**当对全部数组元素都赋初值时,可以省略元素个数

int a[] = {3, 4, 5, 8, 9};

说明数组a的元素个数是5

*** 数组初始化时的赋值方式只能用于数组的定义,定义之后只能一个元素一个元素地赋值

下面的写法是错误的:

1 int a[3];
2
3 a[3] ={1, 2, 3};   // 错误
4
5 a = {1, 2, 3};   // 错误

其实为什么是错误的写法呢?我们可以简要分析一下。

1> 第3行的a[3]代表着访问数组的第4个元素,首先这里已经是数组下标越界了;就算没有越界,给a[3]赋值时也应该赋一个int类型的整数,不应该是{}。

2> 第5行的a是数组名,代表着数组的地址,它是个常量!给常量赋值,那肯定错了!

***一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,形参的改变不影响实参

 1 // b是test函数的形参(形式参数)
 2 void test(int b) {
 3     b = 20;
 4 }
 5
 6 int main()
 7 {
 8     int a[3];
 9     a[0] = 10;
10
11     printf("函数调用前的a[0]:%d\n", a[0]);
12
13     test(a[0]); // a[0]是test函数的实参(实际参数)
14
15     printf("函数调用后的a[0]:%d", a[0]);
16     return 0;
17 }

输出结果:

***数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全等同,是存放在同一存储空间的同一个数组。这样形参数组修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。

 1 // b是test函数的形参(形式参数)
 2 void test(int b[]) { // 也可以写int b[5]
 3     b[0] = 20;
 4 }
 5
 6 int main()
 7 {
 8     int a[5];
 9     a[0] = 10;
10
11     printf("函数调用前的a[0]:%d\n", a[0]);
12
13     test(a); // a是test函数的实参(实际参数)
14
15     printf("函数调用后的a[0]:%d", a[0]);
16     return 0;
17 }

输出结果:

练习:

1.对数组进行求和操作,打印计算结果。

 1 #define SIZE 10
 2 #import <Foundation/Foundation.h>
 3
 4 int main(int argc, const char * argv[]) {
 5     int a[SIZE] = {0},i= 0, sum = 0;
 6     for(i = 0; i < SIZE; i++){
 7         a[i] = i+10;    // 每次循环都+10
 8         sum += a[i];  // 每次+10的和
 9         printf("a[%d] = %d\n", i, a[i]);  // 输出每次产生的数
10     }
11
12     printf("数组的总和:%d\n", sum);
13     return 0;
14 }

2.随机产生20个10~50的正整数存放到数组中,并求数组中的多有元素最大值、最小值、平均值及各元素之和。

 1 #define LEN 20   // 宏定义一个常量
 2 #import <Foundation/Foundation.h>
 3
 4 int main(int argc, const char * argv[]) {
 5
 6     int num[LEN] = {0}; // 初始化整型数组
 7     int max = 0, min = 0, avg, sum, count = 0;
 8     for (int i = 0; i < LEN ; i++) {
 9         // 产生一个10~50的正整数
10         num[i] = arc4random() % 41 +10;
11         printf("%d ",num[i]);  // 输出刚产生的随便数
12         sum += num[i];   // 求和
13         count++;  // 统计产生了几个数
14         if (i == 0) {  // 当数组下标等于1时,假设最大值和最小值都为数组中的第一个下标值
15             min = num[0];
16             max = num[0];
17         }
18         // 比较最取小值
19         if (min > num[i]) {
20             min = num[i];
21         }
22         // 比较最小在值
23         if (max < num[i]) {
24             max = num[i];
25         }
26     }
27
28     avg = sum / count; // 求平均值
29     printf("最大值=%d,最小值=%d,数组之和=%d,平均值=%d\n", max, min, sum, avg);
30
31     return 0;
32 }

3.编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排序,然后将这两个数组合并成一个升序数组。

 1 #import <Foundation/Foundation.h>
 2
 3 int main(int argc, const char * argv[]) {
 4
 5     int inputNum1 = 0, inputNum2 = 0;
 6     int num1[5] = {0}, num2[5] = {0}, num3[10] = {0};
 7     printf("请输入5个数:\n");
 8     for (int i = 0; i < 5; i++) {
 9         scanf("%d",&inputNum1);
10         num1[i] = inputNum1;
11     }
12
13
14     printf("在输入5个数:\n");
15     for (int j = 0; j < 5; j++) {
16         scanf("%d",&inputNum2);
17         num2[j] = inputNum2;
18     }
19
20     // num1数组的排序(冒泡排序)
21     int length1 = sizeof(num1) / sizeof(int);
22     int length2 = sizeof(num2) / sizeof(int);
23     for (int i = 0; i < length1 - 1 ; i++) {
24         for (int j = 0; j< length1 - i -1; j++) {
25             if (num1[j] > num1[j + 1]) {
26                 int temp  = num1[j];
27                 num1[j] = num1[j + 1];
28                 num1[j + 1] = temp;
29             }
30         }
31     }
32     // num2数组的排序(冒泡排序)
33     for (int i = 0; i < length2 - 1 ; i++) {
34         for (int j = 0; j< length2 - i -1; j++) {
35             if (num2[j] > num2[j + 1]) {
36                 int temp  = num2[j];
37                 num2[j] = num2[j + 1];
38                 num2[j + 1] = temp;
39             }
40         }
41     }
42
43     //合并数组
44     for (int i = 0; i < 5; i++) {
45         num3[i] = num1[i];
46     }
47     for (int j = 5; j < 10; j++) {
48         num3[j]= num2[j - 5];
49     }
50
51
52     // 对新产生的数组进行排序
53     int lenght3 = sizeof(num3)/sizeof(int);
54     for (int i = 0; i < lenght3 - 1; i++) {
55         for (int j = 0; j <lenght3 - i - 1; j++) {
56             if (num3[j] > num3[j + 1]) {
57                 int temp = num3[j];
58                 num3[j] = num3[j + 1];
59                 num3[j + 1] = temp;
60             }
61         }
62     }
63
64     // 遍历输出排序好的num3数组
65     for (int i = 0; i < lenght3; i++) {
66         printf("num3[%d] = %d,", i, num3[i]);
67     }
68
69     return 0;
70 }
时间: 2024-10-23 18:21:31

蓝鸥C语言学习第四天的相关文章

蓝鸥C语言学习第二天

今天主要学习了,if语言和switch语句,下面直接进入正题.C语言为我们提供了3种流程控制结构,分别为:顺序结构,选择结构,循环结构. 顺序结构:默认的流程结构.按照书写顺序执行每一条语句. 选择结构:对给定的条件进行判断,根据不同的结果执行不同的代码断. 循环结构:对给定条件成立的情况下,反复执行某一代码断. 3种流程图如下: 一.顺序结构 1 int main(){ 2 3 printf("hello world!\n"); 4 5 printf("I like iOS

蓝鸥C语言学习第三天

今天主要学习了循环结构 循环结构1-while循环   格式如下: 1 while ( 条件 ) 2 { 3 语句1; 4 语句2; 5 .... 6 } 1)如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号{}中的内容).然后再次判断条件,重复上述过程,直到条件不成立就结束while循环 2)while循环的特点:如果while中的条件一开始就不成立,那么循环体中的语句永远不会被执行 例如: 1 /* 2 输出十次hello world 3 */ 4 int main(

蓝鸥零基础学习HTML5—html+css基础

蓝鸥零基础学习HTML5-html+css基础 一.课程目标 1.了解前端开发职位:2.掌握常用标签以及语义及用法:3.掌握常用css的特性,掌握基础布局技巧:4.掌握整站规划概念. 二.适用人群 零基础积极学习html5者 三.课程简介 本课程主要讲解了 html+css的基础知识,包括html模板.标签.css基础样式.布局.表格表单.整站等等,是进行前端开发的基础.Html+css是前端开发的基础,大部分前端开发工程都需要从html+css布局开始,html+css的基础非常重要,是前端开

蓝鸥零基础学习HTML5第九讲 兼容性五

蓝鸥零基础学习HTML5第九讲 兼容性五 1.兼容性13 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> .box { width:400px; } .left { float: left; } .right { float: right; width:400px; } </s

蓝鸥零基础学习HTML5第九讲 兼容性六

蓝鸥零基础学习HTML5第九讲 兼容性六 1.兼容性16 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> .box { width:200px; height:200px; border:1px solid #000; position: relative; } .box span

蓝鸥零基础学习HTML5第九讲 兼容性一

蓝鸥零基础学习HTML5第九讲 兼容性一 1.兼容性到底是什么玩意 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> #box { width:400px; } .left { width:200px; background: red; height:300px; float:left

蓝鸥零基础学习HTML5第九讲 兼容性二

蓝鸥零基础学习HTML5第九讲 兼容性二 1.兼容性4 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> p { width:100px; height:100px; background: red; } </style> </head> <body>

蓝鸥零基础学习HTML5第九讲 兼容性七

蓝鸥零基础学习HTML5第九讲 兼容性七 1.兼容性19 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> body { background: #000; } .box { width:400px; height:400px; background: url("img/1.

蓝鸥零基础学习HTML5第九讲 兼容性三

蓝鸥零基础学习HTML5第九讲 兼容性三 1.兼容性7 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .box { background: red; zoom:1; } .div { width:200px; height:200px; ba