文档库 最新最全的文档下载
当前位置:文档库 › 函数和编译预处理

函数和编译预处理

函数和编译预处理
函数和编译预处理

函数和编译预处理(第五章)

一、单项选择题

1.关于函数,以下正确的描述是( B)

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

B. 函数的定义不可以嵌套,但函数的调用可以嵌套

C. 函数的定义可以嵌套,函数的调用也可以嵌套

D. 函数的定义和函数的调用都不可以嵌套

2.关键字inline用于定义内联函数,定义时,是将该关键字( D )

A. 取代定义函数的类型标识符

B. 取代被定义的函数名

C. 加在类型标识符之后

D. 加在类型标识符之前

3.以下不正确的描述为( B )

A. 在函数之外定义的变量称为外部变量,外部变量是全局变量。

B. 在函数之内说明的外部变量是局部变量,仅在本函数中有效。

C. 在函数之外说明的静态变量也是全局变量,其作用域是文件作用域。

D. 文件作用的域范围是一个程序文件,但必须符合“定义在前,使用在后”的规则。4.以下正确的描述为( C )

A. 每个C++程序必须在开头用预处理命令#include

B. 预处理命令必须位于C++源程序的首部

C. 在C++中,预处理命令都以#开头

D. C++语言的预处理命令只能实现宏定义和条件编译的功能

5.在下面的函数原型说明中,存在着语法错误的是( D )

A.void BC(int a,int);

B.void BD(int , int);

C.void BE(int , int=5);

D.int BF(int x ; int y);

6.下列哪个不是重载函数在调用时选择的依据( C )

A. 形参类型

B. 形参个数

C. 函数返回值类型

D. 函数名

7.在一个源程序文件中有以下函数定义,其中( D )是重载函数。

A.ABC B. BCD

C. ACD

D. 全部

A) int sum(float x,int y) B) float sum(float x,int y,char z)

{...} {...}

C) float sum(float x,float y) D) int sum(int x,int y,char z)

{...}{...}

8.有一个函数原型abc(float x,float y);该函数的返回值类型为( C )

A. void

B. double

C. int

D. float

9.在程序中,函数声明语句正确位置是( D )

A. 随便任何位置

B. 不包含在另一函数中的任何位置。

C. 该函数使用前的任何位置

D. 该函数使用前的任何位置,但不包含在另一函数中

10.C++构造内联函数的思想是( A )

A. 用空间换时间

B. 用时间换空间

C. 用形参换实参

D. 用实参换形参

11.在以下存储类型中,( D )是用于定义动态类型的变量。

A. static 和auto

B. register 和extern

C. register和 static

D. auto 和register

12.下列各类变量,哪个不是局部变量( B )

A. register型变量

B. 外部static变量

C. auto型变量

D. 函数形参

13.以下关于调用函数时,形、实参结合的通用规则不正确的描述为(B )

A. 实参可以是变量,也可以是常数或者表达式。

B. 实参的个数可以多于形参,也可以少于形参。

C. 系统将为形参分配内存单元。

D. 实参必须与对应的形参类型相兼容。

14.假设有宏定义:

#define NUM 15

#define DNUM NUM+NUM

则表达式DNUM/2+NUM*2的值为( C )

A. 45

B. 67

C. 52

D. 90

15.对于一个功能不太复杂,并且要求加快执行速度,选用(A )合适。

A. 内联函数

B. 重载函数

C. 递归调用

D. 嵌套调用

16.若有以下函数调用语句:

fun((a+b,(x,y)),fun(n+k,d),(a,b));

其中实参的个数是(A )

A.3 B. 4 C. 5 D. 6

17.以下叙述下不正确的是(D )

A. 在函数中,通过return返回函数值。

B.函数中可以有多条return语句。

C.主函数main()也可以带有形参。

D.调用函数,必须在一条独立的语句中完成。

18.设有函数定义:int f1(void){return 100,200;},调用函数f1()时,(C )

A. 函数返回值为100

B. 函数返回二个值100和200

C. 函数返回值为200

D. 语句“return 100,200;”语法错,不能调用函数19.调用宏定义和语句:

#define M(a,b) a*b; //E

int x=M(3+4,5+6),y; //F

y=M(3,4); //G

则(B )

A. 编译时,E行有语法错

B. 编译时,F行有语法错

C. 编译时,G行有语法错

D. 编译时,F行和G行有语法错

20.在一个源文件中定义的全局变量的作用域为(D )

A. 本文件的全部范围

B. 本程序的全部范围

C. 本函数的全部范围

D. 从定义该变量的位置开始至本文件的结束

21.对于下面几个函数,(C )是重载函数。

void f(int x) { ... } //1

int f(int y) { ... } //2

int f(int i , int j ) { ... } //3

