粤嵌学习笔记(六)

数组

int a , b , c , d , e ,

数组:

什么是数组?
一组具有相同数据类型的 数组有序的集合

一维数组
二维数组

字符数组

数组属于构造类型 ,
什么是构造类型?
不能直接使用 , 需要我们自己定义

int , short char

char a;

这些是可以直接使用的

1、一维数组

定义语法:
类型说明符 数组名[整形表达式]

例如:
int a[10];

数组名:
a

数组名的命名规范:
int a rray[10]; 错

C语言的标识符的规定

数字、下划线、字母组成
数字不能开头

int a[10];

数据类型为 int , 数组容量为 10 一个数组名为a的数组

数组如何引用:
通过下标;
例如:
引用第一个元素:
a[0];
引用最后一个元素:

a[9];

数组为什么是一个有序的集合:
有序指的不是元素大小的有序
而是数组各个元素的存储地址的有序

一维数组的初始化特性:
int a[] = {1,2,3,4};

int a[10] = {1,2,3,4};
//初始化不完整的数据
//其余数据编译器默认为 0

练习:
手动输入一个容量为 6 的int 数据类型的数组
求出这个数字元素的最大值
并打印出来

//冒泡排序
#include<stdio.h>
int main(void )
{
    
    
    int i,j,t;
    int str[6] ;
	for (int a = 0; a < 6; a++)
	{
    
    
		scanf("%d",&str[a]);
	}	
    for(i=0;i<5;i++)   
	{
    
    
		for(j=0;j<5-i;j++)  
		{
    
    
			if(str[j]>str[j+1])  
			{
    
    
				t=str[j];
				str[j]=str[j+1];
				str[j+1]=t;
			}
		}
	}
    printf("%d",str[5]);
}

int a[6] ;
int max = -(255255255*255) ; //int 占 4 个字节 , 一个字节 8 bit -255 ~ 255
for(int i = 0 ; i < 6 ; i++)
{
scanf("%d" , &a[i]);
}

for(int i = 0 ; i < 6; i++)
{
if(a[i] > max)
{
max = a[i];
}
}
printf(“max = %d\n” , max);

二维数组

假设
我要定义一个数组 int a[10];
保存一个同学十门科目的成绩

但是:
我们一个班有55为同学

如何去保存 55 位同学的10门科目的成绩

int a[10];
int b[10];
·········

很明显 , 效率很低

二维数组:
int a[55][10];

二维数组的定义语法:

数据类型 数组名[行大小][列大小]

例如:
int a[3][4];
按行进行保存的
int a[3][4] = {1 , 2 , 3, 4 ,5 ,6 ,7 ,8 ,9 , 10 ,11 , 12};

数学当中的矩阵:

1 2 3 4
5 6 7 8
9 10 11 12

二维数组的引用:

例如:
引用第二行第二列的元素

是 a[2][2] 吗

并不是

应该是这样 a[1][1]; 才对
因为 数组下标是从 0 开始

a[3][3];//就会显示段错误

//非法访问

比较合适 ,容易能够分辨得出几行几列的初始化方法

int a[3][4] = { {1 , 2 , 3 , 4},{5 ,6 ,7 ,8},{9 , 10 , 11 ,12}};

练习:

初始化一个二维数组
手动输入二维数组的每一个元素
依次安装矩阵打印的方式打印出来

#include<stdio.h>
int main()
{
    
    
    int i,j;
    int a[3][3] = {
    
    {
    
    1,2,3,},{
    
    4,5,6},{
    
    7,8,9}};
   // printf("输入六个数:");
    for ( i = 0; i < 3; i++)
    {
    
    
        for ( j = 0; j < 3; j++)
        {
    
    
            printf("%2d",a[i][j]);
        }
        printf("\n");
    }   
}

字符数组(字符串)

字符数组和普通的数组有什么区别:
没什么区别,只是它保存的数据类型 是字符型 比如 ‘h’

定义:
例如:
char a[10];

定义并初始化:
例如:
char a[5] = {‘h’ , ‘e’ , ‘l’ , ‘l’ , ‘o’};

更方便的方式:

char a[] = “hello”;

---->>>>>> char a[5] = “hello”; 这是错误的初始化方式 , 因为它会不确定 ,

char * str = “hello”;

它保存我们的常量区 ,因为他就是一个常量

引用:
用下标

打印:
可以用循环
for()
{

}
但是::
我们都会用 “%s”
printf("%s" , 数组名 );

转义字符:
字符串在打印的过程中
是如何结束打印
‘\0’;

"%s"按照字符串的首地址依次进行向后打印
遇到‘\0’才结束打印


函数

问题的引入:
打印数组元素的循环

也会存在需要很多次去打印不同的不同容量的数组

意味着我们是不是要写很多个
for循环

for(int i = 0 ; i < n ; i ++)
{
打印数组
}

·················
················
···············
·················

上面的代码呢功能是一样的1 , 我们能不能只写一份
用的时候,再去 “调用”

#include <stdio.h>
int main()
{
printf(“hello world\n”);
}

函数

function 《- 功能

c语言中函数是指对完成某个特定功能的代码块的封装

封装 ???
把完成某个特定功能的代码 , 放在一个 {} 内

结构化程序设计者主张把一个大的任务分为多个函数去实现

比如:
我们实现一个项目

完成用户登录账号的大致分为以下几个功能

1、弹出界面
2、获取到用户输入的账号 , 密码
3、通过网络通信传输 后端服务端接受到 账号密码
4、对用户输入的信息进行查询 确认
5、对查询结果的处理

封装函数
定义函数的语法:

函数返回值类型 函数名(形参的参数列表)
{
代码块;//完成该任务需要的代码
}

函数的返回值类型 , 只要是C语言中合法的类型即可

比如: int void float ·············

形参列表:
根据实际情况 , 形参列表可以为多个 , 也可以为 0 个

如果为多个 , 就用 , 进行隔开 ,
如果为0 个 , 就空着不写

(形参类型1 形参名1 , 形参类型2 形参名2 , ·············)
()

函数名:
符合C语言的标识符
见名思义
排序功能的函数 , sort --》 排序
打印数组功能的函数 , 函数名 : show_array 或者 printf_array

如何在定义函数中最后返回一个数据类型的值
return 表达式

函数的调用:

无返回值函数的调用:
函数名(实参(根据形参而定));

有返回值函数的调用:
函数返回值类型 变量名 = 函数名(实参(根据形参而定));

练习:
定义一个函数 , 通过形参的传入 , 实现两个整数之和 , 并返回

#include<stdio.h>
int main()
{
    
    
  int i , j ,a;
  scanf("%d%d",&i,&j);
  a =sum(i,j);
  printf("%d",a);
}
int sum(int a,int b){
    
    
     return a + b;
  }

猜你喜欢

转载自blog.csdn.net/qq_40843903/article/details/112253379