国信蓝点杯高职C语言试题解析

4星 · 超过85%的资源 需积分: 3 4 下载量 84 浏览量 更新于2024-09-15 收藏 36KB DOC 举报
"这是2011年度国信蓝点杯软件大赛高职组的C语言试题,涉及填空题,涵盖金融计算、数值方法、算法和日期处理等多个知识点。" 第一题,涉及到金融中的复利计算。小李存款的本金1000元,存期5年,年利率3%,而小王每年资助100元。题目要求计算存款到期后的余额。此处的空白处应填写`money * (1 + 3/100)`,表示钱在银行的增值。完整的循环代码如下: ```c for (i = 0; i < n; i++) { money = money * (1 + 3/100); // 复利计算 money -= 100; // 每年资助贫困儿童 } ``` 第二题,要求用迭代法求2的平方根。这是一种牛顿迭代法,每次逼近目标值的一半作为新的估计值。空白处应填写`n/a`,即当前的b值。完整代码如下: ```c while (fabs(a - b) > 1E-15) { a = (a + b) / 2; b = n / a; // 迭代求解平方根 } ``` 第三题,要求计算两个整数的最小公倍数(LCM)。空白处应填写`i += a`,通过遍历从a开始递增的整数来找到能被a和b整除的最小值。完整函数如下: ```c int lcm(int a, int b) { for (int i = a;; i += a) { // 从a开始递增检查 if (i % b == 0) return i; } } ``` 第四题,计算两个日期之间的天数差。这里涉及到日期处理,包括闰年的判断。空白处应填写`x.month`,表示遍历月份。完整的`GetAbsDays`函数如下: ```c int GetAbsDays(MyDate x) { int i; int month_day[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int year = x.year - 1; // 因为欲求距离1年1月1日的差值 int days = year * 365 + year / 4 - year / 100 + year / 400; if (x.year % 4 == 0 && x.year % 100 != 0 || x.year % 400 == 0) month_day[1]++; // 闰年2月有29天 for (i = 0; i < x.month; i++) { days += month_day[i]; } days += x.day - 1; return days; } ``` 第五题,字符串轮转。例如,字符串"abcd"向右移一位变成"bcd'a'"。空白处应填写字符串长度`strlen(str) - 1`,用于获取下一个字符的位置。实现如下: ```c void rotate(char* str) { int len = strlen(str) - 1; char temp = str[len]; for (int i = len; i > 0; i--) { str[i] = str[i - 1]; } str[0] = temp; } ``` 这些题目覆盖了C语言的基础知识,如循环、条件判断、数学运算、字符串处理、数组以及函数应用,同时也考察了实际问题的解决能力。