目录
- 1、求斐波那契数列1,1,2,3,5,8……前20项之和
- 2、编程输出1000之内的所有完数,并统计完数的个数
- 3、编写函数delete函数,其功能是删除含有n个数的整型数组a中,下标为i位置的元素,请编写delete函数,并在主函数中调用。
- 4、编写函数fun,其功能是利用冒泡法
- 5、编写函数fun,其功能为求100-,300之间(包含100和300)所有整数中各位数字之和为x(x为一个正整数)的整数个数,要求从main函数输入x的值,并输出符合条件的整数个数。例如100-300之间各位数字之和为5的整数有104,113,122,131, 140,203,212,221,230,即从主函数中输入5,则应输出9
- 6、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
- 7、求100-200之间所有的素数,并输出。素数是只能被1和自身整除的数
- 8、将含有10个数的整型数组由小到大排序
- 9、编程求解马克思手稿中的数学题:有30个人,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?
- 10、计算100~200之间的所有素数之和,判别一个数是否是素数请用给定的函数实现。
- 11、输出以下的杨辉三角形(要求输出10行)
- 12、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。
- 13、求两个数的最大公约数和最小公倍数
1、求斐波那契数列1,1,2,3,5,8……前20项之和
#include<stdio.h>
int main()
{
int i,j,k,t=2;
i=j=1;
printf("%d %d\n",i,j);
for(k=0;k<9;k++)
{
i=i+j;
j=i+j;
t=t+i+j;
printf("%d %d\n",i,j);
}
printf("总和为:%d",t);
}
2、编程输出1000之内的所有完数,并统计完数的个数
一个数如果恰好等于它的因子之和(因子指除本身之外的约数),这个数就称为“完数”。例如:6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
#include<stdio.h>
int main()
{
int i,j,s=0,flag=0;
for(i=1;i<1000;i++)
{
s=0;
for(j=1;j<i;j++)
{
if(i%j==0)
s=s+j;
}
if(i==s)
{
flag++;
printf("%d\n",i);
}
}
printf("完数个数:%d",flag);
}
3、编写函数delete函数,其功能是删除含有n个数的整型数组a中,下标为i位置的元素,请编写delete函数,并在主函数中调用。
#include<stdio.h>
int main()
{
int n,i,j;
int a[5];
void delete(int x[],int n,int k);
printf("输入5个元素\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("输入要删除元素的下标i\n");
scanf("%d",&j);
delete(a,5,j);
printf("结果");
for(i=0;i<5-1;i++)
printf("%d",a[i]);
}
void delete(int a[],int n,int k)
{
int i,j;
for(i=0;i<n;i++)
{
if(i==k)
{
for(j=i;j<n;j++)
a[j]=a[j+1];
}
}
}
4、编写函数fun,其功能是利用冒泡法
将一个整数数组由小到大进行排序,在main函数中从键盘输入数组元素,调用fun函数排序,然后输出排序后的数组
#include<stdio.h>
int main()
{
int a[5],i;
void fun(int a[],int n);
for(i=0;i<5;i++)
scanf("%d",&a[i]);
fun(a,5);
for(i=0;i<5;i++)
printf("%d ",a[i]);
}
void fun(int a[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
5、编写函数fun,其功能为求100-,300之间(包含100和300)所有整数中各位数字之和为x(x为一个正整数)的整数个数,要求从main函数输入x的值,并输出符合条件的整数个数。例如100-300之间各位数字之和为5的整数有104,113,122,131, 140,203,212,221,230,即从主函数中输入5,则应输出9
#include<stdio.h>
int main()
{
int fun( int x);
int n;
scanf("%d",&n);
printf("%d",fun(n));
}
int fun( int x)
{
int i,flag=0;
for(i=100;i<=300;i++)
if(i%10+i%100/10+i/100==x)
flag++;
return flag;
}
6、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
解1:
#include <stdio.h>
int main()
{
int a[11]={1,2,3,4,5,6,7,8,9,10};
int i,t,m;
printf("输入一个数:\n");
scanf("%d",&m);
for(i=0;i<11;i++)
{
if(m<a[i])
{
t=m;m=a[i];a[i]=t;
}
else if(m>=a[9])
a[10]=m;
}
printf("排序后:\n");
for(i=0;i<11;i++)
printf("%d ",a[i]);
return 0;
}
解2:
重新开拓一个数组,判断插入数的位置后,后面数组值往后移一位,记得完成后要加break,因为如果不停止的话,后面有符合条件的还会执行循环。
#include "stdio.h"
void main()
{
int a[5]={1,3,4,7,9};
int b[6],i,j;
int n;
for(i=0;i<5;i++)
b[i]=a[i];
scanf("%d",&n);
for(i=0;i<5;i++)
{
if(n>=a[i]&&n<=a[i+1])
{
for(j=5;j>i+1;j--)
{
b[j]=b[j-1];
}
b[i+1]=n;
break;
}
}
for(i=0;i<6;i++)
printf("%d ",b[i]);
}
7、求100-200之间所有的素数,并输出。素数是只能被1和自身整除的数
#include<stdio.h>
int main()
{
int i,j,flag;
for(i=101;i<200;i++)
{
flag=1;
for(j=2;j<i;j++)
{
if(i%j==0)
flag=0;
}
if(flag==1)
printf("%d ",i);
}
}
8、将含有10个数的整型数组由小到大排序
#include<stdio.h>
int main ()
{
int a[10];
int i,j,temp;
printf("请输入数组的10个元素\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10-1;i++)
for(j=0;j<10-i-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
9、编程求解马克思手稿中的数学题:有30个人,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?
#include <stdio.h>
void main()
{
int x,y,z;
for(x=1;x<16;x++)
for(y=1;y<25;y++)
for(z=1;z<30;z++)
{
if(x+y+z==30&&3*x+2*y+z==50)
printf("%d %d %d\n",x,y,z);
}
}
10、计算100~200之间的所有素数之和,判别一个数是否是素数请用给定的函数实现。
函数原型为:int fun(int m);
说明:
参数:m 是要进行判断的数;
返回值:若数 m 是素数,则返回值为1;否则返回值为0。
#include <stdio.h>
void main()
{
int fun(int m);
int i,sum=0;
for(i=101;i<200;i++)
{
if(fun(i)==1)
{
sum=sum+i;
printf("%d ",i);
}
}
printf("素数和:%d",sum);
}
int fun(int m)
{
int i,flag=1;
for(i=2;i<m;i++)
{
if(m%i==0)
flag=0;
}
return flag;
}
11、输出以下的杨辉三角形(要求输出10行)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
#include <stdio.h>
void main()
{
int a[10][10];
int i,j;
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];//活学活用二维数组
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
12、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位
#include<stdio.h>
void main()
{
int x,y,z,i;
for(i=100;i<1000;i++)
{
x=i%10;
y=i%100/10;
z=i/100;
if(x*x*x+y*y*y+z*z*z==i)
printf("%d ",i);
}
}
13、求两个数的最大公约数和最小公倍数
如:15和6的最大公约数为3,最小公倍数为30
最大公约数:
#include<stdio.h>
void main()
{
int a,b,c;
scanf("%d%d",&a,&b);
while(b)
{
c=a%b;
a=b;
b=c;
}
printf("%d ",a);
}
最小公倍数:
#include<stdio.h>
void main()
{
int a,b,i=1;
scanf("%d%d",&a,&b);
while((a*i)%b)
{
i++;
}
printf("%d",a*i);
}