函数与编译预处理实验报告

合集下载

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

实验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 <stdio.h>/* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回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;elsereturn 0;}/* 函数功能:打印结果正确与否的信息。

函数参数:整型变量flag,标志结果正确与否函数返回值:无*/void Print(int flag){if (flag)printf("Right!\n");elseprintf("Not correct!\n");}main() /*主函数*/{int a, b, answer;printf("Input a,b:");scanf("%d,%d", &a, &b);answer = Add(a, b);Print(answer);}程序两次测试的运行结果分别如下:①Input a,b:1,2↙1+2=3↙Right!②Input a,b:1,2↙1+2=4↙Not correct!程序2参考答案:#include <stdio.h>/* 函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回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;elsereturn 0;}/* 函数功能:打印结果正确与否的信息。

实验五_函数与编译预处理

实验五_函数与编译预处理

《C语言程序设计》实验报告实验五函数与编译预处理学号姓名一、实验目的1、掌握函数定义及调用的方法,正确理解函数调用时实参和形参的对应关系;2、掌握并正确使用数组作为函数参数;3、掌握函数的嵌套调用和递归调用的方法;4、理解变量的作用域和生存期;5、掌握宏定义、文件包含。

二、实验内容1、分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。

#include <stdio.h>int fun(int k){int result=1,i;for(i=1;i<=k;i++){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组以上程序运行结果。

程序代码:『运行结果:』3、编程实现输入8个学生某门功课的成绩,用函数求出平均分,并在主函数中输出平均分以及高于平均分的同学的成绩。

并写出2组以上程序运行结果。

程序代码:运行结果:』三、问题讨论1、举例说明自动变量和静态变量的区别。

四、实验总结1 总结本次实验完成情况、相关知识掌握情况2 总结本次实验编辑、编译、连接、运行所取得的经验3 分析本次实验出现的主要错误最直接原因。

实验五 函数与编译预处理

实验五  函数与编译预处理

运行结果: (需要截图) 运行结果分析:形参具有“用之则建,用完则撤”的特点 3、任务名称: 程序 c60103.c 是实现求素数的,请填空完成该程序,并上机运行测试。 源代码:#include <math.h> #include <stdio.h> void main() { int m; void prime(int); printf("Please input a data m=:"); scanf("%d",&m); prime(m); printf("\n"); } void prime(int n) { int i,k; k=sqrt(n); for(i=2;i<=k;i++) if (n%i==0) break; if(i>=k+1) printf("This is a prime number"); else printf("This isn't a prime number"); } 运 行 结 果 : (
对方括号
n 6、任务名称: 编写程序,实现由主函数输入 m、n,按下述公式计算并输出 C m 的值。
Cm
nቤተ መጻሕፍቲ ባይዱ
m! n ! ( m n )!
源代码:#include <stdio.h> void main( ) { float fac(int n); int n,m; float C; printf("输出两个整数:"); scanf("%d,%d",&n,&m); if(m>n) {C=fac(m)/(fac(n)*fac((m-n))); printf("C=%f",C);} else printf("数据错误"); printf("\n"); } float fac(int n) {float f; if(n<0) { printf("n<0,错误"); } else if (n==0||n==1)

实验6 函数与编译预处理

实验6 函数与编译预处理

实验六函数与编译预处理(4学时)实验前必须做的操作...............——..新建文件夹:1、先在对应的K:盘上建立一个父文件夹(用来存放本人整个学期的作业),格式为:“专业+班级+学号+姓名”,如:工业1091班、学号为05的匡珍春同学,其父文件夹名称为:工业109105匡珍春,然后在此父文件夹下建立子文件夹,名称为:实验6(用来存放实验6需要上交的文件)。

