C语言 习题九参考答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

printf("before swap B:\n"); /*输出交换前数组b */
for(i=0;i<100;i++)
printf("%3d",b[i]);
printf("\n");
for(i=0;i<100;i++)
/*a、b数组元素交换 */
swap(&a[i],&b[i]);
printf("after swap A:\n"); /*输出交换后数组a */
{if(*s1>*t1)return 1; if(*s1<*t1)return -1; if(*s1++==*t1++)continue; } if(*s1>*t1)return 1; if(*s1==*t1)return 0; if(*s1<*t1) return -1; } main() {int k; char s[80]="123456"; char t[40]="123456"; puts(s);puts(t); k=strcmp(s,t); if(k==1)printf("s>t:%d\n",k); if(k==0)printf("s==t:%d\n",k); if(k==-1)printf("s<t:%d\n",k); 解2: /*P279_3b.c */ #include "string.h" int sstrcmp(char *s,char *p) {while(*s!='\0'&&*p!='\0'&&*s++==*p++); if(*s>*p)return 1; else if (*s==*p)return 0; else return -1; } main() {char a[80],b[80]; int k; gets(a);gets(b); k=sstrcmp(a,b); if(k==1)printf("a>b\n"); if(k==0)printf("a==b\n"); if(k==-1)printf("a<b\n"); }
int max,min;
find_max_min(int *p,int n)
{int *q;
max=min=*p;
for(q=________;________;q++) (q=p q<p+n)
if(________)max=*q;
(*q>max)
else if (________)min=*q; (*q<min)
D)char str[ ]={'F','O','R','T','R','A','N','\0'}
12、已知:char s[20]="programming", *ps=s; 则不能引用字母 o 的表达式是( )。
A)ps+2 B)s[2] C)ps[2] D)ps+=2,*ps
13、已知:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则不能表示数组 a 中元素的表达式是
int n; gets(s1); gets(s2); printf("Input n(n<strlen(s1):\n"); do scanf("%d",&n); while(n>=strlen(s1)); insert(s1,s2,n); puts(s1); } insert(char *p1,char *p2,int k) {char tem[80]; strcpy(tem,p1+k); /*保存第 k 个字符开始的字符*/ *(p1+k)='\0'; /*使第 k 个字符之前的字符为一个独立字符串*/ strcat(p1,p2); /*将 p2 复制到 p1 之后*/ strcat(p1,tem);/*再将保存再 tem 中的字符串连接到 p1 末尾*/ }
char s2[40]="sdajkhew"; int n; puts(s1);puts(s2); n=strlen(s1); printf("Input n(0----%d):\n",n); scanf("%d",&n); insert(s1,s2,n); puts(s1); }
解3 #include "string.h" main() {char s1[80],s2[30];
A)printf(%s\n",s);
B)printf("%s\n",*s);
C)for(i=0;i<7;i++)
D)for(i=0;i<7;i++)
printf("%c",c[i]);
printf("%c",s[i]);
16、已知:int i=0,j=1,*p=&i,*q=&j; 错误的语句是( )。
3、已知:int a,*p=&a; 则下列函数调用中错误的是( )。
A)scanf("%d",&a); B)scanf("%d",p); C)printf("%d",a); D)printf("%d",p);
4、main(argc,argv)中形式参数 argv 的正确说明形式应当为( )。
A)char *argv[ ] B)char argv[ ][ ] C)char argv[ ] D)char *argv
8、已知函数说明语句:void *f(); 则它的含义是( )。
A)函数 f 的返回值是一个通用型的指针 B)函数 f 的返回值可以是任意的数据类型
C)函数 f 无返回值
D)指针 f 指向一个函数,该函数无返回值
9、已知:char s[10],*p=s,则在下列语句中,错误的语句是( )。
A)p=s+5; B)s=p+s; C)s[2]=p[4]; D)*p=s[0];
for(i=0;i<80;i++) {str[i]=getchar(); if(str[i]=='\n')break; } str[i]=___________; ('\0' ) sptr=str; while(*sptr) putchar(*sptr_______); ( ++ ) } 4、下面的程序实现从 10 个数中找出最大和最小值。 #include "stdio.h"
5、说明语句"int (*p)(); "的含义是( )。
A)p 是一个指向一维数组的指针变量
B)p 是一个指针变量,指向一个整型数据
C) p 是一个指向函数的指针,该函数的返回值是一个整型
D)以上都不对
6、设有说明 int(*ptr)[M];其中的标识符 ptr 是( )。
A)M 个指向整型变量的指针
{for(j=0;j<4;j++) printf("%4d",___________); (*p+i*4+j) }
} 3、下面程序的功能是:从键盘上输入一行字符;存入一个字符数组中,然后输出该字符串。
#include "stdio.h" main() {char str[81],*sptr; int i;
19、C 语言主函数 main()最多允许有( )个参数。
A)1
B)2
C)0
D)3
20、已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10}; int(*ptr)[3]=a,*p=a[0]; 则以下能够
正确表示数组元素 a[1][2]的表达式是( )。
A)*((ptr+1)[2]) B)*(*(p+5)) C)(*ptr+1)=2 D)*(*(a+1)+2)
sf[i]=sa[n+i++];
sf[i]='\0'; i=0; while(sb[i]!='\0') sa[n+i]=sb[i++]; while(sf[k]!='\0') sa[n+i++]=sf[k++]; sa[n+i]='\0'; }
main() {char s1[80]="dsahfdjkahfke";
}
main()
{int i,num[10];
printf("input 10 numbers:\n")
for(i=0;i<10;i++)
scanf("%d",&num[i]);
find_max_min(num,10);
printf("max=%d;min=%d\n",max,min);
}
三、编程题
1、编写一函数,其功能是交换两个变量 x、y 的值。编程序实现对数组 a[100],b[100]调用
sf[i++]=*p; sf[i]='\0'; for(p=sa+n;*sb!='\0';p++,sb++) *p=*sb; for(q=sf;*q!='\0';p++,q++) *p=*q; *q='\0'; }
main() {char s1[80]="dsahfdjkahfke";
char s2[40]="sdajkhew"; int n; puts(s1);puts(s2); n=strlen(s1); printf("Input n(0----%d):\n",n); scanf("%d",&n); insert(s1,s2,n); puts(s1); } 解 2: /* P279_2B.C */ #include "string.h" insert(char sa[],char sb[],int n) {char sf[80]; int i=0,k=0; while(sa[n+i]!='\0')
for(i=0;i<100;i++) /*产生数组a和b */
{a[i]=random(100);
b[i]=random(100);
}Baidu Nhomakorabea
printf("before swap A:\n"); /*输出交换前数组a */
for(i=0;i<100;i++)
printf("%3d",a[i]);
printf("\n");
( )。
A)*p
B)a[10]
C)*a
D)a[p-a]
14、已知:char **s; 正确的语句是( )。
A)s="computer"; B)*s="computer"; C)**s="computer"; D)*s='A’;
15、已知:char c[8]="beijing",*s=c; int i; 则下面的输出语句中,错误的是( )。
习题九
一、 单选题
1、 已知:int *p,a;则语句"p=&a;"中的运算符"&"的含义是( )。
A)位与运算 B)逻辑与运算 C)取指针内容 D)取变量地址
2、已知:int a,x;则正确的赋值语句是( )。
A)a=(a[1]+a[2])/2 B)a*=*a+1; C)a=(x=1,x++,x+2); D)a="goog";
二、填空题 1、下面的函数是求两个整数之和,并通过行参传回结果。
int add(int x, int y,________z) (int *) {________=x+y;} ( *z ) 2、下面程序通过指向整型的指针将数组 a[3][4]的内容按 3 行 4 列的格式输出,请给 printf() 填入适当的参数,使之通过指针 p 将数组元素按要求输出。 #include "stdio.h" int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*p=a; main() {int i,j; for(i=0;i<3;i++)
A)i=*&j; B)p=&*&i; C)j=*p++; D)i=*&q;
17、已知:char *p,*q; 选择正确的语句( )。
A)p*=3; B)p/=q; C)p+=3; D)p+=q;
18、已知:int a,*p=&a; 则为了得到变量 a 的值,下列错误的表达式为( );
A)*&p B)*p C)p[0] D)*&a
10、已知:char b[5],*p=b; 则正确的赋值语句是( )。
A)b="abcd" B)*b="abcd" C)p="abcd" D)*p="abcd"
11、下列对字符串的定义中错误的是( )。
A)char str[7]="FORTRAN"
B)char str[ ]=" FORTRAN"
C)char *str="FORTRAN"
3、用指针编写比较两个字符串 s 和 t 的函数 strcmp(s,t)。要求 s<t 时返回-1,s=t 时返回
0,s>t 时,返回 1。 解1: /* P279_3.C */ int strcmp(char *s1,char *t1) { while(*s1!='\0'&&*t1!='\0')
此函数,交换 a、b 中具有相同下标的数组元素的值,且输出交换后的 a、b 数组。
/*p279_1.c*/
#include "stdlib.h"
void swap(int *pa,int *pb)
{int t;
t=*pa;*pa=*pb;*pb=t;
}
main()
{int a[100],b[100],i;
for(i=0;i<100;i++)
printf("%3d",a[i]); printf("\n"); printf("after swap B:\n");/*输出交换后数组b */ for(i=0;i<100;i++)
printf("%3d",b[i]); printf("\n"); }_ 2、用数组方案和指针方案分别编写函数 insert(s1,s2,f),其功能是在字符串 s1 中的指定 位置 f 处插入字符串 s2。 解 1: /* P279_2A.c */ #include "string.h" insert(char *sa,char *sb,int n) {char sf[80],*p,*q; int i=0; for(p=sa+n;*p!='\0';p++)
B)指向 M 个整型变量的函数指针
C) 一个指向有 M 个整型元素的一维数组的指针
D)具有 M 个指针元素的一维指针数组,每个元素都只能指向整型变量
7、已知:double *p[6]; 它的含义是( )。
A)p 是指向 double 型变量的指针 B)p 是 double 型数组
C)p 是指针数组
D)p 是数组指针
相关文档
最新文档