2016年計(jì)算機(jī)四級嵌入式系統(tǒng)開發(fā)工程師模擬試題三

字號:


    一.3、分析題。
    本題(各5分)。假設(shè)下面代碼中的變量都是合法變量,調(diào)用外部的函數(shù)都是正確的。回答幾個(gè)問題:
    這些代碼意圖要干什么?
    是否有問題?
    如果有問題,該如何修改,或者如何避免類似錯(cuò)誤發(fā)生?
    如果沒有問題,如果代碼有輸出,輸出是什么?
    1、———————————————————–
    int isvowel (char c)
    {
    return c==’a’’’’’’’’||c==’e’’’’’’’’||c==’i’’’’’’’’||c==’o’’’’’’’’||c==’u’’’’
    }
    2、———————————————————–
    while (c==’\t’||c=’ ‘||c==’\n’)
    c=getc(f);
    3、———————————————————–
    /* 當(dāng)x=2, y=3, z=? */
    if (x==0)
    if (y==0)
    z=-1;
    else
    z=x+y;
    4、———————————————————–
    /* 處理網(wǎng)絡(luò)事件 */
    void process_network_code(int x, int y)
    {
    /* 選擇modes_pointer資源 */
    switch (line) {
    case THING1:
    /* 處理異常1#, 使用老的modes_pointer資源 */
    doit1();
    break;
    case THING2:
    /* 處理異常2#, 需要重新啟動(dòng)服務(wù) */
    if (x == STUFF) {
    /* 重新申請modes_pointer資源,沒有初始化 */
    do_first_stuff();
    /* 在這種條件下,有些資源不用重新申請 */
    if (y == OTHER_STUFF)
    break;
    /* 申請剩下的資源,并初始化 */
    do_later_stuff();
    }
    /* 初始化modes_pointer資源 */
    initialize_modes_pointer();
    break;
    default:
    /* 處理普通事件, 使用老的modes_pointer資源 */
    processing();
    }
    /* 使用modes_pointer資源,處理事件 */
    use_modes_pointer();
    }
    5、———————————————————–
    int is_gb2312_char(char c1, char c2)
    {
    if (c1 >= 0xa1 && c2 >= 0xa1)
    return 1;
    else
    return 0;
    }
    6、———————————————————–
    下面x, y的值是多少,有什么問題?
    int x = 10, y = 3;
    x ^= y;
    y ^= x;
    x ^= y;
    /* x=?, y = ? */
    7、———————————————————–
    int days[]={31,28,31,30,31,30,31,31,30,31,30,31,};
    int calendar[12][31];
    int (*monthp)[31];
    int *dayp;
    int i;
    memset(calendar, 0, sizeof(calendar));
    i = 0;
    for (monthp = calendar; monthp < &calendar[12]; monthp++) {
    for (dayp = *monthp; dayp < &(*monthp)[31]; dayp++) {
    if (dayp - *monthp < days[calendar - monthp]) {
    *dayp = i++ % 7 + 1;
    }
    }
    }
    8、———————————————————–
    void printnum(long n)
    {
    if (n < 0) {
    putchar(’-’’’’’’’’);
    n = -n;
    }
    if (n >= 10) {
    printnum(n/10);
    }
    putchar (”0123456789″[n%10]);
    }
    9、———————————————————–
    void * memchr(void *pv, unsigned char ch, size_t size)
    {
    unsigned char *pch = (unsigned char *) pv;
    unsigned char *pchEnd = pch + size;
    while (pch < pchEnd) {
    if (*pch == ch)
    return (pch);
    pch++;
    }
    return NULL;
    }
    10、———————————————————–
    void * memchr(void *pv, unsigned char ch, size_t size)
    {
    unsigned char *pch = (unsigned char *) pv;
    unsigned char *pchPlant = pch + size;
    unsigned char chSave = *pchPlant;
    *pchPlant = ch;
    while (pch != ch) {
    pch++;
    }
    *pchPlant = chSave;
    return ((pch == pchPlant) ? NULL : pch);
    }