初阶函数基础例题(1)

简介: 初阶函数基础例题(1)

一、选择题

1、能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是:( )


A.return 这二个数

B.形参用数组

C.形参用二个指针

D.用二个全局变量


答案解析:

答案:A

A、一个函数可以有一个或多个return语句,但是只有一个起作用。故A错

B、形参用数组,可以将函数处理的两个结果返回给主调函数;

代码实例:

#include<stdio.h>
void test(int arr[])
{
  arr[0] = 1;
  arr[1] = 2;
}
int main()
{
  int arr[2] = { 0 };
  test(arr);
  printf("%d %d\n", arr[0], arr[1]);
  return 0;
}

C、形参用两个指针,可以将函数处理的两个结果返回给主调函数

代码实例:

#include<stdio.h>
void test(int* pa, int* pb)
{
  *pa = 2;
  *pb = 3;
}
int main()
{
  int a = 0;
  int b = 0;
  test(&a, &b);
  printf("%d %d\n", a, b);
  return 0;
}

D、用两个全局变量,可以将函数处理的两个结果返回给主调函数

代码实例:

#include<stdio.h>
int x = 0;
int y = 0;
void test()
{
  x = 3;
  y = 4;
}
int main()
{
  test();
  printf("%d %d\n", x, y);
  return 0;
}

知识点:

1、函数的返回值:

       ①函数的返回值是通过函数中的return语句获得的。

       ②一个函数中可以有一个或多个return语句,但是只有一个起作用。(先执行到哪个return语句,就是哪个return语句起作用)

       ③如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准(建议最好x写成成一样)

       ④void:

               a.作为函数类型:说明函数调用完后,什么后不需要返回

               b.作为形参:说明函数没有参数,在调用的时候不能传参

2、函数调用

       ①传值调用:函数的形参和实参分别占用不同内存块,对形参的修改不会影响实参

       ②传址调用:

               a.传址调用是把函数外部创建变量的内存地址传递给函数参数(形参)的一种调用函数的方式。

               b.这种传参方式可以让函数和函数外边的变量建立真正的联系,也就是函数内部可以直接操作函数外部的变量

总结:传值调用-->形参不影响实参,传址调用-->形参可以影响实参

3、当数组传参的时候,实际上是把数组的首元素的地址传递过去了。(即为传址调用)

4、全局变量

       ①作用域:整个工程(注:同名时局部优先)

       ②生命周期:(作用域:在main整个范围均可用)=main的生命周期=程序的生命周期

2、关于函数调用说法不正确的是:( )

A.函数可以传值调用,传值调用的时候形参是实参的一份临时拷贝

B.函数可以传址调用,传址调用的时候,可以通过形参操作实参

C.函数可以嵌套定义,但是不能嵌套调用

D.函数可以嵌套调用,但是不能嵌套定义


答案解析:

A:正确,形参按照值的方式传递,形参就是实参的一份临时拷贝,修改形参不会影响外部的实参

B:正确,形参按照指针方式传递,形参就是实参地址的一份拷贝,形参指向的是实参,修改形参指针指向的内容,  就是在操作实参

C:错误,C语言中,函数不能嵌套定义

D:正确,函数可以嵌套调用,即:A()中调用B(),B()中调用A(),但是要控制好,否则就成为无限递归

因此,选择C

知识点:

1、形参与实参占用不同的内存单元,单向传递(实参传给形参)

2、形参只是实参的一份临时拷贝

3、函数可以嵌套调用,但是不能嵌套定义

4、传值调用-->形参不影响实参,传址调用-->形参可以影响实参

3、在函数调用时,以下说法正确的是:( )

A.函数调用后必须带回返回值

B.实际参数和形式参数可以同名

C.函数间的数据传递不可以使用全局变量

D.主调函数和被调函数总是在同一个文件里


答案解析:

A:错误,函数可以没有返回值,返回类型为void

B:正确,形参和实参在不同的函数中,即是不同的作用域,因此形参和实参可以同名

C:错误,如第一个选择题1D选项

D:错误,可以放在其他.c文件中

因此,选择B

知识点:

1、在真正的工程中,我们一般是:

       头文件:.h--放置函数的声明

       源文件:.c--放置函数的实现(定义)

2、形参和实参可以同名:因为每一个函数的局部变量互相是看不到的,作用域不一样

3、函数没有返回值,一定要在前面写void(否则默认类型为int)

4、关于实参和形参描述错误的是:( )

A.形参是实参的一份临时拷贝

B.形参是在函数调用的时候才实例化,才开辟内存空间

C.改变形参就是改变实参

D.函数调用如果采用传值调用,改变形参不影响实参


答案解析:

A:正确,传参时不论是按照值还是指针方式传递,形参拿到的都是实参的一份拷贝

B:正确,函数没有调用时,形参没有空间

C:错误,如果是按照值的方式传递,形参和实参之间没有联系,改变形参不能改变外部的实参

D:正确,因为形参和实参是两个不同的变量

知识点:

1、实际参数

       ①真正传给函数的参数,叫实参。

       ②实参可以是:常量、变量、表达式、函数等(但注意:无论实参是什么类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传递给形参)

