A)*p=&a;scanf(\ B)p=(long *)malloc(8);scanf(\ C)scanf(\ D)scanf(\8.4.7 下面函数的功能是(B )
sss(s, t) char *s, *t;
{ while((*s)&&(*t)&&(*t++==*s++)); return(*s-*t);}
A) 求字符串的长度 B) 比较两个字符串的大小
C) 将字符串s复制到字符串t中 D) 将字符串s接续到字符串t中 8.4.8 请选出以下程序的输出结果(B )
#include
sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(\}
A) 5,2,3 B) -5,-12,-7 C) -5,-12,-17 D) 5,-2,-7 8.4.9 下面函数的功能是(A)
int fun1(char*x) { char *y=x; while(*y++); return(y-x-1); }
A)求字符串的长度 B)比较两个字符串的大小 C)将字符串x复制到字符串y D)将字符串x连接到字符串y后面 8.2 填空题
8.2.1 在指针的概念中,“*”表示的含义是所指对象的内容,而“&”表示的含义是 取变量的地址 。
8.2.2 如果p是一个指针,那么*&p表示的含义是 P ,而&*p表示的含义是
P 。
8.2.3 统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请
填空。
#include
for(i=0; i<26; i++) num[i]=0;
while( (c(或者*pc)=getchar()) !='#') /*统计从终端输入的大写字母个数*/
if( isupper(*pc)) num[*p-65]+=1;
for(i=0; i<26; i++) /*输出大写字母和该字母的个数*/
if(num[i]) printf(“%c: %d\\n”, i+?A?, num[i] );
以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请补充填空。
# include
findmax (int *s ,int t ,int *k ) { int p;
for(p=0,*k=p;p if ( s[p] > s[*k] ) __*k=p______; } void main() { int a[10] , i , k ; for ( i=0 ; i<10 ; i + + ) scanf(\findmax ( a,10,&k ); printf ( \} 8.2.5 以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素 数,请补充填空。 #include { int i,a[10],*p= a ,sum=0; printf(\ for(i=0;i<10;i + + ) scanf(\for(i=0;i<10;i + + ) if(isprime(*(p+i)) = = 1) { printf(\ sum+= a[i] //或者 *(a+i) 或者 *(p+i) ; } /*打印 素数*/ printf(\ /*打印所有素数的和*/ } isprime(int x) { int i; for(i=2;i<=x/2;i + + ) if(x%i = = 0) return (0); return 1 ; } 8.2.6 在下列程序中,其函数的功能是比较两个字符串的长度,比较的结果是函数返 回较长的字符串的地址。若两个字符串长度相同,则返回第一个字符串的地址。 #include char * fun ( char *s, char *t) { char *ss=s, *tt=t; while((*ss)&&(*tt)) { ss++; tt++; } if (*tt) return tt; else return ss ; } 8.2.4 } void main( ) { char a[20],b[10],*p=a,*q=b; gets(p); gets( q ); printf(\} 8.3 写出以下程序的运行结果 8.4.1 main( ) { int a[ ]={2,4,6,8},*p=a,i; for(i=0;i<4;i++) a[i]=*p++; printf(\} 运行结果: 6,8 8.4.2 #include int x=4,y=6,z=8; int p1=&x,p2=&y,*p3; a=p1==&x; b=3*(-*p1)/(*p2)+7; c=*(p3=&z)=*p1*(*p2); printf(\} 运行结果: 1,5,24 8.4.3 #include { int a[ ]={2,4,6,8,10},*p,**k; p=a; k=&p; printf(\ \printf(\} 运行结果: 24 8.4.4 #include { int a[3][4]={2,4,6,8,10,12,14,16,18,20,22,24}; int (*p)[4]=a,i,j,k=0; for(i=0;i<3;i++) for(j=0;j<2;j++)) k+=*(*(p+i)+j); printf(\ } 运行结果: 66 8.4.5 #include char s[ ]=“-12345”; if(s[k]==?+?||s[k]==?-?) sign=s[k++]==?+??1:-1; for(m=0;s[k]>=?0?&&s[k]<=?9?;k++) m=m*10+s[k]-?0?; printf(\ } 运行结果: Result=-12345 8.4.6 若有5门课程的成绩是:90.5, 72, 80, 61.5, 55,则程序运行结果是多少,其函数执 行什么功能。 #include float fun ( float *a , int n ) { int i; float sum=0; for(i=0; i void main() { float score[30]={90.5, 72, 80, 61.5, 55}, aver; aver = fun( score, 5 ); printf( \} 运行结果: Average score is: 71.80 函数功能:求5门课程平均分 8.4.7 若输入字符串\,则程序运行结果是多少,其程序执行什么功能。 #include { long nn=0; int ss=1; if((*p)=='-'){ p++; ss=-1;} if((*p)=='+') p++; while(*p) nn=nn*10-48+(*p++); return(nn*ss); } void main() /* 主函数 */ { char s[6]; 8.4.8 8.4.9 long n; printf(\ gets(s); n = fun(s); printf(\} 运行结果: -1234 程序功能:输入一个字符串,并将其转换为数字 下列程序功能是将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:8642。请改正程序中的错误,使它能得出正确的结果。 #include void fun (long s, long *t) { int d; long sl=1; *t = 0; while ( s > 0) { d = s; if (d/2==0) // 改为:if(d%2==0) { *t=d* sl+ *t; sl *= 10; } s \\= 10; //改为:s/=10; } } void main() { long s, t; scanf(\ fun(s, &t); printf(\} 下列程序功能是对M行M列整数方阵求两条对角线上各元素之和。请改正程序中的错误,使它能得出正确的结果。 #include int fun(int n, int x[ ][ ]) //改int fun(int n,int x[][M]) { int i, j, sum=0,*p; //改int i,j,sum=0,(*p)[M]; for( p = 1,i= 1;i <= M ; i++ ) //改for(p=x,i=0;i void main( ) { int a[M][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}}; printf ( \} 8.4 编程题