习 题 9
一.选择题
9.1 若有定义:intx,*p;则以下正确的赋值表达式是()。 (A) p=&x (B) p=x (C) *p=&x (D) *p=*x 9.2 下述程序执行后,变量i的正确结果是()。 int i;
char*s=″a\\045+045\\b″; for(i=0;*s++;i++); (A) 7 (B) 8 (C) 9 (D) 10 9.3 以下程序段的输出结果是( )。
charstr[12]={′s′,′t′,′d′,′i′,′o′}; printf(″%d\\n″,strlen(str)); (A) 5 (B) 6 (C) 11 (D) 12 9.4 下列函数的功能是( )。 int fun(char*x){ char*y=x; while(*y++); return y-x-1;}
(A)求字符串的长度 (B)求字符串存放的位置
(B) 比较两个字符串的大小 (D)将字符串x连接到字符串y后面 9.5 执行下列程序段后,printf(″%c″,*(p+5))的值为( )。 charstr[]=″Hello″; char*p;p=str;
(A)′o′(B)′\\0′(实际就是空)(C)不确定的值 (D)′o′的地址 9.6 有以下的定义及语句:
int a[4][5]; int (*p)[5]=a;
则对数组a元素正确引用的表达式是( )。
(A)p+1 (B)*(p+3) (C)*(p+1)[2] (D)*(*p+1)+2. 二 编程题
9.1 编写一函数,判断N×N矩阵是否为上三角阵。上三角阵是指不含主对角线,下半三
角都是0的矩阵。 main(){
int n,*a,i,j,t=0; scanf(\for(i=0;i for(i=0;i if (t==0) printf(\else printf(\} 运行结果: 9.2 有一个字符串,包含n个字符,将字符串从第i个字符到第j个字符间的字符逆置。 程序代码: #include \#include \void main() {char *s,ch; int i,j; printf(\scanf(\ printf(\ scanf(\ %d\for(;i *(s+i)=*(s+j);*(s+j)=ch; }printf(\} 运行结果: 9.3 编写一个函数,对n个字符开辟连续的存储空间,此函数返回一个指针(地址)指 向字符串开始的空间。 # define NULL 0 # define NEWSIZE 1000/*足够大的连续存储空间*/ static char newbuf[NEWSIZE]; static char *newp=newbuf;/*可用存储区的起始地址的指针*/ char *new(n)/*定义开辟n个字符连续存储空间的函数,此函数返回一个指针(地址)*/ int n; { if(newp+n<=newbuf+NEWSIZE)/*存储空间够用*/ { newp+=n;/*起始地址指向新地方*/ return(newp-n);}/*返回n个字节连续空间的开始地址*/ else return(NULL);}/*如果存储空间不够,返回空指针*/ main() { char *p; p=new(100);/*调用函数开辟100个字符的连续可用空间*/ printf(\运行结果: 9.4 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成 最前面的m个数 .程序源代码: main() { int number[20],n,m,i; printf(\scanf(\printf(\scanf(\for(i=0;i scanf(\scanf(\move(number,n,m); for(i=0;i printf(\ printf(\} move(array,n,m) int n,m,array[20]; { int *p,array_end; array_end=*(array+n-1); for(p=array+n-1;p>array;p--) *p=*(p-1); *array=array_end; m--; if(m>0) move(array,n,m); } 运行结果: 9.5 输入n个整数,将最小数与第一个数对换,把最大数与最后一个数对换 程序源代码: main() { int number[10]; input(number); max_min(number); output(number); } input(number)