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()用来求一个数的平方根)

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);
}

浙公网安备 33010602011771号