二维数组/多维
- 定义
int a [n] [n]n[] - 赋值定义
int b[n] [2] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , ... , 2n }
int b[n] [n] = { { } , { } , { } , ... }
int int b[ ] [n] = { { } , { } , { } , ... }
int b[ ] [2] = { 1 , 2 , 3 , ... }
可缺省:值、除末维的其他维大小
- 访问
a [i] [i]
二维字符数组
char a [ ] [ ]
char a[5][5]={{'a','b','c'},{'a','b',...},...}
char a[5][10]={"hello","world"}
scanf("%s",a[n])
函数
-
定义:
返回类型 函数名 ( 参数列表 ){ 函数体 ; return 值}
可以无返回类型、参数列表、return 值 -
调用:
函数名(参数) -
void类型
void 函数(void){//无return值,要结束只写一个return} -
注意
有参数必须要传参
练习
编写一个函数,输入一个数,返回绝对值
#include<stdio.h>
int abso(int);
int main(){
int a;
int b;
scanf("%d",&a);
b=abso(a);
printf("%d",b);
return 0;
}
int abso(int a ){
if(a<0)
a=a*-1;
return a;
}
传入两个数,判断两个数的大数,返回大数
#include<stdio.h>
int compare(int ,int);
int main(){
int a,b;
scanf("%d %d",&a,&b);
int c=compare(a,b);
printf("%d\n",c);
return 0;
}
int compare(int a ,int b){
if(a>=b)
return a;
else
return b;
}
数组参数
形参写 a[10] 或 a[ ] ,传值写 a
传递过去的是数组的地址,所以
实参会随形参改变
断点调试以下代码可看出s作为地址被指针指向,改变s[0]的值实际上是改变地址为&s[0]的值,但该地址也为a[0]的值,所以改变值是改变该地址上的值,与作用域无关
#include<stdio.h>
void changearr(int s[]){
s[0]=5;
}
int main(){
int a[5]={1,2,3,4,5};
changearr(a);
return 0;
}
作业
- 传⼊⼀个数组,获取数组中的最⼤值,返回最⼤值
#include<stdio.h>
int mysort(int a[]){
int flag=a[0];
for(int i=0;i<5;i++){
for(int j=i;j<5;j++){
if(flag<a[j]){
i=j;
flag=a[j];
}
}
}
return flag;
}
int main(){
int a[5]={5,5,5,5,5};
int max = mysort(a);
printf("max:%d",max);
return 0;
}
- 编写⼀个函数计算字符串的⻓度(到’\0’为止)如:str[] = “hello world”;
注意:scanf输入空格会自断。
#include<stdio.h>
int posnum(char a[]){
int cout=0;
for(int i=0;a[i]!='\0';i++){
cout++;
}
return cout;
}
int main(){
char a[100]="hellow world";
int num=0;
//scanf("%s",a);
num=posnum(a);
printf("%d",num);
return 0;
}