DAY05 循环嵌套+函数的笔记整理
1.循环嵌套
面试题:
百文百鸡
中国古代
,
有一个人去市场买鸡
公鸡
3
文钱一只
母鸡
2
文钱一只
小鸡
1
文钱三只
这个人有
100
文钱
,
要求买
100
只鸡
请问他可以有多少中买法
,
每种每种买法可以可以公鸡多少只
,
母鸡多少只
,
小鸡多
少只
数学思路
假设
:
公鸡
x
只
母鸡
y
只
小鸡
100-x-y
只
3 * x + 2 * y + (100 -x -y) / 3 = 100;
x + y + (100 - x - y) = 100;
代码思路
:
公鸡取值范围
:0~33
母鸡取值范围
:0~50
小鸡取值范围
:0~100
代码
:
int num = 0;
for(int g = 0; g < 34; g++)
{
for(int m = 0; m < 51; m++)
{
int x = 100 - g - m;
if( 3 * g + 2 * m + x / 3 == 100 && x % 3 == 0)
{
printf("
公鸡
:%d
只
,
母鸡
:%d
只
,
小鸡
:%d
只
\n",g,m,x);
num++;
}
}
}
printf("
共有
%d
种买法
\n",num);
鸡兔同笼:
养殖户将鸡与兔子放在同一个笼中 ,该养殖户无法数清鸡的数量与兔的数量 ,但是该养殖户数了腿的数量与头的数量 ,腿60 ,头20 ,请您帮助养殖户计算鸡兔个几何
数学思想
:
设
:
兔子有
t
只
,
鸡有
j
只
4 * t + 2 * j = 60;
t + j = 20;
t = 20 - j;
4 * (20 -j ) + 2j = 60;
80 -4j + 2j = 60;
80 - 2j = 60;
80 - 60 = 2j;
20 = 2j;
j = 10;
t = 10;
代码思想
:
鸡的取值范围
:0~20
兔的取值范围
:0~15
int tag = 0;
for(int j = 0; j <= 20; j++)
{
for(int t = 0; t <= 15; t++)
{
if(j + t == 20 && 4 * t + 2 * j == 60)
{
tag = 1;
printf("鸡有:%d
只
,
兔有
:%d
只
\n",j,t);
}
}
}
if(tag)
{
printf("
输入的头与腿数量正确
\n");
}
else
{
printf("
此题无解
,
头腿数量有误
\n");
}
题目
3:
宇航员去太空
,
发现外星生物两种
生物
A:3
头
4
腿
生物
B:1
头
6
腿
因为宇航员过于紧张
,
没有数清
A,B
生活个多少只
但是数清了
,
其头和腿的数量
,
请你帮助宇航员计算
A,B
生物个多少只
循环嵌套结合流程控制语句
break:
跳出当前循环:
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 10; j++)
{
if(j == 3)
{
break;
}
printf("%d--%d\n",i,j);
}
}
continue:
跳过本次循环:
#include <stdio.h>
int main(int argc, char const *argv[])
{
for(int i = 0; i < 10; i++)
{
if(i == 3)
{
continue;
}
for(int j = 0; j < 10; j++)
{
if(j == 3)
{
//continue;
}
printf("%d--%d\n",i,j);
}
}
return 0;
}
2.函数
作用:
封装一段代码,使其便于使用
注意:
一个功能可以封装一个函数
定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值
分类:
1.库函数
(c
库实现的
)
不能直接操作内核
2.系统调用
(
操作系统实现的函数
)
可以直接操作内核
3.自定义函数 (程序员自己实现的函数)
1,定义
2,调用
使用步骤:
1,
声明
(
可有可无
)
语法
:
extern 返回值类型 函数名
(
形参列表
);
注意
:
在函数外声明
声明函数时可以忽略形参的变量名不写
2.定义:
语法
:
返回值类型 函数名(
形参列表
)
{
函数体
}
返回值类型
:
返回值的数据类型
,
当函数没有返回值
,
返回值类型为
void(
空类型
)
函数名
:
标识符
,
自定义的
形参列表
:
根据实际情况
,
可有可无
,
多个参数之间使用逗号隔开
,
每个参数有数据类型
变量名编写
函数体
:
封装的代码
return:
结束当前函数
return xxx:
结束当前函数并返回
xxx,xxx
就是返回值
注意
:
一个函数最多只能有一个返回值
同一个源文件中函数名不能重复
(C
语言不支持重载
)
函数不能定义在函数中
定义函数计算
10+1
的结果
void add01()
{
int x = 10 + 1;
printf("x=%d\n",x);
}
定义一个函数计算两数之和
void add02(int x,int y)
{
int sum = x + y;
printf("sum=%d\n",sum);
}
定义一个函数计算
1 + 2
的结果
,
并将结果返回给调用处
int add03()
{
int x = 1 + 2;
return x;
}
定义一个函数判断是否成年
,
成年返回
1,
未成年返回
0
int isCN(int age)
{
if(age >= 18)
{
return 1;
}
else
{
return 0;
}
}
3,
调用:
语法
:
调用无返回值的函数
函数名
(
实参列表
);
调用有返回值的函数
函数名
(
实参列表
);
变量名
=
函数名
(
实参列表
);
注意
:
实参列表要与形参列表一致
(
长度一致
,
顺序一致
,
数据类型一致
)
一个函数可以被调用无数次
只能在函数中调用
如
:
add01();
add02(1,2);
add02(5,10);
int a = 1;
int b = 9;
add02(a,b);
add03();
int x = add03();
isCN(19);
int y = isCN(20);
int age = 17;
int z = isCN(age);
特殊情况:
多重调用:
在函数A
中调用函数
B,
在
B
中调用
C,C
中调用
....
递归:
在函数中调用该函数
,
会形成循环
多文件编译与跨文件调用函数