float k(int x ) { ... } //4

A. 4个全部

B. 1和4

C. 2和3

D. 3和4

22.编译系统根据同一个程序中(A )识别重载函数。

A. 形、实参的个数和类型的差别

B. 形、实参的个数和函数名的差别

C. 形、实参个数,类型和返回值类型的差别

D. 形、实参的类型和返回值类型的差别

23. 以下正确的说法是(D )

A. 用户若需要调用标准库函数,调用前必须重新定义

B. 用户可以直接调用所有标准库函数

C. 用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数

D. 用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数

24. 以下叙述中不正确的是(D )

A. 在不同的函数中可以使用相同名字的变量

B. 函数中的形式参数是局部变量

C. 在一个函数内定义的变量只在本函数范围内有效

D. 在一个函数内的复合语句中定义的变量在本函数范围内有效

二、填空题

1.当在块作用域内的局部变量与全局变量同名时,则局部变量优先。

2.在类型前加关键字inline 定义的函数称为内联函数。

3.有如下宏定义#define X(a) (a)*a,则表达式X(4+5)的值为41 。

4.变量分为全局和局部两种,全局变量没有赋初值时,其缺省值为0。

5.内联函数的实质是在编译时把函数的函数体直接插入到函数调用处。

6.C++在进行宏扩展时,不作做任何语法检查和计算,只对宏名进行简单替换。

7.在函数的递归调用时,若在A函数内调用B函数,而在B函数内调用A函数,称为间接递归。

8.若myheadfile.h为用户自定义的头文件,则在程序开始处包含此头文件的格式为#include”myheadfile.h”。

9.具有块作用域的变量都是局部变量。

10.递归函数在执行过程中,存在二个过程是递归和回推。

11.有如下宏定义#define X(a) a*a,则表达式X(4+5)的值为29 。12.在for语句中说明的循环控制变量具有的作用域是包含for语句的内层块。

13.静态整数变量有确定的初值,其缺省的初值为 0 。

14.在设计递归方法程序时,为防止进入无穷递归,在递归程序中一定要有递归结束条件。15.若在程序前定义了#define ring(x,y,z) x*y/z ,且在程序中有语句s=ring(25,6,1.5); 则程序运行时执行的相应语句(宏扩展)为

s=25*6/1.5。

16. 在一个函数定义的函数体中又出现直接或间接地调用该函数本身称为函数的递归

调用。

17.若要定义只能用于本文件的内部函数时,则在函数的类型标识符前加修饰词static 。

18. 函数原型为abc(float x,char y);该函数的返回值类型为 int 。19.在C++程序中,当函数调用在前、函数定义在后时,则应在主调函数中,在调用前增加

对被调函数的原型说明。

20.在函数的递归调用时,若在A函数内调用A函数,称为直接递归。

21. 若有宏定义:#defin X 2

#defin Y(n)((X+1)*n)

则执行语句:z=2*(X+Y(X+2));后,z的值是 20 。

三、阅读程序题

1.#include

void test(int x, int y=20)

{

cout<<”x=”<

}

void main( )

{

int x=10;

int y=15;

test(x,y);

test(x);

}

执行以上程序后,输出的第一行结果:x=10;y=15

第二行结果:x=10;y=20

2.#include

#define ABC

void main()

{

float s, x, y, z;

s=1;

y=z=0;

while(s<=10)

{

cin>>x;

y+=x;

s++;

}

z=y/10;

#ifdef ABC

cout<< y<

#endif

cout<

}

问题1:程序中二个输出语句分别输出什么信息。

问题2:取消或保留语句#define ABC,对程序输出有何影响?

(1) y输出10个实数之和z输出10个实数的平均值

(2) 取消语句#define ABC,则程序输出为10个实数的平均值。

保留语句#define ABC,则程序输出为10个实数之和及10个实数的平均值。3.# include

# define AREA(a,b) a*b

# define PREIMETER(a,b) 2*(a+b)

void main(void)

{ cout<<"Area="<

cout<<"Preimete="<

}

以上程序段执行后,输出是:Area=11

Preimete=22

4.#include

int i=2,j=3;

int f(int a,int b)

{ int c=0; static int d=3;

d++;

if(a>b) c=1;

else if (a==b) c=0;

else c=-1;

i=j+1;

return (c+d);

}

void main()

{ int p;

p=f(i,j);

cout<

i=i+1; p=f(i,j);

cout<

i=i+1; p=f(i,j);

cout<

}

执行以上程序后,第一行输出:4,3,3

第二行输出:4,3,6

第三行输出:4,3,7

5.# include

int a=5;

void main() {

int a=10,b=20;

cout <

{ int a=0,b=0;

for (int i=1; i<6; i++) {

a+=i; b+=a;

}

cout <

}

cout <

}

