1.分级编写制定求数组a中最大因素的函数maxvalue(int
a[ ],int n卡塔尔(قطر‎和求数组a中幽微成分的函数minvalue(int
a[ ],int n卡塔尔国,并将求得的最大值和最小值作为相应函数的重回值。编写main(
State of Qatar函数,实现以下职能:

「C语言」「例题」函数,c语言例题

    本篇搜集《C语言程序设计教程》第八章“函数”的具有例题。

 

澳门新葡萄京所有网站 1 1
#include <stdio.h> 2 3 //求矩形面积 4 5 print_star()/*
打字与印刷星号个数 */ 6 { 7 int i; 8 for(i=0;i<55;i++) 9 printf(“*”); 10
printf(“n”); 11 } 12 13 float area(float a,float b)/* 求矩形面积函数
*/ 14 { 15 float s; 16 s=a*b; 17 return s; 18 } 19 20 int main()/*
主函数 */ 21 { 22 float a,b,s; 23 print_star(); 24 printf(“please
input a and b:n”); 25 scanf(“%f,%f”,&a,&b); 26 s=area(a,b); 27
printf(“area=%.2fn”,s); 28 print_star(卡塔尔(قطر‎; 29 return 0; 30 } 8.1 求矩形面积

 

澳门新葡萄京所有网站 2 1
#include <stdio.h> 2 3 //无参函数定义举例 4 5 output(卡塔尔国 6 { 7
printf(“***********************n”); 8 printf(”
How are you! n”); 9
printf(“***********************n”卡塔尔(قطر‎; 10 } 11 12
int main(卡塔尔 13 { 14 output(卡塔尔; 15 return 0; 16 } 8.2 无参函数定义比方

 

澳门新葡萄京所有网站 3 1
#include <stdio.h> 2 #define PI 3.1415926 3 4
//求半径为r的圆的面积 5 6 float a(float r卡塔尔 7 { 8 return(PI*r*r卡塔尔国; 9 }
10 11 int main(卡塔尔 12 { 13 float r; 14 printf(“请输入圆的半径:”卡塔尔; 15
scanf(“%f”,&r卡塔尔国; 16 printf(“area=%f”,a(r卡塔尔卡塔尔; 17 return 0; 18 } 8.3 求半径为r的圆的面积

 

澳门新葡萄京所有网站 4 1
#include <stdio.h> 2 3 //函数表明式调用 4 5 max(int x,int y卡塔尔 6 {
7 int z; 8 z=(x>y卡塔尔(قطر‎?x:y; 9 return(zState of Qatar; 10 } 11 12 int main(卡塔尔(قطر‎ 13 { 14
int a,b,m; 15 scanf(“%d,%d”,&a,&b卡塔尔(قطر‎; 16 m=max(a,b卡塔尔;/*
max(a,b卡塔尔(قطر‎作为表达式出现在赋值号侧边 */ 17 printf(“max=%d”,m卡塔尔; 18 return
0; 19 } 8.4 函数表达式调用

 

澳门新葡萄京所有网站 5 1
#include <stdio.h> 2 3 //函数表明式调用出今后实参表中 4 5 max(int
x,int y卡塔尔国 6 { 7 int z; 8 z=(x>yState of Qatar?x:y; 9 return(z卡塔尔; 10 } 11 12 int
main(卡塔尔 13 { 14 int a,b,c,m; 15 scanf(“%d,%d,%d”,&a,&b,&c卡塔尔国; 16
m=max(max(a,b卡塔尔(قطر‎,cState of Qatar; 17 printf(“max=%d”,m卡塔尔(قطر‎; 18 return 0; 19 } 8.5 函数表达式调用出今后实参表中

 

澳门新葡萄京所有网站 6 1
#include <stdio.h> 2 3
//将客户输入的华氏温度换算成摄氏温度输出。华氏温度与摄氏温度的折算公式为:C=(5/9State of Qatar*(F-32)
4 5 int ftoc(float f) 6 { 7 return (5.0/9.0)*(f-32); 8 } 9 10 int
main(卡塔尔国 11 { 12 float f; 13 printf(“请输入四个华氏温度:n”State of Qatar; 14
scanf(“%f”,&f卡塔尔国; 15 printf(“摄氏温度为:%d”,ftoc(f卡塔尔国卡塔尔国; 16 return 0; 17 }
8.6
将顾客输入的华氏温度换算成摄氏温度输出

 

澳门新葡萄京所有网站 7 1
#include <stdio.h> 2 3 //实参预形参之间单向的值传递 4 5 int
main(卡塔尔(قطر‎ 6 { 7 int a=3,b=5; 8 swap(a,b卡塔尔; 9 printf(“a=%d,b=%d”,a,b卡塔尔; 10
return 0; 11 } 12 13 void swap(int x,int y卡塔尔 14 { 15 int t; 16 t=x; 17
x=y; 18 y=t; 19 } 8.7
实参加形参之间单向的值传递

 

澳门新葡萄京所有网站 8 1
#include <stdio.h> 2 3 //实参的求职顺序 4 5 int main(卡塔尔 6 { 7 int
i=3,p; 8 p=f(i,++i,++i卡塔尔;/* 函数调用 */ 9 //Turbo
C系统按从右至左的顺序求实参的值,也正是(5,5,4卡塔尔 10 printf(“%d”,p卡塔尔国; 11
return 0; 12 } 13 14 int f(int a,int b,int c卡塔尔国/* 函数定义 */ 15 { 16
printf(“%d %d %dn”,a,b,c卡塔尔; 17 return(a+b+c卡塔尔; 18 } 8.8 实参的求职顺序

 

澳门新葡萄京所有网站 9 1
#include <stdio.h> 2 3 //数组成分作为函数的形参 4 5 float
max(float x,float y卡塔尔(قطر‎ 6 { 7 if(x>y) return x; 8 else return y; 9 } 10
11 int main(State of Qatar 12 { 13 float
m,a[10]={12.3,105,34.5,50,67,9,78,98,89,-20}; 14 int k; 15 m=a[0];
16 for(k=1;k<10;k++) 17 m=max(m,a[k]); 18 printf(“%2.fn”,m卡塔尔国; 19
return 0; 20 } 8.9
数组成分作为函数的形参

 

澳门新葡萄京所有网站 10 1
#include <stdio.h> 2 3
//编写冒泡排序函数,对主函数中输入的九冬整数按由大到小的意气风发后生可畏实行排序。 4
5 sort(int b[10],int n) 6 { 7 int i,j,t; 8 for(i=0;i<n-1;i++) 9
for(j=0;j<n-i-1;j++) 10 if(b[j]<b[j+1])/*
b[j]和b[j+1]交换 */ 11 { 12 t=b[j]; 13 b[j]=b[j+1]; 14
b[j+1]=t; 15 } 16 } 17 18 int main() 19 { 20 int a[10],i; 21
printf(“Please input 10 numbers:n”); 22 for(i=0;i<10;i++) 23
scanf(“%d”,&a[i]); 24 sort(a,10);/* 调用函数对数组进行排序 */ 25
printf(“Sorted data is:n”); 26 for(i=0;i<10;i++) 27 printf(“%d
“,a[i]); 28 printf(“n”卡塔尔国; 29 return 0; 30 } 8.10 编写冒泡排序函数

 

澳门新葡萄京所有网站 11 1
#include <stdio.h> 2 3
//求3*4的矩阵中享有因素的最大值,供给用函数来落到实处 4 5 max(int
b[][4]) 6 { 7 int i,j,k,max1; 8 max1=b[0][0]; 9
for(i=0;i<3;i++) 10 for(j=0;j<4;j++) 11 if(b[i][j]>max1) 12
max1=b[i][j]; 13 return (max1); 14 } 15 16 int main() 17 { 18 int
m,a[3][4]={5,16,30,40,23,4,156,8,1,3,50,37}; 19 m=max(a); 20
printf(“max is %dn”,m); 21 return 0; 22 } 8.11
求3*4的矩阵中有所因素的最大值,要求用函数来兑现

 

澳门新葡萄京所有网站 12 1
#include <stdio.h> 2 3
//输入五个整数,按从小到大的相继输出,调用swap函数达成变量值的置换。 4 5
swap(int a1,int a2卡塔尔国 6 { 7 int a; 8 a=a1; 9 a1=a2; 10 a2=a;/*
交换a1和a2,m和n不变 */ 11 } 12 13 int main() 14 { 15 int m,n; 16
printf(“Input m,n:”); 17 scanf(“%d%d”,&m,&n); 18 if(m>n)
swap(m,n);/* 实参传送m和n的值 */ 19 printf(“Sorted:%d %d n”,m,n卡塔尔; 20
return 0; 21 } 8.12
输入多少个整数,按从小到大的各类输出,调用swap函数达成变量值的置换

 

澳门新葡萄京所有网站 13 1
#include <stdio.h> 2 3 //对客户定义的被调函数作评释 4 5 int
main(卡塔尔 6 { 7 float add(float x,float y卡塔尔国;/* 对被调函数的注明 */ 8 float
a,b,c; 9 scanf(“%f,%f”,&a,&b); 10 c=add(a,b); 11 printf(“sum is %f”,c);
12 return 0; 13 } 14 15 float add(float x,float y)/* 函数定义 */ 16 {
17 return (x+y卡塔尔国; 18 } 8.13
对顾客定义的被调函数作申明

 

澳门新葡萄京所有网站 14 1
#include <stdio.h> 2 #include <math.h> 3 #define PI
3.1415926 4 5 //函数的嵌套调用 6 7 float area_ring(float x,float y); 8
float area(float r); 9 10 int main() 11 { 12 float r,r1; 13
printf(“input two figures:n”); 14 scanf(“%f,%f”,&r,&r1); 15
printf(“area_ring is %f “,area_ring(r,r1)); 16 return 0; 17 } 18 19
float area_ring(float x,float y) 20 { 21 float c; 22
c=fabs(area(x)-area(y)); 23 return c; 24 } 25 26 float area(float r) 27
{ 28 return (PI*r*rState of Qatar; 29 } 8.14
函数的嵌套调用

 

澳门新葡萄京所有网站 15 1
#include <stdio.h> 2 3 //用递归方法n! 4 5 long int fac(unsigned
int n) 6 { 7 long int f; 8 if(n==0) return 1; 9 f=fac(n-1)*n; 10
return(f); 11 } 12 13 int main() 14 { 15 unsigned int n; 16
printf(“input a unsigned interger number:n”); 17 scanf(“%d”,&n); 18
printf(“%d!=%10ld”,n,fac(n卡塔尔(قطر‎卡塔尔(قطر‎; 19 return 0; 20 } 8.15 用递归方法n!

 

澳门新葡萄京所有网站 16 1
#include <stdio.h> 2 3 //利用递归算法求Fibonacci数列 4 5 long
f(int n卡塔尔 6 { 7 long s; 8 if(n==1 || n==2State of Qatar 9 return 1; 10
s=f(n-1卡塔尔(قطر‎+f(n-2卡塔尔; 11 return s; 12 } 13 14 int main(State of Qatar 15 { 16 int n; 17
printf(“please input n:n”); 18 scanf(“%d”,&n); 19 if(n<0) 20
printf(“error!n”State of Qatar; 21 else 22
printf(“第%d项Fibonacci数列的值为%ld”,n,f(n卡塔尔国卡塔尔国; 23 return 0; 24 } 8.16 利用递归算法求Fibonacci数列

 

澳门新葡萄京所有网站 17 1
#include <stdio.h> 2 3 //汉诺塔难题 4 5 void haoni(int n,char
x,char y,char z卡塔尔国 6 { 7 if(n==1卡塔尔 printf(“%c->%cn”,x,z); 8 else 9 {
10 haoni(n-1,x,z,y);/* 递归调用 */ 11 printf(“%c->%cn”,x,z); 12
haoni(n-1,y,x,z);/* 递归调用 */ 13 } 14 } 15 16 int main() 17 { 18 int
m; 19 printf(“Input the number of disks:”); 20 scanf(“%d”,&m); 21
printf(“The steps to moving %3d disks:n”,m卡塔尔(قطر‎; 22 haoni(m,’A’,’B’,’C’State of Qatar;
23 return 0; 24 } 8.17 Hanno塔难点

 

澳门新葡萄京所有网站 18 1
#include <stdio.h> 2 #define PI 3.14 3 4
//已知圆的半径,求周长、面积 5 6 float c,area; 7 8 void f(float r卡塔尔(قطر‎ 9 {
10 c=2*PI*r; 11 area=PI*r*r; 12 } 13 14 int main() 15 { 16 float r;
17 printf(“input radius:”); 18 scanf(“%f”,&r); 19 f(r); 20
printf(“%f,%fn”,c,area卡塔尔; 21 return 0; 22 } 8.18 已知圆的半径,求周长、面积

 

澳门新葡萄京所有网站 19 1
#include <stdio.h> 2 3 //比较七个数,输出相当的大者 4 5 int a=3,b=5;
6 7 max(int x,int yState of Qatar 8 { 9 int c; 10 c=x>y?x:y; 11 } 12 13 int main(卡塔尔国14 { 15 int a=8; 16 printf(“%dn”,max(a,bState of Qatar卡塔尔(قطر‎; 17 return 0; 18 } 8.19 相比多少个数,输出很大者

 

澳门新葡萄京所有网站 20 1
#include <stdio.h> 2 3 //静态局部变量 4 5 int n=1; 6 7 func(State of Qatar 8 {
9 static int a=2;/* 静态局地变量,与main(State of Qatar函数中的a差异 */ 10 a+=2; 11
++n; 12 printf(“func:n=%d a=%dn”,n,a); 13 } 14 15 int main() 16 { 17
static int a;/* 静态局部变量,起头化为0 */ 18 printf(“main:n=%d
a=%dn”,n,a); 19 func(); 20 a+=10; 21 printf(“main:n=%d a=%dn”,n,a);
22 func(); 23 printf(“main:n=%d a=%dn”,n,a卡塔尔(قطر‎; 24 return 0; 25 } 8.20 静态局地变量

 

澳门新葡萄京所有网站 21#include
<stdio.h> //自动变量的施用 func(int n卡塔尔国 { auto int a=2;/*
自动变量a,每调用一回都要再一次赋初值 */ a+=2; ++n; printf(“func:n=%d
a=%dn”,n,a); } int main() { int a=0;/* 自动变量,与func(State of Qatar分裂 */
func(1); printf(“main:n=1 a=%dn”,a); a+=10; func(2); printf(“main:n=1
a=%dn”,a卡塔尔(قطر‎; return 0; } 8.21
自动变量的行使

 

澳门新葡萄京所有网站 22 1
#include <stdio.h> 2 3 //贮存器变量 4 5 int main(卡塔尔 6 { 7 register
int temp=0,j; 8 int i; 9 for(i=1;i<100;i++卡塔尔(قطر‎ 10 { 11
for(j=0;j<1000;j++卡塔尔 12 temp+=j; 13 printf(“i=%d temp%d”,i,temp卡塔尔(قطر‎; 14
temp%=1; 15 } 16 return 0; 17 } 8.22
存放器变量

 

澳门新葡萄京所有网站 23 1
#include <stdio.h> 2 3 //外界变量注脚语句 4 5 int main(卡塔尔(قطر‎ 6 { 7
extern int a;/* 外界援用申明 */ 8 printf(“%dn”,aState of Qatar; 9 return 0; 10 }
11 12 int a=5; 8.23 外界变量注脚语句

 

澳门新葡萄京所有网站 24 1
#include <stdio.h> 2 3 //下边程序由四个文件组成,请剖判运营结果 4
5 /* 文件一 */ 6 int x=10;/* 定义非静态全局变量x,y */ 7 int y=10; 8
9 add() 10 { 11 y=10+x; 12 x=x*2; 13 } 14 15 int main() 16 { 17 extern
sub();/* 对外界函数sub举行援引证明 */ 18 x+=5; 19 add(); 20 21 22 23
/* 此段内容没印制上 */ 24 25 26 return 0; 27 } 8.24
上面程序由七个文件组成,请深入分析运行结果

 

澳门新葡萄京所有网站 25 1
#include <stdio.h> 2 3 //实现系统提供的字符串复制函数
strcpy(卡塔尔国的满贯效果与利益 4 5 char *strcpy(char*s1,char *s2) 6 { 7 char
*p=s1;/* 用p保存s1收下来的实参字符数组的首地址 */ 8
while(*s1++=*s2++);/* 当s2指到’’时,先赋值达成后循环甘休 */ 9
return(p);/* 通过函数名重返指针值 */ 10 } 11 12 int main() 13 { 14
char s[20]; 15 printf(“%sn”,strcpy(s,”Welocme to you!”));/*
输出重临值指向的源委 */ 16 return 0; 17 } 8.25 达成系统提供的字符串复制函数
strcpy(卡塔尔的百分百职能

 

澳门新葡萄京所有网站 26 1
#include <stdio.h> 2 3
//达成系统提供的字符串连接函数strcat(s1,s2卡塔尔国 4 5 char *strcat(char
*s1,char *s2) 6 { 7 char *p=s1;/*
用p保存s1抽取来的实参字符数组的首地址 */ 8 while(*s1) s1++;/*
s1指到’’时循环甘休 */ 9 while(*s1++=*s2++);/*
当s2指到’’时,先赋值完成后循环截至 */ 10 return(p);/*
通过函数名再次回到指针值 */ 11 } 12 13 int main() 14 { 15 char
s[20]=”Hello,”; 16 printf(“%sn”,strcat(s,”Welcome to you!”State of QatarState of Qatar; 17
return 0; 18 } 8.26
完毕系统提供的字符串连接函数strcat(s1,s2State of Qatar

 

澳门新葡萄京所有网站 27 1
#include <stdio.h> 2 3 //指向函数的指针程序例如 4 5 int f(int x卡塔尔国6 { 7 return 3*x*x+5*x-7; 8 } 9 10 int main() 11 { 12 int (*p)();/*
定义p为指向函数的指针变量 */ 13 int a; 14 p=f;/*
对指向性函数的指针变量p赋值 */ 15 printf(“Input x=”); 16 scanf(“%d”,&a);
17 printf(“(*p)(a)=%dn”,(*p)(a));/*
用函数指针参数调用函数,也正是f(a卡塔尔(قطر‎ */ 18
printf(“p(2a)=%dn”,p(2*a));/* p(a卡塔尔国以指针变量名代替函数名来调用 */
19 return 0; 20 } 8.27
指向函数的指针程序举例

 

澳门新葡萄京所有网站 28 1
#include <stdio.h> 2 3
//求本来数1~n的奇数和或偶数和,用指向函数的指针变量完结 4 5 int
evensum(int n卡塔尔/* 求自然数1~n中偶数的和 */ 6 { 7 int i,sum=0; 8
for(i=2;i<=n;i+=2) 9 sum+=i; 10 return sum; 11 } 12 13 int oddsum(int
n)/* 求自然数1~n中奇数的和 */ 14 { 15 int i,sum=0; 16
for(i=1;i<=n;i+=2) 17 sum+=i; 18 return sum; 19 } 20 21 int main() 22
{ 23 int n,sum,flag; 24 int (*p)(int);/*概念指向函数的指针变量*/ 25
printf(“input n:”); 26 scanf(“%d”,&n); 27 printf(“input flag(0 or 1):”);
28 scanf(“%d”,&flag);/* 输入标识 */ 29 if(flag==1) p=oddsum;/*
当flag为1时,p指向函数oddsum */ 30 else p=evensum;/*
当flag尾华1时,p指向函数evensum */ 31 sum=(*p)(n); 32
printf(“sum=%dn”,sumState of Qatar; 33 return 0; 34 } 8.28
求自然数1~n的奇数和或偶数和,用指向函数的指针变量完成

 

澳门新葡萄京所有网站 29 1
#include <stdio.h> 2 3 //用指向函数的指针变量作为函数的参数 4 5
int evensum(int n卡塔尔国/* 求自然数1~n中偶数的和 */ 6 { 7 int i,sum=0; 8
for(i=2;i<=n;i+=2) 9 sum+=i; 10 return sum; 11 } 12 13 int oddsum(int
n)/* 求自然数1~n中奇数的和 */ 14 { 15 int i,sum=0; 16
for(i=1;i<=n;i+=2) 17 sum+=i; 18 return sum; 19 } 20 21 int
result(int n,int (*p)(int)) 22 { 23 int sum; 24 sum=(*p)(n);/*
调用p所指向的函数 */ 25 return sum; 26 } 27 28 int main() 29 { 30 int
n,sum,flag; 31 printf(“input n:”); 32 scanf(“%d”,&n); 33 printf(“input
flag(0 or 1):”); 34 scanf(“%d”,&flag); 35 if(flag==1)
sum=result(n,oddsum); 36 else sum=result(n,evensum); 37
printf(“sum=%dn”,sum卡塔尔(قطر‎; 38 return 0; 39 } 8.29
用指向函数的指针变量作为函数的参数

 

澳门新葡萄京所有网站 30 1
#include <stdio.h> 2 #define N 30 3 4 //编写#include
<stdio.h> 5 #define N 30 6 7
//编写贰个单科战绩剖析总计程序,供给如下: 8
//(1State of Qatar从键盘输入N名同学的成绩 9 //(2卡塔尔求其平均分、最高分、最低分 10
//(3State of Qatar并总计各分数段人数和及格率 11 //(4卡塔尔(قطر‎对学员成绩举办降序排序 12
//(5卡塔尔使用菜单实现各职能 13 14 input(float s[],int n卡塔尔国 15 { 16 int i; 17
printf(“请输入%d名学子的成就:n”,n); 18 for(i=0;i<n;i++) 19
scanf(“%f”,&s[i]); 20 } 21 22 count(float s[],int n) 23 { 24 int
i,j,b[10]={0,0,0,0,0,0,0,0,0,0}; 25 int failure=0; 26
for(i=0;i<n;i++) 27 { 28 j=s[i]/10; 29 b[j]++; 30 } 31 printf(”
0-9 ,10-19,20-29,30-39,40-49,50-59,60-69,70-79,80-89,90-100n”); 32
for(i=0;i<10;i++) 33 printf(” %-4d”,b[i]); 34 for(i=0;i<6;i++)
35 failure+=b[i]; 36
printf(“n及格率:%2.f%%n”,(n-failure)/n*100); 37 } 38 39
avemaxmin(float s[],int n,float *aver,float *max,float *min) 40 {
41 int i; 42 float sum; 43 for(i=0;i<n;i++) 44 sum+=s[i]; 45
*min=s[0]; 46 *max=s[0]; 47 for(i=0;i<n;i++) 48
if(s[i]<s[0]) 49 *min=s[i]; 50 if(s[i]>s[0]) 51
*max=s[i+1]; 52 *aver=sum/n; 53 } 54 55 sort(float s[],int n) 56 {
57 int i,j,t; 58 for(i=0;i<n;i++) 59 for(j=0;j<n-i-1;j++) 60
if(s[j]<s[j+1]) 61 { 62 t=s[j]; 63 s[j]=s[j+1]; 64
s[j+1]=t; 65 } 66 } 67 68 output(float s[],int nState of Qatar 69 { 70 int i; 71
printf(“排序后的成就为:n”); 72 for(i=0;i<n;i++) 73 printf(“%.2f
“,s[i]); 74 printf(“n”); 75 } 76 77 int main() 78 { 79 int choice,n;
80 float s[N],aver,max,min; 81 do 82 { 83
printf(“1.输入N名同学战绩(必需先输入战表)n”State of Qatar; 84
printf(“2.求等分分、最高分、最低分n”卡塔尔; 85
printf(“3.支行计算人数和及格率n”); 86 printf(“4.排序n”State of Qatar; 87
printf(“0.脱离系统n”); 88 printf(“请选择(0~4卡塔尔:请输入选择:”卡塔尔; 89
scanf(“%d”,&choiceState of Qatar; 90 switch(choice卡塔尔国 91 { 92 case 1: 93
printf(“请输入学子人数:”卡塔尔; 94 scanf(“%d”,&nState of Qatar; 95 input(s,n卡塔尔(قطر‎; 96 break;
97 case 2: 98 avemaxmin(s,n,&aver,&max,&min卡塔尔; 99
printf(“平均分=%.2f,最高分=%.2f,最低分=%.2fn”,aver,max,min); 100
break; 101 case 3: 102 count(s,n); 103 break; 104 case 4: 105 sort(s,n);
106 output; 107 break; 108 case 0:break; 109 } 110 }while(choice!=0卡塔尔(قطر‎;
111 return 0; 112 },要求如下: 113 //(1卡塔尔国从键盘输入N名同学的大成 114
//(2卡塔尔(قطر‎求其平均分、最高分、最低分 115 //(3卡塔尔国并总计各分数段人数和及格率 116
//(4卡塔尔对学生战表举行降序排序 117 //(5卡塔尔国使用菜单实现各职能 118 119
input(float s[],int n卡塔尔国 120 { 121 int i; 122
printf(“请输入%d名学子的成就:n”,n); 123 for(i=0;i<n;i++) 124
scanf(“%f”,&s[i]); 125 } 126 127 count(float s[],int n) 128 { 129
int i,j,b[10]={0,0,0,0,0,0,0,0,0,0}; 130 int failure=0; 131
for(i=0;i<n;i++) 132 { 133 j=s[i]/10; 134 b[j]++; 135 } 136
printf(” 0-9
,10-19,20-29,30-39,40-49,50-59,60-69,70-79,80-89,90-100n”); 137
for(i=0;i<10;i++) 138 printf(” %-4d”,b[i]); 139 for(i=0;i<6;i++)
140 failure+=b[i]; 141
printf(“n及格率:%2.f%%n”,(n-failure)/n*100); 142 } 143 144
avemaxmin(float s[],int n,float *aver,float *max,float *min) 145 {
146 int i; 147 float sum; 148 for(i=0;i<n;i++) 149 sum+=s[i]; 150
*min=s[0]; 151 *max=s[0]; 152 for(i=0;i<n;i++) 153
if(s[i]<s[0]) 154 *min=s[i]; 155 if(s[i]>s[0]) 156
*max=s[i+1]; 157 *aver=sum/n; 158 } 159 160 sort(float s[],int n)
161 { 162 int i,j,t; 163 for(i=0;i<n;i++) 164 for(j=0;j<n-i-1;j++)
165 if(s[j]<s[j+1]) 166 { 167 t=s[j]; 168 s[j]=s[j+1]; 169
s[j+1]=t; 170 } 171 } 172 173 output(float s[],int n卡塔尔国 174 { 175 int
i; 176 printf(“排序后的成就为:n”); 177 for(i=0;i<n;i++) 178
printf(“%.2f “,s[i]); 179 printf(“n”); 180 } 181 182 int main() 183
{ 184 int choice,n; 185 float s[N],aver,max,min; 186 do 187 { 188
printf(“1.输入N名同学战绩(必需先输入战绩)n”卡塔尔; 189
printf(“2.求平分分、最高分、最低分n”卡塔尔; 190
printf(“3.分层总结人数和及格率n”); 191 printf(“4.排序n”卡塔尔; 192
printf(“0.脱离系统n”); 193 printf(“请选择(0~4卡塔尔(قطر‎:请输入选取:”State of Qatar; 194
scanf(“%d”,&choiceState of Qatar; 195 switch(choice卡塔尔 196 { 197 case 1: 198
printf(“请输入学子人数:”卡塔尔(قطر‎; 199 scanf(“%d”,&n卡塔尔; 200 input(s,n卡塔尔; 201
break; 202 case 2: 203 avemaxmin(s,n,&aver,&max,&min卡塔尔; 204
printf(“平均分=%.2f,最高分=%.2f,最低分=%.2fn”,aver,max,min); 205
break; 206 case 3: 207 count(s,n); 208 break; 209 case 4: 210 sort(s,n);
211 output; 212 break; 213 case 0:break; 214 } 215 }while(choice!=0State of Qatar;
216 return 0; 217 } 8.30
叁个单科成绩解析计算程序

 

澳门新葡萄京所有网站 31 1
#include <stdio.h> 2 3
//通过调用贰个函数,将整型数组的具备因素都加3 4 5 void add(int b[],int
n) 6 { 7 int i; 8 for(i=0;i<n;i++) 9 b[i]+=3; 10 } 11 12 int main()
13 { 14 int i,a[8]={1,2,3,4,5,6,7,8}; 15 add(a,8); 16
for(i=0;i<8;i++) 17 printf(“%4d”,a[i]卡塔尔(قطر‎; 18 return 0; 19 } 8.31
通过调用四个函数,将整型数组的有所因素都加3

 

澳门新葡萄京所有网站 32 1
#include <stdio.h> 2 3 //利用插入排序法将11个字符从小到大进展排序
4 5 insert(char s[]) 6 { 7 int i,j,t; 8 for(i=1;i<9;i++) 9 { 10
t=s[i]; 11 j=i-1; 12 while((j>=0)&&(t<s[j])) 13 { 14
s[j+1]=s[j]; 15 j–; 16 } 17 s[j+1]=t; 18 } 19 } 20 21 int main()
22 { 23 char a[11]; 24 int i; 25 printf(“Input 10 character:”); 26
for(i=0;i<10;i++) 27 a[i]=getchar(); 28 a[i]=’’;/*
在拾贰个字符前边加上’’,产生字符串 */ 29 insert(a); 30 printf(“Sorted
character is:%sn”,a);/* 将已排序的11个字符输出 */ 31 return 0; 32 }
8.32
利用插入排序法将拾叁个字符从小到大进展排序

 

澳门新葡萄京所有网站 33 1
#include <stdio.h> 2 3
//十进制与其他进制(二至九进制)数间的并行转变,程序能够自动帮助顾客改正输入错误
4 5 long change(int a[],int len,int b) 6 /*
把输入的字符数字转变来十进制数字 */ 7 { 8 int i,k=1; 9 long num=0; 10
for(i=1;i<=len;i++) 11 { 12 num=num+a[i]*k; 13 k=k*b;/*
k代表权值 */ 14 } 15 return num; 16 } 17 18 ten_to_oth()/*
十进制转变为任何进制 */ 19 { 20 int sum,n,i=0,j,arr[80]; 21
printf(“Please input a Dec_num:”);/* 输入10进制数 */ 22
scanf(“%d”,&sum); 23 printf(“Please input the base:”);/*
输入想要转变的进制 */ 24 scanf(“%d”,&n); 25 do 26 { 27 i++; 28
arr[i]=sum%n;/* 从下标1发端计数 */ 29 sum=sum/n; 30 if(i>=80) 31
printf(“overflow”); 32 }while(sum!=0); 33 printf(“The result is:”); 34
for(j=i;j>0;j–) 35 printf(“%d”,arr[j]); 36 printf(“n”); 37 } 38
39 oth_to_ten()/* 其余进制转变为十进制 */ 40 { 41 int
base,i,num,arr[80]; 42 long sum=0; 43 char ch; 44 /*
想将几进制数转换到十进制数,请输入 */ 45 printf(“Please input the base
you want to change :”); 46 scanf(“%d”,&base); 47 /* 请输入该数 */ 48
printf(“Please input number:”); 49 scanf(“%d”,&num); 50
for(i=1;num!=0;i++) 51 { 52 arr[i]=num%10;/* 从下标1最初计数 */ 53
num=num/10; 54 } 55 sum=change(arr,i-1,base); 56 printf(“The result
is:%ldn”,sum); 57 } 58 59 int main() 60 { 61 int flag=1; 62
while(flag!=0) 63 { 64 printf(“1:ten_to_othn”); 65
printf(“2:oth_to_tenn”); 66 printf(“0:exitn”); 67 printf(“Enter a
number:”); 68 scanf(“%d”,&flag); 69 switch(flag) 70 { 71 case
1:ten_to_oth();break;/* 其余进制转变为十进制 */ 72 case
2:oth_to_ten();break;/* 十进制转换为别的进制 */ 73 case 0:return 0;
74 } 75 } 76 return 0; 77 } 8.33进制调换器

 

澳门新葡萄京所有网站 34 1
#include <stdio.h> 2 #include <math.h> 3 4
/*二个素数经过狂妄次交换个方式,任然为素数,则称其为相对素数, 5
举个例子,13(31State of Qatar就是叁个相对素数。求两位的有所相对素数并出口。*/ 6 7 int
prime(int n)/* 判定贰个数是否是素数 */ 8 { 9 int i; 10 if(n<=1)/*
小于2不是素数 */ 11 return 0; 12 else if(n==2)/* 2是素数 */ 13 return
1; 14 else/* 大于2要看清是否 */ 15 { 16 for(i=2;i<sqrt(n);i++) 17
if(n%i==0)/* 风姿洒脱旦能整除i,则n不是素数 */ 18 return 0; 19 return 1;/*
如鼓苤葱姓馓跤锞洌韓一直没被i整除过,是素数 */ 20 } 21 } 22 23 int
ab_prime(int m)/* 决断一个位数是不是是绝对素数 */ 24 { 25 int a; 26
a=(m%10)*10+m/10;/* 拿到换个方式后的数 */ 27 if(prime(m)&&prime(a))/*
m和a都是素数,则m为相对素数,不然不是 */ 28 return 1; 29 else 30 return
0; 31 } 32 33 int main() 34 { 35 int i; 36 for(i=10;i<100;i++) 37
if(ab_prime(i))/* 循环从10到99找相对素数 */ 38 printf(“%d,”,i);/*
是相对素数则输出 */ 39 return 0; 40 } 8.34 相对素数的剖断

 

本篇搜罗《C语言程序设计教程》第八章函数的富有例题。 1 #include stdio.h
2 3 // 求矩形面积 4 5 print_sta…

1前后相继模块化

1卡塔尔国        输入十叁个整数给数组a的各因素;

 

2)        输出a中的10个数。

在前后相继设计进度中山大学部程序要比我们事先设计的顺序繁复的多,守旧的规划方法是“自定向下,稳步求精”的进程。该进程便是将一个大的难题遵照档案的次序分解成多少个方便人民群众解决的小标题,直至各种效率模块,各个独立的作用模块可以单独设计,最终将具备的作用模块有机的咬合成完全的程序。

3)        调用maxvalue(int
a[ ],int nState of Qatar求数组a中的最大值,并出口;

 

4)        调用minvalue(int
a[ ],int n卡塔尔 求数组a中的最小值,并出口;;

事例:总结出该日是该年的第几天。

#include<stdio.h>
void main()
{int i,c,b,a[10];
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
for(i=0;i<10;i++)
printf(“%d”,a[i]);
c=maxvalue(a,10);
printf(“max=%d”,c);
b=minvalue(a,10);
printf(“min=%d”,b);
}
int maxvalue(int a[],int n)
{int y;
y=a[0];
for(i=0;i<n;i++)
if(y<a[i])y=a[i];
return y;}
int minvalue(int a[],int n)
{int y;
y=a[0];
for(i=0;i<10;i++)
if(y>a[i])y=a[i];
return y;}

 

难题得以表明为:获取输入;剖断平年闰年;推断各种月的总天数;得到总天数;

 

事例代码:

 

 

#include “stdio.h” 

/*(1卡塔尔(قطر‎剖断闰年*/ 

int leap(int year) 

{int flag; 

if (year%4==0&&year%100!=0||year%400==0) 

   flag=1; 

else  flag=0; 

return flag; 

/*(2卡塔尔国求某月的运气*/ 

int month_days(int year,int month){ 

   int d; 

   switch(month)  { 

      case 1: 

      case 3: 

      case 5: 

      case 7: 

      case 8: 

      case 10: 

      case 12:d=31;break; 

      case 2: d=leap(year)?29:28;break;    
/*由此调用函数总括,闰年29天,平年28天*/ 

      default:d=30;break; 

  } 

  return d; 

/*(3卡塔尔求天数和。*/ 

int days(int  year,int month,int day){ 

  int i,ds=0; 

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

    ds=ds+month_days(year,i);      
/*函数days调用函数month_days,求各月份相应的造化*/ 

    ds=ds+day; 

 return ds; 

/*主程序中调用种种模块来计量天数的和*/ 

void main() 

{ int year,month,day,t_day;  

    printf(“input year-month-day:n”); 

    scanf(“%d-%d-%d”,&year,&month,&day); 

  /*函数scanf作为输入模块是系统定义的,

     主函数main能够直接调用它*/ 

  t_day=days(year,month,day); /*求天数和*/ 

  printf(“%d-%d-%d is %dth day of the year!n”,year,month,day,t_day); 

    /*函数printf作为输出模块也是系统定义,

       主函数main能够平昔调用*/ 

2函数的概念

 

2.1函数简要介绍:函数是C语言程序的中坚模块,函数平日能够从3中角度张开归类:

 

从函数定义角度:

 

1库函数:库函数由C系统提供,顾客无需定义,能够直接调用。

 

2客商自定义函数:客商自身编写的函数,在调用的函数中还必需对被调用函数举行项目表明技术运用。

 

从再次回到值角度看:

 

1有重回值的函数:有重返值的函数在被调用后将向调用者再次来到二个施行结果,那个结果正是再次回到值,客商在概念这种函数时应该申明重返值类型。

 

2无重回值函数:无重回值函数用于落成某项特定的成效,实践到位后不用回去函数值,客商定义时宣称这种函数的重回值为空类型,即void。

 

从数额传输来看:

 

1无参函数:无参函数是指函数在概念和调用中均不带参数,调用和被调用函数之间不开展参数字传送递。

 

2有参函数:参数包蕴格局参数和骨子里参数,在函数定义和认证时的参数称之为形参,调用时提交的函数称之为实参。

 

2.2函数的概念

 

概念的近似方式:

 

花色表达符 函数名(类型名 情势参数1,类型名 方式参数2,…..卡塔尔(قطر‎

 

{

 

函数体

 

}

 

函数名:是多个标示符,取名须要有含义、简短,同后生可畏源程序文件中不能重名。

 

项目表明符:值函数的回来值类型,使用void来钦定函数无重回值,再次回到值类型能够是着力项目也能够是指针、布局体和客商自定义类型。

 

花样参数:定义函数时的参数称之为情势参数,参数列表表达了参数的类型和个数,一下两种格局都是不易的:

 

int max(int a,intb){

 

Return 0;

 

}

 

int max(a,b)

 

int a,b;{

 

Return 0;

 

}

 

函数体:即函数具体成效的贯彻。

 

调用函数判定素数例子代码:

 

 

#include “math.h” 

main() {  

  int n; 

  int flag; 

  printf(“input n:n”); 

  scanf(“%d”,&n); 

  flag=prime(n);           /*函数调用*/ 

  if (flag)                 /*剖断再次来到值*/ 

     printf(“%d is prime.n”); 

  else  printf(“%d is not prime.n”); 

int prime (int n){ 

  int m; 

  for (m=2;m<=sqrt(n);m++) 

      if (n%m==0) return  0; 

  return 1; 

3函数调用

 

3.1函数调用的相近方式:

 

函数名(参数列表卡塔尔(قطر‎;

 

1有重回值的函数调用:

int max(int x,int y){

 

return x>y?x:y;

 

}

 

调用该函数:

 

a=max(a,b);

 

2无重返值的调用

 

void printstart(int n){//输出n个星号

 

int i;

 

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

 

printf(“*”);

 

}

 

}

 

调用该函数:

 

pirntstart(5); //输出5个星号

 

3.2被调用函数的宣示和函数原型

 

除了scanf和printf四个函数外,任何系统标准函数的调用都必须要在本文件的上马用编写翻译预管理命令#include将函数所在的头文件音信包含到本文件中。比如:#include
“stdio.h”

 

比如被调用的函数是客商本身定义的函数,除了对函数功效的概念以外,常常还应在主调用函数或主调函数所在的源文件中对被调用函数实行宣示,其指标是提议被调用函数的回来值类型和参数的个数和类型,以便在调用该函数时系统按此举办检查。

 

声称函数的相近格式是:

 

类别标示符 函数名(参数类型1,参数类型2,…卡塔尔国;

 

调用函数和主调用函数的职位关系首要性分为三种状态:

 

1调用函数和主调用函数在同等文件中,且主调函数在调用函数的先头。

 

2调用函数和主调用函数在相仿文件中,且主调函数在调用函数的背后。

 

3调用函数和主调用函数不在同一文件中。

 

二种职位关系的例证代码

 

1被调用函数坐落于主函数之后:

 

 

#include  “stdio.h” 

main(){                    /*(1) main( )在sum()前面*/ 

int n;  

long p; 

long  sum(int);                 /*函数申明*/ 

scanf(“%d”,&n); 

p=sumt(n);                   /*函数调用*/ 

 printf(“n %ld”,p); 

long sum( int m){      /*函数定义*/ 

int i;  

long s=0; 

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

    s+=i; 

   return(s);              /*函数重回*/ 

 }   

2被调用函数在主函数从前:

#include  “stdio.h” 

long sum( int m){       /* 函数定义*/ 

int i; 

long s=1; 

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

s+=i; 

return(s); 

   } 

main(){ 

int n;  

long p;        /*不需函数证明*/ 

scanf(“%d”,&n); 

p=sum(n);              /*函数调用*/ 

printf(“n %ld”,p); 

3被调用函数在另贰个文件中,首先大家设sum(卡塔尔国函数存放在fun.c中,则编写主调用函数时需用include命令对被调用函数表明:

 

#include “fun.c”

 

main(){

 

int n=7;

 

n=sum(n);

 

}

 

4参数字传送递

 

4.1试样参数和骨子里参数

 

参数字传送递中的数据变化:

 

 

#include  “stdio.h” 

void fun(int num) {  

   num=20; 

   printf(“%dn”,num); 

main(){  

int x; 

x=10; 

fun(xState of Qatar; /(调用函数无重返值的函数fun*/ 

printf(“%dn”,x); 

运作结果:

 

20

 

10

 

函数fun有三个形参变量num,当main函数调用时,实参x的值传送到num,在fun函数中就算num被更换为20,不过并不影响x的值。

 

程序从main起首运维,那是x具有储存空间,初值为10,当fun函数被调用时,为形参分配空间,选取实参的值,流程转到调用函数fun中实行,为变量num重新赋值为20,次数赋值对实参未有影响,同期实参在fun函数中也不可用,函数调用停止后,形参空间撤消,流程再次回到。那正是值传递。

 

当函数有多少个参数时,在调用实参列表的求值顺序是并不明确的,区别的种类或者分裂,即使想知道本人系统的求值顺序能够接纳自增、自减来测量检验:

 

 

#include  “stdio.h” 

int f(int a,int b,int c) 

    { 

      int z; 

      z=a+b*c; 

      return z; 

    } 

main() 

   { 

     int x=3,y; 

     y=f(x,x++,x++);        /*由右至左对实参求值*/ 

     printf(“%dn”,y); 

    } 

运维结果:17.

 

4.2函数的再次来到值:多个函数的得以完毕都以含有一定的法力,不时函数推行完成后需求将施行结果重返给调用函数,这几个结果就能够经过重返值表现出来,再次回到值使用return语句来落实,具体魄式是:

 

return 表达式; 或return (表达式);

 

该语句的功力正是回到三个值给主调用函数,释放函数在实行进度中分配的富有空中,甘休被调用函数的运作,将流程序调节制交给主调函数。

 

比如未有再次来到值能够动用renturn ;来代替。

 

float fun(int n){

 

return n;

 

}

 

main(){

 

float x;

 

x=f(20);

 

printf(“%f”,x);

 

}

 

5数组作为函数的参数

 

当数组作为参数字传送递时,系统就能将用作实参的数组成分首地方传递给形参所表示的数组名,即参数字传送递时地址传递。

 

5.1朝气蓬勃维数组作为参数:一维数组名表示数组中下标为0的因素在内部存款和储蓄器中的伊始地址。假使数组a在内部存款和储蓄器中从二零零一地址起首寄放,则a的值为二零零零。2003是地方值,是指针型数据。

 

数组作为参数字传送递的事例代码:

 

 

#include  “stdio.h” 

void  input(int a[10],int n) {              /*输入函数*/ 

int i; 

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

   scanf(“%d”,&a[i]); 

printf(“n”); 

int maxa(int a[10],int n) {               /*求最大值函数*/ 

int i; 

int m; 

m=a[0]; 

a[1]=100; 

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

   if (m<a[i]) m=a[i]; 

return m; 

void print(int a[10],int n) {               /*输出函数*/ 

int i; 

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

   printf(“%4d”,a[i]); 

printf(“n”); 

void main() {  

int b[10]; 

int max; 

input(b,10); 

max=maxa(b,10); 

printf(“array max is %dn”,max); 

printf(“the array is :n”); 

print(b,10); 

地点传递正是形参和实参同不常候针对同二个地点,改正在改存款和储蓄单元上的数据。

 

6函数的嵌套调用

 

C语言中不容许嵌套的函数定义,但允许函数嵌套的调用,即在被调用函数中又调用其余函数。

 

嵌套调用的程序构造:

 

 

哥德Bach推测例子代码:

 

 

#include  “stdio.h” 

#include “math.h” 

int prime (int);       /*函数注明*/ 

void even(int); 

main(){   

int  n; 

   printf(“Enter n even number(>=6):”); 

   scanf(“%d”, &n); 

   if(n%2==0&&n>=6) 

        even(n);      /*函数调用语句*/ 

   else 

         printf(“The %d isn’t even numbern”,n); 

    } 

void  even(int x) {     /*找素数函数*/  

 int i; 

   for(i=2;i<=x/2;i++) 

    if(prime(i))              /*调用决断素数函数*/ 

        if(prime(x-i)){ 

printf(“%d=%d+%dn”,x,i,x-i); } 

int prime(int n)       /*推断素数函数*/ 

{  int i, k= sqrt(n); 

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

     if (n%i==0)  return  0;    

   return  1;   

7函数的递归调用

 

7.1递归的含义:函数直接或直接的对团结举行调用便是递归。

 

例如:

 

int f(int x){

 

int y;

 

z=f(y);

 

return z;

 

}

 

以此函数便是递归的调用自身,但该函数会无边无际的周转下去,这明明是不允许确的,编写代码时应该给程序多个跳出递归的出口。

 

8练习

 

1递归求阶乘

 

2.行使函数实现比较4个数的轻重。

 

3.兑现打字与印刷年历成效。

 

摘自 letthinking的专栏

在前后相继设计进度中山高校部分顺序要比大家事情未发生前设计的程序繁复的多,守旧的设计方法是自定向下,稳步求精的经过。该进度正是…