二维字符数组,初识函数09

一、二维字符数组

1、定义和声明 

char matrix[row_size][col_size];

这里,matrix 是数组名,row_sizecol_size 分别表示行数和列数。例如,如果要声明一个3行4列的二维字符数组

char matrix[3][4];

2、初始化

char s[3][10] = {{"hello"},{"world"},{"english"}};
  //初始化 
char s[3][10] = {"hello","world","english"};

char s[3][4]; //批量的处理字符串 
  //3行4列 
一维字符型数组 --- 存储字符串数据

3、输入输出字符串 

char s1[10];

gets(s1);

由此我们可以了解到gets函数需要首地址

char s[3][4];

gets(s[0]); //s[0] 就是第1行 这个一维字符型数组的数组名 ,读入第一行字符串

gets(s[1]);//得到第二行首地址,读入第二行字符串

puts函数同理,也要得到要输出行的首地址

puts(s[0]);//输出第一行

puts(s[1]);//输出第二行

输出时也可以用%s打印,它的功能也是打印字符串,直到碰到'\0'为止

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

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

了解了一维数组和一维字符型数组,我们可以很轻松的学习二维字符型数组,下面来做几个练习

1.从键盘输入五个字符串找出最大的字符串

#include <stdio.h>
#include <string.h>

int main(void)
{
	char s[5][10];
    int i = 0 ;

	for (i = 0; i < 5; ++i)
	{
		gets(s[i]);
	}
	char max[10];
	strcpy(max,s[0]);
	
	for (i = 1; i < 5; ++i)
	{
		if (strcmp(s[i],max) > 0)
		{
			strcpy(max,s[i]);
		}
	}
	printf("max str = %s\n",max);
	return 0;
}

2、从键盘输入5个字符串,排序输出 

#include<stdio.h>
#include<string.h>

int main(void)
{
	char s[5][10];
	int i = 0;
	int j = 0;

	char p[10];

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

	
	for(i = 1;i < 5;++i)
	{
		for(j = 0;j < 5-i;++j)
		{
			if(strcmp(s[j],s[j+1])>0)
			{
				strcpy(p,s[j]);
				strcpy(s[j],s[j+1]);
				strcpy(s[j+1],p);
			}
		}
	}

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

  3、使用二分查找,查找字符串

#include<stdio.h>
#include<string.h>

int main(void)
{
	char s[5][100];
	char p[100];
	
	int i = 0;
	int j = 0;
	for(i = 0;i < 5;++i)
	{
		gets(s[i]);
	}

	for(i = 1;i < 5;++i)
	{
		for(j = 0;j < 5-i;++j)
		{
			if(strcmp(s[j],s[j+1])>0)
			{
				strcpy(p,s[j]);
				strcpy(s[j],s[j+1]);
				strcpy(s[j+1],p);
			}
		}
	}
	printf("输入要查找的字符串:");
	char ss[100];
	gets(ss);

	int begin = 0;
	int end = 4;
	int mid;

	while(begin <= end)
	{
		mid = (begin + end)/2;
		if(strcmp(s[mid],ss)>0)
		{
			end = mid -1;
		}else if(strcmp(s[mid],ss)<0)
		{
			begin = mid + 1;
		}else
		{
			break;
		}
	}

	if(begin <= end)
	{
		printf("找到了\n");
	}else
	{
		printf("没找到\n");
	}

	return 0;
}

二、初识函数

函数的思想:
   从上到下,逐步求解的过程 
   拆    
function //功能  --- 函数

1、函数定义 

类型标识符 函数名 (形式参数)
{
    函数体代码
}

(1)类型标识符 

      数据类型 //表示函数要带出的结果的 类型 
     注意:
          数组类型 不能做 函数返回结果的类型 
     返回结果的类型。
    注意:
     a.如果函数不需要带出什么结果,此时返回结果的类型说明符 一般设计为void 
       如果类型为void,一般不写return 
       如果要写,return ;
     b.如果 返回结果的类型 与 类型说明符不一致,
       以 类似说明符 为准。
       最终结果的类型,都会转为类型说明符表示的类型 
     c.类型说明符,如果不写,默认是 int 类型

            

(2)函数名 

     标识符 ,命名规则符合 标识符命名规则 

(3)形式参数

      表示,该函数需要用到的数据 
      //表明,将来使用时,需要用到的实际参数,该怎么写
     注意:
       a.形参变量,必须都明确指定类型
         不能写成
        int a,b 
       b.实参 和 形参对应关系 
         类型匹配
         个数相同 
         顺序一一对应的           
       c.函数传参  --- 传递的是 实际参数的 数值 
        //值传递 
       d.如果不需要接收实际参数,形参一般设计为void //表示空类型 

              

(4)函数体代码

      这是 实现函数具体功能的那部分代码 
      
      

函数定义的位置:

1.main函数之前
2.main函数之后 
  main之后,需要在使用(函数调用)前,作函数声明 
  函数头+分号 就是函数声明

写函数基本步骤

1.先确定函数名 

  sum 
  add

  //输入数据 ---处理数据 ---输出 

2.考虑函数需要用到哪些数据 ---- 形参 

  处理两个整数 
  
  形参的写法:
  数据类型 形参变量名1,数据类型 形参变量名2 ... 
  
  int num1,int num2
 

3.处理数据---- 函数体的具体实现

  求和 
  
  sum = num1 + num2;

4.考虑需不要带出结果 --- (返回值对应)类型说明符
  

  return 语句:
 
  return (表达式);
        //return 表示从函数中返回,意味着函数执行结束 
        
  return sum;
 

练习:求两个数的和,找出两个数的最大值

#include<stdio.h>


int add(int num1,int num2)
{
	int sum;
	sum = num1 + num2;
	return sum;
}

int max(int num1,int num2)
{
	int max;
	max = num1 > num2?num1:num2;
	return max;
}

int main(void)
{
	int a,b;
	scanf("%d%d",&a,&b);
	int ret;
	ret = add(a,b);
	printf("ret = %d\n",ret);
	
	int max0;
	max0 = max(a,b);
	printf("max = %d\n",max0);

	return 0;
}

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值