执行以上程序后,第一行输出:10,20

第二行输出:15,35,5

第三行输出:10,20

6.#include

void fun( );

void main( )

{

int i;

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

fun();

}

void fun( )

{

static int m=0;

cout<<++m;

}

执行以上程序时,输出结果是:12345

7.#include

void main(void)

{ int i;

void add1(void);

void add2(void);

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

{ add1();

add2();

cout<

}

}

void add1(void)

{ int x=0;

x++;

cout<

}

void add2(void)

{ static int x=0;

x++;

cout<

}

执行以上程序时,输出结果是: 1 1

1 2

1 3

8.#include

int fac()

{

int b=0;

static int c=3;

b++;c++;

return b+c;

}

void main( )

{

for(int j=0;j<3;j++) cout<

执行如上程序后,输出结果是:5 6 7

9.#include

int fun(double a,double b);

void main( )

{

cout<

}

int fun(double a,double b)

{

return a*b;

}

执行以上程序时,输出结果是:8

10.#include

void fun(int n){

cout<

if(n<10) return;

else fun(n/10);

}

void main(){

int n;

cin>>n;

fun(n);

cout<

}

执行以上程序时输入:469257,输出结果是:752964 11.#include

void change(int x,int y)

{

x+=10;

y+=10;

cout<<”x=”<

}

void main( )

{

int x=10;

int y=15;

cout<<”x=”<

change(x,y);

cout<<”x=”<

}

上面的程序编译并运行,程序的输出结果有三行,

请写出程序运行的第一行结果:x=10;y=15

第二行结果:x=20;y=25

第三行结果:x=10;y=15

12.#include

int f(int x)

{ static int u=1;

x+=x;

return u*=x;

}

void main(void)

{ int x=10;

cout<

cout<

}

程序输出的第一行是:20

程序输出的第二行是:400

13.#include

#define M 20

#define N 10

#define L(r) r*r

void main( )

{

cout<

cout<

}

以上程序段执行后,输出是 400

120

14.#include

int i=1;

int fac(int n)

{ static int f=1;

f=f*n;

return(f);

}

void main()

{ int i,p=0;

for(i=1;i<=3;i++)p=fac(i);

cout<

p=0;

for(i=1;i<=3;i++)p=p+::i++;

cout<

p=1;

for(i=1;i<=3;i++)p=p*--::i;

cout<

}

程序输出的第一行是:6

程序输出的第二行是:6, 6

程序中的::i是指:全局变量i

15.//文件名:cppfile_1.cpp

#include

int x=1,y=2;

static int z=3;

extern void add(void);

void main( )

{ add();

cout<<"x="<

case 'B': case 'b':

cout <<"good!"; break;

case 'C': case 'c':

cout <<"pass!"; break;

default:

cout <<"bad!"; break;

}

}

void main() {

char a1='b',a2='C',a3='f';

SB(a1);SB(a2);SB(a3);SB('A');

cout <

}

执行以上程序时,输出结果是:good! pass! bad! well!

24. 设有宏定义如下:

#define MIN(x,y) (x)>(y)?(x):(y)

#define T(x,y,r) x*r*y/4

则执行以下语句后,

int a=1,b=3,c=5,s1,s2;

s1=MIN(a=b,b-a);

s2=T(a++,a*++b,a+b+c);

s1的值为:3

s2的值为:27

25. #include

int add(int x,int y=8);

void main( )

{

int a=4;

cout<

c out<

}

int add(int x,int y)

{

return x+y;

}

执行以上程序时,输出结果是:12 16

26. #include

fun(int x)

{ static int a=3; a=x; return(a); }

void main()

{ int k=2,m=1,n; n=fun(k); n=fun(m+n); cout<

四、完善程序题

1.此程序为打印如下图形,请将程序补充完整。

**********

********

******

****

#include

void main(void)

{ int i=4,j;

void printchar(int,char);

j=i;

printchar(, '*');

cout<

for (j=2;j>=0;j--)

{ printchar(, ' ');

printchar( , '*');

cout<

}

}

void printchar(int len,char c)

{ int k;

for (k=1;k<=len;k++)

cout<

}

i+2*j-2 3-j i+2*j

2.以下函数power(float x,int n)用于计算x的n次幂,在主函数中实现输入输出。

请将程序补充完整。

#include

double power(float x,int n)

{

double z=1;

int i=1;

if(n==0)

z=1;

else if(n>0)

{ while( )

i++;

}

}

else

{ while()

{ z=x*z;

i++;

}

return();

}

return();

}

void main(void)

{

float x;

double y;

int n;

cout<<"请输入X和n的值"<

cin>>x>>n;

y=power(, );

cout<<"结果为:"<

}

