函数与编译预处理的实验操作
实验目的:了解函数的定义,掌握函数的调用和参数的传递及预编译命令实验要求:熟练掌握函数的调用及参数的传递
实验内容: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);
return(g)
}
void main()
{
int m,n;
printf(“请输入两个整数:”);
scanf(“%d%d”,&m&n);
printf(“gcd=%d\n”,gcd(m,n));
}
#include
int divisor(int a,int b)
{
int r;
while((r=a%b)!=0)
{
a=b;b=r;
}
return b;
}
int multiple(int a,int b)
{
int d;
d=divisor(a,b);
return a*b/d;
}
void main()
{
int a,b,c;
printf(“请输入两个整数a,b:\n”);
scanf(“%d%d”,&a&b);
c=multiple(a,b);
printf(“最小公倍数=%d\n”,c);
}
2.保存程序并编译,当窗口显示无错误时,选择执行程序
3.关闭程序工作区
实验结果:
实验分析:
函数与编译预处理的实验操作 实验目的:了解函数的定义,掌握函数的调用和参数的传递及预编译命令实验要求:熟练掌握函数的调用及参数的传递 实验内容:1.在VC++下输入以下函数 #include
} 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
实验五函数与编译预处理 一、实验目的及要求 1.掌握函数定义的方法; 2.掌握函数实参与形参的对应关系以及“值传递”的方式; 3.掌握函数的嵌调用和递归调用的方法; 4.掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。 5.学习对多文件程序的编译和运行。 二、实验学时 4学时 三、实验任务 1.阅读c60101.c程序,通过调试该程序,熟悉函数的调用方法及单步跟踪键F7和F8 的不同。 #include
实验六函数与编译预处理
实验六函数与编译预处理 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)没有包含头文件
t=x;x=y;y=t; printf("x=%d,y=%d\n",x,y); } //错误的地方,(1)没有包含头文件
实验六函数与编译预处理(参考答案)[实验任务一]: 程序跟踪调试实例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.关于函数,以下正确的描述是( B) A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义可以嵌套,函数的调用也可以嵌套 D. 函数的定义和函数的调用都不可以嵌套 2.关键字inline用于定义内联函数,定义时,是将该关键字( D ) A. 取代定义函数的类型标识符 B. 取代被定义的函数名 C. 加在类型标识符之后 D. 加在类型标识符之前 3.以下不正确的描述为( B ) A. 在函数之外定义的变量称为外部变量,外部变量是全局变量。 B. 在函数之内说明的外部变量是局部变量,仅在本函数中有效。 C. 在函数之外说明的静态变量也是全局变量,其作用域是文件作用域。 D. 文件作用的域范围是一个程序文件,但必须符合“定义在前,使用在后”的规则。4.以下正确的描述为( C ) A. 每个C++程序必须在开头用预处理命令#include
一、选择题 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< 实验六函数与编译预处理(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 (总分: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 函数和编译预处理 实验目的 1.掌握函数的定义和调用的方法。2.学会使用递归方法进行程序设计。3.掌握变量的作用域与存储类别。4.学会使用函数重载解决实际问题。5.学会使用宏 实验内容 1.阅读并运行程序,写出运行结果。 (1)#include 函数和编译预处理 函数和编译预处理(第五章) 一、单项选择题 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 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 《C语言程序设计》实验报告 实验五函数与编译预处理 学号201002314 姓名李光 一、实验目的 1、掌握函数定义及调用的方法,正确理解函数调用时实参和形参的对应关系 2、掌握并正确使用数组作为函数参数; 3、掌握函数的嵌套调用和递归调用的方法; 4、理解变量的作用域和生存期; 5、掌握宏定义、文件包含的方法。 二、实验内容 1、分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。 #include 2、编写程序,输出2~n之间的所有素数,n由键盘输入。要求判断素数的过程要写在函数中,由主函数调用实现,并写出2组以上程序运行结果。 程序代码: #include实验6 函数与编译预处理
国家二级C语言机试(编译预处理和指针)模拟试卷7
实验3 函数和编译预处理
函数和编译预处理.doc
编译预处理习题与答案
实验五 函数与编译预处理