您现在的位置是:首页 >技术杂谈 >C语言必背经典程序代码网站首页技术杂谈
C语言必背经典程序代码
简介C语言必背经典程序代码
1、水仙花数
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
方法一:
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
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<n;i++){
ret+=data[i];
}
3、斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <unistd.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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<q){
temp=*p;
*p=*q;
*q=temp;
p++;
q--;
}
for (i=0;i<n;i++){
printf("%d
",a[i]);
}
return 0;
}
9、字符串中删除重复字符
#include <stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char s[100];
printf("input:");
gets(s);
int n=strlen(s);
for(int i=0;i<n;i++){
int k=i+1;
for(int j=i+1;j<n;j++){
if (s[j]!=s[i])
s[k++]=s[j];
}
s[k]='