zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言/C++常见习题问答集锦(十六)

C++C语言 常见 习题 集锦 问答 十六
2023-09-14 09:01:32 时间

C语言/C++常见习题问答集锦(十六)

程序之美

在这里插入图片描述

1、假设一对兔子的成熟期是一个月,即一个月可长成成兔,那么,如果每对成兔每个月都生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,以后每个月会有多少对兔子?

#include <stdio.h>
int main()
{
    int i,ta,tb,tc,m;
    ta=1;
    tb=1;
    printf("请输入月份数\n");
    scanf("%d",&m);
    if(m==1||m==2)
    {
        printf("有一对兔子");
    }
    else if(m>2)
    {
        for(i=3;i<=m;i++)
        {
            tc=ta+tb;
            ta=tb;
            tb=tc;
        }
        printf("%d 月的兔子数为:%d\n",m,tc);
    }
    return 0;
}

2、输入一个字符数组,运用c语言除去里面的乘号
删除中间的星号

#include<stdio.h>
int main()
{
    char str[99]="**A*BC*D***";
    int i,j=0,k,n=0,flag=0;
    for(i=0;str[i]!='\0';i++)
        if(str[i]!='*')
        {
            str[j++]=str[i];
            flag=1;
            n=i; //最后一个不是*的字符的位置
        }
        else
        {if(!flag)str[j++]=str[i];}
        for(k=0;k<i-n-1;k++)//i-n-1为后面*的个数
            str[j+k]='*';
        str[j+k]='\0';
        puts(str);
        return 0;
}

删除全部星号

#include<stdio.h>
int main()
{
    char str[99]="";
    int i=0,j=0;
    gets(str);
    for(;str[i]!='\0';i++)
        if(str[i]!='*'){str[j]=str[i];j++;}
        str[j]='\0';
        puts(str);
        return 0;
}

在这里插入图片描述

3、定义两个字符数组,小的数组接在大数组的后面

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[1024];
    char str2[1024];
    gets(str1);
    gets(str2);
    if(strcmp(str1,str2)>=0)
        printf("%s",strcat(str1,str2));
    else
        printf("%s",strcat(str2,str1));
    return 0;
}

4、循环输入5位同学4门课程成绩,计算出每位同学的平均分(判断输入的成绩是否为0~100,若输入错误,给出相应的提示,并重新输入)

#include<stdio.h>
int main()
{
	float score[5][4],aver[5]={0};
	int i,j;
	printf("输入学生的成绩:");
	for(i=0;i<5;i++)
		for(j=0;j<4;j++)
		{
			scanf("%f",&score[i][j]);
			if (score[i][j] > 100 || score[i][j] < 0)
			{
				printf("第%d位同学第%d门成绩有误,请重新输入!\n", i + 1, j + 1);
				j--;
				continue;
			}
			aver[i]+=score[i][j];
		}
		printf("每位同学的平均分为:");
		for(i=0;i<5;i++)
		{
			aver[i]/=4;
			printf("%5.2f",aver[i]);
		}
		printf("\n");
}

在这里插入图片描述

5、C语言利用递归解决汉诺塔问题

分为两类
1.a盘上只有一个盘(终止条件)
将a盘上的移到c盘
2.a盘上不止一个
(1)将a盘上的n-1个盘通过c盘移到b盘
(2)同1
(3)将b盘上的n-1个盘通过a盘移到c盘

#include <stdio.h>

// 将 n 个盘子从 a 借助 b 移动到 c
void move(int n, char a, char b, char c)
{
	if( 1 == n )
	{
		printf("%c-->%c\n", a, c);
	}
	else
	{
		move(n-1, a, c, b);				// 将 n-1 个盘子从 a 借助 c 移到 b 上
		printf("%c-->%c\n", a, c);		// 将 第 n 个盘子从 a 移到 c 上
		move(n-1, b, a, c);				// 将 n-1 个盘子从 b 借助 a 移到 c 上
	}
}

int main()
{
	int n;

	printf("请输入汉诺塔的层数: ");
	scanf("%d", &n);
	printf("移动的步骤如下: \n");
	move(n, 'X', 'Y', 'Z');

	return 0;
}