「C語言」「例題」函數,c語言例題
本篇收集《C語言程序設計教程》第八章“函數”的所有例題。

![]()
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=%.2f\n",s);
28 print_star();
29 return 0;
30 }
8.1 求矩形面積

![]()
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 無參函數定義舉例

![]()
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的圓的面積

![]()
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 函數表達式調用

![]()
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 函數表達式調用出現在實參表中

![]()
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 將用戶輸入的華氏溫度換算成攝氏溫度輸出

![]()
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 實參與形參之間單向的值傳遞

![]()
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 %d\n",a,b,c);
17 return(a+b+c);
18 }
8.8 實參的求職順序

![]()
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.f\n",m);
19 return 0;
20 }
8.9 數組元素作為函數的形參

![]()
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 編寫冒泡排序函數

![]()
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 %d\n",m);
21 return 0;
22 }
8.11 求3*4的矩陣中所有元素的最大值,要求用函數來實現

![]()
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函數實現變量值的交換

![]()
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 對用戶定義的被調函數作聲明

![]()
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 函數的嵌套調用

![]()
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!

![]()
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數列

![]()
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->%c\n",x,z);
8 else
9 {
10 haoni(n-1,x,z,y);/* 遞歸調用 */
11 printf("%c->%c\n",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 漢諾塔問題

![]()
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,%f\n",c,area);
21 return 0;
22 }
8.18 已知圓的半徑,求周長、面積

![]()
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("%d\n",max(a,b));
17 return 0;
18 }
8.19 比較兩個數,輸出較大者

![]()
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=%d\n",n,a);
13 }
14
15 int main()
16 {
17 static int a;/* 靜態局部變量,初始化為0 */
18 printf("main:n=%d a=%d\n",n,a);
19 func();
20 a+=10;
21 printf("main:n=%d a=%d\n",n,a);
22 func();
23 printf("main:n=%d a=%d\n",n,a);
24 return 0;
25 }
8.20 靜態局部變量

![]()
#include <stdio.h>
//自動變量的應用
func(int n)
{
auto int a=2;/* 自動變量a,每調用一次都要重新賦初值 */
a+=2;
++n;
printf("func:n=%d a=%d\n",n,a);
}
int main()
{
int a=0;/* 自動變量,與func()不同 */
func(1);
printf("main:n=1 a=%d\n",a);
a+=10;
func(2);
printf("main:n=1 a=%d\n",a);
return 0;
}
8.21 自動變量的應用

![]()
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 寄存器變量

![]()
1 #include <stdio.h>
2
3 //外部變量聲明語句
4
5 int main()
6 {
7 extern int a;/* 外部引用聲明 */
8 printf("%d\n",a);
9 return 0;
10 }
11
12 int a=5;
8.23 外部變量聲明語句

![]()
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 下面程序由兩個文件組成,請分析運行結果

![]()
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指到'\0'時,先賦值完成後循環結束 */
9 return(p);/* 通過函數名返回指針值 */
10 }
11
12 int main()
13 {
14 char s[20];
15 printf("%s\n",strcpy(s,"Welocme to you!"));/* 輸出返回值指向的內容 */
16 return 0;
17 }
8.25 實現系統提供的字符串復制函數 strcpy()的全部功能

![]()
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指到'\0'時循環結束 */
9 while(*s1++=*s2++);/* 當s2指到'\0'時,先賦值完成後循環結束 */
10 return(p);/* 通過函數名返回指針值 */
11 }
12
13 int main()
14 {
15 char s[20]="Hello,";
16 printf("%s\n",strcat(s,"Welcome to you!"));
17 return 0;
18 }
8.26 實現系統提供的字符串連接函數strcat(s1,s2)

![]()
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)=%d\n",(*p)(a));/* 用函數指針參數調用函數,相當於f(a) */
18 printf("p(2a)=%d\n",p(2*a));/* p(a)以指針變量名代替函數名來調用 */
19 return 0;
20 }
8.27 指向函數的指針程序舉例

![]()
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=%d\n",sum);
33 return 0;
34 }
8.28 求自然數1~n的奇數和或偶數和,用指向函數的指針變量實現

![]()
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=%d\n",sum);
38 return 0;
39 }
8.29 用指向函數的指針變量作為函數的參數

![]()
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-100\n");
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,最低分=%.2f\n",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-100\n");
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,最低分=%.2f\n",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 一個單科成績分析統計程序

![]()
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

![]()
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]='\0';/* 在10個字符後面加上'\0',形成字符串 */
29 insert(a);
30 printf("Sorted character is:%s\n",a);/* 將已排序的10個字符輸出 */
31 return 0;
32 }
8.32 利用插入排序法將10個字符從小到大進行排序

![]()
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:%ld\n",sum);
57 }
58
59 int main()
60 {
61 int flag=1;
62 while(flag!=0)
63 {
64 printf("1:ten_to_oth\n");
65 printf("2:oth_to_ten\n");
66 printf("0:exit\n");
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進制轉換器

![]()
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 絕對素數的判斷