这一周的话,主要学习了数组相关的知识,简单的了解了变量类型和存储地址,数组的越界以及数组的调用,还包括二维数组的一些基本的知识。这周学习的知识虽然挺简单,但是碰到一些实例的话,不太会想到去用数组这个东西,可能是对这方面还是不是很熟练,自己可以通过一些实例的联系来增强对这方面的了解。
二维数组的话,主要是解决行和列的数据的处理。定义二维数组一般的形式是
int a[3][4];//比如。这是一个三行四列的数组
需要注意的是数组里面的常量表达式不能是变量,而且数组的擦汗高难度必须是确定的。
数组越界:数组是有固定的长度的,如果长度超过数组的固定长度,那么就视为越界越界是一件很麻烦的事。
数组的调用
将数组传递给函数:
主函数
被调函数名(实参数组名 实参数组大小)
被调函数
被调函数名(形参数组名 形参数组大小)
函数名(形参 类型 形参类型)
实例
输入0-511之间任意地一个数,让他以二进制形式输出出来,H代表0,T代表1
#include <stdio.h>
void change(int b[][3],int n);
int main(){
int num;
int i,j;
int a[3][3]={0};
// int b;
printf("请输入一个0-511之间的数:\n");
scanf("%d",&num);
// printf("%d",num);
for(i=0;i<3;i++){
for(j=0;j<3;j++){
a[i][j]=num%2;
num/=2;
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
change(a,3);
//新增
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(a[i][j]==0)
printf("H ");
else
printf("T ");
}
printf("\n");
}
return 0;
}
void change(int b[][3],int n){
int i,j;
int c; //定义一个变量用来作为媒介
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==1&&j==1){ //因为是三行三列的数组,所以转换时候中间的值是不用再次进行转换的所以遍历到中间数时就会返回
return ;
}
else{
c=b[2-i][2-j];//将最后一个元素赋给空置
b[2-i][2-j]=b[i][j];//将第一个元素的值赋给最后一个元素
b[i][j]=c;// 将空值里面的值赋给第一个元素
// printf("%d ",a[i][j]);
}
}printf("\n");
}
}
输入一个NxN的一个数组,自动赋值,然后使其左下角重置为0.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
unsigned n;
int fun(int a[][n],int n);
int main(){
int i,j,num;
printf("请输入二维数组规模:\n");
scanf("%d",&n);
int a[n][n];
srand((unsigned)time(NULL));
// for(i=0;i<n;i++){
// for(j=0;j<n;j++){
// a[i][j]=rand()%9+1;
printf("%d ",a[i][j]);
// }
// printf("\n");
// }
fun(a,n);
return 0;
}
int fun(int a[][n],int n){
int i, j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
a[i][j]=rand()%9+1;
if(i> j){
a[i][j]=0;
}
printf("%d ",a[i][j]);
}
printf("\n");
}
}