[自用]C语言学习经验(代码整理)

发布时间:2014-09-20 20:08:28   来源:文档文库   
字号:

#include

#include

//求π的近似值,直到最后一项的绝对值小于10-6为止

/*算法:

初值pi=0n=1.0s=1,a=s/n;

迭代公式:pi=pi+a,n=n+2,s=-s,a=s/n;

迭代条件:fabs(a)>1e-6 //fabs浮点型,精确度高 abs整数型

*/

main()

{

float pi=0,n=1,a;

int s=1;

a=s/n;

while(fabs(a)>1e-6)

{

pi+=a;

n+=2;

s=-s;

a=s/n;

}

pi=pi*4;

printf("pi=%f\n",pi);

}

阶乘之和

#include

int main()

{

longinti,j,sum=0;

int k;

for(j=1;j<=3;j++)

{ k=1;

for(i=1;i<=j;i++)

k=k*i;

sum+=k;

}

printf("%ld",sum);

return 0;

}

打印图形

#include

int main()

{

inti,j,k;

for(i=1;i<=5;i++)

{

for(j=1;j<=5-i;j++)

printf(" ");

for(k=1;k<=2*i-1;k++)

printf("*");

printf("\n");

}

}

计算各位数字之和

#include

int main()

{

long m;

intn,sum=0;

scanf("%ld",&m);

while(m>0)

{

n=m%10;

sum+=n;

m=m/10;

}

printf("sum=%d\n",sum);

}

100~200之间的全部素数

#include

#include

int main()

{

intm,k,i,n=0;

for(m=101;m<=200;m+=2)

{

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)//整除

break;

if(i>=k+1)

{

printf("%5d",m);

n+=1;//对输出的素数计数

}

if(n%10==0)

printf("\n");

}

printf("\n");

}

打印九九乘法表

#include

int main()

{

inti,j,k;

printf("%c",'*');//第一行的乘号

for(i=1;i<10;i++)

printf("%4d",i);//第一行的被乘数

printf("\n");

for(i=1;i<10;i++)//控制下面九行的输出

{

printf("%d",i);//i行的开头字母

for(j=1;j<=i;j++)

printf("%4d",i*j);

printf("\n");

}

}

一个数恰好等于它的因子之和,就称其为完数。编程序找出1000以内的完数。

#include

int main()

{

inti,j,s;

for(j=2;j<=1000;j++)

{

s=0;

for(i=1;i

if(j%i==0)

s+=i;

if(j==s)

{

printf("%4d its factors are",j);

for(i=1;i

if(j%i==0)

printf("%4d",i);

printf("\b\n");

}

}

}

斐波那契数列数组

#include

int main(void)

{

inti,f[30]={1,1};

for(i=2;i<30;i++)

f[i]=f[i-2]+f[i-1];

for(i=0;i<30;i++)

{

if(i%5==0) printf("\n");

printf("%12ld",f[i]);

}printf("\n");

}

冒泡法对六个数进行排序

#include

int main(void)

{

int a[6];

inti,j,t;

printf("please input 6numbers:\n");

for(i=0;i<6;i++)

scanf("%d",&a[i]);

printf("\n");

for(j=1;j<6;j++)

for(i=0;i<6-j;i++)

if(a[i]>a[i+1])

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}

printf("升序后\n");

for(i=0;i<6;i++)

printf("%4d",a[i]);

printf("\nend\n");

}

选择法排序-升序

#include

#define N 8

int main(void)

{

int a[N],i,j,k,x;

printf("输入%d个数:\n",N);

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]

k=j;

if(k!=i)

{

x=a[i];

a[i]=a[k];

a[k]=x;

}

}

for(i=0;i

printf("%d ",a[i]);

}

数组

初始化二维数组时可省略第一维大小

计算3X3矩阵两条对角线的和

#include

int main(void)

{

int a[3][3]={2,5,7,6,9,8,3,1,4};

int sum=0,i;

for(i=0;i<3;i++)//第一条对角线

sum+=a[i][i];

for(i=0;i<3;i++)//第二条对角线

sum+=a[2-i][i];

printf("%d\n",sum);

}

求一个3X4的矩阵的转置矩阵

#include

int main(void)

