程序员-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.
2.
3.
4.
5.
试题二
阅读以下说明和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.
2.
3.
4.
5.
试题三
阅读以下说明和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;
/*计算从1900年1月1日起,至给定年份year的1月13日间隔的天数*/
days=12;
for(y=1900; y<year; y++)
days +=365;
一个完整的c语言程序 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.
2.
3.
4.
5.
试题四
阅读以下说明和C语言程序,填补空缺。
[说明]
某电信公司记录了每个用户的详细通话情况(每次通话数据记录在一行),现将某用户某月的通话数据存入一个文本文件“”中,其数据格式如下:
拨入或拨出标记通话开始时间通话结束时间对方号码
注1:数据字段以一个空格作为分隔符。
注2:拨入和拨出标记均为小写字母。拨入标记为“i”,表示其他用户呼叫本机,本机用户不需付费;拨出标记为“o”,表示本机呼叫其他用户,此时本机用户需要付费。
注3:通话开始和结束时间的格式均为:HH:MM:SS。其中HH表示小时,取值00~23;MM表示分钟,取值00~59;SS表示秒,取值00~59。从通话开始到结束这段时间称为通话时间,假定每次通话时间以秒为单位,最短为1秒,最长不超过24小时。
注4:跨月的通话记录计入下个月的通话数据文件。
例如“o 23:01:12 00:12:15…”表示本次通话是本机呼叫其他用户,时间从23时01分12秒至次日的0时12分15秒,通话时间为71分03秒。
下面程序的功能是计算并输出该用户本月电话费(单位:元)。
通话计费规则为:
(1)月通话费按每次通话费累加;
(2)每次的通话费按通话时间每分钟0.08元计算,不足1分钟时按1分钟计费。
对于每次的拨出通话,程序中先分别计算出通话开始和结束时间相对于当日0点0分0秒的时间长度(以秒为单位),然后算出本次通话时间和通话费。
例如,若输入文件dial.txt的数据如下所示,则输出fee=7.44。
o 14:05:23 14:11:25 82346789
i 15:10:00 16:01:15 XX
o 10:53:12 11:07:05 63000123
o 23:01:12 00:12:15 XX
[C语句程序代码]
#include<stdio.h>
FILE *fin;
int main( )
char str[80];
int h1, h2, m1, m2, s1, s2;
long t_start, t_end, interval;
int c;
double fee=0;
fin=fopen("dial. txt", "r")j;
if (!fin)
return -1;
while(!feof(fin))
if(!fgets(str, 80, fin)) break;
if( (1) ) continue;
h1=(str[2]-48)*10+str[3]-48;
m1=(str[5]-48)*10+str[6]-48;
s1=(str[8]-48)*10+str[9]-48;
h2=(str[11]-48)*10+str[12]-48;
m2=(str[14]-48)*10+str[15]-48;
s2=(str[17]-48)*10+str[18]-48;
t_start=h1*60*60+m1*60+s1; /*通话开始时间*/
t_end=h2*60*60+m2*60+s2; /*通话结束时间*/
if( (2) ) /*若通话开始和结束时间跨日*/
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论