i<=n i<=(-n) 1/z z x n

五、编程题

1.编写一个函数用递归的方法求1+2+3+4+…+n的值。在主函数中进行输入输出。

#include

int fun(int n)

{

int z;

if(n<=0)

z=0;

else

z=n+fun(n-1);

return(z);

}

void main(void)

{

int x,sum;

cout<<"请输入X的值"<

cin>>x;

sum=fun(x);

cout<<"求和结果为:"<

}

2. 编写一个函数判断一个整数是否为素数。在主函数中输入一个整数,输出该整数是否为素数的信息。

#include

void main(void)

{

int prime(int x);//函数原型说明

int n;

cout<<"请输入一个整数:"<

cin>>n;

if(prime(n))

cout<

else

cout<

}

int prime(int x)

{

int flag=1,i;

for(i=2;i

if(x%i==0)

flag=0;

return(flag);

}

函数与编译预处理的实验操作

函数与编译预处理的实验操作 实验目的:了解函数的定义,掌握函数的调用和参数的传递及预编译命令实验要求:熟练掌握函数的调用及参数的传递 实验内容:1.在VC++下输入以下函数 #include int fact(int n) { int j,f=1; for(j=1;j<=n;j++) f=f*j; return f; } void main() { int k’sum=0; for(k=1;k<=5;k++) sum=sum+fact(k); printf(“sum=%d\n”,sum); } #include int max(int x,int y) { return x>y?x:y; } void main() { int a,b,c,m; printf(“请输入三个整数:\n”); scanf(“%d%d%d”,&a&b&c); m=max(c,max(a,b)); printf(“m=%d\n”,m); } #include #include int prime(int x) { int i,r=1; for(i=2;i<=sqrt(x);i++) if(x%i==0) { r=0;break;

} return r; } void output(int x,int n) { printf(“%6d”,x); if(n%5==0) printf(“\n”); } void main() { int m,n=0; for(m=2;m<=50;m++) if(prime(m)) { n++; output(m,n); } } #include double fac(int n) { double f; if(n<0) printf(“n<0,input error!”) else if(n==0||n==1)f=1; else f=fac(n-1)*n; return(n); } void main() { int n; printf(“\ninput a inteager number:”); scanf(“%d”,&n); printf(“%d!=%.1f\n”,n,fac(n)); } #include int ged (int m,int n) { int g; if(n==0) g=m; else g=ged(n,m%n);

实验五 函数与编译预处理(题目)

实验五函数与编译预处理 一、实验目的及要求 1.掌握函数定义的方法; 2.掌握函数实参与形参的对应关系以及“值传递”的方式; 3.掌握函数的嵌调用和递归调用的方法; 4.掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。 5.学习对多文件程序的编译和运行。 二、实验学时 4学时 三、实验任务 1.阅读c60101.c程序,通过调试该程序,熟悉函数的调用方法及单步跟踪键F7和F8 的不同。 #include void main() { void fun(inti, int j, int k); intx,y,z; x=y=z=6; fun(x,y,z); printf("%x=%d;y=%d;z=%d\n",x,y,z); } void fun(inti, int j, int k) { int t; t=(i+j+k)*2; printf("t=%d\n",t); } 2.阅读c60102.c程序,注意在调试时F11和F10的区别,还要注意函数调用过程中形 参、实参的关系。 #include void main() { int x=10,y=20; void swap (int ,int); printf("(1)in main :x=%d,y=%d\n",x,y); swap(x,y); printf("(4)in main :x=%d,y=%d\n",x,y); } void swap (intm,int n) { int temp; printf("(2)in main :m=%d,n=%d\n",m,n); temp=m;m=n;n=temp; printf("(3)in main :m=%d,n=%d\n",m,n); } 把用户自定义函数swap()中的形式参数m和n对应改成x和y,使其与实参变量同名,再用F7跟踪程序的运行,看看有什么变化。

实验六 函数与编译预处理

实验六函数与编译预处理

实验六函数与编译预处理 1. void main() { float a,b,c; scanf("%f%f",&a,&b); c=add(a,b); printf("sum is %f\n",c); } float add(float x,float y) { float z; z=x+y; return(z); } //错误的地方,(1)没有包含头文件 (2)函数定义应该在函数调用的前面. 更正后的程序: #include float add(float x,float y) { float z; z=x+y; return(z); } void main() { float a,b,c; scanf("%f%f",&a,&b); c=add(a,b); printf("sum is %f\n",c); } 2. void main() { int a=3,b=6; printf("a=%d,b=%d\n",a,b); exchange1(a,b); printf(:a=%d,b=%d\n",a,b); } void exchange1(int x,int y) { int t;

