Error

1.若变量a是int类型,并执行了语句:a = ‘A’+1.6; ,则正确的叙述是(A )[2分]

A.a的值是字符B

B.a的值是浮点型

C.不允许字符型和浮点型相加

D.a的值是字符 ‘A’ 的ASCII值加上2

key: ‘A’的ascii码为65,65+1.6 = 66.6 赋值到变量a中,由于变量a是int类型,所以ascii码为66的字符为B

2.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是(D)[2分]

A.函数的实参和其对应的形参共占同一存储单元

B.形参只是形式上的存在,不占用具体存储单元

C.同名的实参和形参占同一存储单元

D.函数的形参和实参分别占用不同的存储单元

key: 定义函数的时候函数参数列表中的形参是不占内存的。用户在调用函数接口时,需要按照函数的参数列表来向函数提供对应的数据,数据的数量和数据的类型必须和形参一致。

当一个函数被调用之后,函数的形参才会得到对应的内存,并且函数的形参的内存只会在函数内部生效,当函数调用完成后,则函数形参的内存会被系统自动释放。

当用户调用一个函数时,如果函数有参数列表,则用户需要提供对应的数据给函数,而用户提供的数据的类型必须和函数参数类型一致,用户实际提供的数据被称为实际参数,简称为实参,而实参是必须存在的,实参的形式可以是表达式、常量、变量、地址........

3.将一个递归算法改为对应的非递归算法时,通常需要使用( A )。[2分]

A.栈

B.队列

C.循环队列

D.优先队列

4.设有条件表达式:EXP?i++:j--;,则以下表达式与之完全等价的是(B )[2分]

A.(EXP==0) ? i++ : j--;

B.(EXP!=0) ? i++ : j--;

C.(EXP==1) ? i++ : j--;

D.(EXP!=1) ? i++ :j--;

key:非0即真

5.若变量已正确定义,有以下程序段,其输出结果是(B)
i = 0;do{
printf(“%d”, i);
}while(i++);
printf(“%d\n”, i);[2分]

A.0,0

B.0,1

C.1,1

D.程序进入无限循环

key:i=0,先做输出的动作,输出0,做while循环,执行while(0),while循环后面有空语句“;”,执行++的动作,最后输出1,综上所述输出0,1

6.有以下计算公式,则不能够正确计算公式的程序段是(B)(提示:库函数sqrt()用来求一个数的平方根)
image

A.if(x>=0) y=sqrt(x); else y=sqrt(-x);

B.y=sqrt(x) if(x<0) y=sqrt(-x);

C.if(x>=0) y=sqrt(x); if(x<0) y=sqrt(-x);

D.y=sqrt(x>=0? x:-x);

key:sqrt()函数的作用是计算根号下的变量,要求输出的参数必须大于等于0。B选项sqrt(x)而没有判断x的正负

7.有以下程序,程序的运行结果是()
#include <stdio.h>
int main(void)
{
int y = 9;
for( ; y>0; y--)
{
if(y%3 == 0)
{
printf(“%d”, --y);
}
}
}

A.741

B.963

C.852

D.875421

key:把9赋值为y,进入for循环,由于初始值为9,判断9 >0 ,执行if语句,9%3 == 0,执行输出语句,由于输出语句为“--”,输出为“--9”--->9-1 == 8,输出为8,y-- ----> 8-1 == 7,判断“y>0”,满足,执行if语句,if条件不满足,不输出,执行"--y" --->7-1 == 6 ,执行"y>0"满足,执行if,满足if条件,执行输出语句,输出为6-1 = 5,综上输出为82.....,只有选项C前有8,5

8.假定一个顺序存储的循环队列的队头和队尾下标分别为front和rear,队列容量为MaxSize ,则判断队满的条件为 (rear+1)%MaxSize == front||front==(rear+1)%MaxSize

9.请编写一个函数strip, 用来删除字符串中的所有空格。例如, 输入apple tree, 则输出为 appletree。字符串从键盘输入。

void strip(char *s)
{
    int i,j;  
    for(i=0;s[i];i++)  
    {   
     if(s[i]==' ')   
     {    
       for(j=i;s[j];j++)    
       {       
          s[j]=s[j+1];
       }   
     }   
    }
} 
int main (void) 
{    char s[200];
    bzero(s, 200);
    printf("input:");
    fgets(s, 200, stdin);
    strip(s);
    printf("%s",s);
}

10.编写一个函数,实现单链表逆序,无需实现单链表的具体细节,函数原型如下:

void reverse_list(single_list *head)
{
     single_list *p = head->next; //将链表除头节点的节点保存
     head->next = NULL;//将链表断开
     single_list *tmp = NULL;
     while(p != NULL)
     {
        tmp = p->next;//将后面还未逆序的节点保存

        //将p插入到head的后面
        p->next = head->next;
        head->next = p;

       //将tmp的值赋给p
        p = tmp;
     }
}

11.现在已经有如下接口函数(无需实现以下函数)
struct stack *stack_init(); //初始化栈
void push(struct stack *stack,int num); //压栈
bool pop(struct stack *stack); //出栈
int get_top(struct stack *stack); //获取栈顶元素
bool isEmpty(struct stack *stack); //判断栈是否为空
请你利用以上方法实现将键盘输入的十进制数,转换为十六进制输出

int main(void)
{    
   struct stack *s = stack_init();    
   printf("请输入一个十进制数:");   
   int num;    
   scanf("%d",&num);    
   while(num)    
   {        
      push(s,num%16);  
      num /= 16;         
   }    
   int data;    
   char buf[20];    
   int len = 0;    
   while(!isEmpty(s))   
   {        
      data = get_top(s);        
      if(!pop(s))            
        break;        
      if(data >= 10)       
      {           
         buf[len++] = data+55;        
      }        
      else        
      {           
         buf[len++] = data+48;       
      }  
    }   
    printf("0x%s\n",buf);
}
posted @ 2024-04-29 08:25  WJnuHhail  阅读(75)  评论(0)    收藏  举报