第二届 “国信蓝点”软件设计大赛 C语言模拟题(附程序题 解题程序)

6 篇文章 0 订阅

第二届 “国信蓝点”软件设计大赛 C语言模拟题

 

一 、以下是简答题:

1、代码填空

形如:“abccba”,“abcba”的串称为回文串,下列代码判断一个串是否为回文串。请补充空白的部分。 

char buf[] = "abcde11edcba";

int x = 1; 

for(int i=0; i<strlen(buf)/2; i++)

if(___________________)

{

x = 0;

break;

}

printf("%s/n", x ? "是":"否");(3分)

 

 

2、代码填空

下列代码把一个二进制的串转换为整数。请填写缺少的语句;

char* p = "1010110001100";

int n = 0;

for(int i=0;i<strlen(p); i++)

{

n = __________________;

}

printf("%d/n", n);(4分)

 

3、代码填空

假设a,b,c是3个互不相等的整数。下列代码取出它们中居中的数值,记录在m中。其中的swap()函数可以交换两个变量的值。请完善代码。

if(a>b) swap(&a, &b);

if(b>c) swap(&b, &c);

______________________;

int m = b;(4分)

 

4、代码填空

下面函数的目的是求出某个日期是该年度的第几天。试完善之。

如果传入:year=1980,month=1, day=1

则返回 1

如果传入:year=1980,month=2, day=1

则返回 32

int getDayOfYear(int year, int month, int day)

{

int days _____________________;

int flag =(year%4==0 && year%100!=0) || year%400 == 0 ? 1 : 0;

int sum = day ;

for(int i=0;i<month;i++) {

sum += days[flag][i];

}

return sum;

}(8分)

 

 

5、代码填空

计算3个A,2个B可以组成多少种排列的问题(如:AAABB, AABBA)是《组合数学》的研究领域。但有些情况下,也可以利用计算机计算速度快的特点通过巧妙的推理来解决问题。下列的程序计算了m个A,n个B可以组合成多少个不同排列的问题。请完善它。

int f(int m, int n)

{

if(m==0 || n==0) return 1;

return _______________________;

}(9分)

 

 

6、代码填空

(a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:

                 1

               1   1

              1  2  1

            1  3   3   1

          1  4   6   4   1

        1  5  10  10   5   1

下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。

int f(int m, int n)

{

if(m==0) return 1;

if(n==0 || n==m) return 1;

return __________________________; 

}(12分)

 

 

7、程序设计

从键盘输入一个整数(1~20)

则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:

输入数字2,则程序输出:

1 2

4 3

输入数字3,则程序输出:

1 2 3

8 9 4

7 6 5

输入数字4, 则程序输出:

1  2   3   4

12  13  14  5

11  16  15  6

10   9  8   7(16分)

 

8、程序设计

从键盘输入一个日期,格式为yyyy-M-d

要求计算该日期与1949年10月1日距离多少天

例如:

用户输入了:1949-10-2

程序输出:1

用户输入了:1949-11-1

程序输出:31(12分)

 

9、程序设计

当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。

该校验的过程:

1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。

2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。

3、将奇数位总和加上偶数位总和,结果应该可以被10整除。

例如,卡号是:5432123456788881

则奇数、偶数位(用红色标出)分布:5432123456788881

奇数位和=35

偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。

最后35+35=70 可以被10整除,认定校验通过。

请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。

比如,用户输入:356827027232780

程序输出:成功(12分)

 

10、程序设计

任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。

比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

请编写程序,找到5位数所有可能的循环圈,并输出,每个循 环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:

[82962, 75933, 63954, 61974]

其中数字的先后顺序可以不考虑。(20分)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值