文档库 最新最全的文档下载
当前位置:文档库 › 第五讲C语言函数

第五讲C语言函数

第五讲C语言函数
第五讲C语言函数

第5讲函数

5.1函数的概念

C程序由一个main和任意个函数组成。

例1 在主函数中调用其他函数。

#include

void printstar(void)

{

puts("**********************\n");

}

void print_message(void)

{

puts(" Welcome to C!\n");

}

main()

{

printstar();

print_message();

printstar();

return 0;

}

程序运行后输出:

**********************

Welcome to C!

**********************

3)函数不可嵌套定义,具有全局性、平行性,

4)函数分为有参与无参函数

5)程序从main开始执行,最后又回到main函数结束。

1. 定义无参数的一般形式

类型标识符函数名([void])

{

声明部分

语句

}

调用方式

函数名( ) ;

若有返回值可出现在表达式中,无返值可单独出现

2. 定义有参数的一般形式

函数的定义通常包含以下内容:

函数返回值类型函数名(形参表说明)//函数首部,函数头{

声明语句//函数体

执行语句

}

说明:

(1)函数的类型,是指函数返回值的类型。当不指明函数类型时,系统默认的是int型。

(2)函数名本身也有值,它代表了该函数的入口地址,使用指针调用该函数时,将用到此功能。

(3)形参全称为"形式参数"。形参表是用逗号分隔的一组变量说明

个形参的类型和形参的名称,当调用函数时,接受来自主调函数的数据,确定各参数的值。如:

int func (int x, int y )

{ …… }。

(4)用{ }括起来的部分是函数的主体,称为函数体。我们可以得到一个C语言中最简单的函数:

void dumy ( ){ }

5.2 函数参数和函数的值

C语言中采用参数、返回值和全局变量三种方式进行数据传递。

◆当调用函数时,通过函数的参数,主调函数为形参提供数据;

◆调用结束时,被调函数通过返回语句将函数的运行结果(称为返回值)带回主调函数中;

◆函数之间还可以通过使用全局变量,在一个函数内使用其他函数中的某些变量的结果。

1. 形式参数和实际参数

形式参数(形参)——是函数定义时由用户定义的形式上的变量。实际参数(实参)——是函数调用时,主调函数为被调函数提供的原始数据。

若实参和形参均为普通变量,则实参向形参传送数据的方式是"

◇形式参数是函数的局部变量,仅在函数内部才有意义,不能用它来传递函数的结果。

例:调用函数的数据传递。

#include

int max ( int x, int y ) //x和y为形参,接受来自主调函数的原始数据{

int z;

z=x>y?x:y;

return(z); //将函数的结果返回主调函数

}

main()

{

int a,b, c;

puts("please enter two integer numbers");

scanf("%d %d",&a,&b);

c=max(a,b);//主函数内调用功能函数max,实参为a和b printf("max=%d\n",c);

return 0;

}

说明:实参与形参必须类型相同,个数相等,一一对应。当调用函数时,实参的值传给形参,在被调函数内部,形参的变化不会影响实参的值。

当实参之间有联系时,实参的求值顺序在不同的编译系统下是不同的,VC是从右向左。

#include

int add(int x,int y);

main()

{

int x=2;

printf("%d\n",add(x,++x));

return 0;

}

int add(int x,int y)

{

return (x+y);

}

运行结果:

6

若在主函数中变量a=5,b=10,编写一个函数交换主函数中两个变量的值,使变量a=10,b=5。

#include

void swapf(int x,int y);

main()

{

int a, b;

a=5; b=10; //说明两个变量并赋初值

printf("before swapf a=%d b=%d\n",a,b);

swapf(a, b); //用变量a和b作为实际参数调用函数

printf("after swapf a=%d b=%d\n",a,b);

return 0;

{

int temp; //借助临时变量交换两个形参变量x和y的值temp=x; //①

x=y; //②

y=temp; //③

printf("in swapf x=%d y=%d\n",x,y);

}

程序的实际运行结果为:

before swapf a=5, b=10

in swapf x=10, y=5

after swapf a=5, b=10。

函数的参数可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。

例:同上例。今用函数处理,而且用指针类型的数据作函数参数。#include

void swapf(int * p1,int * p2);

main()

{

int a, b;

a=5; b=10; //说明两个变量并赋初值

printf("before swapf a=%d b=%d\n",a,b);

swapf( &a, &b); //用变量a和b作为实际参数调用函数printf("after swapf a=%d b=%d\n",a,b);

return 0;

}

int temp; //借助临时变量交换两个形参变量x和y的值temp=*p1; //①

*p1=*p2; //②

*p2=temp; //③

printf("in swapf *p1=%d *p2=%d\n",*p1,*p2);

}

运行程序:

before swapf a=5 b=10

in swapf *p1=10 *p2=5

after swapf a=10 b=5

所以可以通过指针作为函数的参数,实现在函数体中,对实参指针变量所指向的变量的操作。

实参指针变量的作用仅是在调用函数时,为定义的形参指针变量赋初值:

数据类型符* 形参指针变量名=实参指针变量名;

例:输入a、b、c三个整数,按大小顺序输出。

#include

void swap(int *pt1,int *pt2) //交换两变量的值

{

int temp;

temp=*pt1;

*pt1=*pt2;

*pt2=temp;

}

void exchange(int *q1,int *q2,int *q3)//三变量排序

if(*q1<*q3)swap(q1,q3);

if(*q2<*q3)swap(q2,q3);

}

int main()

