您现在的位置是:首页 >技术教程 >C语言专升本编程题复习网站首页技术教程
C语言专升本编程题复习
简介C语言专升本编程题复习
1.求100以内的素数
int main( )
{
int i,j,count=0;
for(i=1;i<100;i++){
for(j=2;j<i;j++){
if(i%j==0)break;
}
if(i==j){
count++;
printf("%d ",i);
if(count%5==0)printf("
");
}
}
}
2.求1000以内的完数 *
完数:等于其因子(不含本身)之和,如6=1+2+3
int main( )
{
int i,j,sum;
for(i=1;i<1000;i++){
sum=0;
for(j=1;j<i;j++){
if(i%j==0)sum+=j;
}
if(sum==i)printf("%d ",sum);
}
}
3.打印所有水仙花数
int main( )
{
int a,b,c,i;
for(i=100;i<=999;i++){
a=i%10;
b=i/10%10;
c=i/100;
if(a*a*a+b*b*b+c*c*c==i)
printf("%d ",i);
}
}
4.一个球从100米高自由落下,每次落地后反弹回原高度的一半,再落下。求第10次落地时,共经过多少米,第10次反弹多高?
int main( )
{
float sn=100.0,hn=sn/2;
int n;
for(n=2;n<=10;n++){
sn=sn+hn;
hn/=2;
}
printf("共经过%f米,第10次反弹%f米
",sn,hn);
}
5.百马百担问题
int main( )
{
int dm,zm,xm;
for(dm=0;dm<34;dm++){
for(zm=0;zm<51;zm++){
xm=100-dm-zm;
if(xm%2==0&&dm*3+zm*2+xm/2==100)//小马为偶数个才能实现"两匹小马驮一旦"
printf("大马有%d,中马有%d,小马有%d
",dm,zm,xm);
}
}
}
6.打印形状为直角三角形的九九乘法表
int main( )
{
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=i;j++)
printf("%d*%d=%-4d",i,j,i*j);
printf("
");
}
}
7.求e的值
int main( )
{
float e=1,m=1;
long i=1,n=1;
while(m>=0.001){
m=1./n;
e+=m;
n*=++i;
}
printf("%f",e);
}
8.计算Sn=a+aa+aaa+…+aa…a(n个a),a和n从键盘上输入
int main( )
{
int a,i,n,m=0;
long sum=0;
printf("请输入a和n:
");
scanf("%d%d",&a,&n);
for(i=0;i<n;i++){
m=a+m*10;
sum+=m;
}
printf("%ld",sum);
}
s=2+22+222+2222
9.爱因斯坦台阶问题
题目略
int main( )
{
int number;
for(number=14;;number++)
if(number%2==1&&number%3==2
&&number%5==4&&number%6==5&&number%7==0){
printf("%d",number);//119
break;
}
}
10.鸡兔同笼问题
int main( )
{
int x,y;
for(x=1;x<=35;x++){
for(y=1;y<=35;y++)
if((x+y)==35&&2*x+4*y==94){
printf("鸡有%d只,兔有%d只
",x,y);
break;
}
}
}
11.百鸡问题
遇到这种题,简单的方法直接使用穷举就完了。
int main( )
{
int gj,mj,xj;
for(gj=0;gj<=20;gj++){
for(mj=0;mj<=33;mj++){
xj=100-gj-mj;
if(gj*5+mj*3+xj/3==100&&xj%3==0)
printf("公鸡%d母鸡%d小鸡%d
",gj,mj,xj);
}
}
}
12.猴子吃桃问题
int main( )
{
int x=1,y=9;
while(y>0){
x=2*(x+1);
y--;
}
printf("%d
",x);//1534
}
13.输出斐波那契数列前20项
法一:(btw,这是一行4个)
int main( )
{
int f1=1,f2=1,i,count;
for(i=1;i<=10;i++){
printf("%5d%5d",f1,f2);
count++;
f1=f1+f2;
f2=f1+f2;
if(count%2==0)printf("
");
}
}
法二:(这是一行五个)
int fib(int n){
if(n==1||n==2)return 1;
else return fib(n-1)+fib(n-2);
}
int main( )
{
int n;
for(n=1;n<=20;n++){
printf("%5d",fib(n));
if(n%5==0)printf("
");
}
}
14.输入一个数,颠倒输出,并输出其有几位数
int main( )
{
int num;
scanf("%d",&num);
int a,b,num1,count=0;
num1=num;
while(num1>0){
a=num1%10;
b=b*10+a;
num1/=10;
count++;
}
printf("有%d位数,逆序过后是%d
",count,b);
}
15.求两数的最大公约数和最小公倍数
辗转相除法
int main( )
{
int m,n,r;
scanf("%d%d",&m,&n);
int t,x;
if(m<n){
t=m;m=n;n=t;
}
r=m%n;
x=m*n;
while(r!=0){
m=n;n=r;r=m%n;
}
printf("最小公倍数是%d,最大公约数是%d
",x/n,n);
}
16.分解质因数 *
int main( )
{
int num,i;
scanf("%d",&num);
printf("%d=1*",num);
for(i=2;i<num;i++){
while(i!=num){
if(num%i==0){
printf("%d*",i);
num/=i;
}
else
break;
}
}
printf("%d",num);
}
17.判断两数是否互质(最大公约数为1的两个数为互质数)
int gcd(int m,int n){
int t;
if(m>n){
t=m;m=n;n=t;
}
int r=m%n;
while(r!=0){
m=n;
n=r;
r=m%n;
}
return n;
}
int main( )
{
int m,n;
scanf("%d%d",&m,&n);
if(gcd(m,n)>1)printf("两数不是互质的
");
else
printf("两数是互质的
");
}
18.求1+22+333+4444+55555+…+n…n
int main( )
{
int n;
scanf("%d",&n);
int i,j,k=0,sum=1;
for(i=2;i<=n;i++){
k=i;
for(j=2;j<=i;j++){
k=k*10+i;
}
sum+=k;
}
printf("%d",sum);
}
19.产生10个0-100的随机数,输出最大值
#include<time.h>
int main( )
{
int a[10],max,i;
srand(time(0));//设置随机数种子
for(i=0;i<10;i++){
a[i]=rand()%100;
printf("%d ",a[i]);
}
max=a[0];
for(i=1;i<10;i++){
if(max<a[i])max=a[i];
}
printf("
最大值是%d
",max);
}
20.用选择法排序(从小到大)
int main( )
{
int a[10]={3,9,1,56,12,7,5,78,89,16};
int i,min,j,t;
for(i=0;i<9;i++){
min=i;
for(j=i+1;j<10;j++){
if(a[min]>a[j])min=j;
}
if(min!=i){
t=a[i];a[i]=a[min];a[min]=t;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
21.用冒泡法排序
int main( )
{
int a[10]={3,9,1,56,12,7,5,78,89,16};
int i,j,t;
for(i=0;i<10-1;i++){
for(j=0;j<10-1-i;j++){
if(a[j]>a[j+1]){
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
22.插入数组元素
int main( )
{
int a[10]={0,11,22,44,55,66},len=6;
int i,loc,data;
printf("请输入插入位置和数据:");
scanf("%d%d",&loc,&data);
if(len<10){
for(i=len;i>loc;i--)
a[i]=a[i-1];//元素后移
a[loc]=data;
len++;
}
else
printf("存储单元不足
");
for(i=0;i<len;i++){
printf("%d ",a[i]);
}
}
23.插入一个数至有序数组
int main( )
{
int a[11]={1,3,9,11,13,15,18,19,21,23};
int i,j,num;
printf("请输入你要插入的数字:");
scanf("%d",&num);
for(i=0;i<10;i++)
if(num<a[i])break;
for(j=10;j>i;j--)
a[j]=a[j-1];
a[i]=num;
for(i=0;i<11;i++)
printf("%d ",a[i]);
}
24.删除指定位置的数组元素
int main( )
{
int a[10]={0,11,22,100,33,44,55,66},len=8;
int i,loc=3;
if(loc<len){
for(i=loc;i<len;i++)
a[i]=a[i+1];
len--;
}
else
printf("查无此数
");
for(i=0;i<len;i++)
printf("%d ",a[i]);
}
25.删除指定数组元素
法一:
int main( )
{
int a[10]={0,11,22,100,33,44,55,66},len=8;
int i,num,sign;
scanf("%d",&num);
for(i=0;i<10;i++){
if(num==a[i]){
sign=i;
break;
}
}
for(i=sign;i<len;i++)
a[i]=a[i+1];
len--;
for(i=0;i<len;i++)
printf("%d ",a[i]);
}
法二:
int main(){
int a[10],x,*p,*q;
printf("请输入十个整数:");
for(p=a;p<a+10;p++)scanf("%d",p);
printf("请输入要删除的数字:");
scanf("%d",&x);
for(p=q=a;p<a+10;p++)
if(x!=*p)*q++=*p;
if(q==p)printf("查无此数
");
else{
for(p=a;p<q;)printf("%d ",*p++);
}
}
26.折半查找法
int main( )
{
int a[10]={0,11,22,33,44,55,66,77,88,99},key;
int l=0,h=9;//在a[l]~a[h]范围内查找
int m;
scanf("%d",&key);//输入要查找的值
while(l<=h){
m=(l+h)/2;
if(key==a[m])break;
else if(key<a[m])h=m-1;
else if(key>a[m])l=m+1;
}
if(l<=h)printf("找到,在第%d个
",m+1);
else printf("not found
");
}
27.字符串排序
#include<string.h>
int main( )
{
char a[5][11],buf[11];
int i,j,min;
for(i=0;i<5;i++)gets(a[i]);
for(i=0;i<5-1;i++){
min=i;
for(j=i+1;j<5;j++){
if(strcmp(a[j],a[min])<0)min=j;
}
if(min!=i){
strcpy(buf,a[i]);
strcpy(a[i],a[min]);
strcpy(a[min],buf);
}
}
for(i=0;i<5;i++)puts(a[i]);
}
28.将十进制数转换成其他进制的字符串 *
int main( )
{
char c[]="0123456789ABCDEF";//余数对应字符
char result[33];//存放结果
int dec,base,i,r;//转换的十进制整数及要转换的进制
for(i=0;i<32;i++)result[i]=' ';
result[32]='