C语言刷题-----函数篇


前言

今天带来一个新的专栏,C语言的刷题专栏,也算是我自己在做题目的时候做的一个笔记。这里面有选择题,有编程题,有oj题,种类很多,但是我尽量以知识点做一篇总的文章,这样便于我更好的总结和复习,也更方便大家阅读


一、选择题

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

  • return 这二个数
  • 形参用数组
  • 形参用二个指针
  • 用二个全局变量

答案:正确答案选择A
A:错误,一个函数只能返回一个结果
B:正确,将形参存在数组中,修改数组中内容,可以通过数组将修改结果带出去
C:正确,形参如果用指针,最终指向的是外部的实参,在函数中对指向指向内容进行修改,改变的就是外部的实参
D:正确,全局变量不受函数的结束而结束,在函数中改变全局变量,主调函数中可以看到改变之后的结果

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

  • 函数可以传值调用,传值调用的时候形参是实参的一份临时拷贝
  • 函数可以传址调用,传址调用的时候,可以通过形参操作实参
  • 函数可以嵌套定义,但是不能嵌套调用
  • 函数可以嵌套调用,但是不能嵌套定义

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

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

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

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

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

  • 函数调用后必须带回返回值
  • 实际参数和形式参数可以同名
  • 函数间的数据传递不可以使用全局变量
  • 主调函数和被调函数总是在同一个文件里

答案:正确答案选择B
A:错误,函数可以没有返回值,如果没有返回值也就不需要待会任何结果

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

C:错误,可以使用全局变量传参

D:错误,不一定,函数的定义可以放在任意的文件中,使用时只需要包含头文件即可

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

  • 形参是实参的一份临时拷贝

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

  • 改变形参就是改变实参

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

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

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

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

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

5.函数调用exec((vl,v2),(v3,v4),v5,v6);中,实参的个数是:( )

  • 3
  • 4
  • 5
  • 6

答案:正确答案选择B

exec((vl,v2),(v3,v4),v5,v6) 总共有四个参数

(v1, v2)属于第一个实参,逗号表达式,真实的参数时v2

(v3,v4)属于第二个实参,逗号表达式,真实的参数是v4

v5属于第三个实参

v6属于第四个实参

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

  • 函数设计应该追求高内聚低耦合
  • 要尽可能多的使用全局变量
  • 函数参数不易过多
  • 设计函数时,尽量做到谁申请的资源就由谁来释放

答案:正确答案选择B
A:正确,高内聚低耦合即:函数体内部实现修改了,尽量不要对外部产生影响,否则:代码不方便维护

B:错误,全局变量每个方法都可以访问,很难保证数据的正确性和安全性

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

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

7.关于C语言函数描述正确的是:( )

  • 函数必须有参数和返回值
  • 函数的实参只能是变量
  • 库函数的使用必须要包含对应的头文件
  • 有了库函数就不需要自定函数了

答案:正确答案选择C

A:错误,可以没有参数和返回值类型,根据需要给出

B:错误,函数的实参可能是变量,也可能是常量,也可能是宏,也可能是指针等等

C:正确,在使用库函数时,必须要包含该库函数所在的头文件,否则编译器将不能识别

D:错误,库函数是语言设计者为了让用户能够更好的使用,而给出的,但并不能解决用户的所有问题,因此其他问题还需要用户自己写方法解决

8.以下叙述中不正确的是:( )

  • 在不同的函数中可以使用相同名字的变量
  • 函数中的形式参数是在栈中保存
  • 在一个函数内定义的变量只在本函数范围内有效
  • 在一个函数内复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)

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

B:正确 在C语言中,函数的形参一般都是通过参数压栈的方式传递的

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

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

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

  • 必须在最开始
  • 必须在库函数的后面
  • 可以任意
  • 必须在最后

答案:正确答案选择C
main函数的位置可以在任意位置,但是如果在主函数之中调用了哪些函数,必须在main函数前对其所调用函数进行生命或包含其被调用函数的头文件。

二、编程题

1.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定如:输入9,输出99口诀表,输出12,输出1212的乘法口诀表。

void PrintMulTable(int N)
{
	for (int i = 1; i <= N; ++i)
	{
		for (int j = 1; j <= i; ++j)
		{
			printf("%d*%d=%2d  ", j, i, j*i);//按宽度为2输出,右对齐方式输出。若不够两位,左边补空格。
		}
		printf("\n");
	}
}

2.实现一个函数来交换两个整数的内容。

方法一 :传址法

void Swap(int *pa, int *pb)
{
	int tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}

方法二:传值法

int swap(a, b)
{
	int change = 0;
	change = a;
	a = b;
	b = change;
	printf("转换后的数字,%d,%d", a, b);
}

3.实现函数判断year是不是润年。

  1. 十年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年
  2. 每四百年再一闰:如果year能够被400整除,则year是闰年
int is_leap_year(int year)
{
	if(((0 == year%4)&&(0!=year%100))||(0==year%400))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

2.实现一个函数,判断一个数是不是素数。利用上面实现的函数打印100到200之间的素数。

返回值:必须要有返回值,0表示不是素数,1表示是素数

int is_prime(int n)
{
	int i = 0;
	for(i=2; i<=sqrt(n); i++)
	{
		if(0 == n%i)
		{
			return 0;
		}
	}
	return 1;
}

总结

以上就是今天的C语言函数相关的题目了,有哪里不正确的欢迎在评论区指正,你的点赞和关注就是对我最大的支持,谢谢

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大一c语言期末考试试题及答案汇总 一、选择题(共10题,每题2分,共20分) 1. 下列哪个不是C语言中的数据类型? A)int B)float C)string D)char 答案:C)string 2. 下列哪个不是C语言中的控制语句? A)if B)while C)repeat D)for 答案:C)repeat 3. 下列哪个不是C语言中的逻辑运算符? A)&& B)|| C)! D)** 答案:D)** 4. 下列哪个不是C语言中的关系运算符? A)> B)< C)= D)>= 答案:C)= 5. 在C语言中,如何声明一个整型变量? A)integer x; B)int x; C)x : integer; D)x = int; 答案:B)int x; 6. 在C语言中,如何实现条件语句的多分支选择? A)if...else B)switch...case C)while D)for 答案:B)switch...case 7. 在C语言中,如何实现循环结构? A)if B)switch C)for D)else 答案:C)for 8. 下列哪个不是C语言中的赋值运算符? A)= B)+= C)== D)-= 答案:C)== 9. 在C语言中,如何定义一个字符串变量? A)string s; B)s : string; C)char s[]; D)char[] s; 答案:C)char s[]; 10. C语言程序的入口函数是? A)Main B)main C)start D)begin 答案:B)main 二、填空题(共5题,每题4分,共20分) 1. 在C语言中,用于输入数据的函数是__________。 答案:scanf 2. 在C语言中,用于输出数据的函数是__________。 答案:printf 3. 在C语言中,用于进行整数除法的运算符是__________。 答案:/ 4. 下面关系运算符中表示“大于等于”的是__________。 答案:>= 5. 在C语言中,用于声明一个字符型变量的关键字是__________。 答案:char 三、编程题(共2题,每题30分,共60分) 1. 编写一个C语言程序,实现输入两个整数,然后输出它们的和。 答案:代码略 2. 编写一个C语言程序,实现输出1到100之间所有能被3整除的数字。 答案:代码略 以上就是大一C语言期末考试的试题及答案汇总。希望同学们能够认真复习,顺利通过考试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值