函数与编译预处理实验报告
实验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 函数与编译预处理
实验六函数与编译预处理(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 预编译处理和位处理
成都工业学院·计算机工程学院《程序设计基础》实验报告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语言实验报告——标准库函数使用与编译预处理
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 语言编译预处理实验报告实验名称:编译预处理一. 实验目的(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. 背景函数与编译预处理是计算机编程中非常重要的两个概念,它们对于程序的结构和执行效率都起着关键作用。
函数是一段可重复使用的代码块,通过将任务划分为多个函数可以提高代码的可读性与维护性。
而编译预处理则是在编译过程中对源代码进行预处理,包括宏展开、文件包含和条件编译等操作。
本次实验通过设计并实现一段使用函数和编译预处理的程序,旨在加深对函数和编译预处理的理解,掌握它们的基本概念和使用方法,并通过实践感受它们对程序结构和性能的影响。
2. 分析2.1 需求在实验中,我们需要设计一个问题,通过函数和编译预处理来实现对问题的解决。
首先,我们需要确定问题的具体要求和输入输出规范。
只有明确了问题的需求,才能设计出合适的函数和合理的编译预处理指令。
2.2 设计根据实验要求,我们可以设计一个简单的问题:计算一个整数的平方。
用户输入一个整数,程序输出该整数的平方。
这是一个简单的计算问题,可以通过函数和编译预处理来实现。
我们可以设计一个函数calculate_square用于计算平方,并通过编译预处理指令来实现输入输出的控制。
具体的实现细节如下:#include <stdio.h>// 函数:计算平方int calculate_square(int x) {return x * x;}// 编译预处理指令:实现输入输出控制#define ENABLE_INPUT_OUTPUT#ifdef ENABLE_INPUT_OUTPUTint main() {int num;printf("Please enter an integer: ");scanf("%d", &num);int result = calculate_square(num);printf("The square of %d is %d.\n", num, result);return 0;}#endif上述代码中,我们定义了一个函数calculate_square用于计算整数的平方。
《C语言程序设计》实验报告(实验1-11) 2013.3
《C语言程序设计》实验报告2012~2013学年第二学期班级姓名学号指导教师实验一实验项目名称:C程序的运行环境和运行C程序的方法所使用的工具软件及环境:Visual C++ 6.0一、实验目的:1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序;2.通过运行简单的C程序,初步了解C源程序的特点。
二、预习内容:教材《C语言程序设计教程》第1章。
三、实验内容:1. 在Visual C++ 6.0环境下输入并运行下面的程序:#include <stdio.h>int main( ){printf("This is a C program.\n");return 0;}2. 在Visual C++ 6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序无语法错误,然后运行程序,并观察分析运行结果。
#include <stdio.h>int main( ){int a,b,suma=3;b=4;sun=a+b;print(“%d+%d=%d\n”,a,b,sum);return 0;}四、实验结果:1. 运行结果(或截图):2. (1) 改正后的源程序:(2) 运行结果(或截图):五、思考题:1. 一个C程序上机的步骤有哪些?答:2. 组成C程序的基本单位是函数,一个函数包括哪几个部分?答:成绩指导教师签名实验二实验项目名称:数据类型、运算符和表达式所使用的工具软件及环境:Visual C++ 6.0一、实验目的:1.掌握整型、实型与字符型这三种基本类型的概念;2.掌握常量及变量的使用方法;3. 掌握基本算术运算符及其表达式的使用方法;4. 掌握++、--运算符、赋值运算符及其表达式的使用方法。
二、预习内容:教材《C语言程序设计教程》第2章。
三、实验内容:1. 在Visual C++ 6.0环境下输入下面的程序,编译、连接、调试该程序。
预处理实验报告
else if(chr[i]==' ')
一个
{
ch=fgetc(fp);
while(ch==' ')
{
ch=fgetc(fp);
if(ch!=' ')
{
k=false;
if(j==3)
{
printf(" ak;
}
}
k=false;
}
else if(chr[i]==13||chr[i]==10)
预处理实验报告课程名称编译原理实验名称预处理姓名学号080510145班级软件二班一实验目的掌握字符处理的方法理解设计为独立子程序的好处为词法分析做好准备
预处理实验报告
课程名称
编译原理
实验名称
预处理
姓名
张雅琼
学号
080510145
班级
软件二班
实
验
目
的
一、实验目的
掌握字符处理的方法,理解设计为独立子程序的好处,为词法分析做好准备。
if(ch=='/')
{
while(ch!=10)
{
ch=fgetc(fp);
}
printf("%c",ch);
if(ch==10)
{
j++;
printf("%d行:",j);
}
}
else if(ch=='*')
{
ch=fgetc(fp);
while(ch!='/')
{
ch=fgetc(fp);
}
}
为以后的文件输入输出等知识的掌握奠定了初步的基础
C++程序设计实验报告4
1.测试数据和结果(必要时应准备多组数据)
2.出错及解决方法,上机调试的结果和体会
3.上机结束后,应及时整理实验报告。
其它
成绩考核
指导老师签名:
C++程序设计实验报告4
学生姓名
学号
指导教师
实验时间
地点
实验题目
函数与预处理
实验目的
1.掌握函数的定义方法、函数实参与形参的对应关系以及“值传递”的方式。
2.熟悉函数的嵌套调用和递归调用的方法。
3.熟悉全局变量、局部变量概念和使用方法。
4.熟悉编译预处理的应用
实验要求
通过多个函数、全局变量、局部变量的使用方法,体会数据传递、交互相的思想。通过编译预处理的应用,达到优化程序的目的。
实验内容
1.用递归调用的方法实现程序设计。
2.使用编译预处理和多个函数实现程序设计。从132-133页的习题7、12、10
3.从132-133页的习题7,8,9,10,11,12,14,16和书上例题4.11中任选三题进行编程。
算法分析与源程序
1.题目内容
2.算法分析或流程图
3.源程序(应加适当的注释,可读性好)
c语言实验报告18编译预处理、内部函数和外部函数
c语⾔实验报告18编译预处理、内部函数和外部函数《C程序设计》课程实验报告学院:班级:姓名:学号:实验设备:计算机1台实验⽇期:2011年3⽉1⽇实验项⽬名称编译预处理、内部函数和外部函数实验⽬的掌握宏定义、宏调⽤,以及宏展的处理过程,掌握⽂件包含的概念和使⽤。
掌握内部函数和外部函数的定义及使⽤⽅法。
实验要求:掌握宏定义、宏调⽤,以及宏展的处理过程,掌握⽂件包含的概念和使⽤。
掌握内部函数和外部函数的定义及使⽤⽅法。
编写简单程序。
实验内容(包括步骤):1.试分析以下宏替换后的形式,计算输出结果。
要求:先计算运⾏结果,然后利⽤程序验证。
#include "stdio.h"#define CX(y) 2.5+y#define PR(a) printf("%d",(int)(a))#define PR1(a) PR(a); putchar('\n')main(){ int x=2;PR1(CX(5)*x);2.通过宏调⽤⽅式,求从n个数的最⼤值。
要求:数据从键盘输⼊。
3.已知a、b都为整型数,计算a*b。
要求: (1)a、b值从键盘输⼊。
(2)主函数和计算a*b的函数在不同⽂件中存放,求a*b的函数为内部函数,使⽤⽂件包含完成。
4.删除字符串中的指定字符。
要求:(1)字符串和要删除字符都在主函数中输⼊,结果在主函数中输出。
(2)主函数和删除字符串指定字符的函数在不同⽂件中存放,删除字符串指定字符的函数为外部函数。
调试与结果测试:调试正常结果正确。
代码注释:18-1#include "stdio.h"#define CX(y) 2.5+y#define PR(a) printf("%d",(int)(a))#define PR1(a) PR(a); putchar('\n') main(){ int x=2;PR1(CX(5)*x);}#include#define max(x,y) (x)>(y)?(x):(y) int main() {int n,i,t;int a[100];scanf("%d",&n);for(i=0;iscanf("%d",&a[i]);t=a[0];for(i=1;it=max(t,a[i]);printf("最⼤值是%d\n",t);return 0;}18-3-1#include#include int main(){int a,b;scanf("%d%d",&a,&b);printf("a*b=%d\n",f(a,b));return 0;}18-3-2static int f(int x,int y){int s;s=x*y;return s;}18-4-1#include#includeint main(){char c,str1[50];gets(str1);scanf("%c",&c);delete_string(str1,c);printf("%s\n",str1);return 0;}18-4-2extern void delete_string(char str[],char ch) {int i,j;for(i=j=0;str[i]!='\0';i++)if(str[i]!=ch)str[j++]=str[i];str[j]='\0';}――――――――――――以下内容为教师填写―――――――――――――――教师评阅:成绩:良2011年⽉⽇。
C++函数与编译处理(实验)
.西华大学实验报告(计算机类)开课学院及实验室:机械工程与自动化 实验时间 : 2013年4 月 3日一、实验目的1. 掌握函数声明、定义和使用的方法;2. 掌握形参与实参之间的对应关系;3. 掌握函数调用时,形参、实参之间的“值传递”和“引用传递”的区别;4. 掌握函数递归调用的方法;5. 掌握全局变量、局部变量、静态变量的使用方法;6. 掌握文件包含的使用方法。
二、实验内容1. 定义两个函数swap1和swap2,目的是实现两个整数的次序交换,其中swap1的参数是传递值参数,swap2的参数是引用参数,在程序中分别调用这两个函数,其输出结果如下所示:初始值 :x=1,y=2 调用swap1后的结果:x=1 y=2 调用swap2后的结果:x=2 y=1 2. 编写一个函数,用来计算从键盘上输入的整数的阶乘。
3. 编写函数判断一个数是否是素数,在主程序中实现输入、输出。
4. 编写一个程序,设计一个函数可以计算并返回输入的4个数的平均值。
三、使用环境操作系统:Windowns7 C++环境:Visual C++2010四、核心代码及调试过程详细记录核心代码以及程序在调式过程中出现的问题及解决方法。
记录程序执行的结果(运行界面截图)。
实验1:#include <iostream> using namespace std;void swap1(int a,int b)//值传递 { int temp=a; a=b; b=temp;}void swap2(int &a,int &b)//引用传递 { int temp=a; a=b; b=temp; }int main() { int a,b;cout<<"请输入两整数:"; cin>>a>>b;cout<<"两个整数a="<<a<<";b="<<b<<endl; swap1(a,b);cout<<"调用swap1后的值:a="<<a<<";b="<<b<<endl;swap2(a,b);cout<<"调用swap2后的值:a="<<a<<";b="<<b<<endl;return 0;}实验2#include <iostream> using namespace std;int jiecheng(int a) { int ire=1; if (a<0) { cout<<"输入的数是负数"<<endl;}for (int i=a;i>=1;i--){ire*=i;}return ire;}int main() {int num;cout<<"请输入一个整数来计算阶乘:"; cin>>num;cout<<num<<"的阶乘为"<<jiecheng(num)<<endl;return 0;}实验3#include<iostream>using namespace std;bool sushu(int a)//判断是否为素数的函数{int i=2;for(i=2;i<a;i++){if(a%i==0){break;}}if(a==i){return true;}return false;}/***主函数***/int main(){int num=0;while(true){cout<<"请输入一个正整数:";cin>>num;if(num>0){break;}}if(sushu(num)){cout<<num<<"是一个素数"<<endl;}else{cout<<num<<"不是一个素数"<<endl;}return 0;}实验4#include <iostream> using namespace std;double pingju(double a,double b,double c,double d) { return (a+b+c+d)/4;}double pingju(double a[]) { double dre=0; for (int i=0;i<4;i++){dre+=a[i];}return dre/4;}int main() { double a[4];cout<<"请输入4个数"<<endl; cin>>a[0]>>a[1]>>a[2]>>a[3]; cout<<"平均值为"<<pingju(a)<<endl; return 0; }五、总结通过学习,我知道了,函数调用时,有“值传递”和“引用传递”两种方式,前者会把实参的一个副本给了调用函数,调用之后原实参的值不变,后者会把实参的地址给了调用函数,调用函数能够直接修改实参的值,也知道递归就自己调用自己,还有全局变量、局部变量、静态变量的声明方式及其作用范围。
实验8 编译预处理
实验八 编译预处理【实验目的】1. 掌握无参宏定义和有参宏定义的使用。
2. 了解头文件的内容及文件包含的作用。
3. 了解条件编译的作用。
【实验时数】2学时【实验性质】设计性【实验内容】1、通过使用带参数的宏定义从3个数中找出最大数。
主函数完成数据输入,宏用及数据输出。
(sy8_1.c )2、设计输出实数的格式,包括:1) 一行输出一个实数;2) 一行内输出两个实数;3) 一行内输出三个实数。
实数用“%6.2f ”格式输出。
说明:用一个文件sy8_2.h 包含以上用#define 命令定义格式。
在自己的文件中(自己建一个主函数sy8_2.c )用#include 命令将sy8_2.h 文件包含进来。
在程序中用scanf 函数读入三个实数给f1, f2, f3。
然后用上面定义的三种格式分别输出:1) f1;2)f1, f2;3)f1, f2, f3。
(sy8_2.c)3、输入一行字符(包括标点符号),根据需要设置条件编译,使之能将所有字母全改为大写字母输出,或全改为小写字母输出。
用下列字符序列“C Language is a computer program language!”调试程序。
(sy8_3.c)4、定义一个带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。
输出已交换后的两个值。
(sy8_4.c)5、三角形面积为area=))()((c s b s a s s ---,其中s=21(a+b+c)。
a,b,c 为三角形的三边。
定义两个带参数的宏,一个用来求s ,另一个宏用来求area 。
写程序,在程序中用带实参的宏名来求面积area 。
(sy8_5.c )6、用条件编译方法实现以下功能:(sy8_6.c)输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如'a'变成'b'……'z'变成'a'。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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语言编程中非常重要的
基础,也是进行高级开发和优化的必备技能。
在今后的学习和实践中,
我们应该不断地巩固和拓展这些知识点,以便更好地应对各种编程需求。