• 沒有找到結果。

flag=0;  /*标志变量赋初值*/ 

clrscr();  /*清屏,以下是显示功能菜单*/ 

printf("************************\n"); 

printf("*Please select  the  function(0­­3):*\n"); 

printf("*1 Dispiay the calendar of one year.*\n"); 

printf("*2 Dispiay the calendar of one month.*\n"); 

printf("*3 Display the weekday of one day.*\n"); 

printf("*0.Exit*\n”); 

printf("* ***********************\n"); 

scanf("%d",&choice); 

switch(choice) 

case  0: 

clrscr (); 

printf ("Thank you  for use this software.\n");  /*显示信息*/ 

printf("Welcome to use it again\n"); 

flag=1;break; 

case  1:oneyear();break;  /*显示全年*/ 

case  2:onemonth();break;  /*显示某个月*/ 

case  3:oneday();break;  /*确定某一天的星期数*/ 

default:printf("Your choice wrong,please input again."); 

getch(); 

/*结束 switch   */ 

if(flag)  break; 

/*结束 while*/ 

/*结束 main */

程序说明:

(1)该程序包含所有子函数的源文件,根据用户选择的功能调用相应的自定义子函数。

(2)在主程序中,菜单循环显示,用户可以一直使用,直到选择功能键“0” ,退出程序。

习 题

一、选择题 

1.以下说法中正确的是( ) 。 

A.C 语言程序总是从第一个函数开始执行 

B.在 C 语言程序中,要调用的函数必须在 main()函数中定义  C.C 语言程序总是从 main()函数开始执行 

D.C 语言程序中的 main()函数必须放在程序的开始部分 

2.某文件中定义的静态全局变量(或称静态外部变量)其作用域是( ) 。  A.只限某个函数  B.本文件 

C.跨文件  D.不限制作用域 

3.下列叙述中正确的是( ) 。 

A.函数定义不能嵌套,但函数调用可以嵌套

B.函数定义可以嵌套,但函数调用不可以嵌套  C.函数定义和函数调用都不能嵌套 

D.函数定义与函数调用都可以嵌套  4.以下说法中正确的是( ) 。 

A.#define 和 printf 都是 C 语句  B.#define 是 C 语句,而 printf 不是  C.printf 是 C 语句,但#define 不是  D.#define 和 printf 都不是 C 语句  5.有以下函数:

char *fun(char *p)  { return p; }

该函数的返回值是( ) 。 

A.无确切的值  B.形参 p 中存放的地址值  C.一个临时存储单元的地址  D.形参 p 自身的地址值  6.以下是一个自定义函数的头部,其中正确的是( ) 。 

A.int fun(int a[ ],b)  B.int fun(int a[ ],int a)  C.int fun(int *a,int b)  D.int fun(char a[ ][ ],int b)  7.以下关于函数的叙述中,正确的是( ) 。 

A.在函数体中可以直接引用另一个函数中声明为 static 类别的局部变量的值  B.在函数体中至少必须有一个 return 语句 

C.在函数体中可以定义另一个函数  D.在函数体中可以调用函数自身 

8.在 C 语言中,若对函数类型未加显式说明,则函数的隐含类型是( ) 。  A.void  B.double  C.int  D.char  9.下面不正确的描述为( ) 。 

A.调用函数时,实参可以是表达式 

B.调用函数时,实参与形参可以共用内存单元  C.调用函数时,将为形参分配内存单元  D.调用函数时,实参与形参的类型必须一致  10.有关宏定义的正确说明是( ) 。 

A.可出现在一行中的任何位置 

B.只能放在程序的开头,且每一个宏定义单独占一行  C.可出现在程序的任何位置 

D.以#开头的行,可出现在程序的任何位置,通常每一个宏定义只能单独占一行,使 用字符“\”可实现一个宏定义占用若干行 

11.若程序中有宏定义行:

#define N 100

则以下叙述中正确的是( ) 。 

A.宏定义行中定义了标识符 N 的值为整数 100 

B.在编译程序时对 C 源程序进行预处理时用 100 替换标识符 N  C.对 C 源程序进行编译时用 100 替换标识符 N 

D.在运行时用 100 替换标识符 

12.若调用函数的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )

