文章目录
数组
要存储1-10的数字,怎么存储?
用变量?十个变量?太麻烦了!
C语言中给了数组的定义:一组相同类型元素的集合
数组的创建
数组的创建方式
type_t arr_name [const_n];
type_t 是指数组的元素类型
const_n 是一个常量表达式,用来指定数组的大小
数组创建的实例
//代码1
int arr1[10];
//代码2
int count = 10;
int arr2[count];//数组时候可以正常创建?
//代码3
char arr3[10];
float arr4[1];
double arr5[20];
数组的初始化
先看一下变量的初始化
int i;//定义
int a = 0;
float b = 1.1;
char = 'A';
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。
看代码:
int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};
char arr4[3] = {'a',98, 'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";
数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容来确定。
但是对于下面的代码要区分,内存中如何分配。
char arr1[] = "abc";
char arr2[3] = {'a','b','c'};
数组的使用
数组的下标
这里介绍一下操作符:[ ]
这是下标引用操作符,我们可以通过它来对数组的每一个元素进行访问。
- 数组是使用下标来访问的,下标是从0开始。
- 数组的大小可以通过计算得到。
比如:
#include<stdio.h>
int main()
{
int a[10] = { 0 };
a[0]++;
a[1]--;
a[3] = a[2] + a[0];
printf("%d %d %d\n",a[1],a[2],a[3]);
return 0;
}
请问下列代码运行结果如何?
数组的遍历
遍历是数据结构中的一种术语。即沿着某条搜索路线,依次对每个元素均做一次且仅做一次访问。
#include <stdio.h>
int main()
{
int arr[10] = {0};//数组的不完全初始化
//计算数组的元素个数
//int sz = sizeof(arr)/sizeof(arr[0]);
//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:
int i = 0;//做下标
for(i=0; i<10; i++)//这里写10,好不好?
{
arr[i] = i;
}
//输出数组的内容
for(i=0; i<10; ++i)
{
printf("%d ", arr[i]);
}
return 0;
}
函数
函数是什么?
数学中我们常见到函数的概念。但是你了解C语言中的函数吗?
百科上是这样解释的:
在计算机科学中,子程序(英语:Subroutine, procedure, function, routine,
method,subprogram, callable unit),是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
这一题选B。一个C程序由一个主函数和若干个其他函数组成。若干个的意思就是可以有0个及以上个。c语言的程序模块称为函数。
模块化程序设计是将一个大的任务分解成若干个小任务,再将小任务分解成更小的任务,直到每一个任务都只完成一个独立功能。这样的每个任务都叫做模块,c语言中模块是用函数来实现。
函数的作用
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
int z = x+y;
return z;
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = Add(num1, num2);
printf("sum = %d\n", sum);
return 0;
}
函数的特点就是简化代码,代码复用。
函数的参数
实际参数(实参):
真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形
参。
形式参数(形参):
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数
中有效。
比如:
#include <stdio.h>
int Add(int x, int y)
{
int z = x+y;
return z;
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = Add(num1, num2);
printf("sum = %d\n", sum);
return 0;
}
这里的num1,num2是实参,x,y是形参。
函数的调用
传值调用
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
如:
int Add(int x, int y)
{
int z = x+y;
return z;
}
传址调用
传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。
如
void swap (int* pa,int* pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
练习
1.将上节课乘法口诀表改成函数版本
要求:实现一个函数,打印乘法口诀表,口诀表的行数和列数可以自己指定
如:输入9,输出9 * 9口诀表,输出12,输出12 * 12的乘法口诀表
2.你是天才吗?
3.被5整除问题
4. printf的返回值
5.计算体重指数