C 语言-循环嵌套-函数

C 语言 - 循环嵌套、函数

1. 循环嵌套

1.1 作用

循环 套 循环。

1.2 使用

需求1:

打印以下图形:

* * * *
* * * *
* * * *
* * * *

代码:

1、使用循环打印

#include <stdio.h>
int main(int argc, char const *argv[])
{for (int i = 0; i < 4; i++){printf("* * * *\n");}return 0;
}

2、循环嵌套打印

#include <stdio.h>
int main(int argc, char const *argv[])
{for (int i = 0; i < 4; i++)	//外层控制行数{for (int j = 0; j < 4; j++) //内层控制每一行的样式{printf("* ");}printf("\n");}return 0;
}
#include <stdio.h>
int main(int argc, char const *argv[])
{for (int i = 0; i < 4; i++){for (int j = 0; j < 4; j++){if (j <= i){printf("* ");}}printf("\n");}return 0;
}

小结:

i
0	*
1	* *
2	* * * 
3	* * * *0 1	2 3 j
  • 外层 控制 行数

  • 内层 控制 每一行的样式

需求2:

打印以下图形

* 
* * 
* * * 
* * * * 
* * * * * 
* * * * * * 
* * * * * * * 
* * * * * * * * 
* * * * * * * * * 

代码:

#include <stdio.h>
int main(int argc, char const *argv[])
{for (int i = 0; i < 9; i++){for (int j = 0; j < 9; j++){if (j <= i){printf("* ");}}printf("\n");}return 0;
}

优化:

#include <stdio.h>
int main(int argc, char const *argv[])
{for (int i = 0; i < 9; i++){for (int j = 0; j <= i; j++){printf("* ");}printf("\n");}return 0;
}

需求3:

打印9*9乘法表

#include <stdio.h>
int main(int argc, char const *argv[])
{for (int i = 1; i < 10; i++){for (int j = 1; j <= i; j++){// 1 * 1 = 1printf("%d * %d = %d\t", i, j, i*j);}printf("\n");}return 0;
}

结果如下:

在这里插入图片描述

1.3 案例

例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遍历

代码:

#include <stdio.h>
int main(int argc, char const *argv[])
{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);return 0;
}

输出结果:

公鸡:0只,母鸡:40只,小鸡:60只
公鸡:5只,母鸡:32只,小鸡:63只
公鸡:10只,母鸡:24只,小鸡:66只
公鸡:15只,母鸡:16只,小鸡:69只
公鸡:20只,母鸡:8只,小鸡:72只
公鸡:25只,母鸡:0只,小鸡:75只
共有6种买法

例2:

鸡兔同笼

  • 养殖户将鸡与兔子放在同一个笼中

  • 该养殖户无法数清鸡的数量与兔的数量

  • 但是该养殖户数出了腿的数量与头的数量

    ​ 腿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

代码:

#include <stdio.h>
int main(int argc, char const *argv[])
{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");}return 0;
}// 输出:鸡有:10只,兔有:10只

2. 函数

2.1 作用

封装一段代码,使其便于使用。

注意:

  • 一个功能可以封装一个函数
  • 定义函数的时候一切 以功能为目的,根据功能去定义函数的参数返回值

2.2 分类

1、库函数 (c 库实现的)

  • 不能直接操作内核

2、系统调用 (操作系统实现的函数)

  • 可以直接操作内核

3、自定义函数 (程序员自己实现的函数)

  • 定义
  • 调用

2.3 使用步骤

① 声明(可有可无)

语法:
extern 返回值类型 函数名(形参列表);
注意:

  • 在函数外声明
  • 声明函数时可以忽略形参的变量名不写
② 定义

语法:

返回值类型 函数名(形参列表)
{函数体
}

解释:

  • 返回值类型:返回值的数据类型,当函数没有返回值,返回值类型为void(空类型)

  • 函数名:标识符,自定义的

  • 形参列表:根据实际情况,可有可无,多个参数之间使用逗号隔开,每个参数有数据类型变量名编写

  • 函数体:封装的代码

  • return:结束当前函数

  • return xxx:结束当前函数并返回xxx,xxx就是返回值

注意:

  • 一个函数最多只能有一个返回值
  • 同一个源文件函数名不能重复(c语言不支持重载)
  • 函数不能定义在函数中

例1:定义函数计算10+1的结果

voild add01()
{int x = 10 + 1;printf("x=%d\n",x);
}

例2:定义一个函数计算两数之和

void add02(int x,int y)
{int sum = x + y;printf("sum=%d\n",sum);
}

例3:定义一个函数计算 1 + 2的结果,并将结果返回给调用处

int add03()
{int x = 1 + 2;return x;
}

例4:定义一个函数判断是否成年,成年返回1,未成年返回0

int iscN(int age)
{if(age >= 18){return 1;} else{return 0;}
}
③ 调用

语法:

  • 调用 无返回值 的函数
    • 函数名(实参列表);
  • 调用有返回值的函数
    • 函数名(实参列表);
    • 变量名 = 函数名(实参列表);

注意:

  • 实参列表 要与 形参列表 一致 (长度一致,顺序一致,数据类型一致)
  • 一个函数可以被调用无数次
  • 只能在函数中调用

例:

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);

