#include
#include
//求π的近似值,直到最后一项的绝对值小于10-6为止
/*算法:
初值pi=0,n=1.0,s=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
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
{ 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
{
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——&a【0】
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;//ps为str的首地址
while(*p)
p++;//str长度
p--;//p++最后多出一个,所以减掉
while(s 小于p时, { c=*s; //s为str的首地址,p为str的末地址 *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
文档为doc格式