⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 练习(三).txt

📁 谭浩强的C语言题集
💻 TXT
📖 第 1 页 / 共 3 页
字号:
函数
一、选择题
1、以下正确的说法是(   )		//此题不妥!
   建立函数的目的之一是
   (A) 提高程序的执行效率
   (B) 提高程序的可读性
   (C) 减少程序的篇幅
   (D) 减少程序文件所占内存
2、以下正确的说法是(   )
   (A) 用户若需要调用标准库函数,调用前必须重新定义
   (B) 用户可以重新定义标准库函数,若如此,该函数将失去原有含义
   (C) 系统根本不允许用户重新定义标准库函数
   (D) 用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调
3、以下正确的函数声明形式是(   )
   (A) double fun(int x, int y)
   (B) double fun(int x; int y)
   (C) double fun(int x, int y);
   (D) double fun(int x,y);
4、以下正确的函数形式是(   )
   (A) double fun(int x, int y) { z=x+y; return z;}
   (B) fun(int x,y) { int z; return z;}
   (C) fun(x,y) { int x,y; double z; z=x+y; return z;}
   (D) double fun(int x, int y) { double z; z=x+y; return z;}
5、以下正确的说法是(   )
   在C语言中
   (A) 实参和与其对应的形参各占用独立的存储单元
   (B) 实参和与其对应的形参共占用一个存储单元
   (C) 只有当实参和与其对应的形参同名时才共占用存储单元
   (D) 形参是虚拟的,不占用存储单元
6、若调用一个函数,且此函数中没有return语句,则正确的说法是(   )
   该函数
   (A) 没有返回值
   (B) 返回若干个系统默认值
   (C) 能返回一个用户所希望的函数值
   (D) 返回一个不确定的值
7、以下不正确的说法是(   )
   C语言规定
   (A) 实参可以是常量、变量和表达式
   (B) 形参可以是常量、变量和表达式
   (C) 实参可以为任意类型
   (D) 形参应与其对应的实参类型一致
8、以下正确的说法是(   )
   (A) 定义函数时,形参的类型说明可以放在函数体内
   (B) return后边的值不能为表达式
   (C) 如果函数值的类型与返回值类型不一致,以函数值类型为准
   (D) 如果形参与实参的类型不一致,以实参类型为准
9、C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是(   )
   (A) 地址传递
   (B) 单向值传递
   (C) 由实参传给形参,再由形参传回给实参
   (D) 由用户指定传递方式
10、以下程序有语法性错误,有关错误原因的正确说法是(   )
	void main()
	{
		int G=5,k;
		void prt_char();
		......
		k=prt_char(G);
		......
	}
   (A) 语句void prt_char(); 有错,它是函数调用语句,不能用void说明
   (B) 变量名不能使用大写字母
   (C) 函数说明和函数调用之间有矛盾
   (D) 函数名不能使用下划线
11、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是(   )
   (A) float型
   (B) int型
   (C) long型
   (D) double型
12、C语言规定,函数返回值的类型是由(   )
   (A) return语句中的表达式类型所决定
   (B) 调用该函数时的主调函数类型所决定
   (C) 调用该函数时系统临时决定
   (D) 在定义该函数时所指定的函数类型所决定
13、下面函数调用语句含有实参的个数为(   )
	func((exp1,exp2),(exp3,exp4,exp5));
   (A) 1
   (B) 2
   (C) 4
   (D) 5
14、以下错误的描述是不是(   )
    函数调用可以
   (A) 出现在执行语句中
   (B) 出现在一个表达式中
   (C) 做为一个函数的实参
   (D) 做为一个函数的形参
15、以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。
	#include<stdio.h>
	#include<math.h>
	float f(float,float);
	void main()
	{
		float x,y,z,sum;
		scanf("%f%f%f",&x,&y,&z);
		sum=f(  ①  )+f(  ②  );
		printf("sum=%f\n",sum);
	}
	float f(float a,float b)
	{
		float value;
		value=a/b;
		return(value);
	}
① (A) x-y,x+y
   (B) x+y,x-y
   (C) z+y,z-y
   (D) z-y,z+y
② (A) x-y,x+y
   (B) x+y,x-y
   (C) z+y,z-y
   (D) z-y,z+y
16、以下正确的描述是(   )
    在C语言中
   (A) 函数的定义可以嵌套,但函数的调用不可以嵌套
   (B) 函数的定义不可以嵌套,但函数的调用可以嵌套
   (C) 函数的定义和函数的调用均不可以嵌套
   (D) 函数的定义和函数的调用均可以嵌套