t=x;x=y;y=t; printf("x=%d,y=%d\n",x,y); } //错误的地方,(1)没有包含头文件 (2)函数定义应该在函数调用的前面. 更正后的程序: #include void exchange1(int x,int y) { int t; t=x;x=y;y=t; printf("x=%d,y=%d\n",x,y); } void main() { int a=3,b=6; printf("a=%d,b=%d\n",a,b); exchange1(a,b); printf("a=%d,b=%d\n",a,b); } 3. long int fac(int n) { long int p; int i; p=1; for(i=1;i<=n;i++) p=p*i; return(p); } int cmn(int m,int n) {

实验6 函数与编译预处理(参考答案)

实验六函数与编译预处理(参考答案)[实验任务一]: 程序跟踪调试实例6-1:error6_1.c参考答案 程序跟踪调试实例6-2:error6_2.c参考答案 程序跟踪调试实例6-3:error6_3.c参考答案

[实验任务二]: 程序填空实例6-1:blank6_1.c参考答案 程序填空实例6-2:print1.c参考答案 程序填空实例6-3:reverse.c参考答案

[实验任务三]: 编程实例6-1:primefun.c参考答案(第一种方法) 编程实例6-1:primefun.c参考答案(第二种方法) 编程实例6-1:primefun.c参考答案(第三种方法)

编程实例6-2:printnum.c参考答案 编程实例6-3:printa.c参考答案 编程实例6-4:power.c参考答案(第一种方法)

编程实例6-4:power.c参考答案(第二种方法) 编程实例6-5:Taile.c参考答案 编程实例6-6:value.c参考答案 编程实例6-7:LeRangDe.c参考答案

编程实例6-8:multifac.c参考答案 [实验任务四]: 程序1参考答案: #include /* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数:整型变量a和b,分别代表被加数和加数 函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0 */ int Add(int a, int b) { int answer; printf("%d+%d=", a, b); scanf("%d", &answer); if (a+b == answer) return 1; else return 0; } /* 函数功能:打印结果正确与否的信息。 函数参数:整型变量flag,标志结果正确与否 函数返回值:无 */ void Print(int flag) { if (flag) printf("Right!\n"); else printf("Not correct!\n");

函数和编译预处理

函数和编译预处理(第五章) 一、单项选择题 1.关于函数,以下正确的描述是( B) A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义可以嵌套,函数的调用也可以嵌套 D. 函数的定义和函数的调用都不可以嵌套 2.关键字inline用于定义内联函数,定义时,是将该关键字( D ) A. 取代定义函数的类型标识符 B. 取代被定义的函数名 C. 加在类型标识符之后 D. 加在类型标识符之前 3.以下不正确的描述为( B ) A. 在函数之外定义的变量称为外部变量,外部变量是全局变量。 B. 在函数之内说明的外部变量是局部变量,仅在本函数中有效。 C. 在函数之外说明的静态变量也是全局变量,其作用域是文件作用域。 D. 文件作用的域范围是一个程序文件,但必须符合“定义在前,使用在后”的规则。4.以下正确的描述为( C ) A. 每个C++程序必须在开头用预处理命令#include B. 预处理命令必须位于C++源程序的首部 C. 在C++中,预处理命令都以#开头 D. C++语言的预处理命令只能实现宏定义和条件编译的功能 5.在下面的函数原型说明中,存在着语法错误的是( D ) A.void BC(int a,int); B.void BD(int , int); C.void BE(int , int=5); D.int BF(int x ; int y); 6.下列哪个不是重载函数在调用时选择的依据( C ) A. 形参类型 B. 形参个数 C. 函数返回值类型 D. 函数名 7.在一个源程序文件中有以下函数定义,其中( D )是重载函数。 A.ABC B. BCD C. ACD D. 全部 A) int sum(float x,int y) B) float sum(float x,int y,char z) {...} {...} C) float sum(float x,float y) D) int sum(int x,int y,char z) {...}{...} 8.有一个函数原型abc(float x,float y);该函数的返回值类型为( C ) A. void B. double C. int D. float 9.在程序中,函数声明语句正确位置是( D ) A. 随便任何位置 B. 不包含在另一函数中的任何位置。 C. 该函数使用前的任何位置 D. 该函数使用前的任何位置,但不包含在另一函数中 10.C++构造内联函数的思想是( A ) A. 用空间换时间 B. 用时间换空间 C. 用形参换实参 D. 用实参换形参 11.在以下存储类型中,( D )是用于定义动态类型的变量。

5--函数和编译预处理

