第7章 函数

第7章 函数

  • 学习笔记
  • 书后练习
    • 问题1
    • 问题7
    • 问题8
    • 编程练习1
    • 编程练习3

学习笔记

可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件,他是标准库的一部分。这个头文件声明了一个类型va_list和三个宏va_startva_argva_end。可以声明一个va_list的变量,与这几个宏配合使用,访问参数的值。

#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>

float
average(int n_values, ...){
    va_list var_arg;
    int count;
    float sum = 0;
    // 准备访问可变参数
    va_start(var_arg, n_values);
    // 添加取自可变参数列表的值
    for(count = 0; count < n_values; count += 1){
        sum += va_arg(var_arg, int);
    }
    // 完成处理可变参数
    va_end(var_arg);
    return sum / n_values;
}

int
main(int argc, char *argv[]){
    float res = average(3, 1, 2, 3);
    printf("%f\n", res);
    return EXIT_SUCCESS;
}

函数声明了一个叫var_arg的变量,它用于访问参数列表的未确定部分。这个变量通过调用va_start来初始化,第一个参数是va_list变量的名字,自二个参数是省略号前最后一个有名字的参数。初始化过程把var_arg变量设置为指向可变参数部分的第一个参数。为了访问参数,需要使用va_arg,这个宏接受两个参数:va_list变量和参数列表中下一个参数的类型。最后,当访问完毕最后一个可变参数之后,需要调用va_end

书后练习

问题1

具有空函数体的函数可以作为存根使用。你如何对这类函数进行修改,使其更加有用?
回答:当存根函数被调用时,打印一条消息,显示它已被调用,或者也可以打印作为参数传递给它的值。

问题7

下面的函数有没有错误?如果有,错在哪里?

int
find_max( int array[10] )
{
    int i;
    int max = array[0];
    for( i = 1; i < 10; i += 1 )
        if( array[i] > max )
            max = array[i];
    return max;
}

回答:这个函数假定它被调用时传递给它的正好是10个元素的数组。如果参数数组更大一些,它就会忽略剩余的元素。如果传递一个不足10个元素的数组,函数将访问数组边界之外的值。

问题8

递归和while循环之间是如何相似的?
回答:递归和迭代都必须设置一些目标,当达到这些目标时便会终止执行。每个递归调用和循环的每次迭代都必须取得一些进展,进一步靠近这些目标。

编程练习1

