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

1.有一个函数如下:

y=\left\{\begin{matrix}x(x<5) \\ x+6(5<=x<15) \\ x-6(x>=15) \end{matrix}\right.

输入 x 的值,计算出相应的 y 值。

#include<stdio.h>
int main(){
    int x,y;
    printf("x=");
    scanf("%d",&x);
    if(x<5) y=x;
    else if(x>=5&&x<15) y=x+6;
    else y=x-6;
    printf("y=%d",y);
    return 0;
}

2.输入一个小写字母,将其转换为大写字母。

#include<stdio.h>
#include<ctype.h>
int main(){
	char x;
	scanf("%c",&x);
	if(islower(x)==0) printf("error");
	else printf("%c is upper",x-32);
	return 0;
} 

3.求一个 3×3 矩阵主对角线元素之和。

#include<stdio.h>
int main(){
	int a[3][3];
	for(int i=0;i<3;i++){
		scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
	}
	for(int i=0;i<3;i++){
		printf("%-3d %-3d %-3d\n",a[i][0],a[i][1],a[i][2]);
	}
	printf("%d",a[0][0]+a[1][1]+a[2][2]);
	return 0;
}

4.求 100~999 之间的水仙花数。所谓水仙花数,是指一个 3 位数,它的每位数 字的立方之和等于该数。例如,因为 153=1+5+3,所以 153 为水仙花数。

#include<stdio.h>
int main(){
	for(int i=100,j,k,sum;i<1000;i++){
		j=i;
		sum=0;
		while(j){
			k=j%10;
			sum+=k*k*k;
			j/=10;
		}
		if(sum==i) printf("%d ",i);
	}
	return 0;
}

5.输入百分制成绩,并把它转换成五级分制,转换公式为:

grade=\left\{\begin{matrix} A(90-100)\\ B(80-89) \\ C(70-79) \\ D(60-69) \end{matrix}\right.

#include<stdio.h>
int main(){
	int i;
	scanf("%d",&i);
	if(i>=90) printf("A");
	else if(i>=80) printf("B");
	else if(i>=70) printf("C");
	else if(i>=60) printf("D");
	else printf("E");
	return 0;
} 

6. 斐波拉契数列递归实现的方法如下:

int Funct( int n )
{
if(n==0) return 1;
if(n==1) return 1;
return Funct(n-1) + Funct(n-2);
}

请问,如何不使用递归,来实现上述函数?

#include<stdio.h>
int main(){
	int a[20];//计算数列前二十个 
	a[0]=1,a[1]=1;
	printf("1 1 ");
	for(int i=2;i<20;i++){
		a[i]=a[i-1]+a[i-2];
		printf("%d ",a[i]);
	}
	return 0;
}

7.编写一个程序,将一个数组中的值按逆序重新存放。例如,原来顺序为 8,6,5,4,1。要求改为 1,4,5,6,8

#include<stdio.h>
int main(){
	int a[10]={8,6,10,4,7,11,22,2,77,13};
	//每次找到剩下的最小的,把它放到最前面 
	for(int i=0,k;i<9;i++){
		int min=a[i],pos=i;
		for(int j=i+1;j<10;j++){
			if(min>a[j]) min=a[j],pos=j;
		}
		k=a[i],a[i]=min,a[pos]=k;
		for(int i=0;i<10;i++){
			printf("%-4d",a[i]);
		}
		printf("\n");
	}
	return 0;
}

8.编写一个程序根据输入的三角形的三条边判断是否能组成三角形,如果可以 则输出它的面积和三角形类型(等边、等腰、直角三角形)。

#include<stdio.h>
#include<math.h>
int main(){
	int a,b,c,i;
	scanf("%d%d%d",&a,&b,&c);
	//先把三条边从小到大排序,可以减少后面条件选择 
	if(a>b) {i=a,a=b,b=i;} 
	if(a>c) {i=a,a=c,c=i;}
	if(b>c) {i=c,c=b,b=i;}
	//验证三边关系 
	if(a+b<=c|c-a>=b|c-b>=a) printf("error\n");
	double p=(a+b+c+0.0)/2,s;
	s=sqrt(p*(p-a)*(p-b)*(p-c));
	printf("s=%.2f\n",s);
	if(a==b&&a==c) printf("等边");
	if(a==b) printf("等腰");
	int A,B,C;
	A=a*a,B=b*b,C=c*c;
	if(A+B==C) printf("直角");
	return 0;
} 

9.. 从键盘输入若干个学生成绩,统计并输出最高成绩和最低成绩,当输入负数 时结束输入。

#include<stdio.h>
int main(){
	int grade,min,max;
	scanf("%d",&grade);
	min=max=grade;
	while(grade>=0){
		if(grade>max) max=grade;
		if(grade<min) min=grade;
		scanf("%d",&grade);
	}
	printf("min=%d,max=%d",min,max);
	return 0;
}

10.编写函数将化氏温度转换为摄氏温度,公式为 C=(F-32)*5/9;并在主函 数中调用。

#include<stdio.h>
double fun(double x){
	double y;
	y=(x-32)*5/9;
	return y;
}
int main(){
	double f,c;
	scanf("%lf",&f);
	c=fun(f);
	printf("f=%.2f,c=%.2f",f,c);
	return 0;
} 

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
王道训练营生产者消费者问是一个经典的同步问,其中包含一个生产者和一个消费者,它们共享一个有限的缓冲区(队列),生产者向缓冲区中放入数据,而消费者则从缓冲区中取出数据。采用基于对象的方式可以简化问的处理和封装。 在基于对象的实现中,我们可以创建两个对象:生产者对象和消费者对象。这两个对象都可以访问共享的任务队列对象,而任务队列对象则实现对缓冲区的访问和操作。 首先,我们需要定义任务队列对象,它可以有一个固定大小的缓冲区和一些基本的操作方法,如向队列中添加任务和从队列中取出任务。 接下来,我们创建生产者对象和消费者对象。生产者对象通过调用任务队列对象的添加任务方法,将任务加入队列。而消费者对象则通过调用任务队列对象的取出任务方法,从队列中取出任务。为了使生产者和消费者能够同时运行,我们可以使用多线程或多进程的方式。 在生产者和消费者的运行过程中,需要注意的是对任务队列的互斥访问,避免生产者在队列已满时继续添加任务,或者消费者在队列已空时继续取出任务。可以采用互斥锁或信号量来实现对任务队列的互斥访问,确保生产者和消费者的安全执行。 通过以上的设计和实现,我们可以实现一个使用基于对象的方式解决生产者消费者问王道训练营。这种方式可以帮助我们更好地封装和管理任务队列,使生产者和消费者的交互更加简单和高效。同时,这种基于对象的设计也符合面向对象的思想,提高了代码的可维护性和可扩展性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值