学习嵌入式的第九天-------重点考察函数以及二维整型数组和二维字符数组

数据结构 + 算法

数据的组织形式

1.字符串数组 

//字符数组

2.字符串

最终在计算机中 是按照字符数组的形式(数组的特点)储存;字符串最终一定时一'\0'作为结束标志。

3.定义一个字符串

char  s[10]={ };

char  s[10]="hello";

4.输入字符串

cgar  *strcat (char  *dest,const  char *src);

功能:对字符的拼接

参数:

@dest  目标字符串

@src 源字符串

返回值:

成功返回的是dest  失败的话UNLL

比较两个字符串的大小

字符串比较的规则与其他语言中的规则相同,即:
对两个字符串自左至右逐个字符相比(按ASCII 码值大小比较),直到出现不同的字符或遇到'\0' 为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。

#include 

int main(void)
{

	int i=0;

	char s1[20];
	char s2[20];
//	gets(s1);
//	gets(s2);
    scanf ("%s %s",s1,s2);

	while (s1[i]!=0 || s2[i]!=0)
	{
		if(s1[i]==s2[i])
		{
			++i;
			printf("%s=%s\n",s1,s2);
			break;
		}else if(s1[i]>s2[i])
		{
			printf("%s>%s\n",s1,s2);
			break;
		}else
		{
			printf("%s>%s\n",s2,s1);
			break;
		}
	}

	return 0;
}

比较两个字符串的大小也可以用到一个函数:

int strcmp(   )

功能:比较两个字符串的大小

几个重点考察函数

puts()

  其作用是将一个字符串(以'\0'结束的字符序列)输出到终端。假如已定义str是一个字符数组名,且该数组已被初始化为"China"。则执行:puts(str)其结果是在终端上输出“China”。由于可以用printf函数输出字符串,因此 puts函数用的不多。

  用puts函数输出的字符串中可以包含转义字符。例如:
char str[]={"China\n Bei jing"};
puts(str);

输出:China

        Bei jing
在输出时将字符串结束标志'\0'转换成'\n',即输出完字符串后换行。

gets()

  其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。如执行下面的函数:
gets(str)
从键盘输入:Computer

  将输人的字符串"Computer"送给字符数组str(请注意,送给数组的共有9个字符,而不是8个字符),函数值为字符数组str的起始地址。一般利用gets函数的目的是向字符数组输入一个字符串,而不大关心其函数值。
注意:用puts 和gets函数只能输出或输入一个字符串,
不能写成
puts(str1,str2)  或  gets(str1,str2)

strcat(字符数组1,字符数组2)

  strcat是 STRing CATenate(字符串连接)的缩写。其作用是连接两个字符数组中的字符串,把字符串⒉接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。例如:

char str1[30]={"People's Republic of " };

char str2[ ]一 {"China" };
printf ("%s",strcat(str1,str2));

输出:
People's Republic of China

说明:1.只要字符数组1的空间足够大,就能便于容纳更多新的字符串

           2.两个字符串都有'\0',连接时将字符串1后面的'\0'取消掉,在连接之后的新的字符串的后面加上'\0'。

strcpy(字符串1,字符串2)

即(目标字符数组,源字符数组)

  它是”字符串复制函数“,就是将字符串2复制到字符数组1中去,例如:

学习嵌入式的第九天-------重点考察函数以及二维整型数组和二维字符数组_第1张图片

说明:1.只要字符数组1的空间足够大,就能便于容纳更多新的字符串。同时字符数组1的长度不应小于字符串2的长度。

           2.”字符数组1“也必须写成数组名形式;”字符串2“可以是数组名,也可以是一个字符串常量。比如:strcpy(str1 ,"China") ;

           3.如果在复制前未对strl数组赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后的'\0'一起复制到字符数组1中,取代字符数组1中的前面6个字符,最后4个字符并不一定是斜杠零,而是strl中原有的最后4个字节的内容。

           4.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法的:例如:

str1="China";和strl=str2;

而只能用strcpy函数将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。

           5.可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中去。例如

                     strncpy(strl,str2,2);

作用是将str2中最前面⒉个字符复制到str1中,取代strl中原有的最前面2个字符。但复制的字符个数n不应多于str1中原有的字符(不包括'\0')。

strcmp(字符串1,字符串2)

  作用是比较字符串1和字符串2。