17、以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有这样的数及其个数。请选择填空。①(   )②(   )
	sub(int k,int n)
	{
		int a1,a2;
		a2=  ①  ;
		a1=k-  ②  ;
		if((K%3==0&&a2==5)||(k%3==0&&a1==5))
		{
			printf("%d",k);
			n++;
			return n;
		}
		else return -1;
	}
	void main()
	{
		int n=0,k,m;
		for(k=10;k<=99;k++)
		{
			m=sub(k,n);
			if(m!=-1) n=m;
		}
		printf("\nn=%d",n);
	}
① (A) k*10
   (B) k%10
   (C) k/10
   (D) k*10%10
② (A) a2*10
   (B) a2
   (C) a2/10
   (D) a2%10
18、以下是有关汉诺塔问题的程序段,若在main函数中有调用语句hanoi(3,'A','B','C'); 则符合程序运行结果的选项是(   )
	void move(char getone,char putone)
	{
		printf("%c-->%c\n",getone,putone);
	}
	void hanoi(int n,char one,char two,char three)
	{
		if(n==1) move(one,three);
		else
		{
			hanoi(n-1,one,three,two);
			move(one,three);
			hanoi(n-1,two,one,three);
		}
	}
   (A) A-->C
       A-->B
       C-->B
       B-->A
       C-->B
       A-->C
       A-->B
   (B) A-->C
       A-->B
       C-->A
       A-->B
       B-->C
       A-->C
       A-->B
   (C) A-->C
       A-->B
       C-->B
       A-->C
       B-->A
       B-->C
       A-->C
   (D) A-->C
       A-->B
       C-->B
       A-->C
       A-->B
       B-->C
       A-->C
19、若用数组名作为函数调用的实参,传递给形参的是(   )
   (A) 数组的首地址
   (B) 数组第一个元素的值
   (C) 数组中全部元素的值
   (D) 数组元素的个数
20、已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式为(   )
	int a[3][4];
	f(a);
   (A) f(int array[][6])
   (B) f(int array[3][])
   (C) f(int array[][4])
   (D) f(int array[2][5])
21、若使用一维数组名作函数实参,则以下正确的说法是(   )
   (A) 必须在主调函数中说明此数组的大小
   (B) 实参数组类型与形参数组类型可以不匹配
   (C) 在被调函数中,不需要考虑形参数组的大小
   (D) 实参数组名与形参数组名必须一致
