0721 变量作用域 数组应用

知识累计

1. 长度换行

1.1宏定义换行

        正常在80个字符,超过用'\'换行

#define SIZE a>b ? a :b\
            a>c ? a : c 

1.2数组换行

        直接换行就行,他在'{}'内

int arr[10]{1,2,3,4,5
            ,6,7,8,9,10}

2.单个数组元素传递,不影响数组元素的值

#include <stdio.h>

int main()
{
	int arr[2][3]={{1,2,3},{11,22,33}};
	printf("%d\n",arr[1][2]);
	gai(arr[1][2]);
	printf("%d\n",arr[1][2]);
	return 0;
 } 
 
 void gai(int a)
 {
 	a=100;
 	printf("%d\n",a);
 }

将arr[1][2]的值传递给另一个函数,在另一个函数中改变其值,不影响主函数中数组中对应的值

结果:

 3.头文件及函数

#include <stdio.h>
#include "man.h"

        <>表示的头文件,属于系统包含

        “”所表示的头文件,属于用户自己定义

        main函数,在C语言中,有且只有一个,并且是入口函数;函数之间是平等的。

4.变量

4.1变量定义

4.1.1在函数的开头定义

4.1.2在函数内定义

4.1.3在复合语句定义

4.1.4在函数的外部定义

4.2局部变量及全局变量

4.2.1局部变量:不影响其他范围恩定义时,重命名冲突,命名灵活,使用方便

(函数内部定义、复合语句定义)

4.2.2全局变量作用:可以增加函数间的数据联系渠道(因为函数调用只能拿到一个return结果)

(在函数的开头、函数的外部定义)

全局变量如果定义在函数外部:

                1)在函数之前,可直接调用

                2)在函数之后,利用extern 声明这个函数后面的全局变量

#include <stdio.h>

int gan=100;
int main()
{
	extern wei;        //声明这个函数之后的全局变量wei
	printf("%d\n",gan);
	printf("%d\n",wei);
 } 
 
 int wei=1011;

4.3 变量存储方式

4.3.1动态存储方式与静态存储方式

        静态存储方式:程序运行期间由系统分配固定分储存空间

        动态存储方式:程序运行时根据需要进行动态分配存储空间

        一般来说,内存共用户使用的存储空间,分为三部分:程序区、静态存储区、动态存储区

程序区 可执行代码     只读
静态存储区全局变量、静态局部变量可读写
动态存储区函数形参、函数内定义的变量、函数调用时保护现场和返回地址可读写

4.3.1存储类别

4.3.1.1局部自动变量(auto变量):存储在动态存储区

4.3.1.2局部静态变量(static变量):存储在静态存储区

4.3.1.3寄存器变量(register变量):存储在CPU中的寄存器中

4.3.1.4全局变量(auto变量&static变量):存放在静态存储区

4.3.1.5宏定义的参数跟const定义的参数不可改变

#include <stdio.h>
#define SIZE 10

int main()
{
	const int a=111;
	SIZE+=10;
	a+=1;
	printf("%d\n",SIZE);
	printf("%d\n",a);
 } 

结果:

 改变就会报错

注释后,正常运行

#include <stdio.h>
#define SIZE 10

int main()
{
	const int a=111;
//	SIZE+=10;
//	a+=1;
	printf("%d\n",SIZE);
	printf("%d\n",a);
 } 
 

结果:

作业

1. 把0-511用二进制表示出来,并用3*3的矩阵表示出来,且0用H表示,1用T表示

#include  <stdio.h>
void pai(int arr[3][3],int a,int b,int c);

int main()
{
	int arr[3][3]={0};
	int num;
	printf("请输入你要查看的矩阵号码(0-511):");
	scanf("%d",&num);
	pai(arr,3,3,num);
	return 0;
}

void pai(int arr[3][3],int a,int b,int c)
{
	int i,j;
	for(i=0;i<a;i++){
		for(j=0;j<b;j++){
				arr[a-i-1][b-j-1]=c%2;
				c/=2;
			}			
		}
	
	for(i=0;i<3;i++){
 		for(j=0;j<3;j++)
 			printf("arr[%d][%d]=%d ",i,j,arr[i][j]);
 		printf("\n");
	 }	
	for(i=0;i<3;i++){
 		for(j=0;j<3;j++){
 			if(arr[i][j]==0)
 				printf("H ");
 			else
 				printf("T ");
		 }
 		printf("\n");
	 }
}

2.一个M*N矩阵,且左下半三角元素为0

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void ling(int arr[5][5],int a,int b);

int main()
{
	int arr[5][5]={0};
	int i,j;
	srand((unsigned)time(NULL));
	for(i=0;i<5;i++){
 		for(j=0;j<5;j++)
 			arr[i][j]=rand()%9+1;
	}
	for(i=0;i<5;i++){
 		for(j=0;j<5;j++)
 			printf("arr[%d][%d]=%d ",i,j,arr[i][j]);
 		printf("\n");
	}
	ling(arr,5,5);
	return 0;
}

void ling(int arr[5][5],int a,int b)
{
	int i,j;
	for(i=0;i<5;i++){
 		for(j=0;j<5;j++){
 			if(i>j)
 			arr[i][j]=0;
		 }
	}
	for(i=0;i<5;i++){
 		for(j=0;j<5;j++)
 			printf("%d ",arr[i][j]);
 		printf("\n");
	}	
	
}

3.在一个4*4矩阵随机填入0或1,打印矩阵,找到第一个1最多的行跟列

#include <stdio.h>
void tongji(int arr[4][4],int a,int b);

int main()
{
	int arr[4][4]={0};
	int i,j;
	srand((unsigned)time(NULL));
	for(i=0;i<4;i++){
 		for(j=0;j<4;j++)
 			arr[i][j]=rand()%2;
	}
	for(i=0;i<4;i++){
 		for(j=0;j<4;j++)
 			printf("%d ",arr[i][j]);
 		printf("\n");
 	}
 	tongji(arr,4,4);
	return 0;
}

void tongji(int arr[4][4],int a,int b)
{
	int i,j,max=0;
	int hang=0,lie=0;
	for(i=0;i<4;i++){
		int	count1=0;
 		for(j=0;j<4;j++){
 			if(arr[i][j]==1)
 			count1++;
		}
		if(max<count1){
			max=count1;
			hang=i;
		}	
	}
	printf("第%d行1最多\n",hang);
	max=0;
	for(i=0;i<4;i++){
		int	count2=0;
 		for(j=0;j<4;j++){
 			if(arr[j][i]==1)
 			count2++;
		}
		if(max<count2){
			max=count2;
			lie=i;
		}
	}
	printf("第%d列1最多",lie);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值