A.函数的实参和其对应的形参共占同一存储单元  B.形参只是形式上的存在,不占用具体存储单元  C.同名的实参和形参占同一存储单元 

D.函数的形参和实参分别占用不同的存储单元  13.C 语言规定,函数返回值的类型是由( ) 。 

A.return 语句中的表达式类型所决定  B.调用该函数时的主调函数类型所决定  C.调用该函数时系统临时决定 

D.在定义该函数时所指定的函数类型所决定 

14.关于函数的定义和调用,以下说法正确的是( ) 。  A.用户若需调用标准库函数,调用前必须重新定义  B.用户可以重新定义标准库函数,该函数将失去原有含义  C.系统根本不允许用户重新定义标准库函数 

D.用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到 用户源文件中,系统自动去调用 

15.C 语言关于实参类型的规定,以下说法不正确的是( ) 。  A.实参可以是常量、变量或表达式 

B.形参可以是常量、变量或表达式  C.实参可以为任何类型 

D.形参应与其对应的实参类型一致 

16.C 语言规定:简单变量做实参时,它和对应形参之间的数据传递方式是( ) 。  A.由用户指定的传递方式 

B.单向值传递 

C.由实参传给形参,再由形参传回给实参  D.地址传递 

17.以下关于实参和形参所占存储单元的叙述中说法正确的是( ) 。  A.在 C 语言中实参和与其对应的形参各占用独立的存储单元  B.在 C 语言中实参和与其对应的形参共占用一个存储单元 

C.在 C 语言中只有当实参和与其对应的形参同名时才共占用存储单元  D.在 C 语言中形参是虚拟的,不占用存储单元 

18.以下对 C 语言函数的有关描述中,正确的是( ) 。 

A.调用函数时,只能将实参的值传送给形参,形参的值不能传送给实参  B.C 函数既可以嵌套定义又可以递归调用 

C.函数必须有返回值,否则不能使用函数 

D.C 程序中有调用关系的所有函数必须放在同一个源程序文件中  19.若调用一个函数,且此函数中没有 return 语句,则该函数( ) 。 

A.没有返回值  B.返回若干个系统默认值  C.能返回一个用户所希望的值  D.返回一个不确定的值 

20.若己定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( ) 。  A.函数调用可以作为独立的语句存在 

B.函数调用可以作为另一个函数的实参

C.函数调用可以出现在表达式中  D.函数调用可以作为另一个函数的形参  21.以下函数调用语句的实参个数为( ) 。

fun((ex1,exp2),(exp3,exp4,exp5)); 

A.1  B.2  C.4  D.5 

22.以下函数值的类型是( ) 。 fun(float x) 

