• C++笔试题(十)


    这些题目相比其他公司的试题,较为基础,全部为C语言,没有涉及C++,但如果不细心,是很难得到较高分数的。另外大家转贴不要去掉我的个人信息啊。互相宣传下网站嘛。
    1. 找错

    1 void test1()
    2 {
    3 char string[10];
    4 char* str1=”0123456789″;
    5 strcpy(string, str1);
    6 }


    答:表面上并且编译都不会错误。但如果string数组原意表示的是字符串的话,那这个赋值就没有达到意图。最好定义为char string[11],这样最后一个元素可以存储字符串结尾符’′;

    1 void test2()
    2 {
    3 char string[10], str1[10];
    4 for(int I=0; I<10;I++)
    5 {
    6 str1[I] ='a';
    7 }
    8 strcpy(string, str1);
    9 }


    答:strcpy使用错误,strcpy只有遇到字符串末尾的''才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]='',这样就正常了。

    1 void test3(char* str1)
    2 {
    3 char string[10];
    4 if(strlen(str1)<=10)
    5 {
    6 strcpy(string, str1);
    7 }
    8 }


    答:这又会出现第一道改错题的错误了。strlen(str1)算出来的值是不包含结尾符''的,如果str1刚好为10个字符+1结尾符,string就得不到结尾符了。可将strlen(str1)<=10改为strlen(str1)<10。

    2. 找错

     1 #define MAX_SRM 256
     2 
     3 DSN get_SRM_no()
     4 {
     5 static int SRM_no;
     6 int I;
     7 for(I=0;I<MAX_SRM;I++,SRM_no++)
     8 {
     9 SRM_no %= MAX_SRM;
    10 if(MY_SRM.state==IDLE)
    11 {
    12 break;
    13 }
    14 }
    15 if(I>=MAX_SRM)
    16 return (NULL_SRM);
    17 else
    18 return SRM_no;
    19 }


    答:我不知道这段代码的具体功能,但明显有两个错误
    1,SRM_no没有赋初值
    2,由于static的声明,使该函数成为不可重入(即不可预测结果)函数,因为SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。这里应该去掉static声明。

    3. 写出程序运行结果

     1 int sum(int a)
     2 {
     3 auto int c=0;
     4 static int b=3;
     5 c+=1;
     6 b+=2;
     7 return(a+b+c);
     8 }
     9 void main()
    10 {
    11 int I;
    12 int a=2;
    13 for(I=0;I<5;I++)
    14 {
    15 printf("%d,", sum(a));
    16 }
    17 }


    答:8,10,12,14,16
    该题比较简单。只要注意b声明为static静态全局变量,其值在下次调用时是可以保持住原来的赋值的就可以。
    ----------------------------------------------
    插播广告啦:版权所有:朱科 欢迎光临我的网站:www.goodsoft.cn,各位转贴别删,劳动成果啊
    ----------------------------------------------
    4.

     1 int func(int a)
     2 {
     3 int b;
     4 switch(a)
     5 {
     6 case 1: b=30;
     7 case 2: b=20;
     8 case 3: b=16;
     9 default: b=0;
    10 }
    11 return b;
    12 }
    13 则func(1)=?


    答:func(1)=0,因为没有break语句,switch中会一直计算到b=0。这是提醒我们不要忘了break。呵呵。

    5:

    1 int a[3];
    2 a[0]=0; a[1]=1; a[2]=2;
    3 int *p, *q;
    4 p=a;
    5 q=&a[2];
    6 则a[q-p]=?


    答:a[q-p]=a[2]=2;这题是要告诉我们指针的运算特点

    6.
    定义 int **a[3][4], 则变量占有的内存空间为:_____
    答:此处定义的是指向指针的指针数组,对于32位系统,指针占内存空间4字节,因此总空间为3×4×4=48。

    7.
    编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
    答:

     1 /*输入年月日时分秒,输出年月日时分秒的下一秒,输出仍然在原内存空间*/
     2 bool NextMinute(int *nYear,int *nMonth,int *nDate,int *nHour,int *nMinute,int *nSecond)
     3 {
     4 if(*nYear12 || *nMonth23 || *nHour59 || *nSecond59) return false;
     5 int nDays;
     6 switch(*nMonth)
     7 {
     8 case 1:
     9 case 3:
    10 case 5:
    11 case 7:
    12 case 8:
    13 case 10:
    14 case 12:
    15 nDays=31;
    16 break;
    17 case 2:// 判断闰年
    18 if(*nYear%400==0||*nYear%100!=0&&*nYear%4==0)
    19 {
    20 nDays=29;
    21 }
    22 else
    23 {
    24 nDays=28;
    25 }
    26 break;
    27 default:
    28 nDays=30;
    29 break;
    30 }
    31 if(*nDatenDays) return false;
    32 
    33 (*nSecond)++; // 秒加1
    34 if(*nSecond>=60) // 秒满60,做出特殊处理,下面时,日,月等类同
    35 {
    36 *nSecond=0;
    37 (*nMinute)++;
    38 if(*nMinute>=60)
    39 {
    40 *nMinute=0;
    41 (*nHour)++;
    42 if(*nHour>=24)
    43 {
    44 *nHour=0;
    45 (*nDate)++;
    46 if(*nDate>nDays)
    47 {
    48 *nDate=1;
    49 (*nMonth)++;
    50 if(*nMonth>12)
    51 {
    52 *nMonth=1;
    53 (*nYear)++;
    54 }
    55 }
    56 }
    57 }
    58 }
    59 return true;
    60 }
    61 /*示例可运行代码*/
    62 void main()
    63 {
    64 int nYear=2004,nMonth=12,nDate=31,nHour=23,nMinute=59,nSecond=59;
    65 bool res = NextMinute(&nYear,&nMonth,&nDate,&nHour,&nMinute,&nSecond);
    66 if(res)
    67 printf(“The result:%d-%d-%d %d:%d:%d”,nYear,nMonth,nDate,nHour,nMinute,nSecond);
    68 else
    69 printf(“Input error!
    ”);
    70 }


    转载者注:(对原文有部分修改)

  • 相关阅读:
    LightOJ 1203--Guarding Bananas(二维凸包+内角计算)
    断言assert()与调试帮助
    POJ 3528--Ultimate Weapon(三维凸包)
    POJ 2208--Pyramids(欧拉四面体体积计算)
    HDU 1411--校庆神秘建筑(欧拉四面体体积计算)
    HDU 1241 DFS
    HDU 2037(贪心)
    一次傻乎乎的错误QAQ
    封装Qt的SQLite接口类
    最小生成树(Kruskal算法)模板
  • 原文地址:https://www.cnblogs.com/lpxblog/p/5278399.html
Copyright © 2020-2023  润新知