2、形式参数(形参)

       ①形参是指(定义函数)函数名括号中的变量

       ②形参只有在函数被调用的过程中才实例化(分配内存单元),所以叫形参

       ③形参是局部变量:形参当函数调用之后就自动销毁了,因此形参只在函数中有效

补充:

       ①形参与实参类型一致、顺序对应、个数相同

       ②在被定义的函数中,必须指定形参的类型

       ③若形参与实参类型不一致,自动按形参类型转换

       ④形参与实参占用不同的内存单元,单向传递(实参传给形参);所以形参实例化之后其实就相当于实参的一份临时拷贝


5.以下关于函数设计不正确的说法是:( )

A.函数设计应该追求高内聚低耦合

B.要尽可能多的使用全局变量

C.函数参数不易过多

D.设计函数时,尽量做到谁申请的资源就由谁来释放


答案解析:

A:正确,高内聚低耦合即:函数体内部实现修改了,尽量不要对外部产生影响,否则:代码不方便维护(就是各模块之间尽量独立)

B:错误,全局变量在工程中到处都可以使用,很难保证数据的正确性和安全性

C:正确,参数越少越好,否则用户在使用时体验不是很好,还得必须将所有参数完全搞明白才可以使用(就是使用不方便)

D:正确,谁申请的谁维护谁释放,否则如果交给外部使用者释放,外部使用者可能不知道或者忘记,就会造成资源泄漏

因此,选择B

6、C语言规定,在一个源程序中,main函数的位置( )

A.必须在最开始

B.必须在库函数的后面

C.可以任意

D.必须在最后


答案解析:

main函数的位置可以在任意位置,但是如果在主函数之中调用了哪些函数,必须在main函数前对其所调用函数进行声明或包含其被调用函数的头文件。

因此:选择C


7、以下叙述中不正确的是:( )

A.在不同的函数中可以使用相同名字的变量

B.函数中的形式参数是在栈中保存

C.在一个函数内定义的变量只在本函数范围内有效

D.在一个函数内复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)


答案解析:

A:正确 不同的函数属于不同的作用域,因此不同的函数中定义相同名字的变量不会冲突

B:正确

C:正确 在函数内定义的变量,称为局部变量,局部变量只能在其定义的函数中使用

D:错误 复合语句中定义的变量只能在复合语句中使用

因此:选择D

知识点:在全局变量与静态变量不初始化默认为0;局部变量不初始化的时候,默认为随机值

相关文章
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
这个模型让AI角色会说话还会演!MoCha:Meta联手滑铁卢大学打造对话角色视频生成黑科技
MoCha是由Meta与滑铁卢大学联合开发的端到端对话角色视频生成模型,通过创新的语音-视频窗口注意力机制实现精准的唇语同步和全身动作生成。
294 12
这个模型让AI角色会说话还会演!MoCha:Meta联手滑铁卢大学打造对话角色视频生成黑科技
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的注意力机制:提升模型性能的关键
在深度学习的世界里,注意力机制如同一位精明的侦探,专注于细节之中发现线索。不同于传统方法的全局视角,它通过聚焦于输入数据的关键部分来提升模型性能。本文将带你领略注意力机制的魅力,从其工作原理到在各领域的应用实例,一探究竟如何让深度学习模型更“专注”。
|
10月前
|
消息中间件 关系型数据库 Kafka
一种小资源情况下RDS数据实时同步StarRocks方案
使用一台4C8 G服务器轻松实现2个MySQL实例中通过负责分库分表规则之后的5000多张表的数据实时同步到StarRocks
421 67
|
7月前
|
Linux Docker 容器
安装docker-18.06报错Error: libseccomp conflicts with docker-18.06
通过这些步骤,您可以成功在CentOS上安装Docker 18.06,并解决libseccomp的冲突问题。这些方法确保系统兼容性,并保证Docker的正常运行。
203 27
|
9月前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
10月前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
11月前
|
Java 数据处理 开发者
Java Http 接口对接太繁琐?试试 UniHttp 框架~
【10月更文挑战第10天】在企业级项目开发中,HTTP接口对接是一项常见且重要的任务。传统的编程式HTTP客户端(如HttpClient、Okhttp)虽然功能强大,但往往需要编写大量冗长且复杂的代码,这对于项目的可维护性和可读性都是一个挑战。幸运的是,UniHttp框架的出现为这一问题提供了优雅的解决方案。
303 0
|
域名解析 负载均衡 网络协议
阿里云基础设施网络研发团队参与论文获得CCS 2023 杰出论文奖
阿里云基础设施网络研发团队参与论文获得CCS 2023 杰出论文奖
|
开发框架 Java Apache
Java中的类库与工具集推荐
Java中的类库与工具集推荐
|
存储 弹性计算 移动开发
阿里无影云桌面连接云桌面方法
阿里无影云桌面连接云桌面方法,阿里云无影云桌面即无影云电脑,云电脑如何使用?云电脑购买后没有用户名和密码,先创建用户设置密码,才可以登录连接到云电脑。云电脑想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从购买、创建用户名密码和访问互联网全过程
394 0