{

int a,b,c,*p1,*p2,*p3;

puts("Input 3 numbers:"); scanf("%d %d %d",&a,&b,&c); p1=&a;p2=&b; p3=&c; exchange(p1,p2,p3);

printf("%d %d %d\n",a,b,c); return 0;

}

运行程序:

10 -23 43 //输入的三个数据

43 10 -23

5.2.2 函数的返回值

1.函数的返回语句

格式:

return 表达式;

或:

return(表达式);

功能:将表达式的值带回主调函数

已知函数关系,编程实现。

???<>=-=)0(2)

0(222

x x x x x y

程序如下:

#include

int func(int x);

main()

{

int a,c;

scanf("%d",&a);

c=func(a);

printf("%d\n",c);

return 0;

}

int func(int x)

{

int z;

if(x>=0)

z=2*x*x-x;

else

z=2*x*x;

return z;

(1)函数的返回值只能有一个。

(2)当函数中不需要指明返回值时,可以写成:

return;

若用void 声明函数的返回类型,也可以不写。

数都结束,回到主调函数。如上例可改写为:

if ( x >= 0 )

return (2*x*x-x);

else

return (2*x*x);

(4)当函数没有指明返回值,即return; 或没有返回语句时,可以定义无类型函数,其形式为:

void 函数名(形参表)

{ …… }

⑸函数定义时的类型就是函数返回值的类型。

#include

int max(float x,float y);

main()

{

float a,b;

int c;

scanf("%f %f",&a,&b);

c=max(a,b);

printf("MAX is %d\n",c);

return 0;

}

int max(float x, float y)

{

float z;

}

运行时,若从键盘输入:4.5 6.8

结果为:6

2. 通过指针类型的参数返回值

函数要向调用函数返回值,还可以通过指针类型的参数,向主调用函数返回值,且这种方式可以返回多个值。

例6:输入一个整数,计算其平方根、平方和立方。

#include

#include

void f(int x, double * psqrt,double * psquare,double * pcube); main()

{

int x;

double sqrt,square,cube;

scanf("%d",&x);

f(x,&sqrt,&square,&cube);

printf("%d:square_root=%f,square=%f,cube=%f\n",x,sqrt,square,cube); return 0;

}

void f(int x, double * psqrt,double * psquare,double * pcube) {

*pcube=x*x*x;

}

运行程序:

6

6:square_root=2.449490,square=36.000000,cube=216.000000

3.指针类型的函数——函数返回地址类型的数据

例7 在一个数组中搜索一个关键数字。

分析:写一个搜索函数,返回在数组中存储该关键数字的存储单元的指针(地址)。

#include

#include

#include

int * search(int *pi,int n,int key);

void main()

{

int s[15];

int i,k,*p;

srand((unsigned)time(NULL));

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

s[i]=rand()%100; //用随机数向元素赋值

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

printf("%d ",s[i]);

puts("\n Input Key_number:");

scanf("%d",&k);

p=search(s,15,k);

int * search(int *pi,int n,int key)

{

int i;

for(i=0;i

if(pi[i]==key)return (pi+i);

return NULL;

}

说明:返回指针的函数可以作为赋值运算的左值。如:把上题中搜索到的关键数字改赋值为100,代码如下:

#include

#include

#include

int * search(int *pi,int n,int key);

void main()

{

int s[15];

int i,k;

srand((unsigned)time(NULL));

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

s[i]=rand()%100; //用随机数向元素赋值

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

printf("%d ",s[i]);

puts("\n Input Key_number:");

scanf("%d",&k);

*(search(s,15,k))=100;//向返回指针的函数赋值

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

printf("%d ",s[i]);

putchar('\n');

}

int i;

for(i=0;i

if(pi[i]==key)return (pi+i);

return NULL;

}

例5.6 在多个学生成绩中,输入一学生的序号,输出该学生的全部成绩。

#include

float * search(float (* pointer)[4],int n);

//参数pointer是指向含有4个float型数据元素的一维数组的指针

main()

{

float score[][4]={{60,70,80,90},{56,88,87,90,},{38,90,78,47}}; float * p;

int i,m;

printf("enter the number of student:");

scanf("%d",&m);

printf("The score of No.%d are:\n",m);

p=search(score,m);

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

printf("%5.2f\t",*(p+i));

return 0;

}

float * search(float (* pointer)[4],int n)

{

float * pt;

pt=*(pointer+n);

return pt;

}

说明:pointer+n指向二维数组score的第n行,*(pointer+n)

5.3 函数的调用

5.3.1 函数调用的一般形式

函数调用的一般形式:

函数名([实参表])

注意:函数调用前,必须先定义或说明(引用性声明)。

5.3.3 函数调用的方式

1.函数语句

被调函数在主调函数中,以语句的方式出现。通常只完成一种操作,不带回返回值。

分析程序的执行过程。

void func()

{

puts("This is a programm!\n");

}

void main()

{

func();//函数调用语句

}

2.函数表达式

将函数的调用结果作运算符的运算分量,这种函数是有返回值的。

库函数pow(a,b)的功能是求a b,在主函数中调用该函数的程序为:

main( )

{

int a,b,i,j;

double c;

scanf("%d %d %d %d",&a,&b,&i,&j);

c=pow(a,i)+pow(b,j);

printf("%f\n",c);

return 0;

}

将函数pow(a,i)和pow(b,j)作为"+"运算符的运算分量。

3.函数参数

函数的调用结果进一步做其他函数的实参,这种函数也是有返回值的。上例中,若c=pow(a,pow(b,i));

此时,pow(b,i)作为下一次调用pow函数的实参。比如:

int max(x,y){return (x>y?x:y);}

用该函数求a、b、c三数中的最大者:

d=max(c,max(a,b);

例10求100至200间的全部素数。(参见P144例5.7)

分析:编写一个判断一个整数是否是素数的函数int_prime(),若是素数返回1,否则返回0。

#include

#include

int int_prime(int);

int m,n=0;

for(m=101;m<=200;m=m+2)

{

if(int_prime(m))

{

printf("%5d",m);

n=n+1;

}

if(n%10==0)printf("\n");

}

printf("\n");

return 0;

}

int int_prime(int m)

{

int prime=1,k,i;

k=(int)(sqrt(m));

for(i=2;i<=k;i++)

if(m%i==0)

{

prime=0;

break;

}

return prime;

}

例5.8 输入多个字符用一个函数把大写字母转换为小写字母作为函数值返回,其他字符不变。用字符’@’结束输入操作。

#include

char myupper(char ch)

return ch;

}

void main()

{

char c;

while((c=getchar())!='@')

{

c=myupper(c);

putchar(c);

}

putchar('\n');

}

char myupper(char ch)

{

// r eturn ch|0x20; //大写转换为小写

// r eturn ch&0xDF; //小写转换为大写

return ch^0x20; //大写转换为小写,小写转换为大写}

void main()

{

char c;

while((c=getchar())!='@')

{

c=myupper(c);

putchar(c);

}

putchar('\n');

}

主调函数调用被调函数之前,必须对被调函数作声明,其形式是:函数类型函数名(类型1 形参名1,类型2 形参名2 …); 或:

函数类型标识符函数名(形参类型1,形参类型2……);。

例:

#include

void main( )

{

float fun1(float x,float y); //对函数fun1的声明

float a,b;

float c;

scanf("%d,%d",&a,&b);

c=fun1(a,b);

printf("%f\n",c);

}

float fun1(float x,float y)

{ …… }

5.4 指向函数的指针及常用的几种参数传递方式

5.4.1 指向函数的指针

◇函数名就是一个指针常量,其值为该函数所占内存区的首地

◇指向函数的指针变量称为函数指针变量。

1. 函数指针变量定义的一般形式为:

类型说明符(*指针变量名)();

其中:

类型说明符表示被指函数的返回值的类型。

(* 指针变量名)表示*后面的变量是定义的指针变量,注意括号不能省略。

()表示指针变量所指的是一个函数。

例如:

int (*pf)();

表示pf是一个指向的函数入口的指针变量,该函数的返回值(函数值)是整型。

使用该指针变量调用函数时与用函数名调用函数一样要用参数表,其格式为:

指针变量名(实参数表)

例: 求两数中的大者。

#include

int max(int x,int y)

{

return(x>y?x:y);

}

C语言实验报告参考答案(原)

C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述 四、程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include<> main() { printf("The dress is long\n"); printf("The shoes are big\n"); printf("The trousers are black\n"); } 2.编写程序: (1) a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 (2)a=160,b=46,c=18,d=170, 编写求(a+b)/(b-c)*(c-d)的程序。 答案: (1) #include<> main() { int a,b,c,x,y;

a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x); printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } (2) #include<> main() { int a,b,c,d; float x; a=160; b=46; c=18; d=170; x=(a+b)/(b-c)*(c-d);

printf("(a+b)/(b-c)*(c-d)=%f\n",x); } 3. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将0赋给c。(提示:用条件运算符) 答案: #include<> main() { int a,b,c; a=0; b=-10; c= (a>b) b:a; printf("c = %d\n",c); } 五、调试和测试结果 1.编译、连接无错,运行后屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 2、(1) 编译、连接无错,运行后屏幕上显示以下结果: a/b的商=7 a/c的商=3

C语言常用函数

C语言的常用库函数 函数1。absread()读磁盘绝对扇区函数 原形:int absread(int drive,int num,int sectnum,void *buf) 功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num 个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。 参数:drive=0对应A盘,drive=1对应B盘。 返回值:0:成功;-1:失败。 头文件:dos.h 函数2。abswrite()写磁盘绝对扇区函数 原形:int abswrite(int drive,int nsects,int lsect,void *buffer) drive=0(A驱动器)、1(B驱动器)、 nsects=要写的扇区数(最多64K个); lsect=起始逻辑扇区号; buffer=要写入数据的内存起始地址。 功能:将指定内容写入(调用DOS中断0x26)磁盘上的指定扇区,即使写入的地方是磁盘的逻辑结构、文件、FAT表和目录结构所在的扇区,也照常进行。 返回值:0:成功;-1:失败。 头文件:dos.h 函数3。atof()将字符串转换成浮点数的函数 原形:double atof(const char *s) 功能:把s所指向的字符串转换成double类型。 s格式为:符号数字.数字E符号数字 返回值:字符串的转换值。 头文件:math.h、stdlib.h 函数4。atoi()将字符串转换成整型数的函数 原形:int atoi(const char *s) 功能:把s所指向的字符串转换成int类型。 s格式为:符号数字 返回值:字符串的转换值。若出错则返回0。 头文件:stdlib.h 函数5。atol()将字符串转换成长整型数的函数 原形:long atol(const char *s)

C语言标准库函数

标准库函数 本附录描述了标准C支持的库函数①。使用此附录时,请记住下列要点。 为了简洁清楚,这里删除了一些细节。如果想看全部内容,请参考标准。本书的其他地方已经对一些函数(特别是printf函数、scanf函数以及它们的变异函数)进行了详细介绍,所以这里 只对这类函数做简短的描述。为了获得关于某个函数更详细的信息(包括如何使用这个函数的示 例),请见函数描述右下角用楷体列出的节号。 每个函数描述结尾都有其他与之相关函数的列表。相似函数非常接近于正在描述的函数。相关函数经常会和在描述的函数联合使用。(例如,calloc函数和realloc函数与malloc函数“类似”, 而free函数则与malloc函数“相关”。)也可参见的函数和在描述的函数没有紧密联系,但是却 可能有影响。 如果把函数行为的某些方面描述为由实现定义的,那么这就意味着此函数依赖于C库的实现方式。 函数将始终行为一致,但是结果却可能会由于系统的不同而千差万别。(换句话说,请参考手册了 解可能发生的问题。)另一方面,未定义的行为是一个不好的消息:不但函数的行为可能会因系统 不同而不同,而且程序也可能会行为异常甚至崩溃。 中许多函数的描述提到了定义域错误和取值范围错误。在本附录的末尾对这两种错误进行了定义。 601 下列库函数的行为是会受到当前地区影响的: 字符处理函数(除了isdigit函数和isxdigit函数)。 格式化输入/输出函数。 多字节字符和字符串函数。 字符串转换函数。 Strcoll函数、strftime函数和strxfrm函数。 例如,isalpha函数实际上检测字符是否在a到z之间或者在A到Z之间。在某些区域内也把其他字符看成是字母次序的。本附录描述了在"C"(默认的)地区内库函数的行为。 一些函数实际上是宏。然而,这些宏的用法和函数完全一样,所以这里不对它们区别对待。 abort 异常终止程序 void abort(void); 产生SIGABRT信号。如果无法捕获信号(或者如果信号处理函数返回),那么程序会异常 终止,并且返回由实现定义的代码来说明不成功的终止。是否清洗输出缓冲区,是否关 闭打开的流,以及是否移除临时文件都是由实现定义的。 相似函数exit函数、raise函数 相关函数assert函数、signal函数 也可参见atexit函数 26.2节abs 整数的绝对值 int abs(int j); 返回整数j的绝对值。如果不能表示j的绝对值,那么函数的行为是未定义的。 ①这些材料经ANSI许可改编自American National Standards Institude ANSI/ISO 9899?1990。这个标准的副本可从 ANSI购买(ANSI, 11 West 42nd Street, New York, NY 10036)。

C语言中常见的功能函数

C语言中常见的功能函数(应掌握的编程) 1、两个变量值的交换 void exchang(float *x,float *y) /*形参为两个变量的地铁(指针)*/ {float z; z=*x; *x=*y; *y=z; } void main() {float a,b; scanf(“%f%f”,&a,&b); exchang(&a,&b); /*因为形参是指针,所以实参必须给变量的地址,不能给变量名*/ printf(“a=%f,b=%f”,a,b); } 2、判断一个整数的奇偶 int jou(int n) /*如果是奇数返回1,否则返回0*/ { if(n%2==0) return 0; return 1; } 3、小写字符转换成大写字符 根据实参传给形参的字母,判断是否是小写字母,如果是小写字母,则转换成大写字母,否则不进行转换,函数返回转换后或原来的字符。 本函数仿照toupper()库函数的功能编写(toupper(c) 是将变量c字母转换成大写字母,如果不是小写字母不转换)。 char toupper1(char ch) {if(ch>=?a?&&ch<=?z?) ch-=32; /*小写字母比对应的大写字母ASCII码值大32*/ return ch; } 4、判断一个字符是否是字母(或数字) 根据实参传给形参的字符,判断是否是字母(或数字),如果是字母(或数字)返回1,否则返回0。此函数是根据库函数isalpha()(或isdigit())来编写的。 int isalpha1(char ch) /*判断是否是字母*/ {if(ch>=?A?&&ch<=?Z?||ch>=?a?&&ch<=?z?) return 1; else return 0; } int isdigit1(char ch) /*判断是否是数字字符*/ {if(ch>=?0?&&ch<=?9?) return 1; else return 0; } 5、根据学生成绩,返回其等级 char fun(float cj) {char c; switch((int)cj/10) {case 10:

C语言标准库函数2012

常用C语言标准库函数2012 C语言编译系统提供了众多的预定义库函数和宏。用户在编写程序时,可以直接调用这些库函数和宏。这里选择了初学者常用的一些库函数,简单介绍了各函数的用法和所在的头文件。 1.测试函数 Isalnum 原型:int isalnum(int c) 功能:测试参数c是否为字母或数字:是则返回非零;否则返回零 头文件:ctype.h Isapha 原型:int isapha(int c) 功能:测试参数c是否为字母:是则返回非零;否则返回零 头文件:ctype.h Isascii 原型:int isascii(int c) 功能:测试参数c是否为ASCII码(0x00~0x7F):是则返回非零;否则返回零 头文件:ctype.h Iscntrl 原型:int iscntrl(int c) 功能:测试参数c是否为控制字符(0x00~0x1F、0x7F):是则返回非零;否则返回零 头文件:ctype.h Isdigit 原型:int isdigit(int c) 功能:测试参数c是否为数字:是则返回非零;否则返回零。 头文件:ctype.h Isgraph 原型:int isgraph(int c) 功能:测试参数c是否为可打印字符(0x21~0x7E):是则返回非零;否则返回零头文件:ctype.h Islower 原型:int islower(int c) 功能:测试参数c是否为小写字母:是则返回非零;否则返回零 头文件:ctype.h

Isprint 原型:int isprint(int c) 功能:测试参数c是否为可打印字符(含空格符0x20~0x7E):是则返回非零;否则返回零 头文件:ctype.h Ispunct 原型:int ispunct(int c) 功能:测试参数c是否为标点符号:是则返回非零;否则返回零 头文件:ctype.h Isupper 原型:int isupper(inr c) 功能:测试参数c是否为大写字母:是则返回非零;否则返回零 Isxdigit 原型:int isxdigit(int c) 功能:测试参数c是否为十六进制数:是则返回非零;否则返回零 2.数学函数 abs 原型:int abs(int i) 功能:返回整数型参数i的绝对值 头文件:stdlib.h,math.h acos 原型:double acos(double x) 功能:返回双精度参数x的反余弦三角函数值 头文件:math.h asin 原型:double asin(double x) 功能:返回双精度参数x的反正弦三角函数值 头文件:math.h atan 原型:double atan(double x) 功能:返回双精度参数的反正切三角函数值 头文件:math.h atan2 原型:double atan2(double y,double x) 功能:返回双精度参数y和x由式y/x所计算的反正切三角函数值 头文件:math.h cabs

C语言常用IO函数

一些比较常用的io函数,总结了一下,一块贴出来了 stdin标准输入流 stdout标准输出流 stderr标准错误流 字符IO函数 1.int getchar() 说明:从stdin读取1个字符 返回值:成功,返回该字符;出错,返回EOF; 2.int fgetc(FILE fp) 说明:功能同getchar,默认从文件fp读取; 返回值:成功,返回该字符;出错,返回EOF; 可以重定向 3.int getc(FILE fp) 说明:功能与fgetc相同,但getc既可以被用作 函数实现,也可以被用作宏实现,并且它的编码效率 可能会更高. 可以重定向 4.int putchar(int ch) 说明:向stdout输出字符ch; 返回值:成功,返回该字符;出错,返回EOF; 5.int fputc(int c,FILE fp) 说明:功能同putchar,默认向fp输出字符ch; 返回值:成功,返回该字符;出错,返回EOF; 6.int putc(int c,FILE fp) 说明:功能与fputc相同,但putc与getc一样既可能被用作 函数实现,也可能被用作宏实现,并且它的编码效率可能会更高;可以重定向 字符串IO函数 1.char gets(char str) 说明:从stdin读取字符串(不包括'n')写入到字符串str中; 返回值:成功,返回str首地址;错误,返回NULL; 2.char fgets(char str,int N,FILE fp) 说明:默认从文件fp中读取N个字符(包括'n')写入到字符串str中,

如果实际输入字符串小于N,fgets自动添加'n', 返回值:成功,返回字符串首地址;错误或遇到EOF,返回NULL;可以重定向 3.int puts(const char str) 说明:向stdout输出字符串str,然受输出一个'n', 返回值:成功,返回非负值;错误,EOF; 4.int fputs(const char str,FILE fp) 说明:功能同puts,默认向文件fp写入字符串str; 返回值:成功,返回非负值;错误,EOF; 可以重定向 格式化IO函数 1.int scanf(const char format,...) 说明:根据format从stdin格式化读取N个值,并输入到... 返回值:成功,返回读取的项数;出错,返回EOF 2.int fscanf(FILE fp,const char format,...) 说明:功能同scanf,默认从文件fp读取, 返回值:成功,返回读取的项数;出错或遇到文件尾,返回EOF 可以重定向 3.int sscanf(const char buf,const char format,...) 说明:根据format从buf格式化读取N个值,并输入到... 返回值:成功,返回读取的项数;出错,返回EOF 4.int printf(const char format,...) 说明:根据format格式化数据,并输出到stdout 返回值成功,返回输出字符数;错误,返回负数; 5.int fprintf(FILE fp,const char format,...) 说明:功能同printf,默认向文件fp写入; 可以重定向 6.int sprintf(char buf,const char format,...) 说明:根据format格式化数据,并输出到buf, 返回值:成功,返回输出字符数;错误,返回负数

C语言函数库详解(收藏版)

c语言函数库 目录 第一章(C标准库) (4) 1. :诊断 (4) 2. :字符类别测试 (5) 3. :错误处理 (5) 4. :整型常量 (6) 5. :地域环境 (6) 6. :数学函数 (7) 7. :非局部跳转 (8) 8. :信号 (9) 9. :可变参数表 (11) 10. :公共定义 (11) 11. :输入输出 (12) 12. :实用函数 (13) 13. :日期与时间函数 (13) 第二章(IO函数) (14) clearerr:复位错误标志函数 (15) feof:检测文件结束符函数 (16) ferror:检测流上的错误函数 (17) fflush:清除文件缓冲区函数 (18) fgetc:从流中读取字符函数 (19) fgetpos:取得当前文件的句柄函数 (20) fgets:从流中读取字符串函数 (21) fopen、fclose:文件的打开与关闭函数 (22) fprintf:格式化输出函数 (23) fputc:向流中输出字符函数 (25) fputs:向流中输出字符串函数 (25) fread:从流中读取字符串函数 (26) freopen:替换文件中数据流函数 (27) fscanf:格式化输入函数 (28) fseek:文件指针定位函数 (28) fsetpos:定位流上的文件指针函数 (30) ftell:返回当前文件指针位置函数 (31) fwrite:向文件写入数据函数 (31) getc:从流中读取字符函数 (32) getchar:从标准输入文件中读取字符函数 (33) gets:从标准输入文件中读取字符串函数 (34) perror:打印系统错误信息函数 (34) printf:产生格式化输出的函数 (35) putc:向指定流中输出字符函数 (36) putchar:向标准输出文件上输出字符 (37)

C语言程序设计II实验报告

C语言程序设计II实验报告题目:实验五函数应用 院系名称:计算机学院 专业名称:计算机科学与技术 班级: 学号: 学生姓名: 指导教师: 实验日期:2017年4月1日 报告提交截止日期:2017年4月11日

一、实验目的 1、掌握C语言函数的定义方法、函数的声明及函数的调用方法及 调用过程; 2、掌握主调函数和被调函数之间的参数传递方式; 二、实验内容与要求: 1、求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数,用 另一个函数根据求出的最大公约数求最小公倍数。(提示:设两个整数是 a,b,最大公约数是p,最小公倍数是q,那么ab=pq) 2、用牛顿迭代法求方程f(x)=ax3+bx2+cx+d=0的根。系数a、b、c、d由主 函数输入。求根过程写成函数。(提示:牛顿迭代法是先给定方程f(x)=0 的一个较好的初始近似根x0,然后重复使用迭代公式: 求x的近似解,直至相邻两次的近似解相差很小为止,如差值的绝对值 小于1e-07。x0可以从键盘输入或直接设定。) 3、定义一个函数,功能是计算n个学生的成绩中高于平均成绩的人数,并 作为函数返回值。用主函数来调用它。统计30个学生成绩中高于平均成 绩的有多少人。 4、 ∑= + + + = = n i n p p p i p n s 1 ) ( )2( )1( )( ) (Λ Λ,! )(i i p= 5、编写和调用函数,给定圆筒的内径、外径和高,计算该圆筒的体积;给

定圆锥的高、底面半径,计算该圆锥的体积和表面积。 6、编写和调用函数,求出10000以内的所有素数、绝对素数、水仙花数、 完全数(或称完数)、互满数。 提示:一个素数经过任意次调换位,仍然为素数,则称其为绝对素数, 例如13和31就是一个绝对素数。水仙花数是指一个三位整数,其各位 数字立方之和等于该数。例如,153就是一个水仙花数:153=1*1*1+ 5*5*5+3*3*3。完全数是指一个数正好是它的所有约数(本身除外)之和。 例如,6就是一个完全数,因为6的因子有1、2、3,并且6=1+2+3。 如果有两个数,每一个数的所有约数(除它本身以外)之和正好等于对 方,则称这两个数为互满数。 三、实验结果

C语言常用函数手册

1.分类函数,所在函数库为ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9'),返回非0值,否则返回0 int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F) 返回非0值,否则返回0 int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0 int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n') 返回非0值,否则返回0 int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0 int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值, 否则返回0 int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z') int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z') 2.数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数ex的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回logex的值 double log10(double x) 返回log10x的值 double pow(double x,double y) 返回xy的值 double pow10(int p) 返回10p的值 double sqrt(double x) 返回+√x的值 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度 double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度 double atan(double x) 返回x的反正切tan-1(x)值,x为弧度 double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度double cos(double x) 返回x的余弦cos(x)值,x为弧度 double sin(double x) 返回x的正弦sin(x)值,x为弧度 double tan(double x) 返回x的正切tan(x)值,x为弧度 double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度 double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度

C语言程序设计实验报告(函数)

C语言程序设计实验报告(实验名称:函数) 1实验目的 (1)掌握函数的定义方法、调用方法、参数说明以及返回值; (2)掌握实参与形参的对应关系,以及参数之间的“值传递”的方式; (3)掌握函数的嵌套调用及递归调用的用的设计方法; (4)在编程过程中加深理解函数调用的程序设计思想。 2实验内容 (1)编写一个函数primeNum(int x),功能是判别一个数是否为素数。 要求: ①在主函数中输入一个整数x(直接赋值或从键盘输入); ②函数类型为空值(void),调用primeNum( )函数后,在函数中输出x是 否为素数的信息,输出格式为“x is a prime number”或”x is not a prime number”; ③分别输入一下数据:0,1,2,5,9,13,59,121,并运行程序,检查 结果是否正确。 (2)编写函数 mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。 要求: ①在主函数中从键盘输入一对整型数据a和b; ②调用函数后,根据返回值对a和b的关系进行说明。例如,在主函数中输 入:10,5,则输出“10 is a multiple of 5”; ③分别输入下面几组数据进行函数的正确性测试:1与5,5与5,6与2,6 与4,20与4,37与9。

3算法描述流程图 (1)primeNum(int x)(判别一个数是否是素数)函数流程图 ①主函数流程图:

②判断素数函数流程图:

(2)mulNum(int a,int b)(确定a和b是否是整数倍的关系)函数流程图 ①主函数流程图:

C语言函数库分类说明.

分类函数,所在函数库为ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9') 返回非0值,否则返回0 int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F) 返回非0值,否则返回0 int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0 int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n') 返回非0值,否则返回0 int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0 int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值, 否则返回0 int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z') int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z') 数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数ex的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回logex的值 double log10(double x) 返回log10x的值 double pow(double x,double y) 返回xy的值 double pow10(int p) 返回10p的值 double sqrt(double x) 返回+√x的值 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度 double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度 double atan(double x) 返回x的反正切tan-1(x)值,x为弧度 double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度 double cos(double x) 返回x的余弦cos(x)值,x为弧度 double sin(double x) 返回x的正弦sin(x)值,x为弧度 double tan(double x) 返回x的正切tan(x)值,x为弧度 double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度