一、选择题 1、函数调用语句int fun( ) { return 50,60; },则函数调用后返回值为()。 A、50 B、60 C、50,60 D、编译错 2、设有函数定义调用语句“f((e1,e2),(e3,e4,e5));”,则实参个数是()。 A、2 B、3 C、4 D、5 3、若用下列程序 f(char a) { float b=5; b+=a/b; return b; } 则函数返回值的类型是()。 A、int B、char C、void D、float 4、若定义函数 int f(int x) { x++; return x; } 执行以下语句: int a=5; f(a)+f(a); 则a的值是()。 A、5 B、6 C、7 D、8 5、下列程序的运行结果是()。 fun1(int a, int b) { return fun2(a++, --b); } fun2(int a, int b) { return a/b; } void main( ) { int x=5, y=6; cout<

实验6 函数与编译预处理

实验六函数与编译预处理(4学时) 实验前必须做的操作 ...... .........—— ..新建文件夹: 首先在各自对应的计算机ncre(k:)盘上对应座位号文件夹内新建一个文件夹,文件夹的名字为“班级+学号的后两位+姓名”,如座位号为K02,航海1111班、学号后两位是02的、姓名为“张强”的同学,则其对应的文件夹名字是:航海111102张强。然后在刚才建好的文件夹里面再建立一个文件夹,文件夹为“实验6”。 【实验目的】 1、掌握自定义函数的一般结构及定义函数的方法; 2、掌握函数的形式参数、实际参数、函数返回值等重要概念; 3、掌握函数实参与形参间的“值传递”方式; 4、掌握函数声明、函数调用的一般方法; 5、掌握模块化程序设计思想,会采用C语言中函数进行模块化程序设计; 6、掌握全局变量和局部变量作用域以及全局变量和局部变量的使用方法; 7、掌握函数的嵌套调用的程序的执行过程,会使用嵌套调用设计程序; 8、掌握使用函数递归调用的程序的执行过程,会使用递归程序解决实际问题; 9、理解宏的概念,掌握宏定义。了解文件包含的概念,掌握其用法; 10、学习对多文件程序的编译和运行; 11、熟练掌握VC程序调试方法,包括断点的设置和取消,以及单步执行跟踪进入函数和跳出函数的方法。【实验内容】 [实验任务一]:断点的设置和取消、单步执行跟踪进入函数和跳出函数方法练习 程序跟踪调试实例6-1:调试示例(请仔细按以下各步骤进行操作): 从键盘输入一个正整数n,计算n! 的值,要求定义和调用函数fact(n),计算n!。

Input n: 10 10! = 3628800 说明:实验五中我们使用了程序运行到光标位置调试程序,本次实验需要掌握设置断点,以及单步调试进入函数和跳出函数的方法。 【操作步骤】: (1)输入源程序,并以error6_1.c文件名最终保存在实验6文件夹里,编译程序,出现警告信息: 双击该警告信息,箭头指向“f=fact(n);”这一行,警告信息指出函数“fact”没有定义,而函数“fact”实际上已经定义了,这是为什么呢?因为函数在调用之前,必须先声明。在主调函数的变量定义前面加上函数声明“long fact(int m);”后,重新编译,连接,都正确。 注意: 如果将error6_1.c文件改为error6_1.cpp (即改为C++源程序文件) 可见VC++系统对.c文件和.cpp文件在进行编译时,对语法的要求不完全一样,这一点希望同学们注意。此处错误修改的方法与上面相同。 (2)调试开始,设置2个断点(断点的作用:程序执行到断点处暂停,使用户可以观察当前的变量或其它表达式的值,然后继续运行),先把光标定位到要设置断点的位置,然后单击编译工具条上的(Inert / Remove Breakpoint (F9)),断点就设置好了(如图6.1所示)。如果要取消断点,只要把光标放到要取消的断点处,单击,这个断点就取消了。

国家二级C语言机试(编译预处理和指针)模拟试卷7

国家二级C语言机试(编译预处理和指针)模拟试卷7 (总分:56.00,做题时间:90分钟) 一、选择题(总题数:28,分数:56.00) 1.有以下程序:#include<stdio.h>void main() void fun(char*c) {char s[81];{while(*c) gets(s);fun(s);puts(s); {if(*c>='a'&&*c<='z')*c=*c-('a'-'A'); } c++: }} 当执行程序时从键盘上输入Hello Beijing<回车>,则程序的输出结果是 (分数:2.00) A.HELLO BEIJING √ B.Hello Beijing C.hello Beijing D.hELLO Beijing 解析:解析:子函数fun的功能是把小写字母转换成大写字母,所以程序的输出结果为选项A)。 2.有以下程序#include<stdio.h>void f(int*p,int*q) void f(int*p,int*q);{ main() p==p+1;*q=*q+1; { int m=1,n=2,*r=&m; } f(r,&n);printf("%d,%d",m,n); }程序运行后的输出结果是 (分数:2.00) A.2,3 B.1,3 √ C.1,4 D.1,2 解析:解析:本题考查函数的调用与指针。fun()函数的作用是:使指针p指向原来所指变量的下一个变量,使q指针指向的值加1。主函数中,指针r指向m,调用fun()函数的结果是,使r指向地址位于m后面的变量,使位丁n的地址上的变量(就是n)的值加1,因此,结果为1,3。 3.有以下程序 #include<stdio.h> main() void fun(int*a,int*b) { int x=3,y=5,*p=&x,*q=&y;{ int*c;fun(p,q);printf("%d,%d,",*p,*q);c=a;a=b;b=c;} fun(&x,&y);printf("%d,%d\n",*p,*q);}程序运行后的输出结果是 (分数:2.00) A.3,5,5,3 B.3,5,3,5 √ C.5,3,3,5 D.5,3,5,3 解析:解析:本题考查函数的调用与指针。p和q分别为指向x和y的指针,函数fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中,fun(p,q)、fun(&x,&y)的实参均为x与y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。 4.有下列程序:void f(int b[]) {int I;for(i=2;i<6;i++)b[i]*=2;} main() {int a[10]={1,2,3,4,5,6,7,8,9,10},i;f(a);for(i=0;i<10,i++)printf("%d,",a[i]);}程序运行后的输出结果是 (分数:2.00) A.1,2,3,4,5,6,7,8,9,10, B.1,2,3,4,10,12,14,16,9,10, C.1,2,6,8,10,12,7,8,9,10,√ D.1,2,6,8,10,12,14,16,9,10, 解析:解析:函数void f(int b[])的功能是对数组b[]中第2个到第5个元素的值逐个扩大2倍。所以在main()函数中,f(a)语句的作用是对数组a[10]中从a[2]到a[5]的各个数字乘以2,因而数组a[10]的元素就变成了{1,2,6,8,10,12,7,8,9,10}。 5.有以下程序 #include<stdio.h> int fun(char s[]) main() {int n==0; {char s[10]={'6','1','*','4','*','9','*','0','*'};while(*s<='9'&&*s>='0') printf("%d\n",fun(s));{n=10*n+*s

实验3 函数和编译预处理

实验3 函数和编译预处理 实验目的 1.掌握函数的定义和调用的方法。2.学会使用递归方法进行程序设计。3.掌握变量的作用域与存储类别。4.学会使用函数重载解决实际问题。5.学会使用宏 实验内容 1.阅读并运行程序,写出运行结果。 (1)#include using namespace std; int fun(int x) { int prime=1; if(x==0||x==1) prime=0; for(int i=2;i using namespace std; void output1(int x) { if(!x) return; cout<<(x%10)<<"\t"; output1(x/10); } void output2(int x) { if(!x) return; output2(x/10); cout<<(x%10)<<"\t"; } int main(void) { int a; cout<<"请输入大于0的正整数:"; cin>>a; output1(a); cout< using namespace std; void fun(void) { int a=1,b=2; static int c; //A a++;

函数和编译预处理.doc

函数和编译预处理 函数和编译预处理(第五章) 一、单项选择题 1.关于函数,以下正确的描述是(B) A,函数的定义可以嵌套,但函数的调用不可以嵌套 B,函数的定义不可以嵌套,但函数的调用可以嵌套 C,函数的定义可以嵌套,函数的调用也可以嵌套 D,函数的定义和函数的调用都不M以嵌套 2.关键字inline用于定义内联函数,定义时,是将该关键字(D ) A.取代定义函数的类型标识符 B.取代被定义的函数名 C.加在类型标识符之后 D.加在类型标识符之前 3.以下不正确的描述为(B ) A.在函数之外定义的变量称为外部变量,外部变量是全局变量。 B.在函数之内说明的外部变量是局部变量,仅在本函数中有效。 C.在函数之外说明的静态变量也是全局变量,其作用域是文件作用域。 D.文件作用的域范围是一个程序文件,但必须符合“定义在前,使用在后”的规则。 4.以下正确的描述为(C ) A,每个C++程序必须在开头用预处理命令^include B,预处理命令必须位于C++源程序的首部 C.在C++中,预处理命令都以#开头 D.C++语言的预处理命令只能实现宏定义和条件编译的功能 5.在下面的函数原型说明中,存在着语法错误的是(D )

A.void BC(int a, int) ; B. void BD(int , int); C. void BE(int , int=5) ; D. int BF(int x ; int y); 6.下列哪个不是重载函数在调用时选择的依据(C ) A.形参类型 B.形参个数 C.函数返回值类型 D.函数名 7.在一个源程序文件中有以下函数定义,其中(D )是重载函数。 A.ABC B. BCD C. ACD D.全部 A) int sum (float x, int y) B) float sum (float x, int y, char z) (. . . ) C) float sum (float x, float y) D) int sum(int x, int y, char z) (. . . ) 8.有一个函数原型abc(float x, float y);该函数的返回值类型为(C ) A.void B. double C. int D. float 9.在程序中,函数声明语句正确位置是(D ) A.随便任何位置 B.不包含在另一函数中的任何位置。 C.该函数使用前的任何位置 D.该函数使用前的任何位置,但不包含在另-一函数中 10.C++构造内联函数的思想是(A ) A.用空间换时间 B.用时间换空间 C.用形参换实参 D.用实参换形参 11.在以下存储类型中,(D)是用于定义动态类型的变量。

