C语言(二)数组和函数

1.一维数组

1.一维数组的定义格式为:
类型说明符 数组名[常量表达式]; 例如: int a[10];
它表示定义了一个整形数组,数组名为a,有10个元素。
2.在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。
3.常量表达式中可以包括常量和符号常量,但不能包含变量

在这里插入图片描述

2.``冒泡法,选择法。

#include<stdio.h>            //冒泡法
int main()
{
	int i,j;
	int a[10] = {0};
	for(i = 0; i < sizeof(a) / sizeof(a[0]); i++);
	{
		scanf("%d", &a[i]);
	}
	for(i=0; i < sizeof(a) / sizeof(a[0])- 1; i++)
	{
		for(j = 0; j < 10 - i - 1;j++)
		{
			if(a[j] > a[j+1])
			{
			int tmp = a[j];
			a[j] = a[j+1];
			a[j+1] = tmp;
			}
		}
	}
	for(i = 0; i < 10; i++)
	{
	printf("%d", a[i]);
	}
	print("\n");
	return 0;
}
#include<stdio.h>     //选择法
int main()
{
	int a[10];
	int i ,j;
	for(i = 0; i < 10; i++)
	{
		printf("please input ten number:\n");
		scanf("%d", &a[i]);
	}
	for(i = 0; i < 8 - 1; i++)
	{
		for(j=0; j < 10;j++)
		{
			int t;
			if(a[i] > a[j])
			t = a[i];
			a[i] = a[j];
			a[i] = t;
			}
		}
		for(i = 0; i < 10; i++)
		{
			printf("%d\n",&a[i]);
		}
		return 0;
	}

3.二维数组

a[2][3]={{1,2,3},{4,5,6}};
= | 1 2 3 |
| 4 5 6| a[0][0]=1 ,a[2][1]= 4
在这里插入图片描述
a[1] + 1 // a[1]数组第二行的首行首元素, +1 数组第二行的第二个元素 就是 a[1][1]
&a[1][1] // 取a[i][i]的地址
(*(a + 1)) +1 // (a + 1) = a[1] 取内容
a+ 5 // 首行地址 +5

4.字符数组

在这里插入图片描述
为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”——‘\0’。

输出字符不包括结束符′\0′ , 如果一个字符数组中包含一个以上′\0′,则遇第一个′\0′时输出就结束。
在这里插入图片描述
strcat函数
其一般形式为:strcat(字符数组1,字符数组2)
Strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个
strncat :eg:strncat (a, “1234567”,2)只连接到字符串“12”,后面不连接。
函数值——字符数组1的地址。
strcpy: 拷贝的作用(字符串)
strncpy : (字符)eg:strncpy (a,b,3) 只拷贝标数组的3个字符到a数组里
strcmp : 比较字符串大小
strncmp : 和上述一样,只比较到 n位。

比较的结果由函数值带回
(1) 如果字符串1=字符串2,函数值为0。
(2) 如果字符串1>字符串2,函数值为一正整数。
(3) 如果字符串1<字符串2,函数值为一负整数。
注意:对两个字符串比较,不能用以下形式:
if(str1>str2)
printf(″yes″);
而只能用
if(strcmp(str1,str2)>0)
printf(″yes″);

**strchr函数
函数原型:char strchr(const char s, int c);
函数功能:查找字符c在s指向的字符串中首次出现的位置。
例如:char str[32] = “helloworld”;
strchr(str, ‘o’) - str;
结果是4。

6.字符数组的位置编程

字符数组中在指定位置插入字符

在这里插入图片描述
char str[32]是初始化,
length是有输入进去的字符串,不是str[32]
数组的插入是向右移动的,是从最右边开始进行移动的。

7.函数调用及定义

eg:冒泡法
原程序:```

#include<stdio.h>            //冒泡法
int main()
{
	int i,j;
	int a[10] = {0};
	for(i = 0; i < sizeof(a) / sizeof(a[0]); i++);
	{
		scanf("%d", &a[i]);
	}
	for(i=0; i < sizeof(a) / sizeof(a[0])- 1; i++)
	{
		for(j = 0; j < 10 - i - 1;j++)
		{
			if(a[j] > a[j+1])
			{
			int tmp = a[j];
			a[j] = a[j+1];
			a[j+1] = tmp;
			}
		}
	}
	for(i = 0; i < 10; i++)
	{
	printf("%d", a[i]);
	}
	print("\n");
	return 0;
}
```
可以用函数调用的方式改为:

在这里插入图片描述 在这里插入图片描述
在这里插入图片描述
调用函数的步骤:
1.通过函数名找到函数入口地址
2.给形参分配空间
3.传值(值传递,地址传递)
4.执行函数
5.返回
6.释放栈空间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值