C语言实验5(附参考答案)

实验5:运算符与表达式(4)实验目的: 1、熟悉条件运算符、复合赋值运算符的基本运用和规则。 2、进一步熟悉C语言程序的编辑、编译、连接和运行的方法。 实验内容: 1、写出下面逻辑表达式的值。设a=3,b=4,c=5。 ①a + b > c && b == c =0 ②a || b + c && b – c =1 ③!( a > b ) && ! c || 1 =1 ④(0||0)||5 =1 ⑤(10<12)&&! (1>-1) =0 2、将下面的数学表达式写成C语言逻辑表达式: x大于0,并且X小于等于10 x>=0&&x<=10 a或b中有一个大于零__a>0||b>0________ 3、求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 =0 设x=2.5,a=7,y=4.7 (2)(float)(a+b)/2+(int)x%(int)y =0 设a=2,b=3,x=3.5,y=2.5 先自己分析,再试着用程序求解,看得到的结果是否一致。 4、写出下面表达式运算后a的值,设原来a=10。设a和n已定义成整型变量。

(1)a+=a =20 (2)a-=2 =8 (3)a*=2+3 =50 (4)a/=a+a =0 (5)a%=(n%=2),n的值等于5 =0 (6)a+=a-=a*=a =0 先自己分析,再试着用程序求解,看得到的结果是否一致。 5、闰年是能够被4整除,但是不能够被100整除,或者能够被400整除,假设年份用变量名year表示,请用表达式写出以上条件。year%4==0&&year%100!=0||year%400==0 6、程序填空(已知一个摄氏温度c,要求输出华氏温度f。公式为f=5/9*c+32.5) main( ) { float c,f; c=37.5; f= 5.0/9*c+32.5; printf("%5.2f\n",f); } 7、先思考下面程序的输入,然后放到编译器里面去验证,看看是否和自己思考的结果一样,并把正确结果写在程序下文。 main() { int x,y,max; x=3; y=6; max=x>y?x:y; printf(“%d\n”,max); } 输出结果:6