2.4 特殊情况

① 多重调用
在函数A中调用函数B,在B中调用c,c中调用....

例:

#include <stdio.h>
extern void funA();
extern void funB();
extern void func();
void funA()
{printf("A开始\n");funB();printf("A结束\n");
}void funB()
{printf("B开始\n");func();printf("B结束\n");
}
void func()
{printf("c开始\n");printf("c结束\n");
}
int main(int argc, char const *argv[])
{funA();return 0;
}
② 递归
在函数中调用该函数,会形成循环

例:

#include <stdio.h>
void test(int num)
{printf("num=%d\n",num);if (num >= 0){num--;test(num);}
}
int main(int argc, char const *argv[])
{test(2);return 0;
}
③ 多文件编译,跨文件调用函数
  • 文件1:05_codeA.c

    #include <stdio.h>
    extern void test05();
    extern int num;
    int main(int argc, char const *argv[])
    {test05();printf("05_codeB\tnum=%d\n",num);return 0;
    }
    
  • 文件2:05_codeB.c

    #include <stdio.h>
    int num = 20;
    void test05()
    {printf("测试\n");
    }
    
  • 编译:

    gcc 05_codeA.c 05_codeB.c

  • 结果:

在这里插入图片描述

3. 变量的存储类别

  • 程序是一个文件,

  • 一个正在进行的程序称为一个进程

  • 一个进程系统会为其分配一片运行内存

  • 在32位系统下,每个进程的寻址范围是4G

3.1 数据存储分类

在这里插入图片描述

1)、堆

​ 在动态申请内存的时候,在堆里开辟内存。

2)、栈

​ 主要存放局部变量。

3)、静态全局区

  • 未初始化的静态全局区

    • 静态变量(定义变量的时候,前面加 static 修饰),或全局变量 ,没有初始化的,存在此区
  • 初始化的静态全局区

    • 全局变量、静态变量,赋过初值的,存放在此区

4)、代码区

​ 存放咱们的程序代码

5)、文字常量区

​ 存放常量的

3.2 函数相关

① 普通成员函数(全局函数)
语法:返回值类型 函数名(形参列表){函数体}

特点:

可以在当前 .c 文件(源文件)中使用,也可以在其他.c文件中使用

② 静态成员函数(静态全局函数)
语法:static 返回值类型 函数名(形参列表){函数体}

特点:

只能在当前.c文件(源文件)中使用

3.3 变量相关

① 局部变量

定义位置:当前函数中

作用域:所声明的代码块中

生命周期:调用所在函数时生成,随着所在代码块的执行完毕而销毁

默认值:随机数

② 成员变量(全局变量)

定义位置:在函数外

作用域:当前程序中

生命周期:随着所在进程的执行而生成,随着所在进程的结束而结束

默认值:0

③ 静态局部变量

定义位置:当前函数中

作用域:所声明的代码块中

生命周期:第一次调用所在函数时生成,随着所在进程的执行完毕而销毁,只会定义一次

默认值:0

例:

#include <stdio.h>
void test()
{static int x = 10;x++;printf("x=%d\n",x);
}int main(int argc, char const *argv[])
{test();test();test();return 0;
}

输出结果:

x=11
x=12
x=13

④ 静态成员变量(静态全局变量)

定义位置:在函数外

作用域:当前源文件中

生命周期:随着所在进程的执行而生成,随着所在进程的结束而结束

默认值:0

4. const

const 修饰的变量值不能被修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/176122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生CI/CD流水线发布

文章目录 前言k8s组件与操作流程k8s组件创建pod k8s代码&&打包k8s yamldeploymentservicek8s volumesdemo CIgitlabCI runner CD配置git repository安装argo创建argo cd的配置yamlargocd和helm结合argocd hookargocd 发布 RBACoperatorhelmprometheus && grafn…

曝光!WPS用户信息或被盗用,紧急行动,迅软DSE数据加密应时而动!

WPS摊上大事了&#xff01;有用户发现&#xff0c;在WPS更新的一版用户隐私政策中&#xff0c;明确提到&#xff1a;“我们将对您主动上传的文档材料&#xff0c;在处理后作为AI训练的基础材料使用。”换句话说&#xff0c;WPS有可能“白嫖”用户的文档信息&#xff0c;用于投喂…

CVE-2020-11651(SaltStack认证绕过)漏洞复现

简介 SaltStack是使用Python开发的一个服务器基础架构集中化管理平台,底层采用动态的连接总线,使其可以用于编配,远程执行, 配置管理等等。 Salt非常容易设置和维护,而不用考虑项目的大小。从数量可观的本地网络系统,到跨数据中心的互联网部署,Salt设计为在任意数量的…

顺序表总结

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 目录 &#x1f324;️arraylist的简…

JAVA多线程总结