22、折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位于中间点元素的值。如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。请选择填空。①(   )②(   )
	binary(int a[10],int m)
	{
		int low=0,high=9,mid;
		while(low<=high)
		{
			mid=(low+high)/2;
			if(m<a[mid])  ①  ;
			else if(m>a[mid]  ②  ;
			else return mid;
		}
		return -1;
	}
① (A) high=mid-1
   (B) low=mid+1
   (C) high=mid+1
   (D) low=mid-1
② (A) high=mid-1
   (B) low=mid+1
   (C) high=mid+1
   (D) low=mid-1
23、以下正确的说法是(   )
    如果在一个函数中的复合语句中定义了一个变量,则该变量
   (A) 只在该复合语句中有效
   (B) 在该函数中有效
   (C) 在本程序范围内均有效
   (D) 为非法变量
24、以下不正确的说法为(   )
   (A) 在不同函数中可以使用相同名字的变量
   (B) 形式参数是局部变量
   (C) 在函数内定义的变量只在本函数范围内有效
   (D) 在函数内的复合语句中定义的变量在本函数范围内有效
25、以下程序的正确运行结果是(   )
	#define MAX 10
	int a[MAX],i;
	void main()
	{
		printf("\n"); sub1(); sub3(a); sub2(); sub3(a);
	}
	sub2()
	{
		int a[MAX],i,max;
		max=5;
		for(i=0;i<max;i++) a[i]=i;
	}
	sub1()
	{
		for(i=0;i<MAX;i++) a[i]=i+1;
	}
	sub3(int a[])
	{
		int i;
		for(i=0;i<MAX;i++) printf("%d",a[i]);
		printf("\n");
	}
   (A) 0 2 4 6 8 10 12 14 16 18
       0 1 2 3 4
   (B) 0 1 2 3 4
       0 2 4 6 8 10 12 14 16 18
   (C) 0 1 2 3 4 5 6 7 8 9
       0 1 2 3 4
   (D) 0 2 4 6 8 10 12 14 16 18
       0 2 4 6 8 10 12 14 16 18
26、以下程序的正确运行结果是(   )
	#include<stdio.h>
	void num()
	{
		extern int x,y; int a=15,b=10;
		x=a-b;
		y=a+b;
	}
	int x,y;
	void main()
	{
		int a=7,b=5;
		x=a+b;
		y=a-b;
		num();
		printf("%d,%d\n",x,y);
	}
   (A) 12,2
   (B) 不确定
   (C) 5,25
   (D) 1,12
27、凡是函数中未指定存储类别的局部变量,其隐含的存储类别为(   )
   (A) 自动(auto)
   (B) 静态(static)
   (C) 外部(extern)
   (D) 寄存器(register)
28、在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是(   )
   (A) extern
   (B) register
   (C) auto
   (D) static
29、以下程序的正确运行结果是(   )
	void main()
	{
		int a=2,i;
		for(i=0;i<3;i++) printf("%4d",f(a));
	}
	f(int a)
	{
		int b=0; static int c=3;
		b++; c++;
		return(a+b+c);
	}
   (A) 7  7  7
   (B) 7 10 13
   (C) 7  9 11
   (D) 7  8  9
30、以下程序的正确运行结果是(   )
	#include<stdio.h>
	void main()
	{
		int k=4,m=1,p;
		p=func(k,m); printf("%d,",p);
		p=func(k,m); printf("%d\n",p);
	}
	func(int a,int b)
	{
		static int m=0,i=2;
		i+=m+1;
		m=i+a+b;
		return(m);
	}
   (A) 8,17
   (B) 8,16
   (C) 8,20
   (D) 8,8
二、填空题
31、C语言规定,可执行程序的开始执行点是________。
32、在C语言中,一个函数一般由两个部分组成,他们是________和________。
33、若输入的值是-125,以下程序的运行结果是________。
	#include "math.h"
	void main()
	{
		int n;
		scanf("%d",&n);
		printf("%d=",n);
		if(n<0) printf("-");
		n=fabs(n);
		fun(n);
	}
	fun(int n)
	{
		int k,r;
		for(k=2;k<=sqrt(n);k++)
		{
			r=n%k;
			while(r==0)
			{
				printf("%d",k);
				n=n/k;
				if(n>1) printf("*");
				r=n%k;
			}
		}
		if(n!=1) printf("%d\n",n);
	}
34、下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部分是________;改正后为________。
	void add(float a,float b)
	{
		float c;
		c=a+b;
		return c;
	}
35、以下程序的运行结果是________。
	void main()
	{
		int i=2,x=5,j=7;
		fun(j,6);
		printf("i=%d; j=%d; x=%d\n",i,j,x);
	}
	fun(int i,int j)
	{
		int x=7;
		pirntf("i=%d; j=%d; x=%d\n",i,j,x);
	}
36、以下程序的运行结果是________。
	void main()
	{
		increment();
		increment();
		increment();
	}
	increment()
	{
		int x=0;
		x+=1;
		printf("%d",x);
	}
37、以下程序的运行结果是________。
	void main()
	{
		int a=1,b=2,c;
		c=max(a,b);
		printf("max is %d\n",c);
	}
	max(int x, int y)
	{
		int z;
		z=(x>y)?x:y;
		return(z);
	}
38、以下程序的功能是根据输入的"y"("Y")与"n"("N"),在屏幕上分别显示出"This is YES."与"This is NO."。请填空。
	#include<stdio.h>
	void YesNo(char ch)
	{
		switch(ch)
		{
		case 'y':
		case 'Y': printf("\nThis is YES.\n"); ________;
		case 'n':
		case 'N': printf("\nThis is NO.\n");
		}
	}
	void main()
	{
		char ch;
		printf("\nEnter a char 'y','Y' or 'n','N': ");
		ch=________;
		printf("ch:%c",ch);
		YesNo(ch);
	}
39、以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示"WELL DONE!!",否则显示计算后的值。已有函数调用语句Check(ponse,value); 请填空。
	void Check(int ponse,float value)
	{
		int val;
		val=________;
		printf("计算后的值:%d",val);
		if(________) printf("\nWELL DONE!!!\n");
		else printf("\nSorry the correct answer is %d\n",val);
	}
40、以下程序的功能是________。
	#include<stdio.h>
	f(int n)
	{
		int i,j,k;
		i=n/100; j=n/10-i*10; k=n%10;
		if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) return n;
		else return 0;
	}
	void main()
	{
		int n,k;
		printf("output");
		for(n=100;n<1000;n++)
		{
			k=f(n);
			if(k!=0) printf("%d",k)
		}
		printf("\n");
	}
41、以下程序的功能是用二分法求方程2*x*x*x-4*x*x+3x-6=0的根,并要求绝对误差不超过0.001。请填空
	#include<stdio.h>
	float f(float x){return 2*x*x*x-4*x*x+3*x-6;}
	void main()
	{
		float m=-100,n=90,r;
		r=(m+n)/2;
		while(f(r)*f(n)!=0)
		{
			if(________) m=r;
			else n=r;
			if(________) break;
			r=(m+n)/2;
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -