C语言程序设计练习题之函数_第1页
C语言程序设计练习题之函数_第2页
C语言程序设计练习题之函数_第3页
C语言程序设计练习题之函数_第4页
C语言程序设计练习题之函数_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 对函数而言,下列说法正确的是A一个程序中可以出现一个以上的主函数B 函数与主函数可以互相调用C用户自定义的函数必须有形式参数D 调用函数和被调用函数可以不在同一个文件中2在C+中,确定函数返回值的类型由A return 语句中的表达式类型决定C调用该函数时系统状态决定3下列关于C+函数的叙述中,正确的是A每个函数至少要具有一个参数C函数在被调用之前必须先声明B 调用该函数的主函数类型决定 D 定义函数时所指定的函数类型决定B 每个函数都必须返回一个值 D 函数不能自己调用自己4函数调用语句calc(exp1,(exp2,exp3,exp4); 中,含有的实参个数是A 1B 2C 3D 45

2、调用函数时,若实参是一个数组名,则向函数对应的形参传送的是A数组元素的个数B 数组的首地址C数组第一个元素的值D 数组中全部元素的值6若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是A调用可以作为独立的语句存在C调用可以出现在表达式中7有以下函数定义:void fun( int n, double x) 若以下选项中的变量都已正确定义并赋值,则对函数B 调用可以作为一个函数的实参D 调用可以作为一个函数的形参fun 的正确调用语句是A fun(int y,double m);C fun(x,n);8在C+中,函数的形式参数是A局部变量B全局变量B k=fun(10,12.5);D v

3、oid fun(n,x);C静态变量D外部变量9如果要一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,则这个变量的存储类型应该被说明为A静态变量B自动变量C外部变量D寄存器变量10设有函数原型void test(int a,int b=7,char c="*"); , 下面的函数调用中,属于不合法调用的是A test(5);B test(5,8); C test(6,"#")D test(0,0,"*");11 下面有关重载函数的说法中,正确的是58A重载函数名可以不同C重载函数形参个数必须不同B 重载函数必须有不同

4、的形参列表D 重载函数必须具有不同的返回值类型12下列关于C+函数的说明中,正确的是A内联函数在调用时发生控制转移B 内联函数使用关键字inline 来定义C内联函数就是定义在另一个函数体内部的函数D 编译器会根据内联函数的返回值类型来区分内联函数的不同重载形式13以下叙述中不正确的是A在不同的函数中可以使用相同名字的变量B 函数中的形式参数是局部变量C在一个函数内定义的变量只在本函数范围内有效D 在一个函数内的复合语句中定义的变量在本函数范围内有效14以下叙述中正确的是A局部变量说明为static 存储类,其生存期将得到延长B 全局变量说明为static 存储类,其作用域将被扩大C任何存储类

5、的变量在未赋初值时,其值都是不确定的D 形参可以使用的存储类说明符与局部变量完全相同15. 以下叙述中正确的是A函数的形参都属于全局变量B 全局变量的作用域一定比局部变量的作用域范围大C静态(static)类别变量的生存期贯穿于整个程序的运行期间D 未在定义语句中赋初值的auto 变量和 static 变量的初值都是随机值16. 设宏定义#define P(x) x/x则执行语句cout<<P(4+6)<<endl ;后的输出结果是A 1B 8.5C 11D 11.517. 设宏定义#define N 31 efine Y(n) (N+1)*n)则执行语句cout<

6、;<2*(N+Y(5+1)<<endl ;后的输出结果是A 42B 48C 54D出错18下列程序执行后的输出结果是#include <iostream>using namespace std;inline int MA(int x)return x*(x-1);int main( )int a=1,b=2;cout<<MA(1+a+b)<<endl;return 0;A 6B 819下列程序执行后输出的结果是#include <iostream>using namespace std;int d=1;void fun (int

7、);int main( )int a=3;C 10D 12fun(a);d+=a+;cout<<d<<endl;return 0;void fun (int a)int d=5;d+=a+;cout<<d<<" "A 8 4B 9 620下列程序执行后输出的结果是#include <iostream>using namespace std;int fun(int x , int y);int main( )int a=4,b=5,c=6,x;char d='3'x=fun(fun(a,b),fun(

8、c,d);cout<<x<<endl;return 0;int fun(int x , int y)if(x<y) return x;return y;A 3B 4C9 4 D 8 5C 5D 6二、简答题1请说出const与 #define 相比,有何优点?2内存的分配方式的分配方式有几种?3 static 全局变量与普通的全局变量有什么区别?么区别?4程序中用#include 包含的头文件有什么作用static 局部变量和普通局部变量有什三、程序分析题阅读下列程序,写出程序的运行结果。1 #include <iostream>using names