一、概念&#xff1a; 1、什么是多任务 多任务就是在同一时间做多件事情&#xff0c;如边吃饭边玩手机等。看起来是多个任务都在做&#xff0c;本质上我们的大脑在同一时间依旧只做了一件件事情 2、什么是程序 程序是指令和数据的有序集合&#xff0c;其本身没有任…

洗地机应该怎么选?希亦、必胜、米博、添可、小米洗地机实测推荐

作为一个常年测评智能家居的博主&#xff0c;关于洗地机的测评使用这些年也积累了不少的体验感受。以至于常被周边的朋友问到&#xff0c;洗地机到底是不是真的好用&#xff1f;洗地机有什么优点吗&#xff1f;选购的时候应该怎么选呢&#xff1f;洗地机什么牌子比较好呢&#…

chatglm3 vllm部署推理;api访问使用

用fastchat部署暂时有各种问题,参考:https://github.com/lm-sys/FastChat/pull/2622 本篇用vllm运行测试可以使用 1、vllm运行 python -m vllm.entrypoints.api_server --model /***/chatglm/chatglm3-6b/

【C语言】深入理解数据类型转换与运算

文章目录 1.数据类型转换在分析源程序之前&#xff0c;我们需要了解几个基本概念&#xff1a;现在来分析源程序中的变量及其对应的十进制真值以及扩展操作方式&#xff1a; 1.1. short si -32768;1.2. unsigned short usi si;1.3. int i si;1.4. unsigned ui usi; 2&#x…

【开源】基于JAVA的农村物流配送系统

项目编号&#xff1a; S 024 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S024&#xff0c;文末获取源码。} 项目编号&#xff1a;S024&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2…

深度学习18

卷积层 查看每个数据 使用tensorboard查看 池化层 使用数据集进行训练 创建实例&#xff0c;使用tensorboard进行显示 最大池化保留了图片信息&#xff0c;神经网络训练的数据量大大减小&#xff0c;可以加快训练 非线性激活 非线性激活为神经网络加入了一些非线性的特质…

CTFSHOW sqll注入

号过滤绕过 号和不加通配符的 like 是一样的。 还可以使用 < >号来绕过&#xff0c;<> 在mysql中等于! 如果在加一个! 双重否定代表肯定 就是了 空格过滤绕过 /**/ &#xff0c;()&#xff0c;&#xff0c;tab&#xff0c;两个空格 or and xor not 过滤绕过 a…

正点原子linux应用编程——入门篇2

系统信息与系统资源 本章重点学习如何通过Linux系统调用或C库函数获取系统信息&#xff0c;譬如获取系统时间、日期 以及设置系统时间、日期等&#xff1b;除此之外&#xff0c;还会学习Linux系统下的/proc虚拟文件系统&#xff0c;包括/proc 文件系统是什么以及如何从/proc文…

【APUE】进程间通信

目录 一、管道 1.1 匿名管道 1.2 命名管道 二、XSI IPC 2.1 概述 2.2 消息队列 2.2.1 msgget 2.2.2 msgsnd 2.2.3 msgrcv 2.2.4 msgctl 2.2.5 代码示例 2.3 信号量数组 2.3.1 semget 2.3.2 semop 2.3.3 semctl 2.3.4 代码示例 2.3 共享内存 2.3.1 shmget…

selenium已知一个元素定位同级别的另一个元素

1.需求与实际情况 看下图来举例 &#xff08;1&#xff09;需求 想点击test22&#xff08;即序号-第9行&#xff09;这一行中右边的“复制”这一按钮 &#xff08;2&#xff09;实际情况 只能通过id或者class定位到文件名这一列的元素&#xff0c;而操作这一列的元素是不…

零基础可以学编程吗,不懂英语怎么学编程,中文编程工具实例

零基础可以学编程吗&#xff0c;不懂英语怎么学编程&#xff0c;中文编程工具实例 上图是中文编程工具界面、标尺实例。 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#x…

基于单片机体温心率脉搏检测仪系统设计

**单片机设计介绍&#xff0c; 基于单片机体温心率脉搏检测仪系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机体温心率脉搏检测仪是一种用于检测人体体温、心率和脉搏等基本生理指标的医疗设备。下面是一个简要…

QT 界面切换

先新建一个Widget工程 ui界面设置如下 在添加一个QT设计师界面类 右键点击添加 第二个UI界面设置如下 代码 链接&#xff1a;https://pan.baidu.com/s/1ovDIG2pno9mJ7mMFh2tq3Q 提取码&#xff1a;6q3m –来自百度网盘超级会员V2的分享

python+pytest接口自动化(2)-HTTP协议基础

HTTP协议简介 HTTP 即 HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09;&#xff0c;是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。 设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。HTTP 协议在 OSI 模型…

vue3 + element-plus + ts el-table封装

vue3 element-plus ts el-table封装 博客参考https://blog.csdn.net/weixin_45291937/article/details/125523244 1. 文件位置&#xff08;根据自己的需求&#xff09; 2. 在 custom 文件夹下面 创建 mytable 文件夹 3. 直接上代码 // index.vue<template><div …

Python实现WOA智能鲸鱼优化算法优化XGBoost回归模型(XGBRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…