c程序中函数的组成

2014-01-18   来源:经典语句大全

C语言程序中什么是函数
篇一:c程序中函数的组成

  C语言的函数问题是困扰很多学者的问题的,c程序中什么是函数呢?那么下面一起来看看小编为大家精心推荐的c程序中什么是函数,希望能够对您有所帮助。

  C语言读书笔记--函数

  先来看看函数的一般形式,尝试写一个加法的函数:

  思路是这样的:首先得有头文件,头文件之后就得写主函数,主函数的内部应该就是加法的过程,我们将所有加法的语句都拿出来组成一个函数。代码如下:

  #include <stdio.h>

  int add(int a, int b);

  int main()

  {

  int result = add(3,5);

  printf("sum is %d\n", result);

  return 0;

  }

  int add(int a, int b)

  {

  int sum;

  sum = a+b;

  return sum;

  }

  这是一个最简单的函数,描述了一个加法函数的定义和调用的过程。

  int add(int a, int b) 成为函数的首部。

  有了首部之后,就得考虑一件事情,将首部复制之后,加上一个分号,粘贴在主函数之前,作为函数的原型声明。试想,我们在主函数里边是不是要先定义变量result才能使用result?那么函数的道理也是一样的,当程序运行到主函数中语句“int result = add(3,5);”的时候,如果向上没有寻找到add()的定义,那么编译器一定就会报错。所以要不然添加函数的原型声明,要不然就将函数的定义直接写在主函数之前。

  函数首部int add(int a, int b)中的第一个int,即add之前的这个int称为函数的类型。表明这个函数将要返回一个整数类型的值。这个类型可以是C语言中任何被允许的数据类型,包括void,意为无返回值类型,即这个函数不需要返回任何的值。

  函数首部int add(int a, int b)中的add称为函数的名字,简称函数名。

  函数首部int add(int a, int b)中int a和int b称为函数的形式参数。这里形式参数理论上可以有无穷多个,当然,现实情况下3-5个就已经算是很多了;形式参数中,即使a和b都是int类型的,也要分别定义才行;形式参数可以在函数中直接使用,无须再次定义;形式参数是用来告诉调用者,你应该给我传递来什么样子的数据,我好利用你给我的数据在函数中进行计算。

  int add(int a, int b){}中的{}就是函数体的内容了。函数需要进行的所有的操作都要放在这对大括号中。想必大家也看到了函数体中最后有一条语句是return,这条语句起到的作用就是返回函数计算的结果,在这个程序中就是将加法的结果返回给主函数。需要注意的是,函数的类型和返回值的类型必须严格一致!

  函数的定义到此为止,接下来讲讲函数的调用方式。只要定义好函数,通过函数名(实际参数1,实际参数2,实际参数n)这种方式就可以调用函数了。例如主函数中的“int result = add(3,5);”,就是调用了add函数。这里,3和5称为实际参数,即你究竟想让函数帮你计算哪两个数的加法结果,你就在这个括号里边写哪几个数字。必须要严格遵守的规定:实际参数和形式参数必须一一对应,数量应该相同,类型也保持一致。

  理解了这几点之后,一个基本的函数就已经可以写出来了。接下来来个题目尝试一下:

  输入精度e,使用公式求π的近似值,精确到最后一项的绝对值小于e。公式:π=1-1/3+1/5-1/7+...

  代码:

  //首先得有头文件

  #include <stdio.h>

  #include <math.h> //后边要使用到fabs绝对值函数

  //然后就是主函数了

  int main(void)

  {

  double pi, e; //定义所需变量

  double f_pi(double e); //原型声明。函数名只要符合命名规则即可 //因为要求小于e,所以也将这个e传递过去

  printf("enter e: "); //输入的提示

  scanf("%lf", &e); // double类型的e对应%lf,记住不要缺少&

  printf("pi=%lf\n", f_pi(e) ); // 函数返回的是个double类型的值,直接输出

  return 0;

  }

  double f_pi(double e) //函数首部,形参和实参一定要对应,可以重名

  {

  int denominator, flag;

  double item, sum;

  //请注意“先定义,然后赋初值再使用”的好习惯!!!

  flag = 1; //负责变换正负符号的变量

  denominator = 1; //分母初值为1,第一项的1为1/1

  item=1.0; //存放每一项的值

  sum=0;

  while(fabs(item)>=e) //满足条件就循环

  {

  item=flag*1.0/denominator; //计算每一项的值。flag控制符号

  //1.0必须写出小数位,否则整项就变成一个整型值

  sum+=item; //累加

  flag = -flag; //符号正负切换

  denominator = denominator + 2;//分母递增

  }

  return sum; //sum的类型和函数的类型必须一致

  }

  函数的定义和调用其实并不难理解,相信很多人困扰在参数的传递上,接下来总结一下函数参数传递的几种方式:

  正常的参数调用,例如int、float、double等一一对应的传递。

  无参数,也无返回值。例如下列代码就只是为了输出一些语句。这种做法在语法上是被允许的,但是并不推荐这么写。

  void printf()

  {

  printf("hello world!");

  }

  3. 参数是数组的名字。我们知道数组的名字是个地址,那么如果实参是数组名的话,我们可以将形参设置成指针,指向实参传递过来的数组的首地址。

  4. 参数是指针。如果实参是指针,那么形参肯定也得是指针。保持类型一致即可,然后在函数内部再对指针进行操作。

  5. 参数是结构体。如果实参是结构体,一般来说我们使用结构体指针来做形参比较合适。

  还是在此分割一下吧,说了这么多,可能很多人在问问什么函数定义这么麻烦,还要定义函数,直接都写在main函数中多方便?

  非也!

  C语言是一个过程化的语言,C语言中的主函数其实是用来主导程序的进程和数据的流动方向的。如果将主函数写的过于复杂,我们阅读程序的结构就会非常的费力。

  C语言中函数回调

  什么是回调函数?

  简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。

  为什么要使用回调函数?

  因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。

  如果想知道回调函数在实际中有什么作用,先假设有这样一种情况,我们要编写一个库,它提供了某些排序算法的实现,如冒泡排序、快速排序、shell排序、shake排序等等,但为使库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;或者,想让库可用于多种数据类型(int、float、string),此时,该怎么办呢?可以使用函数指针,并进行回调。

  回调可用于通知机制,例如,有时要在程序中设置一个计时器,每到一定时间,程序会得到相应的通知,但通知机制的实现者对我们的程序一无所知。而此时,就需有一个特定原型的函数指针,用这个指针来进行回调,来通知我们的程序事件已经发生。

  下面是自己写的一个简单的回调函数,相比其他的那些复杂的代码,这个更容易理解:

  #include<stdio.h>

  #include<stdlib.h>

  void perfect(int n)

  {

  int i=1;

  int count=0;

  for(i=1;i<n;i++)

  {

  if(0==n%i)

  {

  count+=i;

  }

  }

  if(count==n)

  printf("%d是完数\n",n);

  else printf("%d不是完数\n",n);

  }

  void myCallback(void (*perfect)(int ),int n)

  {

  perfect(n);

  }

  int main()

  {

  int n;

  printf("请输入一个正整数\n");

  scanf("%d",&n);

  myCallback(perfect,n);

  return 0;

  }

  C语言中的刷新和定位函数

  一.fflush

  1.fflush的原型如下:

  intfflush(FILE *stream);

  2.当需要立即把输出缓冲区的数据进行物理写入时,应该使用这个函数。例如调用fflush函数保证调试信息实际打印出来,而不是保存在缓冲区中直到以后才打印。

  二.定位函数

  1.在正常情况下,数据以线性的方式写入,这意味着后面写入的数据在文件中的位置是在以前所有写入数据的后面。C同时支持随机访问I/O,也就是以任意顺序访问文件的不同位置。随机访问是通过在读取或写入前,先定位到文件中需要的位置来实现的。

  2.定位函数原型:

  1>long ftell(FILE*stream);

  2>intfseek(FILE *steam,long offset,intfrom);

  3.ftell函数返回流的当前位置。即:下一个读取或写入将要开始的位置距离文件起始位置的偏移量。该函数允许保存一个文件的当前位置。

  1>在二进制流中,这个值就是当前位置距离文件起始位置之间的字节数。

  2>在文本流中,这个值表示一个位置,但它并不一定准确地表示当前位置和文件起始位置之间的字符数,因为有些系统将对行末字符进行翻译转换。但是,ftell函数返回的值总是可以用于fseek函数中,作为一个距离文件起始位置的偏移量。

  4.fseek函数允许你一个流中定位。这个函数将改变下一个读取或写入操作的位置。它的第 1个参数是需要改变的流。它的第2和第3个参数标识文件中需要定位的位置。

  1>试图定位到一个文件的起始位置之前是一个错误。定位到文件尾并进行写入将扩展这个文件。定位到文件尾之后并进行读取将导致返回一条“到达文件尾”的信息。

  2>在二进制流中,从SEEK_END进行定位可能不被支持,所以应该避免。

  3>在文本流中,如果from是SEEK_CUR或SEEK_END,offset必须是零。如果from是SEEK_SET,offset必须是一个从同一个流中以前调用ftell所返回的值。

  5.用fseek改变一个流的位置会带来三个副作用。

  1>首先,行末指示字符被清除。

  2>其次,如果在fseek之前使用ungetc把一个字符返回到流中,那么这个被退回的字符会被丢弃,因为在定位操作以后,它不再是“下一个字符”。

  3>最后,定位允许你从写入模式切换到读取模式,或者回到打开的流以便更新。
 

  看了“c程序中什么是函数”的人还看了:

C语言见习报告6篇
篇二:c程序中函数的组成

  C语言是一种计算机程序设计语言,属高级语言范畴。它既具有高级语言的特点,又具有汇编语言的特点。通过见习做一报告,本文是C语言见习的报告,仅供参考。

  C语言见习报告一:

  班级:姓名:

  实验名称:

  电话订餐信息处理

  实验目的:

  题目要求:

  一个小饭馆的生意非常红火,要想用餐必须提前一天打电话预订,假设我们是饭馆负责接受

  电话预订的服务员,我们需要做些什么呢?首先,需要准备一张大小适当的白纸,等待顾客的电话。李红最先打进了电话,她预约第2天中午12点用餐,用餐人数5人,服务员在纸上做了如下记录:“李红 12点 5人”;接着,刘娜、汪涵、孙杰和赵君分别来了电话,服务员根据他们的要求做了记录,此时纸上记录的内容是:

  李红 12点 5人

  刘娜 11点 2人

  汪涵 11点20分 3人

  孙杰 10点30分 5人

  赵君 13点20分 6人

  孙杰随后又来电话,将用餐时间推后一个小时,那么记录的内容也应该做相应的修改。刘娜来用餐以后,可以将其信息从纸上划去

  编写程序处理电话订餐的情况

  实验步骤:

  首先建立结构体类型,然后函数声明,编写主函数,定义函数,调用函数。完成后,对程序进行调试,确定所编写的程序是否能够运行。

  实验内容:

  #include

  #include

  #define max 30

  struct guest

  { intnum;

  char name[40];

  char time[20];

  int sum;

  }guestlink[max];

  void insert(int *p);

  void inquire(int);

  void change(int);

  void dele(int *p);

  void show(int);

  void main()

  { inti;

  int count=0;

  do

  {0

  printf("1.......插入\n");

  printf("2.......查询\n");

  printf("3.......修改\n");

  printf("4.......删除\n");

  printf("5.......显示\n");

  printf("6.......退出\n");

  scanf("%d",&i);

  switch(i)

  {

  case 1: insert(&count);break;

  case 2: inquire(count);break;

  case 3: change(count);break;

  case 4: dele(&count);break;

  case 5: show(count);break;

  case 6:break;

  default:printf("输入错误!");break;

  }

  }while(i!=6);

  }

  void insert(int *p)

  { inti,number;

  if(*p==max)

  { printf("用餐已满\n");return;}

  printf("请输入编号:");

  scanf("%d",&number);

  for(i=0;i<*p;i++)

  if(guestlink[i].num==number)

  { printf("已有相同的编号");return;}

  guestlink[i].num=number;

  printf("请输入姓名:");

  scanf("%s",guestlink[i].name);

  printf("请输入人数:");

  scanf("%d",&guestlink[i].sum);

  printf("请输入用餐时间:");

  scanf("%s",guestlink[i].time);

  (*p)++;

  }

  void inquire(int p)

  { inti,number,flag=1;

  printf("请输入要查询的编号");

  scanf("%d",&number);

  for(i=0;i

  if(guestlink[i].num==number)

  { printf("姓名:%s",guestlink[i].name);

  printf("用餐时间:%s",guestlink[i].time);

  printf("人数:%d\n",guestlink[i].sum);

  flag=0;

  }

  if(i>=p&&flag==1) printf("所查询的编号不存在");

  }

  void change(int p)

  { inti,number,flag=1;

  printf("请输入要修改的编号");

  scanf("%d",&number);

  for(i=0;i

  if(guestlink[i].num==number)

  { printf("请输入姓名:");

  scanf("%s",guestlink[i].name);

  printf("请输入用餐时间:");

  scanf("%s",guestlink[i].time);

  printf("请输入人数:");

  scanf("%d",&guestlink[i].sum);

  flag=0;

  }

  if(i>=p&&flag==1) printf("所查询的编号不存在");

  }

  void dele(int *p)C语言程序中什么是函数

  { inti,j,number,flag=1;

  printf("请输入要删除的编号");

  scanf("%d",&number);

  for(i=0;i<*p&&flag;i++)

  if(guestlink[i].num==number)

  {for(j=i;j<*p-1;j++)

  guestlink[j]=guestlink[j+1];

  flag=0;

  (*p)--;

  }

  if(i>=*p&&flag==1) printf("输入的编号不存在");

  }

  void show(int p)

  { inti;

  printf("编号 姓名 用餐时间 人数\n ");

  for(i=0;i

  { printf("%d",guestlink[i].num);

  printf("%8s",guestlink[i].name);

  printf("%8s",guestlink[i].time);

  printf("%8d\n",guestlink[i].sum);

  }

  }

  实验结果:

  实验体会:

  通过这次实践让我觉得用C语言在生活中的应用占有很大的比重,这次编程,让我体会到了学习C语言的乐趣,以及运用c语言给人们带来的方便。作为一名初学者,我了解到了计算机语言的神秘性和逻辑性,将算法与数据结构的充分结合,体现了程序的内涵,也同时展现了C语言的深度。也是因为这次实践的过程,加深了我对c语言的兴趣,也意识到学习c语言是需要耐心和细心的。只有透彻的学习,才能有熟练的运用。

  C语言见习报告二:

  一、实习时间:20xx年x月x日—20xx年x月x日

  二、实习地点:第一微机室

  三、实习目的:

  1、熟悉我们自己所用的计算机的C语言开发环境,并且能够熟练掌握,达到错误能找到原因并且加以改正。

  2、加深对课本理论知识的理解,进一步掌握书中重点、难点实例,锻炼自己的编写程序能力和实际应用能力。

  3、上机调试程序的过程中,发现错误,解决错误,保证程序的正确运行,运行结果与给定结果完全相同。

  4、学会用书中基本知识解决实际中的一些问题,将书本所学的内容与实际操作相结合,掌握把实际问题转变为C语言描述的算法的方法,明确思路。将自身的不足与缺陷改掉,养成良好编辑风格

  5、培养我们的主观能动性、沟通、表达能力和团队合作意识,为我们以后的发展打下基础。

  四、实习内容及方法:

  在本次实习中,我们采用了由浅及深、由易到难的实习方法,而且也是按照书本的教学进程内容进行的,同时采取了实际应用与理论相结合的方法,在机房里面实习,一边理解,思考做题的思路与解法,另一边就可以马上进行上机实际操作。这对于我们加深对C语言的理解、操作以及动手能力都有了很大的帮助与提高。

  实训的内容主要分为了七个版块:

  第一版块:

  1、Turbo C运行环境。

  了解TC的基本环境,熟悉常用菜单项和快捷键:在这一小节中,需要熟练的掌握并应用Turbo C的运行环境,和基本配置。Turbo C是在计算机上广泛使用的一个C语言开发环境,它具有方便、直观、易用的界面和丰富的函数库。它把程序的编辑、编译、连接和运行等操作去不都集中在一个界面上进行,使用非常方便。并且Turbo C不需要特别安装,只需要将其拷贝到硬盘上就可以使用了。 为了方便管理用户的程序文件和维Turbo C2.0的运行环境,客户应在机子

  上建立自己的工作目录,一边用来存放自己所需要开发的源程序文件。下面就是建立怎样自己文件夹,在空白区域内输入自己所建立的文件夹路径即可。

  2、C程序的编辑、编译、连接和运行过程。

  掌握C程序的运行步骤,初步了解C程序的特点。在Turbo C的运行中,快捷键使用非常方便,只需Ctrl+菜单栏中菜单名的首字母即可。

  上面是一个程序编译与链接的截屏。第一个Compile to OBJ将源程序编译为OBJ文件,Make EXE file 编译连接一次进行,Link EXE file将OBJ文件连接为EXE文件。

  3、VC6.0环境的熟悉,自己按照软件并在软件中能够调试简单的C语言程序。

  第二版块:

  1、C语言数据类型:整型、实型、字符型。

  C语言的函数类型非常丰富,除了这几类以外,还有实型、数组、指针、结构体等,在这一小节中,主要了解关于数据类型的定义、用法以及他们的存储类型,一边与以后灵活运用。

  C语言中还有常量与变量之分,常量是在程序执行过程中其值不变的量。二且在C语言中常量不需要类型说明就可以直接使用,常量的类型是由常量的本身隐含决定的。

  2、运算符及表达式。

  在C语言中,预算符非常丰富运算灵活,常用的有以下几个:

  (1)算术运算符:+、-、*、/、%(取余)及++(自增)、--(自减)。

  (在这里需要注意的是:“/”运算符,在C语言中两边都是整数的话,运算结果只取整数部分;“%”他的两边都必须是整数才可以运行;“**、--”运用这个运算符时要注意“先用后加(减)、先加(减)后用”的问题)

  (2)赋值运算符:=及复合赋值运算符(+=、-=、*=、/=、%=等)。

  (在这里需要注意的是“=、==”的区别,要明确用法及所用的地方,“=”它的作用是赋值,“==”它的作用是判断相等)

  (3)逗号运算符:,(对于逗号表达式索要注意的是要明确它所用的地方以及在使用时所要注意的细节)。

  了解三种运算符的优先级,掌握三种运算符及相应表达式的应用(详见附录)。

  第三版块:在这一节里,我们实习了C语言的三大结构:

  1、顺序结构:

  2、选择结构:if„„else,switch语句。

  在这里许啊哟我们学习的很多,因为只要是程序,就脱离不了这个三大结构的范畴。在这个学习里我编写了

  (1)、输入某年某月某日,判断这一天是这一年的第几天?。

  (2)、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

  (3)、某市不同车牌的出租车3公里的起步价和计费分别为:夏利7元,3公里以外,2.1元/公里;富康8元,3公里以外,2.4元/公里;桑塔纳9元,3公里以外,2.7元/公里。编程:从键盘输入乘车的车型及行车公里数,输出应付工资。

  源程序减附录;

  经过这几个程序的练习,让我聊股的掌握了选择语句的用法以及精髓,同是这个用法和技巧已经深深的可在了我的脑海里,还有同过这些个程序的编写,让我对以前有的丝丝而非的地放完全通透理解,获益匪浅。

  循环结构:while、do-while、for

  在循环这一节里,我们主要做了以下程序:

  (1)、求200-300之间所有素数,每5个换行。

  (2)、猜数字游戏。规则为:输入一个0-10之间的数字,有5次猜测机会。如果输入0-4之间的数字,提示“太小了”;如果输入5-7之间的数字,提示“接近了”;如果输入9-15之间的数字,提示“太大了”;如果输入8,提示“correct!”;如果次数超过5次,提示“没有机会了,退出!”。

  (3)、打印输出如下图形:(“◇”菱形)

  (4)、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

  提示:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

  (5)、打印输出九九乘法表。

  我以前就对循环这一节里的内容就理解的比较好,现在做这些题很顺利的就做下去了,但在做的同是也会出现以写小的问题,但这个让我也更深一步的理解了循环语句的用法、思路以及其中的精华。

  总的对这一节来说,使自己更神一步的理解了选择、过程中需要注意的一些细节问题。

  第四版块:

  1、一、二维数组的定义、引用及初始化。初始化:

  一维数组:初始化赋值的一般形式为: static 式]={值,值„„值}; 其中static表示是静态存储类型,态存储数组和外部存储数组才可作初始化赋值二维数组:

  a.可以只对部分元素赋初值,未赋初值的元素自动取b.如对全部元素赋初值,则第一维的长度可以不给出。2、一、二维数组的应用。

  在一维数组的应用中,要与循环嵌套使用,用,但是在这里,嵌套还要是循环的嵌套,因为只有这样使用才可以使程序更加简洁、简便。就像第五题:有一个班4个学生,(1)求每一门课程的平均分; (2)求每一个学生的平均分;

  思路:定义一个二维数组,用二重循环输入这个数组,然后进行相加,在求平均直,最后在用二重循环进行输出。

  循环的用法以及在使用类型说明符 数组名[常量表达 C语言规定只有静0值。 门课。编程实现如下功能:

  在这里,进行了求平均值的过二维数组要与也要与循环嵌套使5程。这里进行了二重循环输出。

  第五版块:

  1、函数的定义和调用

  函数可分为库函数和用户定义函数两种。

  (1)库函数

  库函数只不需要用户自己定义的,只需要在用的时候将其调用出来用就可以了,非常方便,并且C语言有这丰富的函数库。

  (2)用户定义函数

  用户自己定义的函数,是属于一个自定义范畴,自己定义的函数不仅要在程序中定义函数本身, 而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。

  2、函数参数和函数值

  (1)无 参函数

  函数定义、函数说明及函数调用中均不带参数。 主调函数和被调函数之间不进行参数传送。 此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。

  (2)有参函数

  也称 为带参函数。在函数定义及函数说明时都有参数, 称为形式参数(简称为形参)。在函数调用时也必须给出参数, 称为实际参数(简称为实参)。 进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。

  (1)有返回值函数

  此类函数被调用执行完后将向调用者返回一个执行结果, 称为函数返回值。由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。

  (2)无返回值函数

  此类函数用于完成某项特定的处理任务, 执行完成后不向调用者返回函数值。这类函数类似于其它语言的过程。 由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”, 空类 型符的类型说明为“void”。

  2、函数的嵌套调用和递归调用

  C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。 但是C语言允许在一个函数的定义中出现对另一个函数的调用。 这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。

  这以小节内容经过几个练习题的联系,让我掌握到了其中的主要部分,对此也比较的明确。

  4、局部变量和全局变量及变量的存储类别

  局部变量:局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。

  全局变量:全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。 但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。

  在C语言中,对变量的存储类型说明有以下四种:auto 自动变量 register 寄存器变量 extern 外部变量 static 静态变量

  在局部变量中所定义的变量,只能在该函数中使用,在函数编辑时,预处理命令下定义的变量属于全局变量,在每个函数中都可以使用,传递参数时,不用传递全局变量。

  在这里,我主要说的是第二个练习题,它的思想是一个加密算法。思路是:现编写一个主程序,实现函数调用,在子函数中实现加密算法并且输出。是将接收的值设置为一个全局变量。就像下面的这个例子:在这里,将所输入的值进行分解成个、十、百、千位,分别进行加密算法。

  加上与第四位对调,第三位与第二位对调。在最后输出结果。 第六版块:

  1、指针、指针变量的概念

  指针的基本概念 在计算机中,所有的数据都是存放在存储器中的。存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,绍。为了正确地访问这些内存单元, 必须为每个内存单元编上号。存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。 并且在使用函数在输入

  除以8以后的余数,在将第一位 一般把 在第二章中已有详细的介 根据一个内

  既然在这里进行加密算法,每位上的数6

  根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。“指针变量”是指取值为地址的变量

  2、数组的指针

  一个数组是由连续的一块内存单元组成的。 数组名就是这块连续内存单元的首地址。一个数组也是由各个数组元素(下标变量) 组成的。每个数组元素按其类型不同占有几个连续的内存单元。 一个数组元素的首地址也是指它所占有的几个内存单元的首地址。 一个指针变量既可以指向一个数组,也可以指向一个数组元素, 可把数组名或第一个元素的地址赋予它。如要使指针变量指向第i个元素可以把i元素的首地址赋予它或把数组名加3、指向字符串的指针 返回指针的函数(1)、 字符串指针变量本身是一个变量,串本身是存放在以该首地址为首的一块连续的内存空间中并以‘结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。(2)、 对字符数组作初始化赋值,必须采用外部类型或静态类型,串指针变量则无此限制;

  (3)、对字符串指针方式 char *ps="C Language";ps="C Language";而对数组方式:static char st[]={"C Language"}char st[20]; st={"C Language"};而只能对字符数组的各元素逐个赋值。3、指针数组及指向指针的指针

  指针数组的说明与使用一个数组的元素值为指针则是指针数组。是一组有序的指针的集合。 指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。

  指针数组说明的一般形式为: 类型说明符在指针这一小节,主要是用指针实现:输入数对换,把最大的数与最后一个数对换。写3个函数:输入个数。

  在这里进行函数的调用,一个输入函数,一个操作函数,一个输出函数。

  i赋予它。

  而字符\0’作为串的

  而对字符可以写为: char *ps; 不能写为:

  指针数组*数组名[数组长度]

  10个整数,将其中最小的数与第一个

  10个数;进行处理;输出10

  用于存放字符串的首地址。在这里用数组实现了输入。

  在这里用指针实现了将最小的数与第一个数对换,

  把最大的数与最后一个数对换。

  在最后进行输出。 第七版块:

  实训七属于一个综合类型的题目,他要求的比较高,必须在自己王权理解通透了课本知识以后才有可能理解这道题,并且进行修改完善。主要这道题本身是在VC环境下运行的,将其移植到Turbo C环境下运行,这其中牵扯到一些语法不同,在Turbo C中不可以运行,要进行慢慢调试。经过不懈的努力、修改,终于将其成功的在Turbo C环境下可以正常运行了。(详见附录)

  五、结论 收获

  我的收获:在本次实习中,我学到了很多实际有用的东西,而且基本上都是在课本上学不到的,并且也在实习中梳理了自己对C语言这门课程所学的所有内容,让自己对C这门课程有了更进一步的认识,有了一个良好的基础,为自己的以后打下了坚实基础。从开头到现在,所有的内容实习完了,上机实验是学习程序设计语言必不可少的实践环节,在 C语言灵活、简洁中,更需要通过编程的实践来真正掌握它。

  历时4天的《C语言程序设计》已经结束了,在这几天编程的过程中感触颇多,实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。

  首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这几天编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去看每一个地方,会仔细地检查程序的每一个字母、标点,以及每个可能出错的地方,更会特别仔细,生怕自己一不小心搞错了,而导致整个程序都无法运行。

  其次,在编程的过程当中弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺,为自己以后的人生道路打下了良好基础,同时也让我对每一件事都有了一个好的心态去对待它,更让自己在编写程序的过程中每时每刻都处于充足的状态。C语言程序中什么是函数

  再次,通过几天综合实训编程使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便,更加灵活,以前有好多题目要写十行八行的,还有些地方弄得不是太懂,现在只需要五六行就可以搞定,而且还对于思路特别清晰、明确。

  第四,在实习结束后,我对做完的习题检查比再是一切的走马观花,而是仔细核对、认真检查,和以前相比明显改善了好多,以前自己对于检查程序总是没有耐心,不好好检查,有问题总是找老师,相对于实习之后来说,有了很大的改善,自己不但可以坐下来耐心检查,还能够自己将程序调试成功,这对于现在的我来说是一个明显的进步。

  第五,通过实习改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成。

  第六,通过实习我的自制能力更强了,基本完全可以控制自己,避免外界的干扰,安心地完成自己的工作。

  第七,在学习过程中,由于天气炎热,心里烦躁,同时也是每天都盯着频幕看,脑袋都看大了,但是我却一直坚持了下来,这对于我来说,也是一个非常好的习惯。这同时也是我的一个收获。

  第八,实训过程中,充分发挥团队协作精神,共同进步,帮助同学顺利完成实训课程,有困难一起解决,同时也使我在他们身上学到了很多东西。

  总之,通过实习使我自身的知识体系得到巩固、提高以及使团队工作的能力得到锻炼。

  不足

  我的不足:

  首先,我的第一个,同时也是一个最大的缺点,自己对于理论知识掌握的还不是很通透,理解的不够彻底,对于一些问题似似而非,给自己编写程序的过程中带来了很大的麻烦。

  其次,我不能够精心的去完成每一个程序,对于每个程序而言,都是马马虎虎,只要运行结果是对的,那就可以了。虽然我自己也知道这样是不好的,但是自己就是不愿意去改,在经过实习之后虽然有所改善,但在我看来,改进的不是很大。

  第三,自己做题时还有些马虎,一些小的细节在编写程序过程中不注意,只有在编译连接是才可以发现、对其进行修改,对于一些小程序还不能实现一次就可以完成编译连接。

  第四,做题时自己不能心平气和的去做。

  第五,自己的子宅里不够强,不能持之以恒的坐在自己的座位上编写程序,

  歇一会就要起来转转。

  六、致谢

  在此,我仅代表我自己,对老师您致以崇高的敬意和深深的感谢,没有您,就没有我那么多的收获,您不辞辛苦,在这炎热天气里,放弃您的休息时间来为我们辅导,在辅导过程中,您更是尽心尽力,从来没有少过一节课,更没有过迟到早退,对我们是全程陪同,在我们实习中随时出现问题,随时解决。只要发现问题,您从来没有说是不管过,从来没有烦躁过,对我们提出的问题,也是耐心解决,一边不懂,接着再讲一边,脸庞流下的汗水,您却从来没有在意过。对我们泥更是不计报酬的为我们服务,让我们有一个好的学习环境,不用为自己遇到问题而烦恼,在这里我想对您说一声:老师,您辛苦了!请接受您的学子的深深谢意与感激。

  在这里,也对学校表示由衷的谢意,感谢学校为我们提供了良好的实习环境,让我们在这炎热的天气里,能够舒爽的坐在教室里实习,而不用操心任何问题,在这里,对我们学校表示谢意。

  C语言见习报告三:

  1.课程设计目的

  了解基于C语言的软件开发基本过程与方法,熟悉结构化程序设计的基本方法,了解计算机工作模式,掌握开发一个小型实用系统的基本方法,学会调试一个较长程序的基本方法,养成良好的程序设计习惯和严谨的工作态度,初步获得应用编写C语言程序来解决实际问题的能力。

C语言程序中什么是函数  2.问题需求分析

  根据题目要求,由于要录入、读取、保存学生成绩信息,因而要实现文件的输入和输出功能;要求用户可以查询各个学生的成绩,并且可以添加学生成绩信息等,因而要提供查找和添加功能;另外,还应提供键盘式选择菜单以实现功能选择。

  3.系统设计

  3.1数据结构

  由于该系统涉及多个学生的成绩存储,因此,定义一个数据结构,用于存储这些信息。现仅对学生英语成绩、数学成绩、C语言成绩进行统计管理。 建立以下数据结构:

  typedef struct student

  {

  int no; //存储学生学号 char name[MAX_NAME]; //存储学生姓名 double english; //存储学生英语成绩 double math; //存储学生数学成绩 double Programming; //存储学生C语言成绩 double mark_ave; //平均成绩 double mark_tot; //总成绩

  } STUDENT;

  3.2总体软件框架

  3.3程序模块设计

  将学生成绩管理系统划分为以下几个模块:

  1、显示菜单模块:用void paint()来实现

  2、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;用函数void input(STUDENT *data, int *len)来实现此操作。

  3、成绩输出模块:输出学生的信息以及成绩,用函数void output(STUDENT *data, int len)来实现:通过学生的姓名来查看学生的相关成绩。

  4、排序模块:用函数void sort(STUDENT *data, int len)来实现

  5、成绩查询模块:用void find(STUDENT *data, int len) 来实现,找到就输出此学生全部信息。

  6、插入模块:用函数void insert(STUDENT *data, int *len)来实现,插入到合适的位置。

  7、保存文件:用函数void save(STUDENT *data, int len)来实现,将信息保存到文件中,再关闭文件。

  8、主函数:使用switch条件语句调用主菜单函数,选择菜单中要选择对象来执行不同的模块。

  4.编程实现

  4.1

  4.2将输入的所有学生成绩输出

  4.3成绩排序模块【流程图】

  4.4成绩查询模块:【流程图】

  4.5成绩插入模块

  4.6成绩保存模块

  将所有学生的成绩信息保存到成绩统计表.txt中

  4.7主函数【流程图】

  5.系统测试

  运行开始:

  选择1输入成绩:

  选择2输出成绩:

  选择3按平均分排序:

  选择4查找(输入学号1):

  选择5插入新数据:

  选择6保存:

  选择0退出

  6.实习总结

  课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在这几天里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到许多问题,可以说得是困难重重。这毕竟是第一次做,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固。通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。 通过学习《C语言课程设计》使我了解到C语言是一门实践性很强的课程,以及C语言的基本语法规则.程序设计.以及解题的全过程,加深对C语言的了解,得到程序设计的基本方法和技巧的训练,从而更加深一步的对知识的了解,真正能使C语言这个强有力的编程工具去解决实际问题。

  7.附:关键源程序

  #include

  #include

  #include

  #define MAXN 35

  #define MAX_NAME 256

  typedef struct student //学生信息

  {

  int no;

  char name[MAX_NAME];

  double english;

  double math;

  double Programming;

  double mark_ave;

  double mark_tot;

  } STUDENT;

  /*---------------显示信息子程序------------*/

  void paint()

  {

  int i;

  system("cls");

  printf("%55s\n", "中国地质大学(武汉)学生成绩管理系统\n");

  for (i=0; i<80;i++)

  putchar('=');

  putchar('\n');

  printf(" 1 输入信息 2 输出信息\n");

  printf(" 3 按平均分排序 4 按学号查找\n");

  printf(" 5 插入 6 保存到文件\n");

  printf(" 0 退出\n");

  for (i=0;i<=79;i++)

  putchar('=');

  putchar('\n');

  printf("%s\n", "请输入各操作对应的序号:");

  }

  /*-----------输入信息子程序---------*/

  void input(STUDENT *data, int *len)

  {

  int no;

  putchar('\n');

  printf("%s\n", "请输入新的记录,如果需要退出当前菜单请输入-1.");

  printf("%s\n", "格式:\n");

  printf("%s\n", "学号 姓名 英语 数学 C语言");

  putchar('\n');

  scanf("%d", &no);

  while(no != -1)

  {

  data[*len].no = no;

  scanf("%s %lf %lf %lf", data[*len].name, &data[*len].english, &data[*len].math,&data[*len].Programming);

  data[*len].mark_ave=(data[*len].english+data[*len].math+data[*len].Programming)/3.0;

  data[*len].mark_tot=data[*len].english+data[*len].math+data[*len].Programming;

  (*len)++;

  scanf("%d", &no);

  }

  }

  /*---------------输出信息子程序---------------*/

  void output(STUDENT *data, int len)

  {

  int i;

  system("cls");

  printf("%8s", "学号");

  printf("%8s", "姓名");

  printf("%8s", "英语");

  printf("%8s", "数学");

  printf("%10s", "C语言");

  printf("%12s", "平均分");

  printf("%10s", "总分");

  putchar('\n');

  for (i =0; i < 80; i++)

  putchar('=');

  putchar('\n');

  for (i = 0; i< len; i++)

  {

  printf("%8d", data[i].no);

  printf("%8s", data[i].name);

  printf("%8.1lf", data[i].english);

  printf("%8.1lf", data[i].math);

  printf("%10.1lf", data[i].Programming);

  printf("%12.1lf", data[i].mark_ave);

  printf("%10.1lf", data[i].mark_tot);

  putchar('\n');

  }

  for (i =0; i < 80; i++)

  putchar('=');

  putchar('\n');

  printf("按回车键继续.");

  getchar(); /*存储enter*/ getchar(); /*存储输入内容*/ }

  /*--------------排序子程序------------*/

  void sort(STUDENT *data, int len)

  {

  int i,j,k;

  STUDENT temp;

  for (i=0; i

  {

  for (k=i, j=i+1; j

  if (data[k].mark_ave > data[j].mark_ave) k=j; if (k != i)

  {

  temp = data[i];

  data[i] = data[k];

  data[k] = temp;

  }

  }

  printf("%s\n", "下面显示排序结果,如果需要退出当前菜单请输入 -1."); for(i=0;i

  {

  printf("%8d", data[i].no);

  printf("%8s", data[i].name);

  printf("%8.1lf", data[i].english);

  printf("%8.1lf", data[i].math);

  printf("%10.1lf", data[i].Programming);

  printf("%12.1lf", data[i].mark_ave);

  printf("%10.1lf", data[i].mark_tot);

  putchar('\n');

  }

  int no=1;

  while(no!=-1)

  {

  scanf("%d",&no);

  }

  }

  /*--------------------查找子程序-----------------------*/

  void find(STUDENT *data, int len)

  {

  int find_no, result;

  int i;

  int index=1;

  while(index==1)

  {

  result=0;

  printf("%s\n", "请输入需要查找的学生的学号,退出当前菜单请输入 -1.");

  scanf("%d", &find_no);

  if (find_no == -1) return; /*exit the fine sub program*/ while( data[result].no != find_no && result < len) result ++; if (result >= len )

  {

  printf("%s\n", "未查询到相关信息");

  index=1;

  continue;

  }

  else

  {

  system("cls");

  printf("%s\n", "查询信息如下:");

  for (i =0; i < 80; i++)

  putchar('=');

  putchar('\n');

  printf("%8s", "学号");

  printf("%8s", "姓名");

  printf("%8s", "英语");

  printf("%8s", "数学");

  printf("%10s", "C语言");

  printf("%12s", "平均分");

  printf("%10s", "总分");

  putchar('\n');

  printf("%8d", data[result].no);

  printf("%8s", data[result].name);

  printf("%8.1lf", data[result].english);

  printf("%8.1lf", data[result].math);

  printf("%10.1lf", data[result].Programming);

  printf("%12.1lf", data[result].mark_ave);

  printf("%10.1lf", data[result].mark_tot);

  putchar('\n');

  for (i =0; i < 80; i++)

  putchar('=');

  putchar('\n');

  index=1;

  continue;

  }

  index=0;

  }

  }

  /*-----------------插入子程序-------------*/

  void insert(STUDENT *data, int *len)

  {

  int no, pos;

  double english, math, Programming, mark_ave, mark_tot;

  int i;

  char name[MAX_NAME];

  while(1)

  {

  printf("%s\n", "输入新的记录,退出当前菜单请输入-1."); printf("%s\n", "格式:");

  printf("%s\n", " 学号 姓名 英语 数学 C语言"); scanf("%d", &no);

  if (no == -1) return; /*exit*/ data[*len].no = no;

  scanf("%s %lf %lf %lf", name, &english, &math, &Programming);

  mark_ave=(english+math+Programming)/3.0;

  mark_tot=english+math+Programming;

  pos = 0;

  while ((data[pos].mark_ave < mark_ave) && (pos < *len) ) pos ++;

  for (i = *len-1; i >= pos; i--)

  data[i+1] = data[i];

  data[pos].no = no;

  strcpy(data[pos].name, name);

  data[pos].english = english;

  data[pos].math = math;

  data[pos].Programming = Programming;

  data[pos].mark_ave = mark_ave;

  data[pos].mark_tot = mark_tot;

  (*len)++;

  }

  }

  void save(STUDENT *data, int len)//将数据保存到文件

  {

  int i;

  FILE *fp;

  fp=fopen("成绩统计表.txt","w");

  fprintf(fp,"%8s", "学号");

  fprintf(fp,"%8s", "姓名");

  fprintf(fp,"%8s", "英语");

  fprintf(fp,"%8s", "数学");

  fprintf(fp,"%10s", "C语言");

  fprintf(fp,"%12s", "平均分");

  fprintf(fp,"%10s\n", "总分");

  fprintf(fp,"========================================================================\n");

  putchar('\n');

  for (i = 0; i< len; i++)

  {

  fprintf(fp,"%8d", data[i].no);

  fprintf(fp,"%8s", data[i].name);

  fprintf(fp,"%8.1lf", data[i].english);

  fprintf(fp,"%8.1lf", data[i].math);

  fprintf(fp,"%10.1lf", data[i].Programming);

  fprintf(fp,"%12.1lf", data[i].mark_ave);

  fprintf(fp,"%10.1lf\n", data[i].mark_tot);

  }

  fprintf(fp,"========================================================================\n");

  fclose(fp);

  printf("文件已保存到\"成绩统计表.txt\"");

  getchar();

  getchar();

  }

  /*-----------主程序--------------*/

  void main()

  {

  STUDENT data[MAXN];

  int len = 0;

  char sele;

  paint();

  scanf("%c", &sele);

  while (sele != '0')

  {

  switch(sele)

  {

  case '1':

  input(data, &len);

  break;

case &#

c程序中函数的组成

http://m.myl5520.com/mingrenmingyan/65511.html

展开更多 50 %)
分享

热门关注

[小石潭记原文及翻译]小石潭记专项练习

经典语句大全

【春风杨柳鸣鸡屋打一肖】杨柳鸣蜩绿暗,荷花落日红酣阅读附答案

经典语句大全

【梦幻图片唯美星空】关于星空的唯美语句

经典语句大全

形容云雾缭绕的句子_形容云雾缭绕的语句

经典语句大全

【奉献爱心的作文】关于奉献爱心的语句

经典语句大全

努力的励志语_努力学习的语句

经典语句大全

奉献爱心的作文|有关奉献爱心的语句

经典语句大全

赞美百合花的诗句_对百合花赞美的语句

经典语句大全

秋天意境唯美语句_唯美意境的语句有哪些

经典语句大全

勉励的意思|勉励人勤奋学习的语句

经典语句大全