9、pace std;void reverse(int a,int n);int main( )int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0;reverse(b,8);for(i=5;i<10;i+) s+=bi;cout<<s<<endl;return 0;void reverse(int a,int n)int i,t;for(i=0;i<n/2;i+) t=ai;ai=an-1-i;an-1-i=t; 2 #include <iostream>using namespace std;void f(int a,in

10、t i,int j);int main( )int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0;f(b,0,9);for(i=5;i<10;i+) s+=bi;cout<<s<<endl;return 0;void f(int a,int i,int j)int t;if(i<j)t=ai; ai=aj;aj=t;f(a,i+1,j-1);3 #include <iostream>using namespace std;int f(int n);int main() cout<<f(5)<<” “

11、;cout<<f(8)<<endl;return 0;int f(int n) static int a=2;int b=0;a+=n;b+=a;return b;4 #include <iostream>using namespace std;void f(char p10,int n);int main() char p10="China","America","Russia","England","France"f(p,5);cout<<p0

12、<<","<<p4<<endl;return 0;void f(char p10,int n)char t10;int i,j;for(i=0;i<n-1;i+)for(j=i+1;j<n;j+)if(strcmp(pi,pj)<0) strcpy(t,pi); strcpy(pi,pj); strcpy(pj,t);5 #include <iostream>using namespace std;int func(int n);int main()cout<<func(45)<<en

13、dl;return 0;int func(int n)int count=0;while (n)count+;n = n&(n-1); return count;四、程序填充题请将下列程序横线处缺少的部分补上,使其能正确运行。1将字符串中的每个字符的ASCII 码用十六进制数输出。例如,字符“a”的ASCII码为01100001,输出为61。#include <iostream>using namespace std;void char2Hex( char c );int main()char str = "I love China!"for( int

14、i=0; i <i+)/ ( 1 )char2Hex(stri);cout << endl;return 0;void char2Hex(char c) / 将字符以16 进制表示char ch,cl;ch = c/0x10 + '0'if( ch > '9' ) ch +=;/ ( 2)考虑“A ” “ F”的情况cl = c%0x10 + '0'if( cl > '9' ) cl += ;/ ( 3)cout << ch << cl << ' '

15、2输出Fibnacci 序列的前20 个数。#include <iostream>using namespace std;int fib(int n);int main() int i;for (i=1;i<=20;i+) cout<<fib(i)<<" "cout<<endl;return 0;int fib(int n) if(n=1|n=2);/ ( 1)else return + ;/ ( 2)3函数 int hextodec(char c) 的功能是将字符串c中保存的十六进制整数转换为十进制整数。#includ