Hermite Polynomials(厄密多项式)是这样定义的:
H n ( x ) = { n ≤ 0 : 1 n = 1 : 2 x n ≥ 2 : 2 x H n − 1 ( x ) − 2 ( n − 1 ) H n − 2 ( x ) H_n(x)=\begin{cases} n \leq 0: 1\\ n = 1 : 2x \\ n \geq 2: 2xH_{n-1}(x)-2(n-1)H_{n-2}(x) \end{cases} Hn(x)= n0:1n=1:2xn2:2xHn1(x)2(n1)Hn2(x)
例如, H 3 ( 2 ) H_3(2) H3(2)的值是40。请编写一个递归函数,计算 H n ( x ) H_n(x) Hn(x)的值。你的函数应该与下面的原型匹配:

int hermite( int n, int x )
#include<stdio.h>
#include<stdlib.h>

int hermite(int n, int x){
    if(n <= 0){
        return 1;
    }
    if(n == 1){
        return 2 * x;
    }
    return 2 * x * hermite(n - 1, x) - 2 * (n - 1) * hermite(n - 2, x);
}

int main(int argc, char *argv[]){
    int res = hermite(3, 2);
    printf("%d\n", res);
    return EXIT_SUCCESS;
}

编程练习3

为下面这个函数原型编写函数定义:

int ascii_to_integer( char *string );

这个字符串参数必须包含一个或多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数包含了任何非数字字符,函数就返回零。请不必担心算术溢出。提示:这个技巧很简单——你每发现一个数字,把当前值乘以10,并把这个值和新数字所代表的值相加。

#include<stdio.h>
#include<stdlib.h>

int ascii_to_integer(char *string){
    int res = 0;
    while(*string >= '0' && *string <= '9'){
        res = res * 10 + (*string - '0');
        string++;
    }
    if(*string != '\0')
        return 0;
    return res;
}

int main(int argc, char *argv[]){
    char str[] = "12345";
    int res = ascii_to_integer(str);
    printf("%d\n", res);
    return EXIT_SUCCESS;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python菜鸟级安装手册-上篇

python安装教程 电脑-右键-属性&#xff0c;确认系统类型和版本号&#xff0c;比如本案例系统是64位 win10 点击python官网&#xff0c;进行下载 适用于 Windows 的 Python 版本 |Python.org 选择第一个安装程序64位即可满足需要&#xff0c; 嵌入式程序包是压缩包版本&…

MySQL中的ON DUPLICATE KEY UPDATE和REPLACE

在 MySQL 中&#xff0c;ON DUPLICATE KEY UPDATE 和 REPLACE 语句都可以用来处理插入数据时主键或唯一键冲突的情况&#xff0c;但它们在处理冲突的方式上有所不同。它们有以下区别&#xff1a; 行为方式&#xff1a; ON DUPLICATE KEY UPDATE&#xff1a;当插入的数据行存在冲…

【竞技宝】欧冠:多特淘汰大巴黎进决赛,姆巴佩迷失

多特蒙德在本赛季欧冠半决赛第二回合较量中,跟大巴黎队狭路相逢。赛前,大部分球迷和媒体都看好坐拥姆巴佩的大巴黎队,可以靠着主场作战的优势,逆转多特蒙德晋级欧冠决赛。大巴黎队主场作战确实创造出不少得分机会,只可惜球队运气有些差,射门都打在了多特蒙德横梁上。反观多特蒙…

双翻斗雨量计学习

双翻斗雨量计用户手册&#xff08;脉冲型&#xff09; 本仪器由雨量计壳体、承雨口、漏斗、翻斗支撑、上漏斗雨量调节支架、上漏斗、汇集漏斗、计数翻斗雨量调节支架、计数翻斗、干簧管安装架、轴承螺钉、出水漏斗、腿部支架、干簧管、水平泡、调节支撑板、控制盒、调平装置、接…

IaC实战指南:DevOps的自动化基石

基础设施即代码&#xff08;Infrastructure as Code&#xff0c;IaC&#xff09;是指利用脚本、配置或编程语言创建和维护基础设施的一组实践和流程。通过IaC&#xff0c;我们可以轻松测试各个组件、实现所需的功能并在最小化停机时间的前提下进行扩展。更值得一提的是&#xf…

算法基础01一快速排序,归并排序,二分

一.排序 1.快速 排序 基于分治 确定分界点 左 右 中间 随机划分区间 左半边<x >x在右半边递归处理左右两端 #include<iostream>using namespace std;const int N 1e6 10;int n; int q[N]; void quick_sort(int q[],int l,int r) {if(l>r)return;//边界&…

k8s 资源文件参数介绍

Kubernetes资源文件yaml参数介绍 yaml 介绍 yaml 是一个类似 XML、JSON 的标记性语言。它强调以数据为中心&#xff0c;并不是以标识语言为重点例如 SpringBoot 的配置文件 application.yml 也是一个 yaml 格式的文件 语法格式 通过缩进表示层级关系不能使用tab进行缩进&am…

怎么快速分享视频文件?用二维码看视频的方法

怎样不通过传输下载分享视频内容呢&#xff1f;以前分享视频内容&#xff0c;大多会通过微信、QQ、邮箱、网盘等形式来传递。但是这种方式需要下载后才可以观看&#xff0c;不仅占用手机内存&#xff0c;而且效率也比较低&#xff0c;所以现在很多人会采用视频生成二维码的方式…

Could not resolve placeholder ‘xx.xxx.host’ in value “xxx“问题解决

Could not resolve placeholder ‘xx.xxx.host’ in value "xxx"问题解决 众多原因其中之一 springboot 项目&#xff0c;idea 配置apollo 时&#xff0c;运行指定了配置文件 uat 所以使用本地配置文件启动 时&#xff0c;一直去找uat 配置文件&#xff0c;结果自…

树莓派4b测量光照强度

1.BH1750光照强度连接图 2. BH1750工作原理 BH1750的通讯过程 第1步:发送上电命令。 发送的过程和第2步基本一致,把测量命令(0x10)改成上电命令(0x01)。第2步:发送测量命令。 下面图片上的例子,ADDR引脚是接GND的,发送的测量命令是“连续高分辨率测量(0x10)”。 发送数据…

Android11 InputReader分析

InputReader线程主要负责读取输入数据&#xff0c;并把数据交给InputDispatcher线程。本文以多指触摸屏为例&#xff0c;梳理一下InputReader的流程。 InputReader线程主要完成以下工作&#xff1a; 处理已有的输入设备处理新增或者移除的输入设备对输入设备产生的输入数据进行…

【数据结构与算法】力扣 226. 翻转二叉树

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a; root [4,2,7,1,3,6,9] 输出&#xff1a; [4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a; root [2,1,3] 输出&#xff1a; [2,3,1…

【算法刷题 | 贪心算法09】4.30(单调递增的数字)

文章目录 16.单调递增的数字16.1题目16.2解法&#xff1a;贪心16.2.1贪心思路16.2.2代码实现 16.单调递增的数字 16.1题目 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的…

项目1:STM32+DHT11+FreeRTOS+emwin+LCD

【屏幕显示DHT11数据】 面向对象的思想编写硬件驱动程序&#xff0c;DHT11采集环境中的温湿度数据。使用FreeRTOS提供的任务间通信、同步、互斥&#xff0c;将DHT11的数据传递给显示任务。显示任务中&#xff0c;使用emWin中间件&#xff0c;制作屏幕的各种界面&#xff0c;并将…

程序员必备的8款工具软件,第5款简直绝了!

没错&#xff0c;今天又送福利了&#xff01;来给大家推荐一波好用的软件~ 都说程序员的电脑上有各种各样的软件工具、编辑器、插件等等&#xff0c;不同岗位的程序员使用的工具也不同。 今天就给你分享8款程序员必备的工具软件&#xff0c;看看是不是你常用的&#xff01; …

【最经典的79个】软件测试面试题(内含答案)备战“金三银四”

001.软件的生命周期(prdctrm) 计划阶段(planning)-〉需求分析(requirement)-〉设计阶段(design)-〉编码(coding)->测试(testing)->运行与维护(running maintrnacne) 测试用例 用例编号 测试项目 测试标题 重要级别 预置条件 输入数据 执行步骤 预期结果 0002.问&…

锂电池管理芯片厂商拓品微电子授权世强硬创代理,产品涵盖充电/升压等系列

为进一步扩大自身品牌在国内的知名度&#xff0c;给更多硬科技企业提供锂电池管理芯片产品&#xff0c;南京拓品微电子有限公司&#xff08;下称“拓品微电子”&#xff0c;英文名&#xff1a;TOP POWER ASIC&#xff09;与拥有超30年历史的分销企业世强先进&#xff08;科技&a…

618热门好物大盘点,省心购物指南快看过来!

在618购物节即将拉开帷幕之际&#xff0c;整个互联网仿佛都弥漫着一种节日的热闹与期待。各大品牌纷纷亮出他们的杀手锏&#xff0c;推出了一系列诱人的优惠活动和特色产品&#xff0c;让人眼花缭乱&#xff0c;心动不已。如果你此刻正犹豫着该把哪一件宝贝收入囊中&#xff0c…

【JavaScript】原型

1. 什么是原型&#xff1f; 在 JavaScript 中&#xff0c;每个对象都有一个原型&#xff08;prototype&#xff09;&#xff0c;它是对象的一种特殊属性。原型对象包含了对象的属性和方法&#xff0c;当我们访问对象的属性或方法时&#xff0c;如果对象本身不存在这些属性或方…

电动车违规停放监测摄像机

随着电动车的普及和城市交通拥堵问题的加剧&#xff0c;电动车的停放管理也成为一个亟待解决的难题。为了维护城市交通秩序和提高停车效率&#xff0c;一种名为电动车违规停放监测摄像机应运而生&#xff0c;成为城市管理的利器。这种电动车违规停放监测摄像机&#xff0c;利用…