2、在E:盘上建立一个以本人姓名为名称的文件夹(本次实验的工作文件夹),例如:E:\匡珍春【实验目的】1、掌握自定义函数的一般结构及定义函数的方法;2、掌握函数的形式参数、实际参数、函数返回值等重要概念;3、掌握函数实参与形参间的“值传递”方式;4、掌握函数声明、函数调用的一般方法;5、掌握模块化程序设计思想,会采用C语言中函数进行模块化程序设计;6、掌握全局变量和局部变量作用域以及全局变量和局部变量的使用方法;7、掌握函数的嵌套调用的程序的执行过程,会使用嵌套调用设计程序;8、掌握使用函数递归调用的程序的执行过程,会使用递归程序解决实际问题;9、理解宏的概念,掌握宏定义。

了解文件包含的概念,掌握其用法;10、学习对多文件程序的编译和运行;11、熟练掌握VC程序调试方法,包括断点的设置和取消,以及单步执行跟踪进入函数和跳出函数的方法。

【实验内容】[实验任务一]:断点的设置和取消、单步执行跟踪进入函数和跳出函数方法练习程序跟踪调试实例6-1:调试示例(请仔细按以下各步骤进行操作):从键盘输入一个正整数n,计算n! 的值,要求定义和调用函数fact(n),计算n!。

Input n: 1010! = 3628800说明:实验五中我们使用了程序运行到光标位置调试程序,本次实验需要掌握设置断点,以及单步调试进入函数和跳出函数的方法。

【操作步骤】:(1)输入源程序,并以error6_1.c文件名最终保存在实验6文件夹里,编译程序,出现警告信息:双击该警告信息,箭头指向“f=fact(n);”这一行,警告信息指出函数“fact”没有定义,而函数“fact”实际上已经定义了,这是为什么呢?因为函数在调用之前,必须先声明。

实验六 函数与编译预处理

实验六  函数与编译预处理

实验六函数与编译预处理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)没有包含头文件<stdio.h> (2)函数定义应该在函数调用的前面. 更正后的程序:#include<stdio.h>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)没有包含头文件<stdio.h> (2)函数定义应该在函数调用的前面.更正后的程序:#include<stdio.h>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){int x;x=fac(m)/(fac(n)*fac(m-n));return(x);}void main(){int m,n,c;scanf("%d%d",&m,&n);c=cmn(m,n);printf("c=%d\n",c);}//应该加个#include<stdio.h> 头文件4.int a=7,b=9;void main(){int i,a=5,x=80,y=60;for(i=1;i<4;i++){printf("a=%d,b=5d,max=%d\n",a,b,max(a,b));b+=6;}printf("result_sum=%d\n",sum(x,y));}int sum(int x,int y){extern int m,n;int temp;temp=x+y+m+n+a+b;return(temp);}int m=12,n=25;int max(int 1,int b){return(a>b?a:b);}程序更正:#include<stdio.h>int a=7,b=9;void main(){int i,a=5,x=80,y=60;int max(int a,int b);int sum(int x,int y);for(i=1;i<4;i++){printf("a=%d,b=5d,max=%d\n",a,b,max(a,b));b+=6;}printf("result_sum=%d\n",sum(x,y));}int sum(int x,int y){extern int m,n;int temp;temp=x+y+m+n+a+b;return(temp);}int m=12,n=25;int max(int a,int b){return(a>b?a:b);}5.调试运行以下程序.#include<stdio.h>int fun(int a){int b=0;static int c=2;b+=c;c+=1;return(a+b-c);}void main(){int a=3,i;for(i=0;i<3;i++) printf("%4d",fun(a));}6.略7.略8.#include<stdio.h>#define DEBUGvoid main(){int a=14,b=15,temp;temp=a/b;#ifdef DEBUGprintf("a=%d,b=%d",a,b);#endifprintf("temp=%d\n",temp);}程序结果为:a=14,b=15,temp=0(1)第二行中,宏定义是可以没有具体的值的,在这里只是定义了一个宏名.DEBUG没有值.(2)第7~9行为:#ifdef DEBUGprintf("a=%d,b=%d",a,b);#endif会被编译,因为种种原因DEBUG已经被定义过.(3)如将第2行删除,程序运行结果为:temp=0 因为没有定义DEBUG,所以原来第7~9行的程序没有执行.(4)第9行不能删除,因为#ifdef 和#endif必须成对出现.9.编程题#include<stdio.h>long int fac(int n){long int p;int i;p=1;for(i=1;i<=n;i++)p=p*i;return(p);}void main(){int m,n,c;scanf("%d%d",&m,&n);c=fac(n)/(fac(n-m)*fac(m));printf("c=%d",c);}。