16、e <iostream>using namespace std;int hextodec(char c);int main()char h10;cout<<" 请输入一个十六进制数:"cin>>h;cout<<" 转换为十进制数为"<<hextodec(h)<<endl;return 0;int hextodec(char c)int ;/ ( 1 )while(ci!='0')if (ci>='0' && ci<='

17、;9') n=n*16+;/ ( 2)if (ci>='A' && ci<='F') n=n*16+;/ ( 3)if (ci>='a' && ci<='f') n=n*16+;/ ( 4)i+;/ ( 5) 4编写一个递归函数invert( int a, int k ) ,将指定数组a中的前 k 个元素逆置。#include <iostream> using namespace std; void invert( int a, int k); int m

18、ain()int b10=1,2,3,4,5,6,7,8,9,10;int i;invert(b,7);for(i=0;i<10;i+) cout<<bi<<""cout<<endl;return 0;void invert( int a, int k) int t;if( k>1) invert(a+1,);/ ( 1)t=a0; a0=;/ ( 2)=t;/ ( 3) 5函数void insert_sort(int a , int count) 是用直接插入排序法对指定数组的前count 个元素从小到大排序。直接插入排序法

19、的基本思想是:将整个数组(count 个元素 )看成是由有序的(a0,ai-1)和无序的(ai, aCount-1) 两个部分组成;初始时i 等于1,每趟排序时将无序部分中的第一个元素ai插入到有序部分中的恰当位置,共需进行count-1 趟,最终使整个数组有序。 #include <iostream>using namespace std;void insert_sort(int a,int count); int main()int a10,i;for (i=0;i<10;i+) cin>>ai;insert_sort(a,10);/ (1) a,10cout

20、<<"Atrer sorting"<<endl;for (i=0;i<10;i+)cout << ai <<" "cout <<endl;return 0;void insert_sort(int a , int count)int i, j, t;for(i=1 ; i<count ; i+) / 控制 ai, , acount-1的比较和插入t=ai;j= ;/ (1)while (j>=0 && t<aj) / 在有序部分中寻找元素ai的插入位置;/

21、 (2) j-;/ (3)6已知1900 年 1 月 1 日是星期一,下面的函数count_5_13(int year)用于计算给定的年份 year 中有几个“黑色星期五”。 “黑色星期五”指既是 13 日又是星期五的日期。程序中函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为true(或false)分别表示year是(或不是)闰年。#include <iostream>using namespace std;int count_5_13(int year) ;bool isLeapYear(int year);int main()int ye

22、ar;cin>>year;cout<<count_5_13(year)<<endl;return 0;int count_5_13(int year)int date;/ date 为 0表示星期日,为1 6 分别表示星期一至星期六long days = 0;/ days 记录天数int m, y, c = 0;/ c用于表示黑色星期五的个数if (year < 1900) return -1;/计算从1900 年 1 月 1 日起,至给定年份year 的 1 月 13 日间隔的天数days = 12;for (y = 1900; y < yea

23、r; y+)days += 365;if () days+ ;/ ( 1 )date = (days % 7) + 1) % 7;/ 算出给定年份year 的 1 月 13 日是星期几c = () ? 1 : 0;/ ( 2)for(m = 1; ; m+)/ ( 3)switch (m) case 1: case 3: case 5: case 7: case 8: case 10: case 12:days = 31; break;case 4: case 6: case 9: case 11:days = 30; break;case 2: days = 28;if () days =

24、29;/ ( 4)break;date =(days % 7) + ) % 7;/ ( 5)if ()c+;/ ( 6)return c;bool isLeapYear(int year)if()/ ( 7)return true;elsereturn false;7下面程序完成将自然数1 、 2、N 2按蛇形方式逐个顺序存入N 阶矩阵。例如,N=3 和 N=4 时的矩阵分别如下所示。N=3N467971314162586812151342591113410#include <iostream>#include <iomanip>using namespace std;

25、void makeArray (int n) ;void makeline(int row_start, int col_start, int row_end) ;const int SIZE=10;int aSIZESIZE,num;int main()int i, j, n;for (n=3;n<=SIZE; n+)num = 1;makeArray (n-1);cout<<"N="<<n<<endl;for (i=0;i<n; i+)for (j=0; j<n; j+) cout<<setw(4)<

