实验4-函数与指针

合集下载

函数指针c语言

函数指针c语言

函数指针c语言
在C语言中,函数指针是指向函数的指针变量。

它可以用来存储和调用函数的地址,使得我们能够通过指针间接地调用函数。

函数指针的声明和使用如下所示:
1.函数指针的声明:函数指针的声明类似于函数声明,只是将函数名替换为指针变量名,并在前面加上指针运算符(*)。

返回类型 (*指针变量名)(参数列表);
例如,声明一个指向返回类型为int,参数为两个int的函数的指针可以这样写:
int (*ptr)(int, int);
2.函数指针的赋值:可以将函数的地址赋值给函数指针,使得函数指针指向该函数。

ptr = 函数名;
例如,将一个名为add的函数的地址赋值给上面声明的指针ptr:
ptr = add;
3.函数指针的调用:通过函数指针调用函数时,可以像调用正常函数一样使用函数指针,并传递相应的参数。

返回值 = 指针变量名(参数列表);
例如,通过指针ptr调用函数add并传递两个参数:
int result = ptr(3, 4);
这样会调用函数add,将3和4作为参数传递给它,并将返回值赋值给result。

函数指针在C语言中具有广泛的应用,例如在回调函数、函数指针数组和函数指针作为函数参数等场景中。

它们提供了一种灵活的方式来动态选择和调用函数。

《C语言程序设计》实验四

《C语言程序设计》实验四

电子科技大学计算机学院标准实验报告(实验)课程名称C语言程序设计电子科技大学教务处制表电子科技大学实验报告四学生姓名:学号:指导教师:王瑞锦实验地点:实验日期:年月日一、实验室名称:软件实验室二、实验项目名称:函数的应用及预处理三、实验学时:2四、实验原理:使用Turbo C软件(简称TC),在微型计算机上,对其程序进行编辑、编译、连接与运行。

Turbo C是一个集成环境,它具有方便、直观、易用的界面和丰富的库函数。

通过上机练习掌握在TC环境下编辑、编译、连接、和运行C程序的方法和过程。

五、实验目的1.掌握C语言中定义函数的方法;2.掌握函数传值调用的方法;3.掌握函数传址调用的方法;4.掌握递归函数的设计方法;5.掌握命令行参数的使用方法;6.掌握函数在不同文件中的编译、链接方法。

六、实验内容编程实验,完成以下上机内容,调试运行程序并完成报告1)、教材第七章习题7.4;2)、编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出;3)、教材第七章习题7.11;4)、教材第七章习题7.15;5)、教材第七章习题7.24;6)、求解汉渃塔(tower of Hanoi)问题。

在一块平板上立有3根立柱,从左到右分别标记为A,B,C。

最初在A柱上放有6个大小不等的圆盘,并且大盘在下面,小盘在上面。

要求将这些盘从A移到C(可以借助B柱)。

条件是:每次只能移动一个盘,并且不允许把大盘放在小盘的上面。

(提示:利用函数的递归调用);七、实验器材(设备、元器件):pc硬件要求:CPU PII 以上,64M 内存,1OOM 硬盘空间即可。

软件要求:DOS3.0以上/Windows98/Me/XP/NT/2000。

八、实验步骤:实验编程与运行结果⑴编写一个求两个整数的最小公倍数的函数,两个整数由键盘输入,用主函数调用这个函数,并输出结果。

程序文件名为7_4.c,源程序清单如下:#include<stdio.h>lcd(int a,int b){int temp,num1,num2;num1=a;num2=b;while(num2!=0){temp=num1%num2;num1=num2;num2=temp;}return(a*b/num1);}main(){int t,x,y;printf("Please input two integers:");scanf("%d,%d",&x,&y);if(x>y){t=x;x=y;y=t;}printf("lcd(%d,%d)=%d\n",x,y,lcd(x,y));}运行结果:⑵编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出。

C语言程序设计课程教学大纲

C语言程序设计课程教学大纲

《C语言程序设计》课程教学大纲适用专业信息与计算科学总学时90学分 4一、编写说明(一)本课程的性质、地位和作用本课程属于信息与计算科学的专业课,C程序设计语言的语法规则、数据类型、数据运算、语句、函数、指针、程序结构等方面的学习,掌握应用C语言进行程序设计的技能,为今后进一步学习程序开发以及科学与工程计算的软件开发奠定一个良好的基础。

(二)本大纲制定的依据根据本专业人才的培养目标和人才培养规格所需要的基本理论和基本技能的要求,根据本课程的教学性质、条件和教学实践而制定。

(三)大纲内容选编原则与要求通过对本课程的学习,使学生掌握基本概念、基本原理、基本知识和实际操作能力,重点落实到“用”上。

在对大纲内容选编时,在注重基本原理、基本概念的同时,特别强调实用系统的设计与开发,做到了理论与实践有效结合。

(四)实践环节实验1:C程序的运行环境和运行一个C程序的方法, 2学时主要内容与要求:了解所用的计算机系统的基本操作方法,学会独立使用该系统;了解在该系统上如何编辑、编译、连接和运行一个C程序;通过运行简单的C程序,初步了解C 程序的特点。

实验2:简单的C程序设计,2学时主要内容与要求:掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法;掌握不同类型数值之间赋值的规律;学会使用C的有关算术运算符,以及包含这些运算符的表达式;掌握赋值语句的使用方法;掌握各种类型数据的输入输出方法,能正确使用各种格式转换符。

实验3:逻辑结构、循环控制程序设计,4学时主要内容与要求:了解C语言表示逻辑量的方法;学会正确的使用逻辑运算符和逻辑表达式;熟练掌握if语句和switch语句;熟悉掌握用while 语句,do while语句和for语句实现循环的方法;掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等);进一步学习调试程序。

实验4:数组、函数,4学时主要内容与要求:掌握一维数组和二维数组的定义、赋值和输入输出方法;掌握字符数组和字符串函数的使用;掌握与数组有关的算法(特别是排序算法);掌握定义函数的方法;掌握函数实参与形参的对应关系以及“值传递”的方式;掌握函数的嵌套调用和递归调用的方法;掌握全局变量和局部变量,动态变量、静态变量的概念和使用方法;学习对多文件程序的编译和运行。

C语言指针教案范文

C语言指针教案范文

C语言指针教案范文教案标题:C语言指针入门一、教学目标:1.了解指针的概念及作用;2.掌握指针变量的声明和定义;3.能够使用指针访问变量及变量的地址;4.熟练掌握指针与数组的关系;5.能够通过指针实现函数参数的传递。

二、教学内容:1.指针的概念及作用;2.指针变量的声明和定义;3.使用指针访问变量及变量的地址;4.指针与数组的关系;5.指针作为函数参数传递。

三、教学过程:1.指针的概念及作用(10分钟)a.介绍指针的概念:指针是用来存储变量地址的变量;b.解释指针的作用:指针可以通过间接访问(解引用)来修改变量的值,实现变量的传递、共享和动态内存分配等功能。

2.指针变量的声明和定义(10分钟)a.简要介绍指针变量的声明和定义方法;b.示例代码演示指针变量的声明和定义。

3.使用指针访问变量及变量的地址(20分钟)a.说明通过指针访问变量的方法:使用解引用符号“*”;b.演示代码示例,通过指针访问变量,并修改变量的值;c.执行结果分析,解释指针的作用。

4.指针与数组的关系(20分钟)a.介绍指针与数组的关系:数组名作为指针常量,指向数组首元素的地址;b.演示代码示例,通过指针遍历数组;c.执行结果分析,解释指针与数组的关系及使用方法。

5.指针作为函数参数传递(30分钟)a.介绍指针作为函数参数传递的原理和用途;b.演示代码示例,实现通过指针参数修改实参的值;c.执行结果分析,解释指针作为函数参数传递的效果及使用方法。

四、教学要点:1.指针的概念及作用;2.指针变量的声明和定义;3.使用指针访问变量及变量的地址;4.指针与数组的关系;5.指针作为函数参数传递。

五、教学资源:1.讲义和课件;2.示例代码。

六、教学评估与反馈:1.设计相关习题,检验学生对指针的理解和掌握程度;2.布置课后作业,要求学生编写使用指针的程序。

七、教学延伸:1.指针与动态内存分配的深入学习;2.指针与字符串的相关知识的学习。

八、教学反思:本教案通过结合理论讲解和实际示例演示,旨在帮助学生理解和掌握C语言中指针的基本概念、使用方法以及指针与数组、函数参数传递的关系。

程序设计基础(一)实验

程序设计基础(一)实验

程序设计基础(一)实验实验一上机操作初步(2学时)一、实验方式:一人一机二、实验目的:1、熟悉VC++语言的上机环境及上机操作过程。

2、了解如何编辑、编译、连接和运行一个C程序。

3、初步了解C程序的特点。

三、实验内容:说明:前三题为必做题目,后两题为选做题目。

1、输出入下信息:*************************Very Good*************************2、计算两个整数的和与积。

3、从键盘输入一个角度的弧度值x,计算该角度的余弦值,将计算结果输出到屏幕。

4、在屏幕上显示一个文字菜单模样的图案:=================================1 输入数据2 修改数据3 查询数据4 打印数据=================================5、从键盘上输入两个整数,交换这两个整数。

四、实验步骤与过程:五、实验调试记录:实验二简单的C程序设计(4学时)一、实验方式:一人一机二、实验目的:1、掌握C语言的数据类型。

2、学会使用C语言的运算符及表达式。

3、掌握不同数据类型的输入输出方法。

三、实验内容:说明:前四题为必做题目,后两题为选做题目。

1、输入r1、r2,求出圆形垫片面积。

2、输入华氏温度h,输出摄氏温度c。

3、从键盘输入一个3位整数,将输出该数的逆序数。

4、输入并运行以下程序,分析运行结果。

#include <stdio.h>void main( ){ int i,j;i=8; j=10;printf(“%d,%d\n”,++i,++j);i=8; j=10;printf(“%d,%d\n”,i++,j++);i=8; j=10;printf(“%d,%d\n”,++i,i);i=8; j=10;printf(“%d,%d\n”,i++,i);}5、输入三角形三条边的边长,求三角形的面积。

6、输入3个字符型数据,将其转换成相应的整数后,求它们的平均值并输出。

C语言实验参考答案

C语言实验参考答案

C语言实验参考答案实验一5、输入并运行自已编写的程序(教材第一章P14 三编程题)。

实验二1、编写一个程序,从键盘接收3个实数(分别为10.0、20.0、5.0),输出这3个数的和s、乘积t和平均值a。

#include <stdio.h>main(){float x,y,z,s,t,a;printf(“x,y,z=”);scanf(“%f,%f,%f”,&x,&y,&z);s=x+y+z;t=x*y*z;a=s/3;printf(“s=%f,t=%f,a=%f\n”,s,t,a);}2、编程。

要求用户输入两个整数a、b(分别为20、10),读取用户从键盘输入的值,然后:1)用整数输出这两个数的和、差;2)用长整型输出这两个数的积,用float输出商;3)用整数输出这两个数的余数,用float输出平均值。

#include <stdio.h>main(){int a,b,he,cha,yu;long ji;float shang,aver;printf(“a,b=”);scanf(“%d,%d”,&a,&b);he=a+b;cha=a-b;ji=(long)a*b;shang=1.0*a/b;yu=a%b;aver=(a+b)/2.0;printf(“a+b=%d,a-b=%d,a*b=%ld\n”,he,cha,ji);printf(“a/b=%f,a%%b=%d,aver=%f\n”,shang,yu,aver);}实验三1、编写一个程序,从键盘接收一个一位的整型数,经转换,用字符函数putchar输出。

例如,输入整数5,程序运行后输出字符5。

#include <stdio.h>main(){int a;char c;printf(“a=”);scanf(“%d”,&a);c=a+48;putchar(c);}2、编程。

程序设计基础实验报告

程序设计基础实验报告

实验一 用C 语言编写简单程序一、实验目的1. 熟悉VC6.0的编程环境,掌握运行C 程序的基本步骤。

2. 了解C 程序的基本框架,模仿例题编写简单的C 语言程序。

3. 正确书写算术表达式、赋值表达式和关系表达式。

4. 掌握基本输入输出函数的使用,正确调用C 语言提供的数学库函数。

5. 掌握简单的单步调试方法。

二、实验环境Windows XP ;Visual C++ 6.0。

三、实验内容1.在屏幕上显示一个句子“What is a computer?”。

2.求华氏温度150F 对应的摄氏温度。

计算公式如下:其中,c 表示摄氏温度;f 表示华氏温度。

3.输入x ,计算下列分段函数的值(保留2位小数),请调用sqrt 函数求平方根,调用pow 函数求幂。

4. 输入一个正整数m (0100)m ≤≤,求100i m i =∑。

四、实验要求1. 将上机验证正确的源代码写到实验报告上。

2.根据自己的真实感受,认真填写实验分析和实验心得以及问题和建议。

3.按时提交实验报告。

553299c f =⨯-⨯21(1)2 x<02()0x x f x ⎧+++⎪=≥一、实验目的1.熟练掌握关系表达式的使用。

2.熟练掌握使用else-if 语句实现多分支结构程序设计。

二、实验环境Windows XP ;Visual C++ 6.0。

三、实验内容1.输入x ,计算并输出下列分段函数sign(x)的值。

2.输入月薪salary ,输出应交的个人所得税tax (保留2位小数)。

