1、用函數法求最大公約數與最小公倍數
1 #include<stdio.h> 2 int main() 3 { 4 int hcf(int,int); 5 int lcd(int,int,int); 6 int u,v,h,l; 7 scanf("%d,%d",&u,&v); 8 h=hcf(u,v); 9 printf("H.C.F=%d\n",h); 10 l=lcd(u,v,h); 11 printf("L.C.D=%d\n",l); 12 return 0; 13 } 14 int hcf(int u,int v) 15 { 16 int t,r; 17 if(v>u) 18 {t=u;u=v;v=t;} 19 while((r=u%v)!=0) 20 { 21 u=v; 22 v=r; 23 } 24 return v; 25 } 26 int lcd(int u,int v,int h) 27 { 28 return(u*v/h); 29 }
法二:用全局變量的方法
1 #include<stdio.h> 2 int Hcf,Lcd; 3 int main() 4 { 5 void hcf(int,int); 6 void lcd(int,int); 7 int u,v; 8 scanf("%d,%d",&u,&v); 9 hcf(u,v); 10 lcd(u,v); 11 printf("H.C.F=%d\n",Hcf); 12 printf("L.C.D=%d\n",Lcd); 13 return 0; 14 } 15 void hcf(int u,int v) 16 { 17 int t,r; 18 if(v>u) 19 {t=u;u=v;v=t;} 20 while((r=u%v)!=0) 21 { 22 u=v; 23 v=r; 24 } 25 Hcf=v; 26 } 27 void lcd(int u,int v) 28 {Lcd=u*v/Hcf; 29 }
2、求一元二次方程的根。
1 #include<stdio.h> 2 #include<math.h> 3 float x1,x2,disc,p,q; 4 int main() 5 { 6 void greater_than_zero(float,float); 7 void equal_to_zero(float,float); 8 void smaller_than_zero(float,float); 9 float a,b,c; 10 printf("input a,b,c"); 11 scanf("%f,%f,%f",&a,&b,&c); 12 printf("equation :%5.2f*x*x+%5.2f*x+%5.2f=0\n",a,b,c); 13 disc=b*b-4*a*c; 14 printf("root:\n"); 15 if(disc>0) 16 { 17 greater_than_zero(a,b); 18 printf("x1=%f\t\tx2=%f\n",x1,x2); 19 } 20 else if(disc==0) 21 {equal_to_zero(a,b); 22 printf("x1=%f\t\tx2=%f\n",x1,x2); 23 } 24 else{smaller_than_zero(a,b); 25 printf("x1=%f+%fi\tx2=%f-%fi\n",p,q,p,q); 26 } 27 return 0; 28 } 29 void greater_than_zero(float a,float b) 30 { 31 x1=(-b+sqrt(disc))/(2*a); 32 x2=(-b-sqrt(disc))/(2*a); 33 } 34 void equal_to_zero(float a,float b) 35 { 36 x1=x2=(-b)/(2*a); 37 } 38 void smaller_than_zero(float a,float b) 39 { 40 p=-b/(2*a); 41 q=sqrt(-disc)/(2*a); 42 }
3、函數判斷素數
1 #include<stdio.h> 2 int main() 3 { 4 int prime(int); 5 int n; 6 printf("input"); 7 scanf("%d",&n); 8 printf("%d",n); 9 if(prime(n)) 10 printf(" yes\n"); 11 else 12 printf(" not\n"); 13 return 0; 14 } 15 int prime(int n) 16 { 17 int flag=1,i; 18 for(i=2;i<n/2&&flag==1;i++) 19 if(n%i==0) 20 flag=0; 21 return flag; 22 }
4、將3*3數組轉置
1 #include<stdio.h> 2 #define N 3 3 int array[N][N]; 4 int main() 5 { 6 void convert(int array[][3]); 7 int i,j; 8 printf("input array:\n"); 9 for(i=0;i<N;i++) 10 for(j=0;j<N;j++) 11 scanf("%d",&array[i][j]); 12 printf("original array :\n"); 13 for(i=0;i<N;i++) 14 { 15 for(j=0;j<N;j++) 16 printf("%5d",array[i][j]); 17 printf("\n"); 18 } 19 convert(array); 20 printf("convert array:\n"); 21 for(i=0;i<N;i++) 22 { 23 for(j=0;j<N;j++) 24 printf("%5d",array[i][j]); 25 printf("\n"); 26 } 27 return 0; 28 } 29 void convert (int array[][3]) 30 { 31 int i,j,t; 32 for(i=0;i<N;i++) 33 for(j=i+1;j<N;j++) 34 { 35 t=array[i][j]; 36 array[i][j]=array[j][i]; 37 array[j][i]=t; 38 } 39 }
5、反序存放一個字符串
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 void inverse(char str[]); 6 char str[100]; 7 printf("input sring:"); 8 scanf("%s",str); 9 inverse(str); 10 printf("inverse string:%s\n",str); 11 return 0; 12 } 13 void inverse(char str[]) 14 { 15 char t; 16 int i,j; 17 for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--) 18 {t=str[i]; 19 str[i]=str[j-1]; 20 str[j-1]=t;} 21 }
6.將兩個字符連接
1 #include<stdio.h> 2 int main() 3 { 4 void concatenate(char string1[],char string2[],char string[]); 5 char s1[100],s2[100],s[100]; 6 printf("input string1:"); 7 scanf("%s",s1); 8 printf("input string2:"); 9 scanf("%s",s2); 10 concatenate(s1,s2,s); 11 printf("\nthe new is\n"); 12 printf("%s\n",s); 13 return 0; 14 } 15 void concatenate(char string1[],char string2[],char string[]) 16 { 17 int i,j; 18 for(i=0;string1[i]!='\0';i++) 19 string[i]=string1[i]; 20 for(j=0;string2[j]!='\0';j++) 21 string[i+j]=string2[j]; 22 string[i+j]='\0'; 23 }
7、復制元音字母
1 #include<stdio.h> 2 int main() 3 { 4 void cpy(char [],char []); 5 char str[80],c[80]; 6 printf("input string\n"); 7 gets(str); 8 cpy(str,c); 9 printf("\nis %s\n",c); 10 return 0; 11 } 12 void cpy(char s[],char c[]) 13 { 14 int i,j; 15 for(i=0,j=0;s[i]!='\0';i++) 16 if(s[i]=='A'||s[i]=='a'||s[i]=='E'||s[i]=='e'||s[i]=='I'||s[i]=='i'||s[i]=='O'||s[i]=='o'||s[i]=='U'||s[i]=='u') 17 { 18 c[j]=s[i]; 19 j++;} 20 c[j]='\0'; 21 }
8、在字符串中打空格
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 void insert(char str[]); 6 char str[80]; 7 printf("input"); 8 scanf("%s",str); 9 insert(str); 10 return 0; 11 } 12 void insert(char str[]) 13 { 14 int i; 15 for(i=strlen(str);i>0;i--) 16 { 17 str[2*i]=str[i]; 18 str[2*i-1]=' '; 19 } 20 printf("output:\n%s\n",str); 21 }
9、統計字母數字空格以及其他字符個數
1 #include<stdio.h> 2 int letter,digit,space,other; 3 int main() 4 { 5 void count(char []); 6 char text[80]; 7 printf("input string:\n"); 8 gets(text); 9 printf("string:"); 10 puts(text); 11 letter=0; 12 space=0; 13 digit=0; 14 other=0; 15 count(text); 16 printf("字母數:%d\n空格數:%d\n數字數%d\n其他%d\n",letter,space,digit,other); 17 return 0; 18 } 19 void count(char str[]) 20 { 21 int i; 22 for(i=0;str[i]!='\0';i++) 23 if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') 24 letter++; 25 else if(str[i]==' ') 26 space++; 27 else if(str[i]>='0'&&str[i]<='9') 28 digit++; 29 else 30 other++; 31 }
10、輸出一行字符中的最長單詞
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int alphabetic(char); 6 int longest(char []); 7 int i; 8 char line[100]; 9 printf("input one line:\n"); 10 gets(line); 11 printf(" the longest word is:"); 12 for(i=longest(line);alphabetic(line[i]);i++) 13 printf("%c",line[i]); 14 printf("\n"); 15 return 0; 16 } 17 int alphabetic(char c) 18 { 19 if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) 20 return(1); 21 else 22 return(0); 23 } 24 int longest(char string[]) 25 { 26 int len=0,i,length=0,flag=1,place=0,point; 27 for(i=0;i<strlen(string);i++) 28 if(alphabetic(string[i])) 29 if(flag) 30 {point=i; 31 flag=0; 32 } 33 else 34 len++; 35 else 36 {flag=1; 37 if(len>=length) 38 {length=len; 39 place=point; 40 len=0; 41 } 42 } 43 return(place); 44 }
11、起泡法對字符按照降序排列
1 #include<stdio.h> 2 #include<string.h> 3 #define N 100 4 char str[N]; 5 int main() 6 { 7 void sort(char[]); 8 int i,flag; 9 for(flag=1;flag==1;) 10 { 11 printf("input string:\n"); 12 scanf("%s",&str); 13 if(strlen(str)>N) 14 printf("roo long ,input again:"); 15 else 16 flag=0; 17 } 18 sort(str); 19 printf("string sort:\n"); 20 for(i=1;i<N;i++) 21 printf("%c",str[i]); 22 printf("\n"); 23 return 0; 24 } 25 void sort(char str[]) 26 { 27 int i,j; 28 char t; 29 for(j=1;j<N;j++) 30 for(i=0;(i<N-j)&&(str[i]!='\0');i++) 31 if(str[i]>str[i+1]) 32 { 33 t=str[i]; 34 str[i]=str[i+1]; 35 str[i+1]=t; 36 } 37 38 }
12、用牛頓迭代法求根
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 float solut(float a,float b,float c,float d); 6 float a,b,c,d; 7 printf("input a,b,c,d:"); 8 scanf("%f,%f,%f.%f",&a,&b,&c,&d); 9 printf("x=%10.7f\n",solut(a,b,c,d)); 10 return 0; 11 } 12 float solut(float a,float b,float c,float d) 13 { 14 float x=1,x0,f,f1; 15 do 16 { 17 x0=x; 18 f=((a*x0+b)*x0+c)*x0+d; 19 f1=(3*a*x0+2*b)*x0+c; 20 x=x0-f/f1; 21 }while(fabs(x-x0)>=1e-3); 22 return(x); 23 }
13、勒讓德多多項式
1 #include<stdio.h> 2 int main() 3 { 4 int x,n; 5 float p(int,int); 6 printf("\n input n x:"); 7 scanf("%d,%d",&n,&x); 8 printf("n=%d,x=%d\n",n,x); 9 printf("p%d(%d)=%6.2f\n",n,x,p(n,x)); 10 return 0; 11 } 12 float p(int n,int x) 13 { 14 {if(n==0) 15 return(1); 16 else if(n==1) 17 return(x); 18 else 19 return((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n; 20 } 21 }
14、
#include<stdio.h> #define N 10 #define M 5 float score[N][M]; //10個學生5門課成績 float a_stu[N],a_cour[M]; int r,c; int main() { int i,j; float h; float s_var(void); //計算方差 float highest(); void input_stu(void); //輸入數據 void aver_stu(void); //計算每個學生的平均分 void aver_cour(void); //計算每門課的平均分 input_stu(); aver_stu(); aver_cour(); printf("\n NO. cour1 cour2 cour3 cour4 cour5 aver\n"); for(i=0;i<N;i++) { printf("\n NO. %2d",i+1); for(j=0;j<M;j++) printf("%8.2f",score[i][j]); printf("%8.2f\n",a_stu[i]); } printf("\n average:"); for(j=0;j<M;j++) printf("%8.2f",a_cour[j]); printf("\n"); h=highest(); printf("highest: %7.2f NO.%2d cours %2d\n",h,r,c); //最高分 學生號 課程號 printf("variance %8.2f\n",s_var()); return 0; } void input_stu(void) { int i,j; for(i=0;i<N;i++) { printf("\n input scoreof student%2d:\n",i+1); for(j=0;j<M;j++) scanf("%f",&score[i][j]); } } void aver_stu(void) { int i,j; float s; for(i=0;i<N;i++) { for(j=0,s=0;j<M;j++) s+=score[i][j]; a_stu[i]=s/5.0; } } void aver_cour(void)//計算五門科平均成績 { int i,j; float s; for(j=0;j<M;j++) { s=0; for(i=0;i<N;i++) s=s+score[i][j]; a_cour[j]=s/(float)N; } } float highest() { float high; int i,j; high=score[0][0]; for(i=0;i<N;i++) for(j=0;j<M;j++) if(score[i][j]>high) { high=score[i][j]; r=i+1; c=j+1; } return high; } float s_var(void) { int i; float sumx,sumxn; sumx=0.0; sumxn=0.0; for(i=0;i<N;i++) {sumx+=a_stu[i]*a_stu[i]; sumxn+=a_stu[i]; } return (sumx/N-(sumxn/N)*(sumxn/N)); }
15、
#include<stdio.h> #include<string.h> #define N 10 int main() { void input(int [],char name[][8]); void sort(int [],char name[][8]); void search(int ,int[],char name[][8]); int num[N],number,flag=1,c; char name[N][8]; input(num,name); sort(num,name); while(flag==1) { printf("input number to look for:"); scanf("%d",&number); search(number,num,name); printf("continue or not(Y/N)?"); getchar(); c=getchar(); if(c=='N'||c=='n') flag=0; } return 0; } void input(int num[],char name[N][8]) { int i; for(i=0;i<N;i++) { printf("input NO.:"); scanf("%d",&num[i]); printf("input name:"); getchar(); gets(name[i]); } } void sort(int num[],char name[N][8]) { int i,j,min,temp1; char temp2[8]; for(i=0;i<N-1;i++) { min=i; for(j=i;j<N;j++) if(num[min]>num[j]) min=j; temp1=num[i]; strcpy(temp2,name[i]); num[i]=num[min]; strcpy(name[i],name[min]); num[min]=temp1; strcpy(name[min],temp2); } printf("\nresult:\n"); for(i=0;i<N;i++) printf("\n%5d%10s",num[i],name[i]); } void search(int n,int num[],char name[N][8]) { int top,bott,mid,loca,sign; top=0; bott=N-1; loca=0; sign=1; if((n<num[0])||(n>num[N-1])) loca=-1; while((sign==1)&&(top<=bott)) { mid=(bott+top)/2; if(n==num[mid]) { loca=mid; printf("No.%d,his name is%s.\n",n,name[loca]); sign=-1; } else if(n<num[mid]) bott=mid-1; else top=mid+1; } if(sign==1||loca==-1) printf("%d not been found.\n",n); }
17、
#include<stdio.h> int main() { void convert(int n); int number; printf("input an interger:"); scanf("%d",&number); printf("output:"); if(number<0) { putchar('-'); putchar(' ' ); number=-number; } convert(number); printf("\n"); return 0; } void convert(int n) { int i; if((i=n/10)!=0) convert(i); putchar(n%10+'0'); putchar(32); }
16、
#include<stdio.h> #define MAX 1000 int main() {int htoi(char s[]); int c,i,flag,flag1; char t[MAX]; i=0; flag=0; flag1=1; printf("input a HEX number:"); while((c=getchar())!='\0'&&i<MAX&&flag1) { if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F') {flag=1; t[i++]=c; } else if(flag) {t[i]='\0'; printf("decimal nuumber is%d\n",htoi(t)); printf("continue or not?"); c=getchar(); if(c=='N'||c=='n') flag1=0; else {flag=0; i=0; printf("\n input a HEX number:"); } } } return 0; } int htoi(char s[]) { int i,n; n=0; for(i=0;s[i]!='\0';i++) { if(s[i]>='0'&&s[i]<='9') n=n*16+s[i]-'0'; if(s[i]>='a'&&s[i]<='f') n=n*16+s[i]-'a'+10; if(s[i]>='A'&&s[i]<='F') n=n*16+s[i]-'A'+10; } return(n); }
18、
#include<stdio.h> int main() { int sum_day(int month,int day); int leap(int year); int year,month,day,days; printf("input date(year,month,day)):"); scanf("%d,%d,%d",&year,&month,&day); printf("%d/%d/%d",year,month,day); days=sum_day(month,day); if(leap(year)&&month>=3) days=days+1; printf("is the %d day in this year.\n",days); return 0; } int sum_day(int month,int day) { int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int i; for(i=1;i<month;i++) day+=day_tab[i]; return(day); } int leap(int year) {int leap; leap=year%4==0&&year%100!=0||year%400==0; return(leap); }