2023年蓝桥杯 第2届 预赛本科C语言真题解析

发布 2022-02-28 19:35:28 阅读 6961

void reverse_str(char* buf, int n)

if(n<2) return;

char tmp = buf[0];

buf[0] =buf[n-1];

buf[n-1] =tmp;

参***:reverse_str(buf+1,n-2)

将任意十进制正小数分别转换成2,3,4,5,6,7,8,9进制正小数,小数点后保留8位,并输出。例如:若十进制小数为0.795,则输出:

十进制正小数 0.795000 转换成 2 进制数为: 0.11001011

十进制正小数 0.795000 转换成 3 进制数为: 0.21011011

十进制正小数 0.795000 转换成 4 进制数为: 0.30232011

十进制正小数 0.795000 转换成 5 进制数为: 0.34414141

十进制正小数 0.795000 转换成 6 进制数为: 0.44341530

十进制正小数 0.795000 转换成 7 进制数为: 0.53645364

十进制正小数 0.795000 转换成 8 进制数为: 0.62702436

十进制正小数 0.795000 转换成 9 进制数为: 0.71348853

以下**提供了这个功能。其中,dtestno表示待转的十进制小数。ibase表示进制数。请填写缺失的部分。

void fun(double dtestno, int ibase)

int it[8];

int ino;

printf("十进制正小数 %f 转换成 %d 进制数为: "dtestno, ibase);

for(ino=0;ino<8;ino++)

printf("0.")

for(ino=0; ino<8; ino++)printf("%d", it[ino]);

printf("");

void main (

double dtestno= 0.795;

int ibase;

for(ibase=2;ibase<=9;ibase++)

fun(dtestno,ibase);

printf("");

参***:int)(dtestno)

dtestno > it[ino] *1.0

串“abcd”每个字符都向右移位,最右的移动到第一个字符的位置,就变为“dabc”。这称为对串进行位移=1的轮换。同理,“abcd”变为:“cdab”则称为位移=2的轮换。

下面的**实现了对串s进行位移为n的轮换。请补全缺失的**。

void shift(char* s, int n)

char* p;

char* q;

int len = strlen(s);

if(len==0) return;

if(n<=0 ||n>=len) return;

char* s2 = char*)malloc

p = s;

q = s2 + n % len;

while(*p)

strcpy(s,s2);

free(s2);

参***:sizeof(char) *len + 1)

某**活动的规则是:每位参与者在纸上写下一个8位数的号码。最后通过摇奖的办法随机产生一个8位数字。参与者写下的数字中最多有多少个连续位与开奖号码中的相同,则称为中了几个号。

例如:小张写的数字是:12345678,而开奖号码是:

42347856。则称小张中了3个号,因为其中最长的相同连续位是:“234”。

如果小张写的是:87654321,则他只中了一个号。

下面的**根据传入的参数,返回中了几个号。其中:a表示被评价的号码,b表示摇号产生的数字。请填写缺少的**。

把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答。txt”中即可。

int g(int a, int b)

char sa=00000000";

char sb=00000000";

int n = 0;

int i,j;

sprintf(sa,"%8d",a);

sprintf(sb,"%8d",b);

for(i=0; i<8; i++)

return n;

参***:sa[i + j]

n = j某个袋子中有红球m个,白球n个。现在要从中取出x个球。那么红球数目多于白球的概率是多少呢?

下面的**解决了这个问题。其中的y表示红球至少出现的次数。

这与前文的问题是等价的。因为如果取30个球,要求红球数大于白球数,则等价于至少取出16个红球。请根据仅存的线索,判断程序逻辑,并补全缺少的**。

m: 袋中红球的数目。

n: 袋中白球的数目。

x: 需要取出的数目。

y: 红球至少出现的次数。

double pro(int m, int n, int x, int y)

if(y>x) return 0;

if(y==0) return 1;

if(y>m) return 0;

if(x-n>y) return 1;

double p1

double p2

return (double)m/(m+n) *p1 + double)n/(m+n) *p2;

参***:pro(m - 1,n,x - 1,y - 1)

pro(m,n - 1,x - 1,y)

方阵的主对角线之上称为“上三角”。

请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。

例如:当n=3时,输出:

当n=4时,输出:

当n=5时,输出:

程序运行时,要求用户输入整数n(3~20)

程序输出:方阵的上三角部分。

要求格式:每个数据宽度为4,右对齐。

1)编程思路。

上三角阵的构造可以看成由向右填充(行号不变、列号加1,即col++)斜向下填充(row++、col--)和向上填充(行号减1、列号不变,即row--)三个子过程不断交替完成的。

例如,示例中的3阶上三角阵可以看成由向右填充),斜向下填充)和向上填充(6)这3个子过程完成的。4阶上三角阵可以看成由向右填充),斜向下填充)、向上填充)和向右填充(10)这4个子过程完成的。

n阶上三角阵可以看成由n个子过程完成,每个子过程为向右填充、斜向下填充和向上填充这三种中的一种,用变量direction来表示,其取值为或2,0表示向右填充,1表示斜向下填充,2表示向上填充。每个子过程结束后,切换填充方向,方式为:

direction=(direction+1)%3;

n个子过程中,第1个子过程填写n个数,第2个子过程填写n-1个数,…,最后一个子过程填写1个数。因此,程序总体写成一个二重循环,描述为:

for (i=n;i>=1;i--)

for (j=1;j<=i;j++)

按填充方向,填充相应数据。

direction=(direction+1)%3切换填充方向。

初始时,注意row=0,col=-1,这样向右col++后,col为0,正好填在第1个位置。

2)源程序。

# include <>

int main()

int a[20][20]=,row,col,i,j,n,num;

int direction=0;

scanf("%d",&n);

row=0; col=-1; num=1;

for (i=n;i>=1;i--)

for(row=0;row

return 0;

公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的**分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。

程序输入:第一行是一个整数m,代表可购买的商品的种类数。

2023年蓝桥杯 第2届 预赛高职C语言真题解析

小李年初在银行存款1千元 一年定期 他计划每年年底取出100元救助失学儿童。假设银行的存款利率不变,年利率为3 年底利息自动计入本金。下面的 计算5年后,该账户上有多少存款。试填写缺失的 double money 1000 int n 5 int i for i 0 i printf f a ret...

蓝桥杯2023年本科预赛 C语言

2012年预赛 c c 本科。一 微生物增殖 假设有两种微生物 x 和 y,x出生后每隔3分钟 一次 数目加倍 y出生后每隔2分钟 一次 数目加倍 一个新出生的x,半分钟之后吃掉1个y,并且,从此开始,每隔1分钟吃1个y.现在已知有新出生的 x 10,y 89,求60分钟后y的数目。如果x 10,y...

蓝桥杯2023年本科决赛 C语言

2011年决赛 c 本科。一 四方定理。数论中有著名的四方定理 所有自然数至多只要用四个数的平方和就可以表示。我们可以通过计算机验证其在有限范围的正确性。对于大数,简单的循环嵌套是不适宜的。下面的 给出了一种分解方案。请仔细阅读,填写空缺的 下划线部分 int f int n,int a,int i...