按照2011年开始实行的新的个人所得税法,计算公式为:tax = rate*(salary-3500)-deduction 。

当salary≤3500时,rate=0、deduction=0当3500<salary≤5000时,rate=3%、deduction=0当5000<salary≤8000时,rate=10%、deduction=105当8000<salary≤12500时,rate=20%、deduction=555当12500<salary≤38500时,rate=25%、deduction=1005当38500<salary≤58500时,rate=30%、deduction=2775当83500<salary 时,rate=45%、deduction=135053.输入一个正整数n ,再输入n 个学生的百分制成绩,统计各等级成绩的个数。

实验四 链表

实验四 链表

实验二链表的基本操作一、实验目的掌握链表的基本概念、结构的定义,通过设计程序掌握链表上的基本操作:建立、插入、删除、查找以及链表合并等,并理解线性表的两种存储结构:顺序表和链表的区别。

二、实验准备1. 复习C语言中指针的用法,特别是结构体的指针的用法。

2. 了解链表(含带头结点的链表、循环链表)的概念,链表的结构定义方法。

单链表是线性表的链式存储表示,是用一组任意的存储单元依次存储线性表的数据元素。

因此,为了表示每个数据元素a i与其直接后继元素a i+1之间的逻辑关系,对数据元素a i来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置),而这部分就是用指针来完成的。

3. 掌握线性表在链式存储结构上实现基本操作:建立、查找、插入、删除等算法。

在实现这些算法的时候,要注意判断输入数据的合法性,除此之外还要要注意以下内容:✧在实现查找的时候,首先要判断该顺序表是否为空,其次要判断查找后的结果(查到时输出查到的数据,未查到时给出相关提示)。

✧在实现插入的时候,由于是链式存储,它可以随机产生和回收存储空间,所以它不要判断线性表是否为满,但仍需判断要插入的位置是否合法,原因同实验一,其次要注意插入的时候语句的顺序不可颠倒,否则出错。

例如:ps所指向结点要插入在p所指向的结点之后,则:正确形式:s->next=p->next; p->next=s;错误形式:p->next=s;s->next=p->next(因为此时p->next已经指向s了)在实现删除的时候,首先要判断线性表是否为空,为空则不能删除;其次在删除后要回收空间。

例如:删除如上图所示s所指向的结点p->next=p->next->next;free(s);4. 链表部分相关操作代码:⑴单链表的结构定义:#include <stdio.h>typedef int elemtype;typedef struct lnode{ elemtype data;struct lnode *next;}*linklist;⑵建立单链表的算法int n; /*n作为整个程序的全局变量*/linklist *creat(void){ linklist *head, *p1, *p2;n=0;p1=p2=(linklist *)malloc(sizeof(linklist));scanf(“%d”,&p1->data);head=null;while(p1->data!=0){ n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(linklist *)malloc(sizeof(linklist));scanf(“%d”,&p1->data);}p2->next=null;return(head);}⑶单链表的插入算法int insert(linklist *head, int i,elemtype e) { linklist *p, *s;int j;p=head; j=0;while(p && j<i-1){ p=p->next;++j;}if(!p||j>i-1){ printf(“无法插入”);return 0;}s=(linklist *)malloc(sizeof(lnode));s->data=e;s->next=p->next;p->next=s;return 1;}⑷单链表的删除算法int deltree(linklist *head,int i,elemtype e){ linklist *p, *q;int j;lp=head; j=0;while(p->next && j<i-1){ p=p->next;++j;}if(!(p->next)||j>i-1){ printf(“无法删除”);return 0;}q=p->next;p->next=q->next;e=q->data;free(q);return 1;}三、实验内容1. /*函数link()的功能是将带头结点的单链表l2链接到l1的后面,程序中存在几处错误,请改正并调试运行*/#include "linklist.h"void link(linklist l1,linklist l2){linklist p,q;p=l1;while (p->next)p=q->next;q=l2;p->next=q;free(l2);}void main(){ linklist l1,l2;l1=creat2(); /*生成带头结点的单链表l1*/print(l1); /*输出单链表l1*/l2=creat2(); /*生成带头结点的单链表l2*/print(l2); /*输出单链表l2*/link(l1,l2); /*将单链表l2链接到l1的后面*/print(l1); /*输出单链表l1*/}2./* 编写一个函数perm,将带头结点单链表中的所有值为奇数的结点集中到链表的左边,值为偶数的结点集中到链表的右边*/#include "linklist.h"linklist perm(linklist head){linklist pre,p;pre=head;p=head->next;while (p && p->data%2==1){ pre= p ;p= p->next ;}while (p){ if (p->data%2==1){ pre->next=p->next;p->next=head->next;head->next=p;p=pre->next;}else{ pre=p;p=p->next;}}}/*主函数,请勿改动,请将perm中的函数补充完整*/int main(){ linklist head;head=creat2(); /*尾插法建立单链表*/print(head); /*输出单链表head*/perm(head);print(head);delList(head);return 0;}3.设计程序:/*建立一个带头结点的单链表,然后将该链表进行倒置。

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