大一上期C语言实验报告10 预编译处理和位处理

大一上期C语言实验报告10    预编译处理和位处理

成都工业学院·计算机工程学院《程序设计基础》实验报告1.实验目的(1)掌握宏定义的定义格式和使用方法,区别无参数宏与带参数宏;(2)掌握条件编译的具体形式以及使用方法;(3)掌握位运算的概念和方法,学会使用位运算符;(4)学会通过位运算实验实现对某些位的操作。

2.实验内容(1)编写程序:用#define命令来控制是否要进行数据的加密。

例如,#define TRANSF 1 表示数据加密后传输,#define TRANSF 0 表示直接传送原始数据。

要求:1.用条件编译方法来实现程序要求。

2.采用scanf函数输入一个4位数。

3.定义#define TRANSF 0,运行程序,应得到原数(假设通过printf输出)。

4.将#define TRANSF 0改为#define TRANSF 1,运行程序后,应得到加密后的数据。

假设加密原则上:对于每位数字,如果是偶数,则加1;如果是奇数,则减1。

(2)编写函数getbits(int munber,int m),从一个16位的单元中存放的数据number中取出最右侧的m位,即保留这m位的原值,使其余各位为0。

例如:getbits(0121675,5)表示对八进制数121675,取出其二进制数最右侧的5位,并令其余各位为0。

要求:1.在主函数中输入数据number和m,并输出number和m的值。

2.调用函数getbits(),取出number中的原始数据的最右侧的m位。

3.输出m位二进制数表示的八进制数值。

3.源程序4.运行结果(1)#define控制是否对数据加密(2)对数据进行位处理5.出现问题及解决办法(1)在用#define来控制是否对数据加密时,在#endif后面总是提示unexpected end of file found(发现意外的文件结束),未找到错误原因解决方法:将mian函数类型改为int main(),在程序结尾处添加return 0;语句就解决了6.实验心得通过本次练习,学会了对宏定义的定义格式和使用方法,了解了无参数宏和带参数宏的区别,学会了使用#ifdef…#else…#endif,#ifndef…#else…#endif,#if…#else…#endif三种条件编译的基本使用方法。

c语言实验报告——标准库函数使用与编译预处理

c语言实验报告——标准库函数使用与编译预处理
scanf("%d%d",&a,&b);
printf("%d和%d的最最大公约数和最小公倍数分别为%d和%d\n",a,b,zdgys(a,b),zxgbs(a,b));
printf("\n请继续输入或者关闭\n");
gotoloop;
}
//b.c求两个数最大公约数
intmax(inta,intb);
}
//c.c求两个数最小公倍数
intmin(inta,intb);
intzxgbs(inta,intb);
intzxgbs(inta,intb)
{
intj,k,i=1;
k=i*max(a,b);
while(1)
{
j=k*i;
if(j%a==0&&j%b==0)
break;
i++;
}
returnj;
}
2.掌握建立和调试多源程序文件程序的方法;
3.掌握C程序中函数的定义和调用方式,理解函数声明的概念,掌握函数声明的方法
二、实验项目内容(实验题目)
求2个数的最大公约数和最小公倍数。要求用函数实现,并且将主函数和这两个函数分别存入3个文件a.cpp ,b.cpp ,c.cpp中。用文件包含的方法实现多文件编译链接。
3.包含函数原来可以不用是正规的可以运行的c,只要是所需的正确的函数即可。
3、源程序(实验过程或算法)
//a.c主函数
#include"stdio.h"
#include"12核技术02班20123857刘春波03b.c"
#include"12核技术02班20123857刘春波03c.c"

