程序员-C语言程序设计(一)
(总分35, 做题时间90分钟)
试题一
阅读以下说明和C语言函数,回答问题。
[说明]
下面待修改的C程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。下面给出的C程序代码中有5个错误,请指出所有的错误。
[C程序代码]
01 #include <stdio.h>
02
03 int main( )
04
05 long n, num;
06 int i;
07
08 do
09 printf("清输入一个正整数: ");
10 scanf("%id", n);
11 while(n<=0);
12 k=1;
13 for(i=1; n>=0; i++)
14 if(i io 2=1)
15 Rum=num+(n%10)*k;
16 k=k * 10;
17
18 n=n/10;
19
20 printf("新数据为: %d\n", num);
21 return 0;
22
1.
该问题分值: 1
答案:变量k没有定义。
2.
该问题分值: 1
答案:变量num应初始化为0。
3.
该问题分值: 1
答案:第10行n之前应加取地址符号。
4.
该问题分值: 1
答案:第13行n应大于0。
5.
该问题分值: 1
答案:第14行if语句条件错误,应该将“=”改为“==”。
[解析] 本题中有如下5个错误:(1)变量k没有定义就使用。(2)变量num没有初始值就使用。(3)第10行输入变量时没有使用取地址符号。(4)第13行循环条件设置错误,造成无穷循环。(5)第14行误把赋值符号“=”当做关系运算符“等于”。
试题二
阅读以下说明和C程序代码,将程序补充完整。
[说明]
下面C程序代码的功能是:对于输入的一个正整数n(100≤n<1000),先判断其是否是回
文数(正读反读都一样的数)。若不是,则将n与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278不是回文数,其反序数为872,相加后得到的1150还不是回文数,再将1150与其反序数511相加,得到的1661是回文数。
函数int isPalm(long m)的功能是:将正整数m的各位数字取出存入数组中,然后判断其是否为回文数。若m是回文数则返回1,否则返回0。
[C程序代码]
#include<stdio.h>
#include<stdlib.h>
int isPalm(long m)
int i=0, k=0;
char str[32];
while(m>0)
str[k++]= (1) +'0';
m=m/10;
for(i=0; i<k/2; i++)
if(str[i]!=str[ (2) ])return 0;
return 1;
int main( )
long n, a, t;
printf("input a positive integer: "); scanf("%ld", &n);
if(n<100||n>=1000)return -1;
while( (3) )
printf("%id->", n);
for(a=0, t=n; t>0; )
a= (4) *10+t%10; t=t/10;
n= (5) ;
printf("%id\n", n);
system("pause"); return 0;
1.
该问题分值: 1
答案:m%10或其他等价形式
2.
该问题分值: 1
答案:k-i-1
3.
该问题分值: 1
答案:!isPalm(n),或isPalm(n)!=1或isPalm(n)==0
4.
该问题分值: 1
答案:a
5.
该问题分值: 1
答案:n+a
[解析] 函数isPalm(long m)的功能是判断m是否为回文数,其方法是将m的各位数字依次取出并转换为对应的数字字符保存在数组str中,然后再判断str中的字符中序列是否对称。将m的个位数取出可以采用如下公式“m%10”,即对10取余数。所以(1)处应为m%10或其他等价形式。若判断数组str中的字符序列是否对称,即比较str(i)与str(k-1-i)是否相等,所以(2)应为k-1-i。函数isPalm(long m)的功能是判断m是否为回文数,(3)处应该是对它的调用,同时取反,即“!isPalm(n)”。(4)处为“a”,(5)处应该是数n与反序数a相加得到的新数,即“n+a”。
试题三
阅读以下说明和C语言函数,填补空缺。
[说明]
已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个“黑星期五”。“黑星期五”指既是13日又是星期五的日期。
函数count_5_13(int year)首先算出年份year的1月13日是星期几,然后依次计算每个月的13日是星期几,若是星期五,则计数。
程序中使用了函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为1(或0)分别表示year是(或不是)闰年。
[C语言函数]
int Count_5_13(int year)
int date; /*date为0表示星期日,为1~6分别表示星期一至星期六*/
long days=0; /*days记录天数*/
int m, y, c=0; /*c用于表示黑星期五的个数*/
if(year<1900) return-1;
一个完整的c语言程序 /*计算从1900年1月1日起,至给定年份year的1月13日间隔的天数*/
days=12;
for(y=1900; y<year; y++)
days +=365;
if (iSLeapYear(Y)) (1) ;
date=((days%7)+1)%7;
/*算出给定年份year的1月13日是星期几+/
c=( (2) )?1:0;
for(m=1; (3) ; m++)
switch(m)
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days=31; break;
case 4: case 6: case 9: case 11:
days=30; break;
case 2: days=28;
if( (4) )days=29;
break;
/*end of switch*/
date=((days%7)+ (5) )%7;
if (date==5) c++;
/*end of for*/
return c;
1.
该问题分值: 1
答案:days=days+1或其他等价形式
2.
该问题分值: 1
答案:date==5或其他等价形式
3.
该问题分值: 1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论