实验4 函数与指针
程序填空
1.普通参数
题目描述:输入日期的年份和月份,求该月有多少天。

要求编写函数int daynum(int year,int month),求出以year为年份、以month为月份的某个月的天数。

以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。

代码:
//通过日期求某月的天数。

#include<iostream>
using namespace std;
int main()
{
int daynum(int year,int month);
int y,m,d;
cin>>y>>m;
if(y<1900 || y>=3000 || m<1 || m>12)
{
cout<<"输入错误!"<<endl;
return 0;
}
d=daynum(y,m); //以y、m作实参调用函数,求出该月的天数cout<<"此月的天数为"<<d<<endl;
return 0;
}
int daynum(int year,int month)
{
int days;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days=31; break;
case 4:
case 6:
case 9:
case 11: days=30; break;
case 2: if(year%4==0&&year%100!=0 || year%400==0)
days=29;
else
days=28;
break;
}
return days;
}
2.全局变量
题目描述:编写一函数addup,统计字符串s中字母、数字、空格和其它字符的个数,并且用几个全局变量记录上述统计结果。

以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。

代码:
#include <iostream>
using namespace std;
int letter, digit, space, other; //全局变量
int main()
{
void addup(char s[ ]);
char str[101];
//cout<<"输入字符串:\n";
gets(str);
addup(str);
cout<<"字母个数:"<<letter<<",数字个数:"<<digit<<",空格个数:"<<space<<",其他字符个数:"<<other<<endl;
return 0;
}
void addup(char s[ ])
{
int i;
letter=digit=space=other=0;
for(i=0;s[i]!='\0';i++)
if(s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i]<='Z') letter++;
else if(s[i]>='0' && s[i]<='9') digit++;
else if(s[i]==32) space++;
else oth++;
}
程序设计
3.
题目标题:判断完数。

题目描述:
判断正整数n是否为完数。

已知一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数。

此程序要求编写函数bool wanshu(int n),判断n是否为完数,若n是,则函数返回true;否则返回false。

然后主函数通过该函数的返回值,在屏幕上输出判断结果。

输入描述:
输入一个正整数n。

输出描述:
若n是完数,则输出"yes";否则输出"no"。

样例输入:
28:1,2,4,7,14,28
样例输出:
Yes
#include<iostream>
using namespace std;
bool wanshu(int n);
bool wanshu(int n)
{
int i,sum=0;
for(i=1;i<n;i++)
{
if(n%i==0)
sum=sum+i;
}
if(sum==n)
return true;
else
return false;
}
void main()
{
int a;
bool b;
cout<<"input the a:"<<endl;
cin>>a;
b=wanshu(a);
if(b)
cout<<"是完数"<<endl;
else
cout<<"不是完数"<<endl;
}
4.
题目标题:神奇的英文回文。

题目描述:
许多英语单词无论是顺读还是倒读,其词形完全一样,都是同一个单词,如dad (爸爸)、noon(中午)、level(水平)等,这样的词称为回文词。

在最权威的《牛津英语大词典》里,最长的回文词是tattarrattat,是个象声词,表示敲门的声音。

英语的回文句更有趣味(忽略其中的标点符号)。

最著名的一句为:“Madam,I’m Adam.”(小姐,我是亚当。

)据说,这是亚当在伊甸园里初见夏娃作自我介绍时说的话。

现要求编写一个函数bool huiwen(char s[]) 判断输入的一个单词是否为回文词,p是指向要输入的字符串的指针,如果是返回true,否则返回false。

输入描述:输入一个单词后回车。

输出描述:若该单词是回文词,则输出“yes”;否则输出“no”。

样例输入:
level
样例输出:
yes
5.
编写一组求数组中最大、最小元素的函数。

该组函数的原型如下:
int imax( int array[ ], int count );//求整型数组的最大元素
int imin( int array[ ], int count );//求整型数组的最小元素
其中,参数count为数组中的元素个数,函数的返回值即为求得的最大或最小元素值。

相关文档
最新文档