上机练习五 函数文件编写与程序调试
C语言程序设计上机指导书及答案
姓名:_________________ 学号:_________________ 专业:_________________日期:_________________指导原则:促进学生针对实际问题,用所学C语言知识编写符合规范的源程序代码,在某一集成开发环境下尽一切调试技能调试程序,并对运行结果进行分析处理,得出正确结论,解决好实际问题。
更快更好地掌握所学知识,技能和软件的一向开发方法目的:1,通过上机实验,加深对教材内容的理解,特别是一些语法规定,熟练掌握各种语法规则。
2,通过上机实验,熟悉某个C语言集成开发环境。
掌握集成开发环境下程序的编辑、编译与连接、运行的完整过程3,通过上机实验,要学会调试程序。
能根据系统给出的“出错信息”,判断错误所在,并修改错误,使程序正确运行。
要求:1,复习与本次实验相关的教学内容2,了解集成开发环境的操作步骤3,准备好实验内容。
对于编程题,一定要自己动手,书写工整,并人工检查无误后才能上机实验,以提高上机效率。
4,要准备好调试和运行程序时所需的数据。
5,对运行中可能出现的问题事先作出估计,并对程序中有疑问的地方作上标记,以便在运行时给予注意。
并在程序调试时,把系统给出的出错原因,解决方法等记载在源程序之后;程序运行结束后,把运行结果也记录下来。
6,每个实验应独立完成,对实际问题所编写的源程序需写出完整实验的报告。
第一次上机作业熟悉C语言集成开发环境实验目的:1,熟悉C语言集成开发环境2,掌握集成开发环境下文件的编写与调用,源程序的编译与调试,程序运行结果的观察与分析。
3,掌握C语言程序的基本结构实验要求:1, 程序编写完后,要对输入的每一个符号和词进行检查核对,不能有错。
2,编写源程序时,不要在中文输入法下进行,也不要有首字符大写,否则调试时,会有错误。
实验内容:1,在D盘新建文件夹:D:\C语言程序\×××(所在班级如0709401)\×××(自己学号或姓名如01),作为以后所做程序的存放位置。
2012年浙江省上机程序调试及程序设计练习
上机程序调试及程序设计练习一、程序填空(1)找Armstrong(水仙花)数:371=3*3*3+7*7*7+1*1*1#include <stdio.h>#include<math.h>void main(){ int i,a,b,c;for(i=100;i<=999;i++){ a=i/100;_______1_______c=i%10;if (________2________)printf("%d is a Armstrong number!\n",i);}}// b=i%100/10;// a*a*a+b*b*b+c*c*c = = i(2)输入1个整数后,输出该数的位数。
(例:输入3214则输出4,输入-23156则输出5)。
#include <stdio.h>void main(){ int n,k=0;scanf("%d",&n);while( _____1_____ ){k++;_____2_____; }printf("%d\n",k);}// n!=0// n=n/10(3)求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。
#include <stdio.h>#include <math.h>void main(){int n,s=0;scanf("%d",&n);______ 1 ______while(n!=0) {______ 2 ______n=n/10;}printf("%d\n",s);}// if (n<0) n=-n;// s+=n%10;(4)调用函数f,将一个整数首尾倒置。
例如:若程序输入12345,则输出54321;若程序输入-34567,则输出-76543。
实训五 函数程序设计和答案
实训五函数程序设计(附:答案在后面)班级:姓名:学号:一、实训目标熟练掌握函数的定义、调用和调试方法。
1、学会函数的接口设计,能够快速构建函数框架。
2、掌握函数的定义和调用方法。
3、掌握函数的调试方法(step into)。
4、理解函数的形参、实参、返回值的概念。
二、语法基础1、函数是一个完成特定工作的独立程序模块,包括和两种。
2、对于用户自定义函数,用户需要完成函数的定义、函数的声明及函数的调用三部分内容;而对于库函数用户只需要完成及头文件的包括。
3、以下说法中正确的是。
A)C语言程序总是从第一个定义的函数开始执行B)在C语言程序中,要调用的函数必须在main( )函数中定义C)C语言程序总是从main( )函数开始执行D)C语言程序中的main( )函数必须放在程序的开始部分4、程序填空。
下列两个函数模块,请完成函数体部分内容。
1) 函数功能:求两个数的较大值。
/*函数功能:求两个数的最大值函数入口参数:双精度浮点型 x 表被比较的第一个数双精度浮点型 y 表被比较的第二个数函数返回值:较大的数 (类型为double)*/double max(double x, double y){2) 函数功能:输入一个整数n 的值,从屏幕显示n 个星号(‘*’)。
5、函数调用时的实参和函数定义时的形参可以是相同的变量名吗? ;如果两者变量名完全相同,那么它们代表的同一内存空间吗? ;写出下面程序的输出结果。
/*函数功能:输入一个数n ,输出n 个星号函数入口参数:整型 n 表星号的个数 函数返回值:无 */void printstar(int n) { }#include <stdio.h> int main(void) { int a,b;int even(int a); /*函数声明*/ printf(“input 1 integers : \n”); scanf(“%d”,&a );b=even(a); /*函数调用*/ printf(“2: a=%d,b=%d\n ”,a,b); return 0; }int even(int a) {a=a+1;printf(“1: a=%d\n ”,a); if(a%2==0)return 1; /*偶数返回1*/ elsereturn 0; /*奇数返回0*/ } 预期输出结果:实际运行结果:思考:在调用even 函数时main 函数中的a 变量作为实参,将其值传递给even 函数的形参a ;而在even 函数执行完后返回到main 函数时,形参a 的值会传递给实参a 吗?三、实训内容和步骤1、改错(教育在线上需改错的程序文件夹中error05_1.cpp ),程序功能为:输入一个正整数n ,计算n!,要求定义和调用函数实现。
实验05函数程序设计
计算两个复数之积(调试示例error05_1)程序填空,不要改变与输入输出有关的语句。
分别输入两个复数的实部与虚部,编程调用函数实现计算两个复数之积。
若两个复数分别为:c1=x1+(y1)i, c2=x2+(y2)i,则:c1*c2 = (x1*x2-y1*y2) + (x1*y2+x2*y1)i输入输出示例:括号内是说明输入1 2 (x1=1, y1=2)-2 3 (x2=-2, y2=3)输出product of complex is (-5.000000)+(1.000000)i#include<stdio.h>/*---------*/int main(void){float imag1, imag2, real1, real2;scanf("%f%f", &real1, &imag1);scanf("%f%f", &real2, &imag2);complex_prod(real1, imag1, real2, imag2);printf("product of complex is (%f)+(%f)i\n", result_real, result_imag);return 0;}/*---------*/使用函数求1! + 2! + … + m!(改错题error05_2)程序填空,不要改变与输入输出有关的语句。
求1! + 2! + … + 10!,要求定义并调用函数fact(n)计算 n!,函数形参 n 的类型是int,函数类型是double。
输入输出示例:括号内是说明输出:1!+2!+...+10! = 4037913.000000#include <stdio.h>double fact(int n);int main(void){int i;double sum;/*---------*/printf("1!+2!+...+10! = %f\n", sum);return 0;}/*---------*/使用函数判断数的符号程序填空,不要改变与输入输出有关的语句。
上机1--C语言简单程序的编写和调试
上机1 C语言简单程序的编写和调试一、目的熟悉Visual C++6.0集成环境,掌握在该环境下进行程序调试的一般方法。
二、要求1.熟悉Visual C++6.0集成环境的使用,掌握在V isual C++6.0集成环境下输入,编译,调试和运行C程序的基本过程和方法;2.通过编写简单程序,掌握C程序的基本组成和结构,以及用C程序解决实际问题的步骤;三、例题1.在V isual C++6.0集成环境中练习程序的输入、编译、连接和运行的基本方法。
〔指导〕(1)启动V isual C++6.0 ,进入Visual C++6.0 集成环境。
(2)设置基本环境:“工具”->“选项”->“格式”标签页。
“颜色”栏中:number 前景颜色“紫红色”,string前景颜色“红色”,operator前景颜色“枣红色”。
(3)在计算机的E盘上创建一个存放今天上机程序的目录夹,如“C语言程序”。
(4)创建一个C源程序:“文件”-> “新建”,打开“新建”对话框。
选“文件”标签页,选择C++ Source File 一项。
在“文件”输入框中输入当前文件的名字s1-1.c,在“位置”处选择将文件保存的路径e:\C语言程序。
(4)键入C源程序:#include <stdio.h>void main(){printf ("Hello, C! \n");}(5)执行“编译”,编译程序,产生目标文件。
(6)执行“执行”,连接生成.exe文件。
Hello,C!2. 练习程序:格式化输出变量〔指导〕按前面步骤编辑程序文件命名为s1-2.c:#include <stdio.h>void main(){int a, b, sum; /*定义变量*/a=40; b=50; /*变量赋值*/sum=a+b; /*求和*/printf ("Hello, C! \n");printf ("Sum is %d \n", sum); /*输出sum*/}写出程序输出结果,看看和预期的结果是否一致。
C语言上机实验例题
实验一 C语言的运行环境、运行过程和表达式的使用一、目的与要求1、了解Dos、Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。
2、了解在该系统上如何编辑、编译、连接和运行一个C程序。
3、通过运行简单的C程序,初步了解C源程序的特点。
4、掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。
5、学会使用C的有关算术运算符,以及包含这些运算符的表达式二、实验例题【例1】编程实现在屏幕上显示如下三行文字Hello, world !Wolcome to the C language world!Everyone has been waiting for.在Turbo C的集成环境下,键入如下源文件。
敲Alt+F组合键打开File菜单,File菜单中Write to或save as选项可将默认noname.c文件名改为任意文件名。
程序example.c如下:main(){printf("Hello,World!\n");printf("Wolcome to the C language world!\n");printf("Everyone has been waiting for.\n");}然后用Ctrl+F9执行example.c,用Alt+F5查看结果,即在屏幕上显示题目要求的三行文字。
按回车键重新返回Turbo C的编辑环境。
注意,在运行程序之前最好先存盘。
【例2】输入并运行程序,写出运行结果。
main(){int a,b,sum;a=123;b=456;sum=a+b;printf(“sum is %d\n”,sum);}运行方法同上,最后结果为:sum is 579。
【例3】输入并运行程序,写出运行结果。
main(){int a,b,c;int max(int,int);scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“max=%d”,c);}int max(int x,int y){int z;if (x>y) z=x;else z=y;return(z);}这个程序的功能是对于任意输入的两个整数,输出较大的那个数。
C语言程序设计实验五:函数(5篇范例)
C语言程序设计实验五:函数(5篇范例)第一篇:C语言程序设计实验五:函数C语言程序设计实验五:函数1、定义函数返回两个数中较大的数,在主函数中通过调用该函数求三个数中较大的数并输出,编写主函数调用该函数。
说明:(1)请大家按学号来坐,便于考勤和管理。
(2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。
(3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。
(4)文档名称:班级+学号后2位+姓名+实验编号,例如12通1班12张山实验五.doc。
第二篇:C语言程序设计实验七:函数、数组、指针C语言程序设计实验七:函数、数组、指针1、程序运行后,用户任意输入一个字符串,求出字符串长度,然后输出字符串内容及个数。
不能使用strlen函数。
求字符串长度函数的函数原型必须如下:int MyStrLenPt(char *str)若输入:nihao123!则输出:nihao123!:9 chars2、编写一个对一维数组进行排序的程序。
要求:写两个函数,一个主函数,一个sort函数。
在主函数中完成数组的输入和输出,通过调用sort函数对数组进行排序。
sort函数的原型为:voidsort(int*p, intn);说明:(1)请大家按学号来坐,便于考勤和管理。
(2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。
(3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。
(4)文档名称:班级+学号后2位+姓名+实验编号,例如11电1班12张山实验七.doc。
第三篇:C语言程序设计—函数—实验报告实验报告专业软件工程班级X班学号_ XXXXXXXXXXX_姓名实验日期:201X年X月X日报告退发(订正、重做)课程C程序设计实验实验名称函数一、实验目的① 熟练掌握C程序中函数的定义;② 掌握函数的调用,函数参数的传递;③ 熟练掌握函数的嵌套调用和递归调用;二、实验环境(描述实验的软件、硬件环境)① 软件环境:windows xp/win7等操作系统,Microsoft Visual C++ 6.0编译器;② 硬件环境:PC机一台三、实验内容、步骤和结果分析题目一:编写一个用来判断质数(素数)的函数。
5~6次C语言上机作业
实验5 函数(1)【实验题5-1】以下程序的功能:从键盘输入两个数,计算出他们的和,并将结果输出在屏幕上。
调试运行程序,观察出现了什么错误,提出两种修改方案。
【实验题5-2】下程序的功能:输出3~1000之的间的素数。
请选择合适的内容填入程序的空白处,并调试运行程序。
【实验题5-3】从键盘输入一个整数n,计算n^3,并将结果输出在屏幕上。
要求计算n^3用函数实现。
【实验题5-4】从键盘输入一个整数n,计算2n+1与++n之和。
要求计算两数之和用函数实现。
注意写计算表达式的时候3*n之间的乘号不要丢掉,否则会提示:invalid suffix “n” on integer constant.调用用户自定义函数是只写ifun=fun(n); 就可以了,不要在括号里加上int。
Ifun=fun(int n) ×【实验题5-5】编写程序,计算Cmn=n!/(n-m)!m!。
要求如下:1)编写一个函数计算n!;2)编写主函数,输入n和m, 调用第1)项中的函数完成计算;3)输出并计算C58、C712的结果。
【实验题6-1】以下程序功能:用已知三角形三边,求三角形面积。
但程序有错,请上机调试并改正错误。
【实验题6-2】以下程序运行的结果应该是a=14, b=15,temp=0。
在程序空白处填写适当的编译预处理命令。
【实验题6-3】用for循环输出20个0~99之间的随机数。
要求没输出五个随机数换一行。
【实验题6-4】从键盘输入一个字母,如果是大写字母就转换成小写字母输出;如果是小写字母就转换成大写字母输出。
要求用库函数实现。
【实验题6-6】调试运行以下程序,掌握内部函数和外部函数的使用。
该程序包括两个源程序文件“6_6_1.C”和“6_6_2.C”。
#include<stdio.h>#define N 9void main(){int itop,ibottom,iresearch,imiddle;int iA[N]={0,1,2,3,4,5,6,7,8};scanf("%d", &iresearch);itop=0;ibottom=N-1;while(itop<=ibottom){imiddle=(itop+ibottom)/2 ;if(iresearch<iA[imiddle])ibottom=imiddle-1;elseif (iresearch>iA[imiddle])itop=imiddle+1;else{printf("\n元素%d在数组中,下标是%d\n, iresearch,imiddle");return;}}printf("\n%d在数组中未找到\n",iresearch);}。
c语言上机实验
实验一实验目的:1.掌握c程序设计编程环境visual c++,掌握运行一个c程序设计的基本步骤,包括编辑、编译、连接和运行。
2.掌握c语言程序设计的基本框架,能够编写简单的c程序。
3.了解程序调试的思想,能找出并改正c程序中的语法错误。
实验内容:1.在“我的电脑”上新建一个文件夹,用于存放c程序,文件夹名字可以是学号姓名。
2.调试示例,在屏幕上显示一个短句“Hello World!”。
源程序#include <stdio.h>void main(){printf(“Hello World!\n”);}运行结果:Hello World!基本步骤:(要求熟练掌握)1)启动VC++“开始”->“程序”->“Microsoft Visual Studio 6.0”->“Microsoft Visual C++6.0”进入VC++编程环境。
2)新建文件(*.cpp)“文件”->“新建”,单击“文件”选项卡,选择“C++Source Files”,修改文件保存“目录”和“文件”(文件名),单击“确定”。
3)编辑和保存(注意:源程序一定要在英文状态下输入,即字符标点都要在半角状态下,同时注意大小写,一般都用小写)在编辑窗口输入源程序,然后执行“文件”->“保存”或“文件”->“另存为”4)编译(*.obj)用来检查语法错误“编译”->“编译”或Ctrl+F7,在产生的工作区队话框中,选择“是”。
5)连接(*.exe)“编译”->“构件”或F76)运行“编译”->“执行”或Ctrl+F57)关闭程序工作区“文件”->“关闭工作区”8)打开文件“文件”->“打开”9)查看C源文件、目标文件和可执行文件的存放位置。
源文件在保存目录下,目标文件和可执行文件在“保存目录\Debug”中3.修改上面的程序,在屏幕上显示一个短句“this is my first c program.”。
[练习]c上机实验五
c++上机实验五1、设计一个名为Fan的类,表示一个风扇,该类满足下述要求:具有描述风扇转速的成员speed;具有描述风扇是否开启的成员on;具有描述风扇半径的成员radius;具有描述风扇颜色的成员color以上所有成员的访问和更改函数;输出风扇所有信息的函数display;在main函数中创建2个Fan的对象,将第一个风扇的转速、半径和颜色分别设置为3、10和yellow,并将它打开。
第二个风扇的转速、半径和颜色分别设置为2、5和blue,并将它关闭。
输出以上2个风扇的所有信息。
2、设计一个名为Account的类,该类满足下述要求:一个名为id的int型成员,表示账户的身份号;一个名为balance的double型成员,表示账户余额;一个名为annualInterestRate的double型数据域,保存当年利率;以上所有成员的访问和更改函数;一个名为getMonthlyInterestRate( )的函数,返回月利率;月利率为年利率/12;一个名为withDraw的函数,从账户中支取指定金额;一个名为deposit的函数,向账户中存入指定金额;在mian函数中,创建一个Account对象,其ID为1122,账户余额为20000,年利率为4.5%,使用withDraw函数取出2500美元,使用deposit函数存入3000美元,然后输出账户的余额、月利率。
#include<iostream>#include<string>using namespace std;class Fan{public:void display(int s,int r,string y,string d); string ifon(int i);private:int speed,radius;string color,c;};string Fan ::ifon(int i){string c;if(i==1)c="on";elsec="off";return c;}void Fan::display(int s,int r,string y,string d){speed=s;radius=r;color=y;c=d;cout<<"转速、半径、颜色、状态分别是"<<s<<" "<<r<<" "<<y<<" "<<c<<endl;}int main(){Fan fan0,fan1;int s1,s2,r1,r2,n1,n2;string c1,c2,y1,y2;cout<<"请输入第一个风扇的相关信息"<<endl; cin>>s1>>r1>>y1>>n1;cout<<"请输入第二个风扇的相关信息"<<endl; cin>>s2>>r2>>y2>>n2;c1=fan0.ifon(n1);fan0.display(s1,r1,y1,c1);c2=fan1.ifon(n2);fan1.display(s2,r2,y2,c2);return 0;}#include<iostream>using namespace std;class Account{public:void Change_id(int ID); //身份号void Change_balance(double b); //账户余额void Change_AIR(double AIR); //当年年利率void Visit_id(void);void Visit_balance(void);void Visit_AIR(void);double getMonthlyInterestRate(void); //返回月利率void withDraw(double out_num); //从账户中支取指定金额void deposit(double in_num); //向账户中存入指定金额private:int id;double balance;double annualInterestRate;};void Account::Change_id(int ID){id=ID;}void Account::Change_balance(double b){balance=b;}void Account::Change_AIR(double AIR) {annualInterestRate=AIR;}void Account::Visit_id(void){// cout<<"ID:"<<id<<endl;}void Account::Visit_balance(void){cout<<"账户余额"<<balance<<endl; }void Account::Visit_AIR(void){// cout<<"年利率是"<<annualInterestRate<<endl; }double Account:: getMonthlyInterestRate(void){double M_rate;M_rate=annualInterestRate/12.0;return M_rate;}void Account:: withDraw(double out_num){balance=balance-out_num;// cout<<"支取的金额为:"<<out_num<<";余额为"<<balance<<endl;}void Account:: deposit(double in_num){balance+=in_num;// cout<<"存入的金额为:"<<in_num<<"余额为:"<<balance<<endl;}int main(){Account id_1;id_1.Change_id(1122);id_1.Change_balance(20000);id_1.Change_AIR(0.045);id_1.withDraw(2500);id_1.deposit(3000);id_1.Visit_balance();cout<<"月利率为:"<<id_1.getMonthlyInterestRate()*100<<"%"<<endl; return 0;}。
C语言程序设计实验5 函数
实验5 函数
姓名:XXX 学号:XXX实验日期:XXX
1.实验目的和要求:参见实验指导书实验八
2.实验内容和步骤:
实验内容:实验指导书中的实验八
实验步骤:
2.1.实验内容的第1题,通过本题,了解到要在单步调试时能够观察自定义的函数内部变量变化情况,单步调试如何操作:
1.添加断点将光标移动到要添加断点的行中,然后按下Ctrl+F8即可。
2..观察变量现在想要观察a,b两个变量,按下Ctrl+F7,会弹出Add watch对话框,在其中填入所需观察变量a,b即可。
3.单步执行按F7执行单步跟踪操作,也可以按Ctrl+F9键执行到下一个断点。
4.终止测试按下Ctrl+F2
提问(1),请在下面粘贴运行结果画面:
实参a是否为同一变量?不是同一变量。
提问(2),请请在下面粘贴运行结果画面:
提问(3),观察结果有何变化?答:输出数据出错了。
通过本题,可以得出什么结论?
答:extern int a,b 表示a是在其它文件中定义的一个变量,需要在这里引用。
如果在外部定义了而没有引用的话输出时内存就按原来的输出也就不是输出定义值了。
2.2 实验内容部分第2题源程序代码,请贴图:
程序运行结果画面,请贴图:
2.3 实验内容部分第3题源程序代码,请贴图:
程序运行结果画面,请贴图:
2.4 选做题,若做了,请在下面给出源程序代码贴图及运行结果贴图
2.5选做题,若做了,请在下面给出源程序代码贴图及运行结果贴图
3.实验小结
通过对函数的学习,学习到了怎么样把程序模块,让我对函数的调用和定义,有了一个更深入的了解.。
函数与程序的调试
例4:nargin用法示例。
函数文件examp.m:
function fout=charray(a,b,c)
if nargin==1
命令文件my.m:
fout=a;
x=[1:3];
elseif nargin==2 fout=a+b;
elseif nargin==3 fout=(a*b*c)/2;
end
y=[1;2;3]; examp(x) examp(x,y') examp(x,y,3)
8
11.1.4 函数句柄
函数句柄可以实现对函数的间接操作,可以通 过将函数句柄传递给其他函数实现对函数的操 作,也可以将函数句柄保存在变量中,留待以 后调用操作。
函数句柄的创建格式如下: fhandle=@functionname
其中fhandle为创建的函数functionname的函 数句柄。
9
若要保存函数句柄,可以使用单元数组,如下:
trigFun = {@sin, @cos, @tan};
通过函数句柄实现对函数的间接调用,其调用格 式与直接调用函数的格式相同:
fhandle(arg1, arg2, ..., argn)
现参数传递,然后再执行函数的功能。
在MATLAB中,函数可以嵌套调用,即函数可 以调用别的函数,甚至调用它自身。一个函数 调用它自身称为递归调用。
4
例2:利用函数文件,实现直角坐标(x, y)与 极坐标(rho, theta)之间的转换。
函数文件tran.m:
function [rho,theta]=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x);
华中科技大学c++第5次上机作业
华中科技大学《计算机基础与程序设计(C++)》实验报告实验名称:第五次上机实验实验学时:4姓名:学号:班级:电气实验日期:2017/4/27教师批阅签字:一、实验目的●掌握字符型数组、字符型指针和数值型数组的异同。
●掌握自定义函数的定义,声明和调用。
●掌握函数参数的值传递和地址传递的区别。
●掌握递归算法的意义。
●明确变量的作用域和生存期的意义。
二、实验内容1.阅读程序1)#include <iostream>#include<cmath>using namespace std;int main(){ int a=10, *p=&a;char ch=’a’, *q=&ch;char str[ ]=”abcd”,*qq=str;cout<<*p<<endl;cout<<*q<<endl;cout<<*qq<<endl;cout<<p<<endl;cout<<q<<endl;cout<<qq<<endl;return 0;}运行上述的程序,并解释每个输出结果。
解释:1.指针变量*p指向a的地址,所以直接输出a的值。
2.指针变量*q指向ch的地址,所以输出ch的值。
3.指针变量*qq指向数组str的首地址,故只输出首个数据4.因为a的类型为int,所以输出了a的地址5.有一个元素的字符数组,没有\0,所以直接输出时不能停止,只能输出乱码,而字符串可以直接输出是因为它会自动添加\0,输出时遇到\0停止,所以可以正常输出;6.用字符数组给指针初始化,所以qq相当于str,而字符数组可以整体输出2)#include <iostream>#include<cmath>using namespace std;int main(){ int age ;char name[11];cin>>age;cin.getline(name,11);cout<<age<<endl;cout<<name<<endl;return 0;}运行上述的程序,其结果是否正确,如不确请修改正确,并解释原因。
C语言上机实验5-12
17.5 实验5 循环结构程序设计1.实验目的(1)熟悉掌握用while语句、do…while语句和for语句实现循环的方法。
(2)掌握在程序设计中循环的方法实现一些常用的算法(如穷举、迭代、递推等)。
(3)进一步学习调试程序。
2.实验内容编程并上机调试运行(1)输入一行字符、分别统计出其中的英文字母、空格、数字和其他字符的个数(本题是教材第5章第4题)在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。
(2)输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。
例如,153是一个水仙花数,因为153=1³+5³+3³(本题是教材第五章第8题)。
(3)猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃,只剩一个桃子了。
求第一天共摘了多少桃子(本题是教材第五章第12题)。
再得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半后,再吃两个。
请修改程序并运行,检查结果是否正确。
(4)用牛顿迭代法求方程2X³=4x²+3x-6=0在1.5附近的根(本题是教材第五章第13题,学过高等数学的读者可选做此题)。
再得到正确结果后,请修改程序所设的X初始值由1.5改为100,1000,1000,再运行,观察结果,分析不同的x初值对结果有什么影响,为什么?修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。
3.预习内容预习教材第5章。
17.6 实验6 数组1. 实验目的(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法。
(2)掌握字符数组和字符串函数的使用。
(3)掌握与数组有关的算法(特别是排序算法)。
2.实验内容编程序并上机调试运行。
实验5函数程序设计
实验5函数程序设计实验目标:通过实验,学习函数的基本概念和使用方法,掌握如何使用函数设计和实现程序。
实验内容:1.函数概念的理解2.函数的定义和调用3.函数的参数传递4.函数的返回值5.函数重载6.递归函数的使用一、函数概念的理解函数是一个独立的代码块,用于执行特定的任务。
它将一些输入参数转换成输出结果,可以被多次调用,提高代码的可维护性和代码的重用性。
二、函数的定义和调用函数的定义包括函数的声明和函数体。
函数的声明用于向编译器说明函数的返回值类型、函数名和参数列表,可以定义在函数调用之前或者在函数体之前,以告诉编译器函数的存在。
函数的函数体用于实现函数的具体功能。
函数的调用是通过函数名和实参列表来完成的。
当函数被调用时,程序执行会转移到函数体中执行相应的代码,函数执行完毕后返回到调用函数的地方继续执行。
调用函数时,可以将实参的值传递给形参。
三、函数的参数传递参数传递是指调用函数时将实参的值传递给形参的过程。
参数传递可以分为按值传递、按引用传递和按指针传递三种方式。
按值传递是指将实参的副本传递给形参。
在函数体中对形参的修改不会影响实参的值。
按引用传递是指将实参的引用传递给形参,即形参是实参的别名。
在函数体中对形参的修改会影响实参的值。
按指针传递是指将实参的地址传递给形参,即形参是实参的指针。
在函数体中对指针指向的值的修改会影响实参的值。
四、函数的返回值函数返回值是指函数执行完毕后返回给调用函数的值。
函数可以返回一个值或者不返回值。
函数返回值的类型和个数需要在函数声明或者定义时指定,函数体中使用return语句返回具体的值。
函数返回值可以通过赋值给变量来使用。
五、函数重载函数重载是指在同一作用域内定义多个同名函数,但是函数的参数列表不同。
编译器会根据不同的参数列表选择调用对应的函数。
函数重载的实现要注意参数的类型和个数,不能只是返回值不同。
六、递归函数的使用递归函数是指在函数的定义中调用函数本身的函数。
如何编程实现函数的调试与测试
如何编程实现函数的调试与测试编程实现函数的调试与测试在软件开发的过程中,函数的调试与测试是不可或缺的一环。
通过调试和测试,我们可以确保函数的正确性和稳定性,提高程序的质量。
本文将介绍如何编程实现函数的调试与测试,以及一些常用的调试和测试技巧。
一、调试调试是指通过查找和修复程序中的错误来确保程序的正确运行。
在进行函数调试时,我们可以使用以下几种常用的调试技巧。
1. 打印调试信息在函数中插入打印语句,输出变量的值,以便观察程序的执行过程。
这种方法简单直观,适用于简单的调试任务。
但是,在大型程序中使用过多的打印语句会导致输出信息过于冗杂,不便于定位问题。
2. 使用断点调试器断点调试器是一种强大的调试工具,可以在程序的特定位置设置断点,当程序执行到断点时暂停运行,方便我们观察变量的值和程序的执行流程。
常见的断点调试器有GDB、Visual Studio等。
通过断点调试器,我们可以逐步执行程序,定位问题所在。
3. 使用调试工具除了断点调试器外,还有一些专门的调试工具可以帮助我们进行函数的调试。
比如,Valgrind是一款开源的内存调试工具,可以检测内存泄漏和访问越界等问题;GDB的GUI前端DDD提供了更友好的调试界面,方便我们对程序进行调试。
二、测试测试是指通过输入一组预定义的输入数据,验证函数的输出是否符合预期。
在进行函数测试时,我们可以使用以下几种常用的测试技巧。
1. 单元测试单元测试是指对程序中的最小可测试单元进行测试,通常是函数。
通过编写测试用例,输入不同的参数,验证函数的输出是否符合预期。
常见的单元测试框架有JUnit、PyTest等,可以自动运行测试用例,并生成测试报告。
2. 边界测试边界测试是指测试函数在输入参数边界值时的行为。
边界值通常是最小值、最大值和临界值。
通过边界测试,我们可以发现函数在边界值处是否存在问题,例如越界、溢出等。
3. 异常测试异常测试是指测试函数在异常情况下的行为。
比如,当函数接收到非法参数时,是否能正确地抛出异常。
上机5
实验五 函数程序设计一、目的与要求1、掌握C 语言函数的定义方法、函数的声明及函数的调用方法。
2、了解主调函数和被调函数之间的参数传递方式。
3、了解一个程序由多个文件组成的编程方法。
二、实验内容例:用函数编程求方法:一个程序可以由一个文件构成,也可由多个文件构成,这些文件可以是源文件,也可能有头文件等。
那么如何实现多文件程序呢?比如本题它应由两个函数组成,一个是主函数,一个是求阶乘的子函数,这两个函数可以放在一个源文件中,就像以前的编写方法一样,只是要注意的是:函数一般要遵循先定义(或说明)后使用的原则即可。
这里只介绍多文件程序设计的上机实现方法。
下面解决本问题的两段程序,分别放在两个文件中#include <stdio.h>void main(){long s;int n;s=0;for(n=1;n<=10;n++)s+=fact(n);printf("s=%ld\n",s);}long fact(int n){long p;int k;p=1;for(k=1;k<=n;k++)p*=k;return p;}操作过程为:(参照实验一)1、新建项目 ∑==101n !n s2、新建C++源文件1,文件名自己命名(如h1),并在编辑区输入红色程序段。
3、新建C++源文件2,文件名自己命名(如h2),并在编辑区输入蓝色程序段。
此时如下图所示,在左边的工作空间区的文件视图页(2处)有两个源文件(见1处),双击文件名即可查看文件内容。
此时编译连接则出现上图所示的错误,意即在h1.cpp文件中fact没有定义,而fact的定义是在h2.cpp中,在h1.cpp中要使用fact不用再定义,只需说明一下即可,见下图。
说明方法是在使用fact函数的h1.cpp文件的开头处(5处)加上fact函数的函数头,后面再加分号即可。
再编译连接就没错了,见6处。
此时即可运行了。
对于小程序可按此方法操作,如果程序很大,有很多函数要在不同文件中交叉使用,对每个函数都这样说明有点麻烦。
5 函数 上机 答案
2. 编写函数判断一个数是否是素数,在主函数中调用该函数输出 1000 以内的素数,要求
每行输出 5 个素数。 #include<iostream> //#include<cmath> using namespace std; bool prime(int x); int { main( ) int n,k=0; for( n=2; n<=1000; n++) if( prime(n)) { cout << n << '\t'; k++; if(k%5==0) cout << endl; } cout << endl; return 0; } bool prime(int x) { int k, i; k=sqrt(x); for( i=2; i<=k; i++) if( x%i==0) return 0; return 1; //只有当 i>k 时才能执行此语句 }
上机作业 3
(第五章 函数)
1. 编写一个函数,用下面的公式求 ex 的近似值。在主函数中输入 x 及精度 10-6,求 ex。
n 2 3 x x x x + ++ ex = 1+ + n! 1! 2! 3!
#include<iostream> //#include <iomanip> using namespace std; double ex(double x,double eps) 码中直接用 1e-6 { int i=1; double e=1,t=1; while(fabs(t)>eps) { t=t*x/i; e=e+t; i++; } return e; } int main( ) { double x,eps; cout<<"请输入 x 和精度的值:"<<endl; cin>>x>>eps; cout <<"e**"<<x<<" = "<< ex(x,eps)<<endl; return 0; } //其中 double eps 表示精度,可以不要,在下面的代
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机练习五函数文件编写与程序调试
一、上机目的
1、掌握函数文件的创建、编辑、运行和调用方法;
2、掌握全局变量的定义和使用方法;
3、通过练习进一步理解函数文件的编程方法。
二、上机仪器设备
1、计算机;
2、MA TLAB软件环境。
三、上机内容和步骤
1、函数文件的结构、创建与运行
打开Matlab M编辑器,输入以下代码:
function y=average(x)
% 函数average(x)用以计算向量元素的平均值。
% 输入参数x 为输入向量,输出参数y为计算的平均值。
% 非向量输入将导致错误。
% 代码行。
[m,n]=size(x); % 判断输入量的大小
if~((m==1)|(n==1))| ((m==1)& (n==1)) % 判断输入是否为向量
error('必须输入向量。
')
end
y=sum(x)/length(x); %计算向量x 所有元素的平均值
将以上代码以文件名average.m保存,尝试以下操作:
1)在命令窗口输入:
>> z=1:99;
>> average(z)
观察运行结果,体会函数文件的调用方法。
2)在命令窗口输入:
>> lookfor aver age
观察运行结果,体会函数文件H1行的作用。
3)在命令窗口输入:
>> help average
观察运行结果,体会函数文件注释行的作用。
4)将文件名改成average_1.m,分别在命令窗口输入以下指令:
>> average([1 2 3])
>> average_1([1 2 3])
观察运行结果,总结函数文件名与函数名不同时的函数调用方法。
2、子函数的使用
打开Matlab M编辑器,输入以下代码:
function [avg,med] = newstats(u) %主函数
% NEWSTATS 计算均值和中间值
n = length(u);
avg = mean(u,n); %调用子函数
med = median(u,n); %调用子函数
function a = mean(v,n) %子函数
%计算平均值
a = sum(v)/n;
function m = median(v,n) % 子函数
%计算中间值
w = sort(v);
if rem(n,2) = = 1
m = w((n+1)/2);
else
m = (w(n/2)+w(n/2+1))/2;
end
将以上代码以文件名newstats.m保存,尝试以下操作。
1)在命令窗口输入:
>> x = 1:11;
>> [mean,mid] = newstats(x)
观察运行结果,体会含有子函数的函数文件的运行过程。
2)在命令窗口分别输入以下指令:
>> help newstats
>> help newstats>median
观察运行结果,总结含有子函数的函数文件H1行的作用。
3、函数参数的可调性
建立以下函数文件,并按照以下方式运行之,观察运行结果,体会nargin和nargout变量的使用方法。
function apple = test(a,b,c)
if nargin = =1
apple n = a;
elseif nargin = =2
apple n = a+b;
elseif nargin = =3
apple n = a+b+c;
end
>> test(4)
>> test(4,5)
>> test(4,5,6)
4、全局变量与局部变量
1)建立以下函数文件(local.m ):
function local
%LOCAL 查看局部变量的例子
x = rand(2,2);
y = zeros(2,2);
z = ‘函数中的变量’;
x
u = {x,y,z};
disp(z)
whos
在命令窗口运行该文件
>> local
在当前工作空间观察函数文件变量是否存在,并解释运行结果。
>> whos
2)将上述函数文件改成(global_1.m ):
function global_1
%GLOBAL 查看全局变量的例子
Global X
X= rand(2,2);
y = zeros(2,2);
z = ‘函数中的变量’;
X
u = {X,y,z};
disp(z)
whos 在命令窗口运行该文件
>> global_1
5、函数的递归调用
先用函数的递归调用定义一个函数文件求1n m i i
=∑,然后调用该函数文件求
100100100
21111k k k k k k ===++∑∑∑ 四、上机要求
1、完成以上上机任务;
2、总结函数文件的运行/调用方法;
3、总结全局变量与局部变量的用法;
4、总结nargin 和nargout 变量的含义和用法;
5、总结命令文件与函数文件的区别;
6、将上机报告存在自己的工作目录下。