C语言实验4

C语言实验报告 课程名称:高级语言程序设计系(院):信息工程学院 专业:电子信息工程 班级: 学生姓名 学号: 指导教师: 开课时间:学年第学期

关于实验报告的说明 (一)对教师和学生的基本要求 1、加实验的学生需提交实验报告, 一次实验写一个实验报告。实验报告要求字迹工整,文字简练,数据齐全,图表规范,计算正确,分析充分、具体、定量。 2、教师应根据学生在实验中和在实验报告书写中反映出来的认真程度、实验效果、理解深度、独立工作能力、科学态度等给予出恰当的评语,并指出实验报告中的不妥之处,然后依照评分细则,采用100分制评出成绩并签名和评定日期。如学生抄袭或缺交实验报告达该课程全学期实验报告总次数三分之一以上,不得同意其参加本课程的考核。 3、学期结束后任课教师要及时收交学生实验报告,并按要求给出学生实验报告成绩册和学生实验报告上交到系办公室。 (二)内容填写要求 1、实验项目名称:要用最简练的语言反映实验的内容。 2、实验目的和要求:目的和要求要明确,在理论上验证定理、公式、算法,并使实验者获得深刻和系统的理解,在实践上,掌握使用实验设备的技能技巧和程序的调试方法。 3、实验内容及步骤:这是实验报告极其重要的内容。要抓住重点,可以从理论和实践两个方面考虑。只写主要操作步骤,不要照抄实习指导,要简明扼要。还应该画出实验流程图,再配以相应的文字说明,这样既可以节省许多文字说明,又能使实验报告简明扼要,清楚明白。 4、实验结果:根据实验目的将原始资料系统化、条理化,用准确的专业术语客观地描述实验现象和结果,要有时间顺序以及各项指标在时间上的关系。 5、实验总结:根据相关的理论知识对所得到的实验结果进行解释和分析和总结。也可以写一些本次实验的心得以及提出一些问题或建议。