编译预处理习题与答案

第九章编译预处理 9.1 选择题 【题9.1】以下叙述中不正确的是。 A)预处理命令行都必须以#号开始 B)在程序中凡是以#号开始的语句行都是预处理命令行 C)C程序在执行过程中对预处理命令行进行处理 D)以下是正确的宏定义 #define IBM_PC 【题9.2】以下叙述中正确的是。 A)在程序的一行上可以出现多个有效的预处理命令行 B)使用带参的宏时,参数的类型应与宏定义时的一致 C)宏替换不占用运行时间,只占编译时间 D)在以下定义中C R是称为“宏名”的标识符 #define C R 045 【题9.3】请读程序: #define ADD(x) x+x main() { int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf(“sum=%d”,sum); } 上面程序的运行结果是。 A)sum=9 B)sum=10 C)sum=12 D)sum=18 【题9.4】以下程序的运行结果是。 #define MIN(x,y) (x)<(y)?(x):(y) main() { int i=10,j=15,k; k=10*MIN(i,j); printf(“%d\n”,k); } A)10 B)15 C)100 D)150 【题9.5】在宏定义#define PI 3.14159中,用宏名PI代替一个。 A)常量B)单精度数C)双精度数D)字符串

【题9.6】以下程序的运行结果是。 #include #define FUDGE(y) 2.84+y #define PR(a) printf(“%d”,(int)(a)) #define PRINT1(a) PR(a); putchar(‘\n’) main() { int x=2; PRINT1(FUDGE(5)*x); } A)11 B)12 C)13 D)15 【题9.7】以下有关宏替换的叙述不正确的是。 A)宏替换不占用运行时间B)宏名无类型 C)宏替换只是字符替换D)宏名必须用大写字母表示 【题9.8】C语言的编译系统对宏命令的处理是。 A)在程序运行时进行的 B)在程序连接时进行的 C)和C程序中的其它语句同时进行编译的 D)在对源程序中其它成份正式编译之前进行的 【题9.9】若有宏定义如下: #define X 5 #define Y X+1 #define Z Y*X/2 则执行以下printf语句后,输出结果是。 int a; a=Y; printf(“%d\n”,Z); printf(“%d\n”,--a); A)7 B)12 C)12 D)7 6 6 5 5 【题9.10】若有以下宏定义如下: #define N 2 #define Y(n) ((N+1)*n) 则执行语句z=2*(N+Y(5));后的结果是。 A)语句有错误B)z=34 C)z=70 D)z无定值 【题9.11】若有宏定义:#define MOD(x,y) x%y 则执行以下语句后的输出为。 int z,a=15,b=100; z=MOD(b,a); printf(“%d\n”,z++);