C语言编译预处理实验报告

C语言编译预处理实验报告

C 语言编译预处理实验报告实验名称:编译预处理一. 实验目的(1) 掌握文件包含、宏定义、条件编译、assert 宏的使用。

(2)练习带参数的宏定义、条件编译的使用。

( 3)练习assert 宏的使用。

(4)使用集成开发环境中的调试功能:单步执行,设置断点,观察变量。

二、实验内容1. 源程序改错:源程序:#include <stdio.h> #define SUM a+b #define DIF a-b #define SWAP(a,b)a=b, b=aint main(){int b, t;printf("Input two integers a,b:"); scanf("%d, %d", &a, &b);printf("\nSUM=%d\n the difference between square of a andsquare b is:%d",SUM,SUM*DIF);SWAP(a,b);Printf("\nNow a=%d,b=%d\n", a, b); return 0;}.2. 源程序修改替换源程序:voidmain(void){int a, b, c;float d, e;printf("Enter three integers:"); scanf("%d, %d, %d", &a, &b, &c);printf("\nthe maximum of them is %d\n", max(a,b,c)); printf("Enter two floating pointnumbers:");scanf("%f, %f", &d, &e); printf("\nthe sum of them is%f\n",sum(d,e));return 0;int max(int x, int y, int z){int t; if (x > y) t = x;elset = y;if (t < z)t = z; return t;}3. 跟踪调试程序程序代码:#define Rint main(void){float r, s; int s_integer = 0; printf("input a number:");scanf("%f", &r);#ifdef R s = 3.14159 * r * r; printf("area of round is:%f\n", s); s_integer = integer_fraction(s);printf("the integer fraction of area is %d\n", s_integer); assert((s-s_integer) < 1.0);#endifreturn 0;}int integer_fraction(float x){int i = x; return i; }4. 程序设计三、实验步骤及结果步骤:1.编写源程序2. 对源程序进行编译,修改错误,运行修改后的程序3•发现结果有误,进行调试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

函数与编译预处理实验报告
一、实验目的
本次实验旨在通过编写程序,掌握函数与编译预处理的相关知识,了解函数的调用和返回机制以及编译预处理的作用。

二、实验环境
操作系统:Windows 10
开发工具:Code::Blocks 17.12
编程语言:C语言
三、实验内容
1. 函数的定义和调用
函数是C语言中的一个重要概念,它可以将一段代码封装成一个功能单元,方便代码重用和维护。

在本次实验中,我们需要掌握如何定义函数,并且了解函数的调用过程。

在C语言中,函数通常由以下几部分组成:
返回类型函数名(参数列表)
{
函数体;
return 返回值;
}
其中,返回类型指定了函数返回值的类型;函数名是唯一标识符,用于调用该函数;参数列表指定了该函数需要传入的参数;函数体是一段具体的代码逻辑;return语句则将结果返回给调用者。

在调用一个函数时,我们需要按照以下格式进行:
返回值变量 = 函数名(参数列表);
其中,返回值变量接收该函数返回的结果;参数列表则按照定义顺序传入相应参数。

如果该函数不需要传入任何参数,则可以省略参数列表。

2. 函数指针
除了直接调用一个已经定义好的函数外,我们还可以使用函数指针来间接调用一个函数。

函数指针和普通指针类似,它指向的是一个函数
的地址。

通过函数指针,我们可以在运行时动态地确定需要调用哪个函数。

在C语言中,声明一个函数指针的方法如下:
返回类型 (*指针变量名)(参数列表);
其中,括号中的*表示这是一个指针变量;指针变量名则是该变量的标识符;参数列表和返回类型与被指向的函数相同。