说明:字符串比较的规则与其他语言中的规则相同,即对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到′1o'为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。

比较的结果由函数值带回。
(1)如果字符串1一字符串2,则函数值为0。

(2)如果字符串1>字符串2,则函数值为一个正整数。

(3)如果字符串1<字符串2,则函数值为一个负整数。

strlen(字符数组)

  它是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括'\0'在内)。

strlwr(字符串)和 strupr(字符串)

注意:在linux下没有这两个函数

strlwr是将字符串中的大写字母换成小写字母

strupr是将字符串的小写字母换成大写字母

二维整型数组

一般表选型形式:

类型说明符  数组名 【常量表达式1】【常量表达式是2】

说明:

1.在c语言中不存在真正的二维数组,都是一维数组

2.二维数组其实就是一维数组中的一维数组

二维数组中:  行   列

int a[3][4];对应的就是三行四列   其中a是数据类型 

学习嵌入式的第九天-------重点考察函数以及二维整型数组和二维字符数组_第2张图片

二位数组的初始化:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};     //这种形式就是全部初始化

int a[3][4]={1,2,3,4,5,6,7};   //这种形式就是部分初始化

int a[3][4]={{1,2,3,4},{5,6,7,8}};     //这种格式是按行初始化

练习:

定义一个二维数组 int a[3][4];初始化一下 求出能被3整除的数 

#include 

int main(void)
{

    int i=0;
	int j=0;

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

	for(j=0;j<3;++j)
	{
		for(i=0;i<4;++i)
		{
			if (a[j][i]%3==0)
			{
				printf("a[%d][%i]=%d\n",j,i,a[j][i]);
			}
		}
	}
	return 0;
}

注意:int a[3][4];    //二维数组语法角度 -----行数可以省略 列数不能省略 
                               //列数省略的时候,必须给值 

二维字符数组

形式:

char  s[3][4];

练习:

输入三个字符串 找出最大字符串 
  strcmp(s[0],s[1]) 
  strcpy(s[0],s[1])

#include 
#include 

int main(void)
{
	int n = 0;
	printf("Input a num:");
	scanf("%d",&n);
	char s[n][10];

	getchar();

	int i = 0;
	for (i = 0; i < n; ++i)
	{
		gets(s[i]);
	}

	char max[10];
	strcpy(max,s[0]);

	for (i = 1; i < n; ++i)
	{
		if (strcmp(s[i], max) > 0)
		{
			strcpy(max,s[i]);
		}
	}

	printf("max = %s\n",max);

	return 0;
}

  练习:

输入3个字符串  排序 

#include 
#include 

int main(void)
{
	int n = 0;
	printf("Input a num:");
	scanf("%d",&n);
	char s[n][10];

	getchar();

	int i = 0;
	for (i = 0; i < n; ++i)
	{
		gets(s[i]);
	}

	int j = 0;
	for (i = 0; i < n; ++i)
	{
		char t[10];
		strcpy(t,s[i]);
		j = i;

		while(j > 0 && strcmp(s[j-1],t) > 0)
		{
			strcpy(s[j],s[j-1]);
			--j;
		}

		strcpy(s[j],t);
	}

	for (i = 0; i< n; ++i)
	{
		printf("%s\n",s[i]);
	}



	return 0;
}

重点

a.二维数组本质 
b.二维整型数组操作 ---访问具体的元素 a[i][j]
c.二维字符型数组 
    放多个字符串 
    char s[3][10];

函数

函数------实现某一个功能

定义:

类型标志符  函数名(形式参数)

{

        声明部分

        语句部分

}

思想:

拆------拆功能  拆需求  同时函数的目的就是实现某一种功能

返回值的类型标识符    函数名 (形式参数)        //函数头 --规定了一下函数的形式   
{
    函数体                             //--实现函数具体功能代码 
    
    返回结果                          //return 返回结果 
}

以求和为例:

 准备数据:
  准备两个数据 --- 形式参数要能接收两个数据 ---本身其实就是变量

  处理数据:
  a+b

  返回结果:
  return 

定义

一个函数先取一个函数名 函数名: add   

形式参数: int a,b; //形参不能这样写

应该是:数据类型 形参变量名1,数据类型 形参变量名2,..如: int a,int b

函数功能:a+b

结果:
  return 结果;

函数调用:
语法:
  函数名(实际参数);

你可能感兴趣的:(c语言,算法,开发语言)