函数,二维字符数组

(一)例题

例1:找出一个二维数组中的鞍点

即:该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。

#include <stdio.h>

int main(void)
{
	//int a[3][3] = {1,2,9,4,5,10,8,9,8};
	int a[3][3] = {1,2,3,4,5,6,7,8,9};

	int i = 0;
	int j = 0;
	int k = 0;
	int l = 0;
	int m = 0;
	int flag = 0;

    //先打印输出一下矩阵
	for (i = 0; i < 3; ++i)
	{
		for (j = 0; j < 3; ++j)
		{
			printf("%d ",a[i][j]);
		}
		putchar('\n');
	}


    for (i = 0; i < 3; ++i)
	{
		int max = a[i][0];//先定第一列的值为最大值

		for (j = 1; j < 3; ++j)
		{
			if (a[i][j] > max)//如果有比第一列的值大的值
			{
				max = a[i][j];//就把它放到max中
				k = j;//将这个值的列下标放到k中
			}
		}

		for (m = 0; m < 3; m++)//开始找每一列的最小值
		{
			if (a[m][k] < max)//如果有比它小的值就跳出循环
			{
				break;
			}
		}

		if (m == 3)//m==3代表全部循环完都没有找到比它更小的值,这就是有鞍点
		{
			flag = 1;
			printf("found = (%d,%d) = %d\n",i,k,a[i][k]);
		}

	}

	if (flag == 0)//没有循环完就结束循环,m就会小于3,
	{               代表在列中找到了比max还小的值,这就没有鞍点了
		printf("not found!\n");
	}

	return 0;
}

例2:输出“魔方阵”(奇数矩阵)

#include <stdio.h>
#include <strings.h> 

int main(void)
{
	int n;
	printf("Input a num:");
	scanf("%d",&n);

	int a[n][n];
	
	//printf("sizeof(a) = %ld\n",sizeof(a));
	bzero(a,sizeof(a));
	
	int i = 0;
	int j = 0;
	int k = 1;

	int x,y;
	 
	a[0][n/2] = 1; 
	
	i = 0;
	j = n/2;
	
	for (k = 2; k <= n*n; ++k)
	{
		x = i;
		y = j;
		++j;
		if (j > n-1)
		{
			j = 0;
		}
		--i;
		if (i < 0)
		{
           i = n-1;
		}

		if (a[i][j] != 0)
		{
			i = x;
			j = y;

			++i;

			if (i > n-1)
			{
				i = 0;
			}
		}

		a[i][j] = k;

	}

	for (i = 0; i < n; ++i)
	{
		for (j = 0; j < n; ++j)
		{
			printf("%d ",a[i][j]);
		}
		putchar('\n');
	}

	return 0;
}

(二)二维字符型数组

二维字符型数组可以批量的处理字符串。

char  s[3][4];   //3行4列

(1)初始化:全部初始化、部分初始化(未初始化部分为0)

按行进行初始化:

eg: char  s[3][10]  =  {{"hello"}, {"world"}, {"English"}};

         char  s[3][10]  =  {"hello", "world", "English"};

(2)输入字符串:

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

例:从键盘输入5个字符串,找出最大的字符串

#include <stdio.h>

int mian(void)
{
    char s[5][10];
	char max[10];
	printf("Input 5 str:");
	int i,ret=0;

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

	strcpy(max,s[0]);

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

	printf("max str = %s\n",max);
    
    return 0;
}

 

(三)函数

思想:从上到下,逐步求解的过程。(将大问题拆分成小问题)

1.函数定义:

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

{

        函数体代码

}

(1)类型标识符:数据类型----表示函数要带出的结果的类型

注意:数组类型不能做函数返回结果的类型。

返回结果的类型需注意:

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

(2)函数名 :标识符 ,命名规则符合 标识符命名规则 。

(3)形式参数:表示该函数需要用到的数据 。

形参的写法:
  数据类型  形参变量名1,   数据类型  形参变量名2 ... 

注意:

a.形参变量,必须都明确指定类型。不能写成:   int a,b 

b.实参 和 形参 对应关系 :类型匹配、个数相同、顺序一一对应

c.函数传参:传递的是 实际参数的 数值。(值传递)

d.如果不需要接收实际参数,形参一般设计为void(表示空类型)

(4)函数体代码:实现函数具体功能的那部分代码。

(5)函数定义的位置:
①main函数之前
②main函数之后 :需要在使用(函数调用)前,作函数声明。函数头+分号 就是函数声明   

定义函数的具体步骤:
1.先确定函数名    

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

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

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

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

2.函数调用:

函数调用表示使用 功能。

语法形式:

函数名(实际参数)

例:判断是否是素数?

#include <stdio.h>

int isPrime(int n)
{
	int i = 0;
	int ret = 1;

	for (i = 2; i < n; ++i)
	{
		if (n%i == 0)
		{
			ret = 0;
			break;
		}
	}
	
	return ret;
}
int main(void)
{
	int n;
	scanf("%d",&n);

	if (isPrime(n) == 0)
	{
		printf("no\n");
	}else 
	{
		printf("yes\n");
	}

	return 0;
}

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值