实验五 函数与编译预处理

《C语言程序设计》实验报告 实验五函数与编译预处理 学号201002314 姓名李光 一、实验目的 1、掌握函数定义及调用的方法,正确理解函数调用时实参和形参的对应关系 2、掌握并正确使用数组作为函数参数; 3、掌握函数的嵌套调用和递归调用的方法; 4、理解变量的作用域和生存期; 5、掌握宏定义、文件包含的方法。 二、实验内容 1、分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。 #include /*程序需要使用C语言提供的标准函数库*/ int fun(int k) /*此函数用于计算阶乘*/ { int result=1,i; for(i=1;i<=k;i++) /*循环k次*/ { result=result*i; } return result; } void main() /*主函数*/ { int n; printf("Input n please(1<=n<=10)"); scanf("%d",&n); /*输入一个数*/ printf("%d!=%d\n",n,fun(n)); /*输出结果*/ } 『运行结果:』

2、编写程序,输出2~n之间的所有素数,n由键盘输入。要求判断素数的过程要写在函数中,由主函数调用实现,并写出2组以上程序运行结果。 程序代码: #include #include void fun(int n) { int a,b; for (a=2;a<=n;a++) { for (b=2;b<=a-1;b++) { if (a%b==0) break; if (b==a-1) { printf ("%3d ",a); } } } } void main() { int t; printf("input t="); scanf("%d",&t); fun(t); printf("\n"); } 『运行结果:』

相关文档
相关文档 最新文档