C语言必背的一些经典程序代码实例
目录
1、水仙花数
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
方法一:
#include
int main(int argc, const char *argv[])
{
for(int i=1;i<10;i++){
for (int j=0;j<10;j++){
for (int k=0;k<10;k++){
if(i*i*i+j*j*j+k*k*k==i*100+j*10+k)
printf("%d
",i*100+j*10+k);
}
}
}
return 0;
}
方法二:
#include
int main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("
");
}
2、整型数组内函数求和。
使用函数封装,实现一个整型数组内数据的求和。
#include
int array_sum(int *data,int n);
int main(int argc, const char *argv[])
{
int a[]={1,2,3,4,5,6,7,8};
int sum=0;
sum=array_sum(a,sizeof(a)/sizeof(int));
printf("sum=%d
",sum);
return 0;
}
int array_sum(int *data,int n){
int ret=0;
int i;
for(i=0;i ret+=data[i]; } 3、斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… #include int main(int argc, const char *argv[]) { int arr[15]; arr[0]=1; arr[1]=1; for(int i=2;i<15;i++) { arr[i]=arr[i-2]+arr[i-1]; } for(int i=0;i<15;i++){ printf("%d、",arr[i]); } printf(" "); return 0; } 4、杨辉三角 杨辉三角的每行行首与每行结尾的数都为1.而且,每个数等于其左上及其正上二数的和。 #include int main(int argc, const char *argv[]) { int a[15][15]={{0}}; int i,j; for(i=0;i<15;i++) { a[i][0]=1; for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(i=0;i<15;i++){ for(j=0;j<=i;j++) printf("%8d",a[i][j]); printf(" "); } return 0; } 5、猴子吃桃子 一只小猴子一天摘了许多桃子,第一天吃了一半,然后忍不住多吃了一个。第二天又吃了一半,再加上一个;后面每天都是这样吃.到第10天的时候,小猴子发现只有一个桃子了。 问小猴子第一天共摘了多少个桃子? 用递归函数求得小猴子第一天共摘了多少个桃子。 #include int tao(int n); int main(int argc, const char *argv[]) { printf("%d ",tao(10)); return 0; } int tao(int n){ if(n==1){ return 1; } return (tao(n-1)+1)*2; } 6、编写一个时钟 #include int main(int argc, const char *argv[]) { int year,month,day, hour,min,sec; scanf("%d %d %d %d %d %d",&year,&month,&day,&hour,&min,&sec); while(1){ sleep(1); if(sec<59){ sec++;} else if(min<59){ min++; sec=00;} else if(hour<23){ hour++; min=0; sec=0; }else if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day<31){ day++; hour=00; min=00; sec=00; } else if(month==02&&day<28){ day++; hour=00; min=00; sec=00; } else if((month==4||month==6||month==9||month==11)&&day<30){ day++; hour=00; min=00; sec=00; } else if(month<12){ month++; day=01; hour=00; min=00; sec=00; }else { year++; month=01; day=01; hour=00; min=00; sec=00; } printf("%02d:%02d:%02d:%02d:%02d:%02d ",year,month,day,hour,min,sec); fflush(stdout); } return 0; } 7、字符串中计算某字符出现的次数 写一个函数有两个参数,第一个参数是个字符,第二个参数是个char *, 函数功能为返回这个字符串中该字符的个数。 #include int func(char a,char *b); int main(int argc, const char *argv[]) { char c; char s[30]={0}; printf("Please input char: "); scanf("%c",&c); getchar(); printf("Please input string: "); gets(s); func(c,s); return 0; } int func(char a,char *b){ int i=0; while(*b){ if(a==*b){ i++; } *b++; } printf("%d ",i); } 8、逆序输出 一、逆序输出字符串 #include int main(int argc, const char *argv[]) { int arr[10]; for(int i=0;i<10;i++){ scanf("%d",&arr[i]); } printf("逆序输出为"); int n, i; n=sizeof(arr)/sizeof(int); for(i=n-1;i>=0;i--) printf("%d ",arr[i]); putchar(' '); return 0; } 二、逆序输出数组中的数据 #include int main(int argc, const char *argv[]) { int a[]={1,2,3,4,5,6}; int *p,*q,n,i,temp; n=sizeof(a)/sizeof(int); p=a; q=&a[n-1]; while(p temp=*p; *p=*q; *q=temp; p++; q--; } for (i=0;i printf("%d ",a[i]); } return 0; } 9、字符串中删除重复字符 #include #include int main(int argc, const char *argv[]) { char s[100]; printf("input:"); gets(s); int n=strlen(s); for(int i=0;i int k=i+1; for(int j=i+1;j if (s[j]!=s[i]) s[k++]=s[j]; } s[k]='0'; } puts(s); return 0; } 10、用函数封装实现字符串拼接 #include char *strcat(char *a,char *b); int main(int argc, const char *argv[]) { char a[50]="hello"; char b[]="word"; puts(strcat(a,b)); return 0; } char *strcat(char *a,char *b){ char *c=a; while(*a){ a++; } while(*b){ *a=*b; a++; b++; } *a='0'; return c; } 11、删除字符串中的空格 #include #include void del_space(char *s1); int main(int argc, const char *argv[]) { char s[]="a d gg sd "; puts(s); del_space(s); puts(s); return 0; } void del_space(char *s1) { char *s2; s2=s1; while(*s1){ if(*s1==' ') { s1++; }else{ *s2=*s1; s1++; s2++; } } *s2='0'; } 12、求字符串中数字字符个数及把数字字符转换成数字求和。 #include int main(int argc, const char *argv[]){ char s[100]; int i=0; int j=0; int sum=0; gets(s); //puts(s); while(s[i]!='0'){ if('0'<=s[i]&&s[i]<='9'){ j++; sum+=(s[i]-'0'); } i++; } printf("字符串中数字字符的个数为:%d ",j); printf("字符串中数字字符求和为:%d ",sum); return 0; } 13、二维数组中求出最大值及最大值所在的行数和列数。 #include int main(int argc, const char *argv[]) { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j,row,cloumn; row=cloumn=0; for(i=0;i<3;i++){ for (j=0;j<3; j++){