C语言常用的库函数

库函数并不是C语言的一部分,它是由编译系统根据一般用户的需要编制并 提供给用户使用的一组程序。每一种C编译系统都提供了一批库函数,不同的 编译系统所提供的库函数的数目和函数名以及函数功能是不完全相同的。ANSI C标准提出了一批建议提供的标准库函数。它包括了目前多数C编译系统所提供 的库函数,但也有一些是某些C编译系统未曾实现的。考虑到通用性,本附录 列出ANSI C建议的常用库函数。 由于C库函数的种类和数目很多,例如还有屏幕和图形函数、时间日期函数、 与系统有关的函数等,每一类函数又包括各种功能的函数,限于篇幅,本附录不 能全部介绍,只从教学需要的角度列出最基本的。读者在编写C程序时可根据 需要,查阅有关系统的函数使用手册。 1.数学函数 使用数学函数时,应该在源文件中使用预编译命令: #include或#include "math.h" 函数名函数原型功能返回值 acos double acos(double x);计算arccos x的值,其中-1<=x<=1计算结果 asin double asin(double x);计算arcsin x的值,其中-1<=x<=1计算结果 atan double atan(double x);计算arctan x的值计算结果 atan2double atan2(double x, double y);计算arctan x/y的值计算结果 cos double cos(double x);计算cos x的值,其中x的单位为弧度计算结果 cosh double cosh(double x);计算x的双曲余弦cosh x的值计算结果 exp double exp(double x);求e x的值计算结果

