一、二维字符数组
1、定义和声明
char matrix[row_size][col_size];
这里,matrix
是数组名,row_size
和 col_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;
}