通过以下代码可以将一个已经定义好的函数赋值给一个函数指针:
int max(int a, int b)
{
return a > b ? a : b;
}
int (*p)(int, int) = max;
在上述代码中,p就是一个用于存储max函数地址的函数指针。

3. 编译预处理
编译预处理是C语言中一项重要的功能,在编译过程中会对源代码进
行一些预处理操作。

预处理器会扫描源代码,并根据一些特定规则进
行替换、删除或添加操作。

常见的预处理命令包括#define、#include、#ifdef等。

#define命令用于定义宏,可以将一些常量或者表达式定义为宏,并
且在程序中使用该宏时会自动替换为对应值。

例如:
#define PI 3.1415926
float area = PI * r * r;
在上述代码中,PI就是一个宏,它的值为3.1415926。

当程序运行到area = PI * r * r;时,预处理器会将PI自动替换为3.1415926。

#include命令用于包含头文件,可以将其他文件中定义的函数和变量
引入到当前文件中。

例如:
#include <stdio.h>
int main()
{
printf("Hello, world!");
return 0;
}
在上述代码中,#include <stdio.h>表示引入了stdio.h头文件,其中定义了printf函数。

因此,在main函数中可以直接调用printf函数。

四、实验过程
1. 函数的定义和调用
本次实验我们需要编写一个简单的程序来演示函数的定义和调用。

具体步骤如下:
1)在Code::Blocks中新建一个C语言项目。

2)在项目中新建一个源文件,并编写如下代码:
#include <stdio.h>
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int a = 5, b = 7;
int c = max(a, b);
printf("max(%d, %d) = %d", a, b, c);
return 0;
}
在上述代码中,我们先定义了一个max函数,该函数接收两个参数a 和b,并返回它们之间较大的值。

然后,在main函数中调用了max 函数,并打印了结果。

3)编译并运行程序,观察输出结果。

2. 函数指针
本次实验我们需要编写一个简单的程序来演示函数指针的使用。

具体步骤如下:
1)在Code::Blocks中新建一个C语言项目。

2)在项目中新建一个源文件,并编写如下代码:
#include <stdio.h>
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int (*p)(int, int) = max;
int a = 5, b = 7;
int c = (*p)(a, b);
printf("max(%d, %d) = %d", a, b, c);
return 0;
}
在上述代码中,我们定义了一个函数指针p,并将其赋值为max函数的地址。

然后,在main函数中通过*p(a, b)来调用max函数,并打印了结果。

3)编译并运行程序,观察输出结果。

3. 编译预处理
本次实验我们需要编写一个简单的程序来演示宏和头文件的使用。

具体步骤如下:
1)在Code::Blocks中新建一个C语言项目。

2)在项目中新建两个源文件:main.c和circle.c,并分别编写如下代码:
main.c:
#include <stdio.h>
#include "circle.h"
int main()
{
float r = 2.0;
float area = PI * r * r;
printf("area of circle with radius %.1f is %.2f", r, area);
return 0;
}
circle.c:
#define PI 3.1415926
circle.h:
#ifndef CIRCLE_H_INCLUDED
#define CIRCLE_H_INCLUDED
float PI;
#endif // CIRCLE_H_INCLUDED
在上述代码中,我们首先定义了一个宏PI,并将其值设置为
3.1415926。

然后,在main.c文件中引入了circle.h头文件,并使用了该文件中定义的PI宏。

3)编译并运行程序,观察输出结果。

四、实验总结
通过本次实验,我们深入了解了函数的定义和调用机制、函数指针的
使用以及编译预处理的作用。

这些知识点是C语言编程中非常重要的
基础,也是进行高级开发和优化的必备技能。

在今后的学习和实践中,
我们应该不断地巩固和拓展这些知识点,以便更好地应对各种编程需求。

相关文档
最新文档