c语言实验5函数

实验5 函数 1.实验目的和要求:参见实验指导书实验八 2.实验内容和步骤: 实验内容:实验指导书中的实验八 实验步骤: 2.1.实验内容的第1题,通过本题,了解到要在单步调试时能够观察自定义的函数内部变量变化情况,单步调试如何操作: “组建”→“开始调试”→“Step Into”→按F10一步一步调试F11进入函数内部调试 提问(1),请在下面粘贴运行结果画面: 实参a是否为同一变量?不是 提问(2),请请在下面粘贴运行结果画面:

提问(3),观察结果有何变化? 出现乱码 通过本题,可以得出什么结论? 实参一般取全局变量,当全局变量和局部变量都存在时实参优先取局部变量,当需要取外部变量时应在主函数内定义变量时前面加extern 2.2 实验内容部分第2题源程序代码,请贴图: #include int prime(int n) { int i; for(i=2;i

程序运行结果画面,请贴图:

2.4 选做题,若做了,请在下面给出源程序代码贴图及运行结果贴图

2.5选做题,若做了,请在下面给出源程序代码贴图及运行结果贴图 3.实验小结

C语言常见基本词汇及词汇解释

C语言常用基本词汇及其他提示语运算符与表达式: 1.constant 常量 2. variable 变量 3. identify 标识符 4. keywords 关键字 5. sign 符号 6. operator 运算符 7. statement语句 8. syntax 语法 9. expression 表达式 10. initialition初始化 11. number format 数据格式 12 declaration 说明 13. type conversion 类型转换 14.define 、definition 定义 条件语句: 1.select 选择 2. expression 表达式 3. logical expression 逻辑表达式 4. Relational expression 关系表达式 5.priority优先