26、;<aij; cout<<endl; return 0;void makeline(int row_start, int col_start, int row_end)/ 完成矩阵一条斜线的整数填写int i, j, sign;sign=;/ ( 1 )for (i=row_start, j=col_start;>=0; i +=sign,j +=sign)/ ( 2)aij =num+;void makeArray (int n)/ 完成矩阵每条斜线的整数填写int d;for (d = 1; d <= ; d+)/ ( 3)if (d<=n)if (d%

27、2=1) makeline ();/ ( 4)else makeline();/( 5)elseif (d%2=1) makeline ();/( 6)else makeline();/( 7)五、程序设计题1 编写一个函数void uppercase(char s); 将字符串s中的所有小写字母转换为大写字母。2 编写一个函数void strRoR(char str,int n); , 作用是把一个char组成的字符串str循环右移 n 个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”。3 编写一个函数long va(l char s ) , 将整数字符串

28、s转换为数值。例如, 设 s =“ 12345”,执行 val 函数后,函数返回值为整数12345。4 编写一个函数int find_sec_max( int data , int n) ; 找出一个整数数组data中的第二大的数。5编写一个函数void ranking(int a,int b); ,函数的功能是根据N(N<=100 , N=a0)位选手的成绩ai( i =1 , 2, , N) ,将每人的名次存入数组B 的对应元素bi 中。成绩高的选手名次在前,成绩相同的选手名次相同。若有 k 位选手名次相同,则下一个名次增加k。例如,若10 位选手的成绩依次为:85, 86,85,

29、90,88,87, 88,92,84,85则其名次依次为:7, 6, 7,2,3, 5, 3,1 ,10,76编写三个求面积的函数:double Area( double) ;/ 求圆的面积,一个形参为圆的半径double Area( double, double) ;/ 求矩形的面积,两个形参分别为矩形的长宽double Area( double, double, double) ;/ 求三角形的面积,三个形参分别为三角形的三条边然后自行输入数据进行测试。7在扑克牌游戏中,每次游戏开始都要求把54 张牌重新排列一下,称为洗牌。试编写程序将一副扑克牌随机洗好后,顺序输出54 张牌的情况。提示:

30、为使用随机数,C+中有如下两个函数:原型:int rand( void );功能: 函数返回一个在零到RAND_MAX 之间的伪随机整数。原型:void srand( unsigned seed );功能: 设置rand()随机序列种子。对于给定的种子seed, rand()会反复产生特定的随机序列。一、单项选择题I D2 D3C4B5B6D7C8A9A10CII B12 B13 D14A15 C16C17 B18 D19 A20B二、简答题1 1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查;而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能

31、会产生意料不到的错误。2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。2 1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量、静态变量。2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3 从堆上分配,亦称动态内存分配。程序在运行的时候用new 或 malloc 申请任意多少的内存, 程序员自己负责在何时用delete或 free释放内存。动态内存的生存期由程序员决定,使用

32、非常灵活,但问题也最多。4 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。 这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由只能为该源文件内的函数公用,因此可以避于静态全局变量的作用域局限于一个源文件内,免在其它源文件中引起错误。因此, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的

33、生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static 全局变量与普通的全局变量有什么区别:static 全局变量只初使化一次,防止在其他文件单元中被引用;static 局部变量和普通局部变量有什么区别:static 局部变量只被初始化一次,下一次依据上一次结果值;41)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致

34、,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。三、程序分析题1 25 (提示:函数reverse(int a,int n) 的功能是将数组a的前 n 个元素逆序)2 15 (提示:函数f(int a,int i,int j)的功能是将数组a 的第 i 至第 j 个元素逆序)3 7 15 (提示:注意函数中a 是静态变量)4 Russia,America (提示:函数f 的功能是将n 个字符串按由大到小的顺序进行排序。)5 4 (提示:函数func 的功能是统计整数n 的二进制数值中有多少个1 。由于二进制数 1000 - 1 = 0111 ,正好是原数取反。因此,设n

35、对应二进制数为*1000,n-1 ) = * n & (n-1) =1000-1=*0000*011112strlen(str) return 13456n=0,i=0 ci-87 k-2 i-1(2) ('A'-'9'-1)2) fib(n-1) fib(n-2)2) ci-48 或 ci-'0'或 ci- a+10( 2) ak-1( 3)( 2) aj+1 = aj1 ) isLeapYear(y) ( 2) date=54) isLeapYear(year) ( 5) date3)('A'-'9'-

36、1)3) ci-55 或 ci- A+105) return nak-1( 3)aj+1 = t3) m<126) date = 57) year%4=0 && year%100!=0 | year%400=071) row_end>=row_start?1:-14) n,d-1,n+1-d6) 2*n+1-d,n,02) (row_end-i)*sign5) n+1-d,0,n7) 0,d-n-1,2*n+1-d3) 2*n+1五、程序设计题1 #include <iostream> using namespace std; void uppercas

