您现在的位置是:首页 >技术教程 >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]='';
	printf("请输入要转换的数据 进制:
");
	scanf("%d %d",&dec,&base);
	i=31;//逆序存放的下标
	while(dec>0){
		r=dec%base;
		result[i--]=c[r];
		dec/=base;
	} 
	puts(result);
}

在这里插入图片描述

29.计算一个3X4矩阵a和一个4X3矩阵b相乘的值,并输出结果r,r为一个3X3矩阵。(r [ i ][ j ]=a的第i行和b的第j列元素相乘的累加和)

int main( )
{      
	long x1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},
	x2[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
	long result[3][3];
	long sum=0;
	int i,j,k;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++){
			sum=0;
			for(k=0;k<4;k++)
				sum+=x1[i][k]*x2[k][j];
			result[i][j]=sum;
		}
	for(i=0;i<3;i++){
		for(j=0;j<3;j++)
			printf("%ld ",result[i][j]);
		printf("
");
	}
}

在这里插入图片描述

30.逆序输出字符串

#include<string.h>
int main( )
{      
	char s1[100]="12345ABC",s2[100];
	int i,j,len=strlen(s1);
	for(i=len-1,j=0;i>=0;i--)
		s2[j++]=s1[i];
	puts(s2);
}

在这里插入图片描述

31.判断是否回文字符串

int main( )
{      
	char s[100];
	gets(s);
	int i,j,len=strlen(s);
	for(i=0,j=len-1;i<j;i++,j--){
		if(s[i]!=s[j])break;
	}
	if(i>=j)printf("yes");
	else printf("no");
}

在这里插入图片描述

32.连接字符串

int main( )
{      
	char s1[100],s2[100];
	gets(s1);gets(s2);
	int i=0,j=0;
	while(s1[i]!='')i++;
	while(s2[j]!=''){
		s1[i+j]=s2[j];
		j++;
	}
	s1[i+j]='';
	puts(s1);
}

在这里插 入图片描述

33.每传递三个字符后存放一个空格,例如输入abcdefg,输出abc def g

int main( )
{      
	char s[100],t[120];
	gets(s);
	int i=0,k=0;
	while(s[i]!=''){
		t[k++]=s[i++];
		if(i%3==0){
			t[k]=' ';k++;continue;
		}		
	}
	puts(t);
}
int main( )
{      
	int j,k=0;
	char s[60],t[100],*p;
	p=s;
	gets(p);
	while(*p){
		for(j=1;j<=3&&*p;j++,p++,k++)
			t[k]=*p;
		if(j==4){
			t[k]=' ';
			k++;
		}
	}
	t[k]='';
	puts(t);
}

在这里插入图片描述

34.用递归的方式求n!

int fun(int n){
	if(n==1)return 1;
	else return n*fun(n-1);
}
int main( )
{      
	int n;
	scanf("%d",&n);
	printf("%d",fun(n));
}

在这里插入图片描述

35.将一个子字符串插入到主字符串的指定位置

int main( )
{      
	char s1[100]={"youarebeautiful"},s2[100],s3[50];//s3暂存字符串 
	printf("请输入子字符串:");
	gets(s2);
	int i,j=0,n;
	printf("请输入要插入的位置:");
	scanf("%d",&n);
	i=n;
	while(s1[i]!=''){
		s3[j]=s1[i];//原数组n后面的部分保存到s3里 
		j++;i++;
	}
	s3[j]='';
	j=0;
	while(s2[j]!=''){ 
		s1[n]=s2[j];  //s1被赋值要插入的字符串,n为插入位置 
		j++;n++;
	}
	s1[n]='';
	strcat(s1,s3);
	puts(s1);
}

在这里插入图片描述

36.统计子串在母串中出现的次数

int main( )
{      
	char s1[100],s2[100];
	int i,j,t,count=0;
	scanf("%s%s",s1,s2);//输入母串和子串 
	i=0;
	while(s1[i]!=''){
		t=i;j=0;
		while(s2[j]!=''&&s1[t]==s2[j]){
			t++;j++;
		}
		if(s2[j]==''){
			count++;
			i=t;
		}
		else i++;
	} 
	printf("出现了%d次",count);
}

在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。