{ float y; 

y=3*x­4; 

return y; 

A.int  B.不确定  C.void  D.float  23.若有以下程序,则以下叙述中不正确的是( )

#include<stdio.h> 

void f(int n)  void main()  void f(int n); 

f(5); 

void f(int n)  {printf("%d\n",n);} 

A.若只在主函数中对函数 f 进行说明,则只能在主函数中正确调用函数 f 

B.若在主函数前对函数 f 进行说明,则在主函数和其后的其他函数中都可以正确 调用函数 f 

C.对于以上程序,编译时系统会提示出错信息,提示对函数 f 重复说明  D.函数 f 无返回值,所以可用 void 将其类型定义为无值型 

24.一个 C 语言源程序文件中所定义的全局变量的作用域为( ) 。  A.所在文件的全部范围 

B.所在程序的全部范围  C.所在函数的全部范围 

D.由具体定义位置和 exlern 说明来决定范围 

25.在 C 语言中,存储类型为( )的变量只有在使用它们时才占存储空间。 

A.static 和 auto  B.register 和  auto  C.static 和 register  D.register 和 extern 

26.若一个外部变量的定义形式为 static int x;则 static 的作用应当是( ) 。  A.将变量存放在静态存储区  B.使变量 X 可以由系统初始化  C.使变量 X 只能在本文件内使用  D.使 X 的值可以永久保留 二、填空题 

1.编译预处理的三种形式除宏定义外,还有__________和__________。 

2.C 语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是__________。 

3.C  语言变量按其作用域可分为__________和__________,按其生存期可分为__________ 

和__________。 

4.C 语言变量的存储类别有__________、__________、__________和__________。

三、阅读程序,写出执行结果 

1.以下程序的运行结果是( ) 。 int w=0; 

void fun() 

printf("%d,",w); 

void main() 

int w=5; 

printf("%d,",w); 

fun(); 

printf("%d,",w); 

2.以下程序的运行结果是( ) 。 int k=1; 

void fun(int n) 

m+=k; 

k+=m; 

printf("%d,5d",m,k); 

int j=2; 

main() 

int i=3; 

fun(i); 

printf("%d,%d,%d\n",i,j,k); 

3.以下程序的运行结果是( ) 。

#define F(x)  4*x*x+1  main() 

{   int i=1,j=3; 

printf("%d,%d",F(5)*2,F(i+j)*2); 

4.以下程序的运行结果是( ) 。

#include<stdio.h> 

fun(int x,int ,y,int z)  z=x*x+y*y; 

returnz; 

void main()  { int a=31; 

fun(5,2,a); 

printf("%d",a); 

5.以下程序的运行结果是( )。

#include<stdio.h> 

float fun(int x,int y)  return(x+y); }

void main() 

{  int a=2,b=3,c=8; 

printf("%3.0f\n",fun((int)fun(a+c,b),a­c)); 

6.以下程序的运行结果是( )。

#include<stdio.h> 

int f(int n) 

if(n==1) return 1; 

else return f(n­1)+1; 

void main()  int i,j=0; 

for(i=1;i<3;i++)  j+=f(i); 

printf("%d\n",j); 

7.以下程序的运行结果是( )。

void main() 

int i,j,x,y,n,g; 

void fun(int i,int j); 

i=2;j=3;g=x=5;y=9;n=7; 

fun(n,6); 

printf("g=%d;i=%d;j=%d\n",g,i,j); 

printf("x=%d;y=%d\n",x,y); 

fun(n,6); 

void fun(int i,int j) 

int x,y,g; 

g=8;x=7;y=2; 

printf("g=%d;i=%d;j=%d\n",g,i,j); 

printf("x=%d;y=%d\n",x,y); 

x=8;y=6; 

8.以下程序的运行结果是( )。 void main() 

int i,j; 

int ran(); 

int rand(); 

for(i=0;i<3;i++) 

for(j=0;j<2;j++) 

printf("%3d",ran()); 

printf("\n"); 

for(i=0;i<3;i++) 

for(j=0;j<2;j++)

printf("%3d",rand()); 

printf("\n"); 

int ran() 

static int see=1234,n; 

printf("(see=%4d)”,see); 

see=(see+25543)%7415; 

n=(see%1000)/10; 

return(n); 

int rand() 

int see=1234,n; 

printf("(see=%4d) ",see); 

see=(see+25543)%7415; 

n=(see%1000)/10; 

return(n); 

9.以下程序的运行结果是( )。

#include"stdio.h" 

#define LOW 0 

#define HIGH 5 

#define CHANGE 2  int i=LOW; 

void main() 

int workover(int i); 

int reset(int i); 

int i=HIGH; 

reset(i/2); 

printf("i=%d\n",i); 

reset(i=i/2); 

printf("i=%d\n",i); 

reset(i/2); 

printf("i=%d\n",i); 

workover(i); 

printf("i=%d\n",i); 

int workover(int i) 

i=(i%i)*((i*i)/(2*i)+4);; 

printf("i=%d\n",i); 

return(i); 

int reset(int i) 

i=i<=CHANGE?HIGH:LOW; 

return(i); 

}

四、编程题 

1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,

并输出结果,两个整数由键盘输入。 

2.采用函数的调用,编写程序求三个数中的最大数。 

3.设计一个求 100~200 间所有素数之和的程序,其中素数的判定用函数实现。 

4.采用函数调用的方法,编程求梯形的面积(上底、下底和高的值从键盘输入)。  5.利用递归函数调用方式,将所输入的 5 个字符以相反顺序打印出来。

相關文件