习题9答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题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("%d",&n);
for(i=0;i for(j=0;j scanf("%d",a+i*n+j); for(i=0;i for(j=0;j if (*(a+i*n+j)!=0) t=1; if (t==0) printf("is xia san jiao fang zhen"); else printf("not is xia san jiao zhen"); } 运行结果: 9.2有一个字符串,包含n个字符,将字符串从第i个字符到第j个字符间的字符逆置。程序代码: #include "stdlib.h" #include "stdio.h" void main() {char *s,ch; int i,j; printf("input string s\n"); scanf("%s",s); printf("input i j\n"); scanf("%d %d",&i,&j); for(;i {ch=*(s+i); *(s+i)=*(s+j);*(s+j)=ch; }printf("%s",s); } 运行结果: 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("%u",p);} 运行结果: 9.4题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成 最前面的m个数 .程序源代码: main() { int number[20],n,m,i; printf("the total numbers is:"); scanf("%d",&n); printf("back m:"); scanf("%d",&m); for(i=0;i scanf("%d,",&number[i]); scanf("%d",&number[n-1]); move(number,n,m); for(i=0;i printf("%d,",number[i]); printf("%d",number[n-1]); } 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)