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...