{

int a[3][4]={2,5,7,9,6,14,20,8,15,0,12,3},b[4][3],i,j;

printf("array a:\n");

for(i=0;i<3;i++)

{ for(j=0;j<4;j++)

printf("%-3d",a[i][j]);

printf("\n");

}printf("\narray b:\n");

for(i=0;i<4;i++)

{ for(j=0;j<3;j++)

b[i][j]=a[j][i];

}

for(i=0;i<4;i++)

{ for(j=0;j<3;j++)

printf("%-3d",b[i][j]);

printf("\n");

}

}

求出3x4矩阵中最大元素的值及其所在的行号和列号

#include

int main(void)

{

inti,j,row=0,colum=0,max;

int a[][4]={11,9,33,4,15,6,37,8,23,45,12,7};

max=a[0][0];

for(i=0;i<=2;i++)

for(j=0;j<=3;j++)

if(a[i][j]>max)

{

max=a[i][j];

row=i;

colum=j;

}

printf("%d %d %d \n",max,row,colum);

}

输出杨辉三角形的前10

#include

#define N 11//第一行第一列,弃之不用

int main(void)

{

inti,j,a[N][N];

for(i=1;i

{

a[i][1]=1;

a[i][i]=1;

}

for(i=3;i

for(j=2;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i注意,是小于N

{ for(j=1;j<=i;j++)

printf("%4d",a[i][j]);

printf("\n");

}

}

输入一行字母,统计其中大写字母的个数,并将大写字母转换成小写字母后输出这个字符串

#include

#define N 11//第一行第一列,弃之不用

int main(void)

{

inti,n=0;

char s[20];

for(i=0;(s[i]=getchar())!='\n';i++)//\n换行的意思

if(s[i]>='A'&&s[i]<='Z')

n++;

printf("n=%d\n",n);//统计大写字母

for(i=0;s[i]!='\n';i++)

if(s[i]>='A'&&s[i]<='Z')

printf("%c",s[i]+32);

else

printf("%c",s[i]);

printf("\n");

}

打印如下形式的杨辉三角形,要求输出10

#include

#define N 11//第一行第一列,弃之不用

int main(void)

{

inti,j,a[N][N];

for(i=1;i

{

a[i][1]=1;

a[i][i]=1;

}

for(i=3;i

for(j=2;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i注意,是小于N

{

for(j=1;j<=N-i;j++)

printf(" ");

for(j=1;j<=i;j++)

printf("%4d",a[i][j]);

printf("\n");

}

}

字符串的输入输出:

#include

#include

int main(void)

{

char str[10]; //gets 函数弥补了scanf函数不能输入一个完整句子(有空格)的缺陷

gets(str); //内部只含一个字符串,enter作结束标志

printf("%s\n",str);

}

#include

int main(void)

{

char str[10]="china"; // char str[10]={'c','h','i','n','a'}; char str[10]={"china"}; 都可以;

//单个字符:char c; c='a' printf%c,——a; printf%d——97

printf("%s\n",str);

puts(str);//自动换行

}

strcpy(str1,str2);//str2复制到str1中,str1被覆盖

strncpy(str1,str2,3);//str2中的前3个复制到str1中相同位置,

strcat(str1,str2);//两个字符串合并起来

strcmp(str1,str2);//比较两个字符串的大小,看asc码值;str1>str2,返回正整数;

strlen(str1);//返回字符串实际长度

strlwr(str1);//将字符串中所有大写字母转换成小写

strupr(str1);//将所有小写字母转换成大写

/*合并排序的题目要会。如合并有序:a[10] = {1, 3, 5, 7, 9}, b[5] = {2, 4,6, 8, 10}的合并排序。

{1,3,5,7,9}{2,4,6,8,10}

*/

#include

#include

int main(void)

{

inti,j,t;

char a[10]={1,3,5,7,9},b[5]={2,4,6,8,10};

for(i=5,j=0;i<10,j<5;i++,j++)

a[i]=b[j];

for(j=1;j<10;j++)

for(i=0;i<10-j;i++)

if(a[i]>a[i+1])

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}

for(i=0;i<10;i++)

printf("%d ",a[i]);

printf("\n");

}

输入一个字符串,判断是否为回文

#include

#include

int main(void)

{

char s[10];

inti,j,n;

gets(s);

n=strlen(s);

for(i=0,j=n-1;i

if(s[i]!=s[j])

break;

if(i

elseprintf("yes\n");

}

不用strcat实现两个字符串的连接

#include

#include

int main(void)

{

inti,n;

char s1[20],s2[10];

gets(s1);gets(s2);

n=strlen(s1);

for(i=0;s2[i]!='\0';i++)

s1[i+n]=s2[i];

s1[i+n]='\0';

puts(s1);

}

任意输入4个字符串,找到并输出其中最大的字符串

#include

#include

int main(void)

{

charss[4][20];

inti,m;

for(i=0;i<4;i++)

scanf("%s",ss[i]);//puts(ss[i]);

m=0;

for(i=1;i<4;i++)

if(strcmp(ss[m],ss[i])<0)

m=i;

printf("%s\n",ss[m]);

}

指针

int *p;//p指向int型,不同类型的指针变量不能直接赋值;

inti;

p=&i;//不能保存不同数据类型的地址

或者

inta;

int *p=&a;//只有在定义中*p表示地址

求两个整数的最大公约数

#include

int main(void)

{

intm,n,r,t;

scanf("%d%d",&m,&n);

if(m

{

t=m;

m=n;

n=t;

}

r=m%n;

while(r!=0)

{

m=n;

n=r;

r=m%n;

}

printf("%d\n",n);

}

word/media/image17.gif

求多项式的值

#include

int fun(int n)

{

if(n<=1)

return 1;

else

return n*fun(n-1);

}

int main( )

{

int m=0,n=0,f=0,k=0;

do

{

printf("please input two integer number:");

scanf("%m,%n",&m,&n);

if(((m-n)<0)||(n<0))

k=1;

else

printf("the result is: %d",fun(m)/(fun(m-n)*fun(n)));

}

while(k!=0);

return 0;

}

计算多项式的值:1+2+3+4+……+10

#include

int main( )

{

inti,s=0;

for(i=1;i<11;i++)

s=s+i;

return 0;

}

实验:求ax2+bx+c=0 的根

l#include

#include

void root(float x[],float a,float b, float c)

{

float y;

y=b*b-4*a*c;

if(y>=0)

{

x[0]=(-b+sqrt(y))/(2*a);

x[1]=(-b-sqrt(y))/(2*a);

}

else

printf("This equation have no real roots");

}

int main()

{

floata,b,c,x[2];

printf("输入方程系数abc:");

scanf("%f%f%f", &a,&b,&c);

root(x,a,b,c);

printf("x1=%.2f x2=%.2f",x[0],x[1]);

return 0;

}

找出字符串s中的所有数字字符,并输出。剩下的字符放入一个字符数组当中

#include

void main()

{

char s[]="my number is 160513101, my age is 20.";

inti=0,n=0;

charch[100],*p;

p=s;

do

{

if( p[i]>='0'&&p[i]<='9' )

printf("%c",p[i]);

else

{

ch[n]=p[i];

n++;

}

i++;

}while(p[i]);

printf("\n");

ch[n]='\0';

p=ch;

for(i=0;p[i];i++)

printf("%c",p[i]);

}

按如下格式输出字母

M N O P

I J K L

E F G H

A B C D

#include

void main( )

{

intm,n,x;

charch[]="ABCDEFGHIGKLMNOP";

for( m=4; m>0; m--)

{

for(n=0; n<4; n++)

{

x =(m-1)*4+n;

printf("%3c ",ch[x]);

}

printf("\n");

}

}

已按ASCII码值大小排序的两个字符串,把其中一个插入到另一个字符串中,使插入以后的字符串仍按ASCII码排序

#include

void insert(char x[ ], int n, char m);

void main( )

{

char a[20] = "ACEGI", b[6] = "BDFHJ";

inti;

for(i=0; i<5; i++)

insert(a, i+5, b[i]);

for (i=0; i<10; i++) printf("%c ", a[i]);

}

void insert(char x[], int n, char m)

{

inti, j;

if(m>x[n-1])

{

x[n] = m;

}

else

{

for(i=0;x[i]

for(j=n; j>=i; j--) x[j]=x[j-1];

x[i]=m;

}

}

P112

已有5个数组按从小到大的顺序排序,任意输入一个整数n,存a中,使仍按从小到大的顺序存放

#include

int main(void)

{

int a[6]={1,3,5,7,9},i,n;

scanf("%d",&n);

for(i=4;i>=0;i--)

if(a[i]

{

a[i+1]=n;

break;

}

else

a[i+1]=a[i];

if(i<0)

a[0]=n;

for(i=0;i<6;i++)

printf("%5d",a[i]);

printf("\n");

}

指针

指针p是某变量a的地址,

a——&a0

a+1——&a[1]

a[0]——&a[0][0]

a[1]——&a[1][0]

a[0]+3——&a[0][3]

二维数组要经过两次下标运算之后才能访问数组,a要经过两次*才能访问数组元素。

*a——a[0]; *a[0]——a[0][0];

*(a+i)+j——a[i]+j; *(*(a+i)+j)——a[i][j];

使用行指针输出二维数组的任一元素

#include

int main(void)

{

int array[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int (*p)[4],row,col;

p=array;

printf("input row&col\n");

scanf("%d%d",&row,&col);

printf("array[%ld][%ld]=%d\n",row,col,*(*(p+row)+col));

}

指针进行字符串的复制,把str1复制到str2

#include

int main(void)

{

char str1[80],str2[80],*p1,*p2;

printf("enter string:");

gets(str1);

p1=str1;

p2=str2;

while((*p2=*p1)!='\0')

{

p1++;

p2++;

}

printf("%s\n",str2);

}

指针字符串的反序输出

#include

int main(void)

{

charstr[50],*p,*s,c;

printf("enter string:");

gets(str);

p=s=str;//psstr的首地址

while(*p)

p++;//str长度

p--;//p++最后多出一个,所以减掉

while(s小于p时,

{

c=*s; //sstr的首地址,pstr的末地址

*s++=*p; //*s++=*s++),后移一位;第一位的值等于末值,同时后移一位

*p--=c; //末位等于初值,同时前移一位

}

puts(str);

}

指针求字符串的长度

#include

int main(void)

{

charstr[50],*p=str;

printf("enter string:");

gets(str);

while(*p)

p++;

printf("length:%d\n",p-str);

}

指针,将所指字符串下标为偶数的字符删掉,并将s中剩余的字符形成的新字符串存放在t所指的数组中。

#include

#include

void fun(char *s,char t[])

{

inti,j,n;

n=strlen(s);

for(i=0,j=0;i

if((i%2)!=0)

t[j]=s[i],j++;

t[j]='\0';

}

int main(void)

{

char s[80],t[80];

printf("\nplease enter string :");

scanf("%s",s);

fun(s,t);

printf("\nthere is :%s\n",t);

}

指针,编写程序,使输入的两个整数按从大到小的顺序输出

#include

#include

swap(int *p1,int *p2)//指针使从大到小输出

{

int temp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

int main(void)

{

inta,b;

int *pointer_1,*pointer_2;

scanf("%d%d",&a,&b);

pointer_1=&a,pointer_2=&b;

if(a

swap(pointer_1,pointer_2);

printf("%d\t%d\n",a,b);

}

指针输入十个数,求平均数

#include

float aver(float*pa)

{

inti;

floatav,s=0;

for(i=0;i<10;i++) //pa——sp——score

s=s+*pa++;

av=s/10;

returnav;

}

int main(void)

{

float score[10],av,*sp;

inti;

sp=score;

printf("put 10 scores\n");

for(i=0;i<10;i++)

scanf("%f",&score[i]);

av=aver(sp);

printf("average score is %5.2f\n",av);

}

指针利用函数从10个数中找出其中最大值和最小值

#include

intmax,min; //全局变量

voidmax_min_value(int array[],int n)

{

int*p,*array_end;

array_end=array+n;

max=min=*array;

for(p=array;p

if(*p>max) max=*p;

else

if(*p

}

int main(void)

{

inti,number[10];

printf("enter 10 numbers:\n");

for(i=0;i<10;i++)

scanf("%d",&number[i]);

max_min_value(number,10);

printf("%d %d \n",max,min);

}

指针将数组a中的n个整数按相反顺序存放

本文来源:https://www.2haoxitong.net/k/doc/c9329d56581b6bd97e19ea3d.html

《[自用]C语言学习经验(代码整理).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式