程序员-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小时内删除。