6. operation运算 7.structure 结构 循环语句: 1.circle 循环 2. condition 条件 3. variant 变量 4. process过程 5.priority优先 6. operation运算 数组: 1. array 数组 2. reference 引用 3. element 元素 4. address 地址 5. sort 排序 6. character 字符 7. string 字符串 8. application 应用函数: 1.call 调用 2.return value 返回值 3.function 函数

4. declare 声明 5. `parameter 参数 6.static 静态的 7.extern 外部的 指针: 1. pointer 指针 2. argument 参数 3. array 数组 4. declaration 声明 5. represent 表示 6. manipulate 处理 结构体、共用体、链表: 1 structure 结构 2 member成员 3 tag 标记 4 function 函数 5 enumerate 枚举 6 union 联合(共用体) 7 create 创建 8 insert 插入 9 delete 删除 10 modify 修改

C语言函数习题及答案

第6章函数习题 一、选择题 1. 一个完整的C源程序是【】。 A)要由一个主函数或一个以上的非主函数构成 B)由一个且仅由一个主函数和零个以上的非主函数构成 C)要由一个主函数和一个以上的非主函数构成 D)由一个且只有一个主函数或多个非主函数构成 2. 以下关于函数的叙述中正确的是【】。 A)C语言程序将从源程序中第一个函数开始执行 B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D)main可作为用户标识符,用以定义任意一个函数 3. 以下关于函数的叙述中不正确的是【】。 A)C程序是函数的集合,包括标准库函数和用户自定义函数 B)在C语言程序中,被调用的函数必须在main函数中定义 C)在C语言程序中,函数的定义不能嵌套 D)在C语言程序中,函数的调用可以嵌套 4. 在一个C程序中,【】。 A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现 C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位置 5. 若在C语言中未说明函数的类型,则系统默认该函数的数据类型是【】 A)float B)long C)int D)double 6. 以下关于函数叙述中,错误的是【】。 A)函数未被调用时,系统将不为形参分配内存单元 B)实参与形参的个数应相等,且实参与形参的类型必须对应一致 C)当形参是变量时,实参可以是常量、变量或表达式 D)形参可以是常量、变量或表达式 7. C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是 【】。 A)参数的形实(哑实)结合 B)函数返回值 C)全局变量 D)同名的局部变量 8. 若函数调用时参数为基本数据类型的变量,以下叙述正确的是【】。 A)实参与其对应的形参共占存储单元 B)只有当实参与其对应的形参同名时才共占存储单元 C)实参与对应的形参分别占用不同的存储单元 D)实参将数据传递给形参后,立即释放原先占用的存储单元

C语言实验六(函数)

哈尔滨理工大学实验报告 学院系部课程名称结构化程序设计(C) 姓名E-mail 指导教师李胜利联系方式班级学号 实验顺次06 实验名称函数的调用和递归调用 实验目的1.学习自定义函数,并能够进行函数调用,深入理解参数传递的机 制。 2.熟悉怎样利用函数实现指定的功能。 3.熟悉函数递归调用的算法设计和程序编制。 实验内容1.编写一个函数,求一下分段函数的值。 +1, x>1, f(x)= -1, x<-1, 2.编写一个判断某整数是是否为素数的函数,若是,返回值为1; 若不是,返回值为0。在main函数中输入一个整数,输出该数是否是素数。 3.求方程a的根,从主函数输入a、b、c的值,用4 个函数分别求出当a=0;和a≠0且-4ac大于0,等于0,小于0时的跟并输出结果。 4.利用递归函数求1到100之间所有整数的和。 5.利用递归函数求斐波那契数列第30项的值。 解题思路、算法描述或实验步骤1.定义变量,输入值,分范围调用函数,输出值。 2.定义变量,定义函数判断是否为素数,是返回1,否则返回0 3.定义变量,输出a,b,c,判断a是否为零,再判断b*b-4*a*c的值, 分布定义出函数。 4.定义变量,输入值100,定义函数。当x>=1时,y=fun(x-1)+x;递 归出口为y=0。 定义变量,输入值30,定义函数,定义x为1和2时,y的值为1。x>2时进行递归完成y=fun(x-1)+fun(x-2)。

实验结果 1. #include int main() { double fun(double x); double a,b; scanf("%lf",&a); b=fun(a); printf("%f",b); printf("\n"); return 0; } double fun(double a) { double result; if(a>1) { result = a*a+1; } else if(a>=-1 &0& a<=1) { result = a*a; } else { result = a*a-1; } return result; } 2. #include int main() { int sushu(int x); int a,b; printf("Please input a:");

相关文档