一、函数
1.什么是函数:
函数是一块代码,接受零个或多个参数,做一件事情,并返回零个或一个值
示例:
void sum(int begin,int end) //函数头,其中void是返回类型,sum是函数名
{ //int begin,int end是参数表
int i,sum=0; //其中()起到了表示函数调用的重要作用,即使没有参数也需要
for(i=begin;i<=end;i++){ //给出正确的数量和顺序的参数
sum+=i;
}
printf("%d到%d的和是%d\n,begin,end,sum"); //函数体
}
int main() //调用函数
{
sum(10,20);
return 0;
}
(1).先对函数定义,再调用函数;如果先调用函数再对函数定义则需要在头文件下声明函数类型
(2).在调用函数时给的值与参数的类型不匹配时会发生数据类型的自动转换
(3).形式参数:函数参数表中的参数
实际参数:调用函数时给的值(过去的称呼,参加运算的不是变量而是给定的值)
(4).每个函数有自己的变量空间,参数也位于这个独立的空间内,和其他函数没有任何关系
(4).本地变量/局部变量(local variable):函数每次运行所产生的一个独立的变量空间中的变量,这个变量也是这次运行独有的,称作本地变量,其中定义在函数内部的变量和参数也是本地变量
(5).变量的生存期:什么时候这个变量出现到什么时候这个变量消亡
变量的作用域:在代码的什么范围内可以访问这个变量(这个变量起作用)
对本地变量来说,生存期和作用域都在大括号内{}代码块
例:代码块内的变量只在代码块内存在及起作用,在代码块外无法存在及起作用;而代码块外的 变量可以在代码块内存在及起作用;当代码块外和代码块内都有相同变量时,代码块内的变 量优先级高于于代码块外的相同变量
2.函数的运用:在给定的正整数区间[m,n]内求素数的个数并求和
#include<stdio.h>
#include<math.h>
int prime(int n);//函数的声明
int main()
{
int m,n,i,count=0,sum=0;
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++) //依次判断区间内的数是否为素数
{
if(prime(i)==1) //调用函数判断此数是否为素数
{
count++;
sum+=i; //若是则个数+1,总数加上此数
}
}
printf("%d %d",count,sum);
}
int prime(int n) //判断一个给出的数是否为素数,若是则check==1,否则check==0
{
int i,check=1;
if(n==1) //1既不是素数也不是合数
{
check=0;
}
else
{
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
check=0;
break;
}
}
}
return check;
}
二、数组
1.定义数组:<类型>变量名称[元素数量];其中元素数量必须是整数;数组的地址为第一个单元的地址
如:int grades[100]; double weight[20];
变量名称[元素]即为每个单元,如a[0]、a[1]、a[2],每个单元就是一个int类型的变量,其中 []里的数字被称为下标或索引,从0开始
2.数组的初始化:
将数组的每个单元进行初始化
int a[10]={1,2,3,4,5,6,7,8,9,10}
int a[10]={1,3} //数组的前两个单元是1和3,剩下的单元未被初始化则默认为0
int a[ ]={1,2,3,4,5,6,7,8,9,10} //也可以在数组定义时将数组初始化,其中[ ]里如果没有数组 的长度,默认为{}里的长度大小
3.数组的赋值:
(1). 数组本身不能赋值,如下图是错误的
int a[ ]={2,4,6,7,1,3,5,9};
int b[ ]=a;
数值之间的复制必须通过遍历完成,如
for (i=0;i<length;i++){ //其中length是数组的长度不是下标
b[i]=a[i];
}
4.二维数组:
int a[3][4]含义为3行4列的矩阵
二维数组的初始化:数据类型[行数][列数]={{数据一,数据二},{数据三,数据四}};也可以只用一 个{},里面的数据先读第一行的,再读下一行,不够则默认为0
例:将一个3*4矩阵转置成一个4*3矩阵
#include <stdio.h>
int main()
{
int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //定义数组a并初始化
int b[4][3] = {}; //定义新的数组存储置换后的字符
for (int i = 0; i < 3;i++)
{
for (int j = 0; j < 4; j++)
{
printf("%-2d ",a[i][j]); //输出原矩阵
b[j][i] = a[i][j]; //置换数组
}
printf("\n");
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", b[i][j]); //输出置换后的矩阵
}
printf("\n");
}
}
运行结果:
注: 学习资源来自翁恺