一、选择题(每题三分,共30分)
1、下面定义的局部变量中,生存周期是全程序的( )
A、integer I; B、auto char m; C、register float k;
D、static int m;
2、下面关于二维数组a[4][5]的说法正确的是( )
A、a是指向该数组的列指针
B、该数组一共具有(4+1)*(5+1)=30个元素
C、其数组元素在内存中同样以线性方式连续存放
D、*((a+i)+j)=a[i][j] (已知:j、i有效)
3、下面用于定义常量正确的操作是( )
A、#define max 100 B、int k=100;
C、const n=100; D、char ch=’a’
4、关于指针的说法正确的是( )
A、对指针赋NULL,表示让指针指向一个无效存储单元;
B、对任何指针进行*操作都是取最终目标变量的内容;
C、任何时候都可以允许指针进行加一、减一操作;
D、任何时候都可以允许指针进行关系比较运算,都有意义;
5、与表达式a*=b+8等价的表达式为:
A. a=a+8 B. a*b=
6、关于循环说法正确的是( )
A、已知循环次数时,只能使用for循环;
B、不知道循环次数时,就不能使用for循环;
C、do while必须让循环体至少作一次
D、三种循环无法互相转换
7、关于if 语句的说法不正确的是( )
A、if可以和goto语句组成循环语句;
B、if语句中可以嵌套if语句;
C、if要和最近的没有配对的else配对;
D、if语句中不能嵌套其他类型的语句
8、关于switch语句的说法,下面不正确的是( )
A、该语句用于多路分支语句;
B、每个分支最后可以加break语句,也可以不加break语句,效果一样;
C、case后面一般使用常量值;
D、如果所有的情况都不匹配,将会执行default后的语句
9、关于递归程序的说法,下面那种说法正确( )
A、递归程序都无法转变为非递归程序实现;
B、递归程序中,一定要设置出口,否则将会成为死递归同样一个程序,
C、递归实现的效率一般要比非递归高
D、递归函数一般都是带参数的函数。
10、定义一个数组int a[10],该数组的第二个元素是( )
A、a[1] B、a[2] C、可以随意定 D、a[0]
11、下面定义的语句中,是定义的指向函数的指针的是( )
A、int *(*p)(void) B、int *p[10] C、int *p(int i)
D、int *(*p)[10]
12、关于define的说法正确的是( )
A、 该语句在程序编译、运行时进行
B、 该语句就是c语言中的常量定义语句
C、 在带参数的define语句中,参数加括号括起与不加括号效果相同
D、该语句在程序编译之前进行,并且只是进行简单的字符替换,而没有语法检查
13、一个变量在内存中占据一定内存单元,该存储单元中存放:___ _ __
A.变量地址 B. 变量值 C. 变量类型 D. 变量的指针
14、若有下列定义:int a[5], *p=a; 则对数组元素地址的正确引用是 。
A、&a[5] B、p+2 C、a++ D、&a
15、下面的算式3/4*4的结果是________________
A、3 B、1 C、0.0 D、0
二、程序填空题(每题5分,共15分)
1、 下面的程序使两个整数排序后由大到小输出
void swap(int **r,int **s)
{ int *t; t=*r;____________;*s=t;}
main()
{ int a=1,b=2,*p,*q;
______________;____________;swap(&p,&q);
printf("%d,%d\n",*p,*q);
}
2、 下面程序使用指针对一维数组取值打印
main()
{ int *p,s[10],I;
_______________;
_______________;
for(;p<=s+10;I++)
printf(“%d\n”,__________);}
3、 下面程序使用循环求解n!(N>=0),n由键盘输入。
main()
{int n,result,i;
_______________;
result=1;
for (I=1;I<=n;I++)
______________;
printf(“%n”, result);
}
三、读程序写结果(每题5分,共15分)
1、读下面程序写出输出结果
swap(int *p1, int *p2)
{ int *p; p=p1; p1=p2; p2=p;
}
main()
{ int a=5,b=9;
int *pointer_1,*pointer_2;
pointer_1=&a; pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);
printf("%d,%d",*pointer_1,*pointer_2);
} 程序运行结果是:________________。
2、有下面程序,请写出结果
main( )
{ int i, a[10];
for(i=0;i<=9;i++) a[i]=i;
for(i=9;i>=1;i--) printf(“%d”,a[i]);
}
写出以上程序的输出结果:
3、读下面程序写结果
main() { char s[]="abcdef"; s[4]='\0'; printf("%s\n",s);}
以上程序的运行结果为:____ ___
四、程序分析(共10分)
1)对于以下程序
main( )
{ int i=30; int *p;
*p=i; printf(“%d”,*p);
}
请指出是否有错误的地方,并说明错误原因。
(2)如下程序目的是给一个结构体变量赋值
struct student
{ int num; char name[20]; char sex;
int age; float score;
char addr[30];
}stu1;
main()
{scanf(“%d,%s,%c,%d,%f,%s”,&stu1);
}
请指出是否有错误的地方,说明原因。
五、程序设计题(每题10分,共30分)
1、设计一个函数对其接收输入的两个浮点数参数进行比较,返回较大的数。
2、在学校门口摆放由黄、红两种花组成的25*25的正方形花阵,一层黄花、一层红花,问需要多少盆黄花,多少盆红花。编写一程序求解。
3、假设有一二维数组a[4][4],编程序实现将其行、列元素对应互换。
即:a[i][j]与a[j][i]互换。