37、e(char s); int main()char str1100="abcd 123 AbCdEf" ;uppercase(str1);cout << str1<<endl;return 0;void uppercase(char s)int i=0;while(si!='0')if(si>='a' && si<='z') si=si-'a'+'A'i+;2 #include <iostream>using namespace s

38、td;#define MAX_LEN 80void strRoR(char str,int n);int main()char strMAX_LEN;int steps;cout<<"请输入一个字符串:"cin>>str;cout<<"请输入循环右移次数:"cin>>steps;strRoR(str,steps);cout<<str<<endl;return 0;void strRoR(char str,int steps)char tmpMAX_LEN;int n;n = strl

39、en(str) - steps;strcpy (tmp, str + n);strcpy (tmp + steps, str);tmpstrlen(str)= '0'strcpy(str, tmp );3 #include <iomanip>using namespace std;long val(char s);int main()long num;char c20;cin>>c;num=val(c);cout<<"num="<<num<<",num/8="<<nu

40、m/8<<endl;return 0;long val(char str)long num=0;int i=0,sign=1;if (str0='-') sign=-1; i+;while (stri>='0' && stri<='9')num=num*10+(stri-'0');i+;num=num*sign;return num;4 #include <iostream>using namespace std;const int MINNUMBER = -32767;int

41、find_sec_max( int data , int n);int main()int a10=34,18,23,56,39,15,89,14,48,24;cout<<find_sec_max(a,10)<<endl;return 0;int find_sec_max( int data , int n)int maxnumber,sec_max;if (n<2)"<<endl;cout<<" 数组中只有"<<n<<" 个数据,无法返回第2 小的数!return MINNU

42、MBER;if (data0>data1)maxnumber=data0;sec_max=data1;elsemaxnumber=data1;sec_max=data0;for ( int i=2 ; i <n; i+)if ( datai>maxnumber )sec_max = maxnumber ;maxnumber = datai ;elseif ( datai > sec_max )sec_max = datai ;return sec_max ;5 #include <iostream>using namespace std;void ranki

43、ng(int a,int b);int main(void)int a101,b101,i,n;cout<<" 请输入参赛选手的人数:"cin>>n;a0=b0=n;cout<<" 请输入 "<<n<<" 个选手的成绩:"<<endl;for (i=1;i<=n;i+)cin>>ai;bi=0;ranking(a,b);cout<<n<<" 个选手的成绩和名次依次为:"<<endl;for

44、(i=1;i<=n;i+)cout<<ai<<""<<bi<<endl;return 0;void ranking(int a,int b)int t101;int i,j,k,n,max,rank;n=a0;for (i=1;i<=n;i+)bi=0;rank=1;i=1;while(i<=n)if (bi=0)max=ai;k=1;tk=i;for (j=i+1;j<=n;j+)if ( bj=0 && aj>=max)if (aj>max)max=aj;k=0;k=k+1;tk=j;for (j=1;j<=k;j+)btj=rank;rank=rank+k;continue; i+;6 #include <iostream>#include <cmath>using namespace std;double Area(double); / 求圆的面积,一个形参为圆的半径double Area(double,double); / 求矩形的面积,两个形参分别为矩形的长宽double Area(dou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论