#include <stdio.h>
float calc(float x,char op,float y);
int main()
{
float num1=0,num2=0,num3=0,temp=0;
char op[2][2]={0};
printf(“Input expression:” );
scanf(“%f”,&num1);

    float a,b,result;

「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(z); 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>y)?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),c); 17 printf(“max=%d”,m); 18 return 0; 19 } 8.5 函数表达式调用出现在实参表中

 

图片 6 1
#include <stdio.h> 2 3
//将用户输入的华氏温度换算成摄氏温度输出。华氏温度与摄氏温度的换算公式为:C=(5/9)*(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”); 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() 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*r); 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==2) 9 return 1; 10
s=f(n-1)+f(n-2); 11 return s; 12 } 13 14 int main() 15 { 16 int n; 17
printf(“please input n:n”); 18 scanf(“%d”,&n); 19 if(n<0) 20
printf(“error!n”); 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’);
23 return 0; 24 } 8.17 汉诺塔问题

 

图片 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 y) 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,b)); 17 return 0; 18 } 8.19 比较两个数,输出较大者

 

图片 20 1
#include <stdio.h> 2 3 //静态局部变量 4 5 int n=1; 6 7 func() 8 {
9 static int a=2;/* 静态局部变量,与main()函数中的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()不同 */
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”,a); 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!”)); 17
return 0; 18 } 8.26
实现系统提供的字符串连接函数strcat(s1,s2)

 

图片 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”,sum); 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
//(1)从键盘输入N名同学的成绩 9 //(2)求其平均分、最高分、最低分 10
//(3)并统计各分数段人数和及格率 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 n) 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”); 84
printf(“2.求平均分、最高分、最低分n”); 85
printf(“3.分段统计人数和及格率n”); 86 printf(“4.排序n”); 87
printf(“0.退出系统n”); 88 printf(“请选择(0~4):请输入选择:”); 89
scanf(“%d”,&choice); 90 switch(choice) 91 { 92 case 1: 93
printf(“请输入学生人数:”); 94 scanf(“%d”,&n); 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):请输入选择:”); 194
scanf(“%d”,&choice); 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!=0);
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 //利用插入排序法将10个字符从小到大进行排序
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]=’’;/*
在10个字符后面加上’’,形成字符串 */ 29 insert(a); 30 printf(“Sorted
character is:%sn”,a);/* 将已排序的10个字符输出 */ 31 return 0; 32 }
8.32
利用插入排序法将10个字符从小到大进行排序

 

图片 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(31)就是一个绝对素数。求两位的所有绝对素数并输出。*/ 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…

if(op[0][0]==’+’||op[0][0]==’-‘)op[1][0]=’1’;
if(op[0][0]==’*’||op[0][0]==’/’)op[1][0]=’0′;
if(op[0][1]==’+’||op[0][1]==’-‘)op[1][1]=’1’;
if(op[0][1]==’*’||op[0][1]==’/’)op[1][1]=’0′;
if(op[1][1]<op[1][0])
     {
         temp=calc(num2,op[0][1],num3);
         temp=calc(num1,op[0][0],temp);
        
     }
else
     {
         temp=calc(num1,op[0][0],num2);
         temp=calc(temp,op[0][1],num3);
        
     }
     printf(“=%lfn”,temp);
return 0;    
}
float calc(float x,char op,float y)
{
    float temp=0;
    
    switch(op)
    {
        case ‘+’:
         temp=x+y;
         break;
         case ‘-‘:
         temp=x-y;
         break;
         case ‘*’:
         temp=x*y;
         break;
         case ‘/’:
         if(y==0)//这里需要防除数为0,没有给出真正的解决方案!!!
         {
         printf(“error!”);
         temp=0xfffff;
         }
         else
         temp=x/y;
         break;
    }

}

 

    int x=0;

scanf(“%c”,&op[0][0]);
scanf(“%f”,&num2);
scanf(“%c”,&op[0][1]);
scanf(“%f”,&num3);

    printf(“该数绝对值为:%dn”,y);

运行效果:
Input expression:34-23*2
=-12.000000
请按任意键继续. . .
运行效果:
Input expression:3*2-17
=-11.000000
请按任意键继续. . .

    printf(“模拟四则运算小程序:n”);

    return temp;
}

y=(x<0)?-x:x;表达式的右边是一个具有三个操作对象的条件表达式,分别用?和:隔开,因此?:合起来就叫三目运算符,当x<0为真时,就取-x的值,为假时就取x的值

    printf(“z:%dn”,z);

int main()

为什么第二个scanf(“%c”,&c);后面没有getchar(); 函数呢? 那是因为%c默认会忽略掉回车键,而

break;语句的作用是退出switch语句,因为字符型变量c保存的是一个字符,因此case后面的+-

 

    else

}

    {

 

入缓冲区中,为了使回车键不影响下次输入,需要将回车键提取出来,调用getchar();将回车键

}

    printf(“请输入运算符 (+-*/): “);

    printf(“%.2f%c%.2f=%.2fn”,a,c,b,result);

    return 0;

}

    char a;

    {

    int a=1;

#include <stdio.h>

    return 0;

    float b=2.1f;

    return 0;

    scanf(“%c”,&a);

三目运算符不仅可以操作整数,还可以操作浮点数

int main()

    z=x>y?x:x>y?x:y;

    int a=1,b=2;

 

    int x=1,y=2,z;

{

 

    scanf(“%f”,&a);

    }

{

    return 0;

    printf(“%fn”,a>b?a:b);

上面是一个三目运算符的灵活运用

    char c;

    {

        break;

int main()

switch(c) 语句是用来检查()中的表达式变量c的值是否与下面的case中的某个值,如果等于则

int main()

    switch(c)

    }

    scanf(“%f”,&b);

        break;

#include <stdio.h>

    }

    case ‘+’:result=a+b;

default:result=0;的作用是如果c的值与case后面的值都不匹配,则执行此语句

    y=(x<0)?-x:x;

    scanf(“%d”,&x);

printf(“请输入第一个数:n”);用户输入完第一个数后,会按下回车键,这个回车键会保存到输

 

提取出来,没有赋给任何的字符型变量,因此等于将回车键给抛弃掉了

#include <stdio.h>

#include <stdio.h>

 

(a>=’A’&&a<=’Z’)判断a这个变量的值是否在大写A-Z之间,(a+32)表示将小写转换成大些

        printf(“x为真n”);

    printf(“请输入第一个数:”);

{

    printf(“输入一个整数:”);

        printf(“x为假n”);

    scanf(“%c”,&c);

    printf(“%cn”,a=(a>=’A’&&a<=’Z’)?(a+32):a);

    case ‘/’:result=a/b;

int main()

    printf(“%dn”,(a>b)?a:b);

int main()

{

    printf(“请输入第二个数:”);

#include <stdio.h>

#include <stdio.h>

{

int main()

    getchar();

{

    case ‘-‘:result=a-b;

        break;

    default:result=0;

三目运算符的顺序为从右到左依次执行

如果是float和int就不会忽略

    if (x==0)

    return 0;

if (x==0)也可以写成if(!x),因为x的值为0即为假,所以!x为真,计算机只能识别0和1的数值,这种写法比较难懂不推荐,好的程序员写的代码简单易懂

    return 0;

}

    int x,y;

    case ‘*’:result=a*b;

}

{

*/都用’’单引号引起来,如果没’’,它们就不是一个字符了

 

}

    return 0;

#include <stdio.h>

 

执行:后面的语句,例如result=a+b

        break;