一、判断题 (20分)
1. 语句char *p = \的含义是将字符串赋给字符型指针变量p。
2. 若指针变量指向一维数组的第一个元素,将指针变量加整数3,即指针后移3个元素。3. b是一维数组名,数组元素b[1]还可写成*(b++)。
4. 对二维数组a来说,由于a+1与*(a+1)的值相等,因此二者的含义是一样的。 5. 在二维数组中,行指针是指向一维数组的指针变量.
6. 取地址运算符&与指针运算符*的优先级相同,结合方向为自右向左。 7. 两个字符串中的字符个数相同时才能进行字符串大小的比较 8. 字符串不能用指针进行引用
9. char c[]=\是一个合法的为字符串数组赋值的语句。
10. char *p=\的含义是定义字符型指针变量p,p的值是字符串\。
2分
2分
2分
2分
2分
2分
2分
2分
2分
二、选择题 (24分)
1.下面程序段的运行结果是( )。 [B] char str[]=\printf(\
A. 67 B. 0 C. 字符′C′的地址 D. 字符′C′ 2.阅读下列程序,则执行后的结果为( )。 [B] #include \ int main()
{ int c[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56}; printf(\ }
A. 62,5 B. 3e,6 C. 56,5 D. 3E,6 3.下面程序段的运行结果是( )。 [C] char *s=\s+=2;
printf(\
A. cde B. 字符′c′ C. 字符′c′的地址 D. 无确定的输出结果 4.若有变量定义 int x=3,*p;,则下面语句不正确的是( )。 [A] A. p=&(x+1); B. p=&x; C. p=&x+1; D. p=&x, p++;
5.指针变量p1、p2类型相同,要使p2、p1指向同一变量,哪一个语句是正确的()。A] A. p2=*&p1; B. p2=**p1; C. p2=&p1; D. p2=*p1 6.若有语句:char *line[5];,以下叙述中正确的是( )。 [A]
A. 定义line是一个数组,每个数组元素是一个基类型为char为指针变量。 B. 定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组。 C. 定义line是一个指针数组,语句中的*号称为间址运算符。 D. 定义line是一个指向字符型函数的指针。
7.若有数组定义为int a[10],i; 与a[i]=100 等价的赋值表达式是 [B] A. a+i=100 B. *(a+i)=100 C. (a+i)=100 D. &a[i]=100 8.定义函数int *max()的正确含义是()。 [B]
2分
2分
2分
2分
2分
2分
2分
2分
A. 返回整型值的函数 B. 返回指向整型变量的指针 C. 返回指向函数max()的指针 D. 上面的叙述都不正确
9.若有定义“int (*ptr)(float);”,其正确的含义是()。 [C] A. ptr是指向一维数组的指针变量 B. ptr是指向int型数据的指针变量
C. ptr是指向函数的指针变量,该函数有一个float型参数,返回值是整型 D. ptr是一个函数名,该函数的返回值是指向int型数据的指针
10.若有定义char a[15]=\则strlen(a)返回值和sizeof(a)的返回值分2分
别为()。 [C] 2分
A. 11,15 B. 17,11 C. 10,15 D. 18,11
11.若有定义char a[15]=\则strlen(a+5)返回至为()。 [D] A. 8 B. 10 C. 17 D. 5
12.char s[]=\则数组s的字符串长度为()。 [C] 2分
A. 12 B. 10 C. 11 D. 18
三、程序填空题 (26分)
1. 功能:建立一个如下的二维数组,并按以下格式输出。 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 10分
#include
int a[5][5]={0},*p[5],i,j; for(i=0;i<5;i++) p[i]=__(1)__; for(i=0;i<5;i++) {
*( __(2)__ +i)=1;
*(p[i]+5-( __(3)__ ))=1; }
for(i=0;i<5;i++) {
for(j=0;j<5;j++) printf(\ putchar('\\n'); }
}
(1)答案 4分
&a[i][0] (2)答案 3分
p[i]
2分
(3)答案 3分
i+1
8分
2. 输入一个星期几的数值(0-6),输出该星期几的英文名 #include
*w[]={\ if(no>=0&&no<=6) puts(__(1)__); else printf(\星期数值输入错误\\n\}
void main() {
int w;
scanf(\ __(2)__;
}
(1)答案 4分 w[no] (2)答案 4分
week(w)
3. 功能:输入3个字符串,输出最大字符串。#include
char s[80],__(1)__; int i;
scanf(\
strcpy(max,__(2)__); for(i=1;i<=2;i++){ scanf(\
if(strcmp(__(3)__,s)<0) strcpy(max,s); }
printf(\}
(1)答案 3分
max[80] (2)答案 3分
s (3)答案 2分
max
8分
四、程序设计题 (30分)
1. 输入10个数,按绝对值从小到大排序后输出,要求定义一个函数sort,完成绝对值从小到大排序。(用指针完成) 题目描述
输入10个数,按绝对值从小到大排序后输出,要求定义一个函数sort,完成绝对值从小到大排序。(用指针完成) 输入描述
输入10个数 输出描述
按绝对值从小到大排序 样例输入
3 5 7 2 1 -15 3 8 9 4 样例输出
1 2 3 3 4 5 7 8 9 -15
10分
#include
int i,j; float *q, temp; //选择法排序
for (i=0;i for(j=i+1;j if(fabs(*(p+j)) *(p+i)=temp; } } void main() { } float a[10],*p; int i; for(p=a,i=0;i<10;i++) scanf(\p=a; sort( p, 10 ); for(i=0;i<10;i++,p++) printf(\ 2. 输入n和x, n和x分别表示对数组前n个元素赋初值为x,要求定义一个函数value,完成对一维整形数组的n个元素进行赋值,具体赋值为x. 题目描述 输入n和x, n和x分别表示对数组前n个元素赋初值为x,要求定义一个函数value,完成对一维整形数组的n个元素进行赋值,具体赋值为x.(要求用指针实现) 输入描述 输入n和x 输出描述 输出一维数组的前n个元素的值 样例输入 5 1 样例输出 1 1 1 1 1 10分 #include void value ( int *p, int n, int x ) { } void main() { int a[100], n, x, i; scanf( \ } value ( a, n, x ); for ( i=0; i printf( \int i; for ( i=0; i *( p+i )=x; 3. 字符串连接 题目描述 分别输入两个字符串保存在两个字符数组中,将其中较小的一个字符串连接到较大的字符串后面,然后输出连接后的字符串。 输入描述 输入两个字符串 输出描述 输出连接后的字符串,其中较小的连接在较大的字符串后面。 样例输入 apple orange 样例输出 orangeapple 10分 #include #include { char str1[80], str2[80]; gets(str1); gets(str2); if(strcmp(str1, str2)>0){ strcat(str1,str2); puts(str1); } else } } { strcat(str2,str1); puts(str2);