小李年初在银行存款1千元(一年定期)。他计划每年年底取出100元救助失学儿童。假设银行的存款利率不变,年利率为3%,年底利息自动计入本金。
下面的**计算5年后,该账户上有多少存款。试填写缺失的**。
double money=1000;
int n=5;
int i;
for(i=0;i
printf("%f", a);
return 0;
参***:n/a
求两个数字的最小公倍数是很常见的运算。比如,3和5的最小公倍是15。6和8的最小公倍数是24。
下面的**对给定的两个正整数求它的最小公倍数。请填写缺少的**,使程序尽量高效地运行。
int f(int a, int b)
int i;
for(i=a
if(i%b==0) return i;
参***:i+=a 或者 i = i + a;
人类历史上出现了很多种历法。现行的公历即格里历由儒略历改革而来。它是目前较为精确和规则简明的一种历法,约2023年误差一日。
因为闰年问题以及每个月的长度不等,仍然使得某些计算较为麻烦。比如:求两个日期间差多少天。
下面的**实现了求两个由公历表示的日期间差多少天的功能。其计算原理是先求出每个日期距离1年1月1日的天数差值,再进一步做差即可。请研读**,填写缺失的部分。
#include <>
typedef struct mydate ;
int year = 因为欲求距离1年1月1日的距离。
int days = year * 365 + year/4 - year/100 + year/400;
if( &month_day[1]++
for(i=0; i days +=month_day[i];
days +=
return days;
int getdiffdays(mydate a, mydate b)
return getabsdays(b) -getabsdays(a);
int main(int argc, char* ar**)
int n;
mydate a =
mydate b =
n = getdiffdays(a,b);
printf("%d", n);
return 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)
下面**的目标是输出一个大写字母组成的金字塔。其中space表示金字塔底距离左边的空白长度,x表示金字塔底的中心字母。
比如:space=0, x=’c’,则输出:aaba
abcba再如:space=2,x=’e’, 则输出:aaba
abcbaabcdcba
abcdedcba
请分析该段**的逻辑,填写缺少的部分。
void h(int space, char x)
int i;
if(x<'a' |x>'z') return;
for(i=0; i for(i=0; i for(i=0; i<=x-'a'; i++)printf("%c
printf("");
参***:h(space+1, x-1)
x-i 某**活动的规则是:每位参与者在纸上写下一个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在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。
具体规则如下:
1. 把每个单词的首字母变为大写。
2. 把数字与字母之间用下划线字符(_)分开,使得更清晰。
3. 把单词中间有多个空格的调整为1个空格。
例如:用户输入:
you and me what cpp2005program
则程序输出:
you and me what cpp_2005_program
用户输入:this is a 99cat
则程序输出:
this is a 99_cat
我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。假设用户输入的串长度不超过200个字符。
1)编程思路。
按题目给定的规则对字符串中的字符处理时,需要知道字符串中当前待处理字符前一个字符的情况。定义变量flag来标记,flag=0表示前一个字符为空格,flag=1表示前一个字符为小写字母,flag=2表示前一个字符为数字。
在处理当前字符ch时,根据flag的值分为三种情况:
1)flag=0。若当前字符为小写字母,则一定是单词的首字母,变大写后保存,修改flag=1;
若当前字符为数字,直接保存,之后修改flag=2
若当前字符为空格,不用保存直接跳过,相当于删除了多余的空格。
2)flag=1。若当前字符为小写字母,直接保存;
若当前字符为数字,在数字前加“-”后保存,之后修改flag=2;
若当前字符为空格,直接保存,之后修改flag=0。
2)flag=2。若当前字符为小写字母,在字母前加“-”后保存,修改flag=1;
若当前字符为数字,直接保存;
若当前字符为空格,直接保存,之后修改flag=0。
2)源程序。
#include <>
#include <>
int main()
char src[201],dest[201],ch;
int flag=0; /flag=0,1,2分别表示前一字符为空格,字母,数字。
2023年蓝桥杯 第2届 预赛本科C语言真题解析
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进制正小数,小数点后...
蓝桥杯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...
2019l蓝桥杯c语言高职真题附加答案
2011蓝桥杯大赛模拟c语言试题 形如 abccba abcba 的串称为回文串,下列 判断一个串是否为回文串。请补充空白的部分。char buf abcde11edcba int x 1 for int i 0 i if buf i buf strlen buf 1 i printf s x 是 ...