【王道训练营 C/C++方向基础 60 题(11-20)】

11. 输入一个自然数,输出其各因子的连乘形式,如输入 12,则输出 12=1*2*2*3。

#include<stdio.h>
int main(){
	int num;
	scanf("%d",&num);
	if(num==0) printf("0=0");// 输入为0 
	else if(num==1) printf("1=1");//输入为1 
	else{//输入大于1 
		printf("%d=1",num);
		for(int i=2,j=num;i<=num&&j>0;i++){
			while(j%i==0&&j>0){
				j/=i;
				printf("*%d",i);
			}
		} 
	} 
	return 0;
} 

12.N 个整数从小到大排列,输入一个新数插入其中,使 N+1 个整数仍然有序。

#include<stdio.h>
#define N 10
int main(){
	int a[N+1]={1,2,3,4,6,7,8,9,10,12};
	int b;
	scanf("%d",&b);
	//二分法查找 
	int left,right,mid;
	left=0,right=N-1;
	while(left<=right){
		mid=(left+right)/2;
		if(b==a[mid]) break;
		else if(b>a[mid]) left=mid+1;
		else if(b<a[mid]) right=mid-1;	
	}
	for(int i=N;i>left;i--){
		a[i]=a[i-1];
	}
	a[left]=b;
	for(int i=0;i<N+1;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

13.在 100~200 之间找出满足用 3 除余 2,用 5 除余 3 和用 7 除余 2 的所有整数。

#include<stdio.h>
int main(){
	for(int i=100;i<=200;i++){
		if(i%3==2) printf("%d %% 3 = 2\n",i);
		if(i%5==3) printf("%d %% 5 = 3\n",i);
		if(i%7==2) printf("%d %% 7 = 2\n",i);
	}
	return 0;
}

14.输入 10 个同学的成绩,统计 80 分以上和不及格的人数,并输出平均值。

#include<stdio.h>
int main(){
	int grade[10],stu_80,stu_60,sum,average;
	stu_80=stu_60=sum=0;
	for(int i=0;i<10;i++){
		scanf("%d",&grade[i]);
		if(grade[i]>80) stu_80++;
		else if(grade[i]<60) stu_60++;
		sum+=grade[i];
	}
	average=sum/10;
	printf("80+:%d 60-:%d average:%d\n",stu_80,stu_60,average);
	return 0;
}

15.编写一个函数来检验输入的一个字符是大写字母还是小写字母或不是 26 个 英文字母。

#include<stdio.h>
void alpha(char x){
	if(x>='a'&&x<='z') printf("小写字母\n");
	else if(x>='A'&&x<='Z') printf("大写字母\n");
	else printf("不是 26 个英文字母\n");
}
int main(){
	char x;
	scanf("%c",&x);
	alpha(x);
	return 0;
}

16.编写一个程序,从键盘输入半径和高,输出圆柱体的底面积和体积。

#include<stdio.h>
#define PI 3.14
int main(){
	double r,h,s,v;
	scanf("%lf%lf",&r,&h);
	s=2*PI*r*h+2*PI*r*r;
	v=PI*r*r*h;
	printf("s = %f,v = %f\n",s,v);
	return 0;
}

17.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(){
	char a[100];
	gets(a);
	puts(a);
	int len=strlen(a),n1,n2,n3,n4;
	n1=n2=n3=n4=0;
	for(int i=0;i<len;i++){
		if(isalpha(a[i])) n1++;
		else if(a[i]==' ') n2++;
		else if(isdigit(a[i])) n3++;
		else n4++;
	} 
	printf("英文字母:%d\n空格:%d\n数字:%d\n其他字符:%d\n",n1,n2,n3,n4);
	return 0;
}

18.编写程序,形成如下矩阵,并输出。

\begin{bmatrix} 11111\\ 21111 \\ 32111 \\ 43211 \\54321 \end{bmatrix}

#include<stdio.h>
int main(){
	char a[5][10]={"11111"};
	//先赋a[1]初值11111 
	for(int i=1;i<5;i++){
		//a[i]=a[i-1]
		for(int j=0;j<5;j++){
			a[i][j]=a[i-1][j];
		}
		// 在 a[i]=a[i-1]的基础上,前i位分别加一 
		for(int k=i-1;k>=0;k--){
			a[i][k]++;
		}
	}
	for(int i=0;i<5;i++){
		puts(a[i]);
	}
	return 0;
}

19.用递归函数完成以下运算: sum(n)=12+22+…+n2 函数的原型如下: long sum(int n); 该函数完成 12+22+…+n2 的运算,并返回运算结果,其中 n>0。 提示:你可以使用递归表达式:sum(n)=sum(n-1)+n2

#include<stdio.h>
long sum(int n){
	if(n==1) return 12;
	else return (sum(n-1)+n*10+2);
}
int main(){
	int n;
	long m;
	scanf("%d",&n);
	m=sum(n);
	printf("%d",m);
	return 0;
}

20.编写一个程序,将整数转换成字符串:void itoa(int,char);

#include<stdio.h>
#include<string.h>
//前后交换函数 
void change(char *z){
	int len=strlen(z);
	for(int i=0,j;i<len/2;i++){
		j=z[i],z[i]=z[len-1-i],z[len-1-i]=j;
	}
}
void itoa(int x,char *y){
	//为负时取反 
	if(x<0){
		y[0]='-';
		x=-1*x;
	}
	if(x==0) y[0]='0';
	//y[0]留作符号位 
	int i=1;
	while(x!=0){
		y[i]=(x%10+'0');
		x/=10;
		i++;
	} 
	//前后交换
	change(y+1);
	//如果符号位为空,前移一位 
	if(y[0]=='\0'){
		int len=strlen(y+1); 
		for(int j=0;j<len;j++){
			y[j]=y[j+1];
		} 
		//后移完清空 
		y[len]='\0'; 
	} 
}
int main(){
	int x;
	char y[32]={0};
	scanf("%d",&x);
	itoa(x,y);
	puts(y); 
	return 0;
}

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值