资源描述
C语言习题(7)
第7章 函数
一.填空题
1. C语言中从函数的形式分可分为无参函数和 。
2. 在C语言中,一个自定义函数一般由两部分组成,它们是函数首部和 。
3. 从用户使用角度看,函数有两种:标准函数和 。
4. 若一个函数不需要形参,则在定义该函数时应使形参表为空或者放置一个标识符 。
5. 有函数调用fun1(x+y, (y,z), 10, fun((x,y-1))); 函数fun1有 个参数。
6. 已知函数定义:void dothat(int n, double x) { …… },其函数申明的两种写法为_________________________,_________________________。
7. C语言变量按其作用域分为 和 ;按其生存期分为___________和 。
8. C语言变量的存储类别有 , , 和 。
9. 凡在函数中未指定存储类别的局部变量,其默认的存储类别为 。
10. 在一个C程序中,若要定义一个只允许根源程序文献中所有函数使用的全局变量,则该变量需要定义的存储类别为 。
11. C语言中,形式参数的缺省存储类型是 。
12. C语言中,若为指定函数是内部函数或外部函数,则默认该函数是 。
二.选择题
1. 如下正确的说法是___________。
A)用户若需要调用标准库函数,调用前必须重新定义
B)用户能够重新定义标准库函数,如若此,该函数将失去原有定义
C)系统不允许用户重新定义标准库函数
D)用户若需要使用标准库函数,调用前无须使用预处理命令将该函数所在的头文献包括编译,系统会自动调用。
2. 如下正确的函数定义是___________。
A)double fun(int x, int y); B)int fun(int x,y)
{ z=x+y ; return z ; } { int z ; return 3;}
C)double fun (x,y) D)double fun (int x, int y)
{ int x, y ; double z ; { double z ; z=x+y;
z=x+y ; return z ; } return z ; }
3. C语言中,简单变量做实参和形参时,如下正确的说法是___________。
A)实参和与其对应的形参各占用独立的存储单元
B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共占用相同的存储单元
D)形参时虚拟的,不占用存储单元
4. C语言要求,简单变量做实参时,它和对应的形参之间的数据传递方式是___________。
A)地址传递
B)单向值传递
C)有实参传给形参,再由形参传给实参
D)由用户指定传递方式
5. C语言要求,函数返回值的类型是由___________决定的。
A)return语句中的体现式类型 B)调用该函数时的主调函数类型
C)调用该函数时由系统暂时 D)在定义函数时所指定的函数类型
6. 如下正确的描述是___________。
A)函数的定义能够嵌套,但函数的调用不能够嵌套
B)函数的定义不能够嵌套,但函数的调用能够嵌套
C)函数的定义和函数的调用均不能够嵌套
D)函数的定义和函数的调用均能够嵌套
7. 若用数组名作为函数调用的实参,传递给形参的是___________。
A)数组的首地址 B)数组中第一个元素的值
C)数组中的所有元素的值 D)数组元素的个数
8. 假如在一个函数中的复合语句中定义了一个变量,则该变量___________。
A)只在该复合语句中有定义 B)在该函数中有定义
C)在本程序范围内有定义 D)为非法变量
9. 如下不正确的说法是___________。
A)在不一样函数中能够使用相同名字的变量
B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有定义
D)在函数内的复合语句中定义的变量在本函数范围内有定义
10. 有关函数申明,如下不正确的说法是___________。
A)假如函数定义出目前函数调用之前,能够无须加函数原型申明
B)假如在所有函数定义之前,在函数外部已做了申明,则各个主调函数无须再做函数原型申明
C)函数在调用之前,一定要申明函数原型,确保编译系统进行全面的调用检查
D)标准库不需要函数原型申明
11. 如下func()函数的调用中实参的个数是___________。
func((exp1,exp2),(exp3,exp4,exp5));
A)1 B)2 C)3 D)5
12. 有如下程序,该程序的输出成果是___________。
int func(int a, int b)
{ return (a+b); }
int main()
{ int x=2,y=5,z=8,r;
r=func(func(x,y), z);
printf(“%d\n”,r);
return 0; }
A)12 B)13 C)14 D)15
13. 如下程序运行的成果是___________。
void fun(int a, int b, int c)
{a=456; b=567; c=678;}
int main()
{ int x=10,y=20,z=30;
fun(x,y,z);
printf(“%d,%d,%d”,x,y,z);
return 0; }
A)30,20,10 B)10,20,30 C)456,567,678 D)678,567,456
14. 如下程序运行的成果是___________。
void fun(int b)
{if(b>0) fun(b-1);
printf(“%d”,b);}
int main()
{ int a=5; fun(a); return 0;}
A)54321 B)012345 C)12345 D)543210
15. 函数f定义如下,执行语句sum=f(5)+f(3);后,sum的值应为___________。
int f(int m)
{ static int i=0; int s=0;
for(;i<=m;i++) s+=i;
return s; }
A)21 B)16 C)15 D)8
16. 如下程序运行的成果是___________。
void reverse(int a[], int n)
{ int i,t;
for(i=0;i<n/2;i++)
{t=a[i]; a[i]=a[n-1-i]; a[n-1-i]=t;}
}
int main()
{ int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0;
reverse(b,8);
for(i=6;i<10;i++) s+=b[i];
printf(“%d\n”,s);
return 0; }
A)22 B)10 C)34 D)30
三.程序阅读题
1. 写出下面程序的运行成果___________。
#include<stdio.h>
int a,b;
void fun()
{ a=100;b=200;}
int main()
{ int a=5,b=7;
fun();
printf(“a=%d,b=%d\n”,a,b);
return 0; }
2. 如下程序的第一行的输出成果是是___________,第二行的输出成果是___________,第三行的输出成果是___________,第四行的输出成果是___________。
#include<stdio.h>
int main()
{ int a=5,b=-3,c=-7;
printf(”%d,%d,%d\n”,a,b,c);
{ int b=8;float c=9.9;
printf(“%d,%d,%.1f\n”,a,b,c);
a=b;
{ int c=b;
printf(”%d,%d,%d\n”,a,b,c); }
}
printf(”%d,%d,%d\n”,a,b,c);
return 0; }
3. 写出下面程序的运行成果___________。
#include<stdio.h>
void swap1(int c[])
{ int t;
t=c[0];c[0]=c[1];c[1]=t;}
void swap2(int c0,int c1)
{ int t;
t=c0; c0=c1;c1=t; }
int main()
{ int a[2]={3,5},b[2]={3,5};
swap1(a); swap2(b[0],b[1]);
printf("%d,%d,%d,%d\n",a[0],a[1],b[0],b[1]);
return 0;
}
4. 如下程序的输出成果第一行是___________,第二行是___________,第三行是___________。
#include<stdio.h>
int n=1;
void func()
{ static int x=4;
int y=10;
x=x+2;
n=n+10;
y=y+n;
printf("FUNC: x=%d y=%d n=%d\n",x,y,n);}
void main()
{ int x=5,y;
y=n;
printf("MAIN:x=%d y=%d n=%d\n",x,y,n);
func( );
printf("MAIN:n=%d\n",n);
}
5. 写出下面程序的运行成果___________。
#include<stdio.h>
int max_value(int array[][4],int i)
{ int j,max;
max=array[i][0];
for (j=0; j<4; j++)
if (max<array[i][j]) max=array[i][j];
return(max);
}
int main ( )
{ int a[3][4]={{1,3,5,7},{2,4,6,8},{12,15,56,32}},i;
for (i=0; i<3; i++)
printf(“%d\n”,max_value(a,i));
return 0; }
6. 写出下面程序的运行成果___________。
#include<stdio.h>
int func (int array[][4], int m)
{ int i,j,k=0;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]<m) k=k+array[i][j];
return (k) ;
}
int main ( )
{ int a[3][4]={1,13,5,7,2,4,26,8,10,1,3,12};
int m;
m=10;
printf(“%d\n”,func(a,m)) ;
return 0;
}
7. 写出下面程序的运行成果___________。
#include<stdio.h>
void main()
{ int add(int x,int y);
int a=1,b=2,x1,x2,x3;
x1=add(a,b);
x2=add(a,b);
x3=add(a,b);
printf("%d,%d,%d\n",x1,x2,x3);
}
int add(int x,int y)
{ static int z=1;
z=x+y+z;
return(z);
}
8. 如下程序运行时第一行、第二行、最后一行分别输出为___________、___________、___________。
#include<stdio.h>
int sub(int n)
{ int a;
if(n==1)a=1;
else a=n+sub(n-1);
printf("%d\n",a);
return(a);
}
int main()
{ int i=5;
printf("%d\n",sub(i));
return 0;
}
四.程序填空题
1. 如下程序的功效是:用average函数计算平均成绩。
#include<stdio.h>
float average(float array[],int n)
{ float sum=0,ave;
int i;
for(i=0;i<n;i++)
sum+=array[i];
ave=(【 1 】);
【 2 】; }
int main()
{ float score[10],aver;
int i;
for(i=0;i<10;i++)
scanf(“%f”,&score[i]);
aver=average【 3 】;
printf(“aver=%f\n”,aver);
return 0; }
2. 函数void fun(char s[],char c)的功效是从字符串s中删除字符c,在主函数中输入要删除的字符,并将删除后的字符输出。
#include<stdio.h>
void fun(char s[],char c)
{ int i,j;
for(i=0,j=0;s[i]!=’\0’;i++)
if(【 1 】) s[j++]=s[i];
s[j]=’\0’;
}
int main()
{ char str[80]=”adadfeeafard”,ch;
scanf(“%c”,&ch);
fun(【 2 】,ch);
【 3 】;
return 0; }
3. 下面程序用“折半查找法”从有10个数的a数组中对核心字m查找,若找到,返回其下标值,否则返回-1,请填空。
#include<stdio.h>
int search(int a[10],int m)
{ int x1=0,x2=9,mid ;
while (x1<=x2) {
mid = (x1+x2)/2;
if (m<a[mid]) 【 1 】;
else if (m>a[mid]) 【 2 】;
else return (mid) ;
}
return (-1) ;
}
int main()
{ int a[10]={1,4,6,8,12,44,55,67,89,98},key,k;
printf("please input:");
scanf("%d",&key);
k=【 3 】;
if(k==-1) printf("can't find!\n");
else printf("pos=%d\n",k);
return 0;
}
4. 下面程序的功效是将一个字符串中元音字母复制到另一个字符串,然后输出,请填空。
#include <stdio.h>
int main()
{【 1 】
char str[80],c[80];
printf("input string:");
【 2 】
cpy(str,c);
printf("The vowel letters are:%s\n",c);
return 0;
}
void cpy(char s[],char c[])
{ int i,j;
for (i=0,j=0;s[i]!='\0';i++)
if (s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||
s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U')
{【 3 】;
j++;
}
【 4 】
}
5. 下面程序的功效是给出年、月、日,计算该日是该年的第几天,请填空。
#include <stdio.h>
int main()
{int sum_day(int month,int day);
int leap(int year);
int year,month,day,days;
printf("input date(year,month,day):");
scanf("%d,%d,%d",&year,&month,&day);
printf("%d/%d/%d ",year,month,day);
days=sum_day(month,day);
if(leap(year)&&month>=3)
【 1 】
printf("is the %dth day in this year.\n",days);
return 0;
}
int sum_day(int month,int day)
{int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
for (i=1;i<month;i++)
【 2 】];
return(day);
}
int leap(int year)
{int leap;
if(【 3 】) leap=1;
else leap=0;
return(leap);
}
展开阅读全文