初阶函数基础例题(1)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 初阶函数基础例题(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;局部变量不初始化的时候,默认为随机值

相关文章
|
4月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
2月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
5月前
|
存储 安全 编译器
【C++初阶】10 .习题①
【C++初阶】10 .习题①
61 2
|
程序员 C语言
初阶函数经典例题(2)
初阶函数经典例题(2)
初阶函数递归经典例题(1)
初阶函数递归经典例题(1)
【C语言】函数和递归的基础题目
【C语言】函数和递归的基础题目
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(二)
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(二)
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(一)
【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(一)
|
算法 C语言
C语言典型例题四——斐波那契数列
Fibonacci(斐波那契)数列 求斐波那契数列的前40个数。这个数列有个特点:第1,2两个数为1,1。从第三个数开始,该数是其前面两个数之合。即该数列为1,1,2,3,5,8,13……。
180 0
|
存储 C语言 C++
C语言学习笔记—P23(<C语言高阶>+指针的进阶<1>+题例+图解)
C语言学习笔记(<C语言高阶>+指针的进阶<1>+题例+图解)
152 0
C语言学习笔记—P23(<C语言高阶>+指针的进阶<1>+题例+图解)