实验室第一次考核:
1.在调用函数时如果实参是简单变量它与对应形参之间的数据传递方式是( C )
A.由实参传给形参再由形参传回实参
B.地址传递
C.单向值传递
D.传递方式由用户指定
形式参数:在定义函数时函数名后面括号中的变量名称。形参的个数可以有多个,多个形参之间用逗号隔开。
实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数;实际参数可以是常量,变量或表达式,但要求有确定的值
实参向形参传递数据的方式是“值传递”,规则如下:
1.实参与形参之间是单向的值传递。只能由实参传递给形参。实参与形参必须类型相同或赋值兼容,个数相等,一 一对应。在函数调用过程中,即使实参为变量,形参的改变也不会改变实参变量的值。
2.实参在函数调用之前有确定的值。
2.以下字符中不是转义字符的是( D )
A."\a"
B."\b"
C."\"
D. “\c”
字符形式 | 字符含义 |
---|---|
\n | 回车换行,光标从当前位置移到下一行开头 |
\t | 横条到下一制表的位置 |
\b | 退格,光标向后退一格 |
\r | 回车,光标从当前位置移到当前行开头 |
\f | 光标从当前位置移到下一行开头 |
\ | 反斜线符 |
\’ | -单引号符- |
\’’ | 双引号符 |
\a | 响铃 |
\r | 回车 |
3.有枚举类型定义enum weekday { Sun,Mon,Tue=0,Wed, Thu,Fri,Sat } 则按值 Fri 对应的整数值为( C ).
A.4
B.2
C.3
D.1
枚举常量的默认值依次等于0,1,2…枚举常量所表示的整型数值,后面一个总是前面的值+1
在定义枚举类型时,也可以给枚举常量赋初值,如果仅给一部分枚举常量赋了初值,则其后的枚举常量表示的整型值是前一个枚举常量表示的值+1
4.对二维数组的正确定义是( B )
A.int a[2,3]={1,2,3,4,5,6)
B.int a[ ][3]=(1,2,3,4,5,6)
C.int a[2][ ]={1,2,3,4,5,6}
D.int a[ ][ ]={1,2,3.4,5,6}
二维数组定义时可以省略行,但不能省略列。理解如下:
我们将二维数组看成若干一维数组,每一行就是一个一维数组,而二维数组的列就代表一位数组中可以存放的元素,只有确定每个一维数组中可以存放多少元素才能正确定义二维数组。省略行,系统会根据二维数组大小及列数自动分配行数。省略列,有可能平均分配,有可能全部给第一个一维数组分配
5.在双向链表指针p的指针前插入一个指针q的结点操作是( B ).
A. p->prior=q: p->prior->next=q; q->=p: q-> prior =p-> prior。
B.q->next=p:q->prior=p->prior:p->prior–next=qp->prior=q。
C. g-> prior =p-> prior; q->next=q: p-prior=q: p->prior =q。
D. p->prior=q; q->next=p: p->prior->next= q->prior =q。
6.以下代码:
int main(){
int a[5]={1,2,3,4,5};
intptr=(int)(&a+1);
printf("%d, %d",*(a+1)., *(ptr-1));
system(“pause”);
return 0;}
输出答案为:2 5
数组元素中的"[ ]"是变址运算符,即a[i]可以写成*(a+i)
*(a+1)相当于a[1],a[1]=2
(&a+1)获得变量a的地址,加1后获得与a类型相同的相邻地址
因此(&a+1)指向的地址为&a[5],ptr指向a[5], *(ptr-1)=a[4]=5
7.以下代码:
int main(){
int a[3][2]={(0,1),(2,3),(4,5)};
int *p;
p= a[0];
printf(" %d\n ", p[0]);
system(“pause”);
return 0;}
输出答案 : 1
本题意在考察逗号运算符!!1
逗号运算符,先求解表达式1,在求解表达式2,逗号表达式的值是表达式2的值
我们很容易将此题看成是int a[3][2]={{0,1},{2,3},{4,5}}
正确的二维数组应该是int a[3][2]={1,3,5}
即p[0]=a[0][0]=1
8.通过键输入两整型量a和b定义两个指针变量p1相p2指向整型变量a和b,然后a和b相互比较大小,a若小于b,则调用函数swap实现a和b两数交换然后再按从小到大数序输出。(拍照上传)
#include <stdio.h>
int max(int *i,int *j)
{
int t;
t=*i;
*i=*j;
*j=t;
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int *p1,*p2;
p1=&a;
p2=&b;
if(*p1<*p2)
{
printf("%d %d",*p1,*p2);
}
else
{
max(p1,p2);
printf("%d %d",*p1,*p2);
}
}
9.简述结构体和共用体的区别.
结构体与共用体有相似的用法,但二者有本质的区别。在结构体中,各成员有各自的内存空间,一个结构体变量所占内存空间的总长度是各成员所占内存空间长度之和。而在共用体中,个成员共享一段内存空间;一个共用体变量的存储空间的长度,等于其各个成员中的存储空间最长成员的长度,使用了内存覆盖技术,如果对新的成员赋值,就会把原来成员的值覆盖掉
10.下述四个定义有什么区别?
- char *const p;
- char const *p;
- const char *p;
const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的
char * const p//const修饰p,p是指针不可变,p指向的对象可变
char const *p//const修饰(*p),p是指针可变,*p是指针指向的对象不可变
const char *p//const修饰(*p),*p是指针可变,*p是指针指向的对象不可变