8.以下程序的输出结果是( )。
void sub(float x,float *y,float *z) { *y=*y-1.0; *z=*z+x;
}
main()
{ float a=2.5,b=9.0,*pa,*pb; pa=&a,pb=&b; sub(b-a,pa,pa); printf(\}
9
.以下四个程序中不能对两个整型值进行交换的是(A.main()
{ int a=10,b=20;
swap(&a,&b);
printf(\}
swap(int *p, int *q) { int *t,a;
t=&a;
*t=*p; *p=*q; *q=*t;
}
B.main()
{ int a=10,b=20;
swap(&a,&b);
printf(\}
swap(int *p, int *q) { int t;
t=*p; *p=*q; *q=t;
}
C.main()
{ int *a,*b; *a=10,*b=20;
swap(a,b);
printf(\*a,*b); }
swap(int *p, int *q) { int t;
t=*p; *p=*q; *q=t;
}
D.main()
{ int a=10,b=20; int *x=&a,*y=&b; swap(x,y);
printf(\}
。 ) swap(int *p, int *q) { int t;
t=*p; *p=*q; *q=st; }
10.以下count函数的功能是统计substr在母串str中出现的次数,请将程序补充完整。
int count(char *str,char *substr) { int i,j,k,num=0; for(i=0; 【1】 ;i++)
{for( 【2】 ,k=0;substr[k]==str[j];k++,j++) if(substr[ 【3】 ]==’\\0’) {num++;break;} }
return num; }
11.以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符),请将程序补充完整。
void Delblank(char *s) { int i,t; char c[80];
for(i=0,t=0; 【1】 ;i++)
if(!isspace( 【2】 ))c[t++]=s[i]; c[t]='\\0'; strcpy(s,c); }
12.以下conj函数的功能是将两个字符串s和t连接起来,请将程序补充完整。
char *conj(char *s,char *t) { char *p=s; while(*s) 【1】 ; while(*t)
{ *s= 【2】 ;s++;t++;} *s='\\0'; 【3】 ;
}
8.3.2 填空题
8.以下程序用指针指向三个整型存储单元,输入三个整数,并保持这三个存储单元中的值不变,选出其中最小值并输出。
#include\ main()
{
int 【1】
a=(int *)malloc(sizeof(int)); b=(int *)malloc(sizeof(int)); c=(int *)malloc(sizeof(int)); min=(int *)malloc(sizeof(int)); printf(\输入三个整数:\
scanf(\【2】 );
printf(\输出以上整数:%d%d%d\\n\【3】 ); *min=*a; if(*a>*b) 【4】 ;
if( 【5】 >*c) 【6】 ;
printf(\输出最小的整数:%d\\n\【7】 ); }
9.阅读以下程序:
main()
{
char str1[]=\ char *ip1=str1,*ip2=str2; scanf(\ printf(\ printf(\
运行上面的程序,输入字符串HOW DO YOU DO,则程序的输出结果是______。 10.阅读下面的程序:
main() {
static char *name[]={\ \ char **ip; int i;
for(i=0;i<5;i++) {
【1】 ;
printf(\*ip); } }
}
11.阅读并运行上面的程序,如果从键盘上输入字符串qwerty和字符串abcd则程序的输出结果是 【1】 。
#include\#include\
strlen(char a[],char b[]) {
int num=0,n=0;
while(*(a+num)!='\\0') num++;
while(b[n]) {
*(a+num)=b[n]; num++; n++; }
return (num); }
main() {
char str1[81],str2[81],*p1=str1,*p2=str2; gets(p1); gets(p2);
printf(\}
13.以下程序的输出结果是 【1】 。
int ast(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; }
main()
{ int a,b,c,d; a=4; b=3;
ast(a,b,&c,&d);
printf(\ }
9.3 测试题
填空题
5.已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。下面的sum函数是求出链表中所有结点数据域值的和,作为函数值返回。请填空完善程序。
struct link { int data;
struct link *next;}
main()
{ struct link *head; int s; ?
s=sum(head);
? }
int sum( struct link *head ) { struct link *p; int s=0; }
while(p)
{ s+= 【1】 ; return(s);
p=head->next; p= 【2】 ; }
10.2 例题分析与解答
6.以下程序的输出结果是( )。
void fun(float *p1,float *p2,float *s) { s=(float *)calloc(1,sizeof(float)); *s=*p1+*p2++; }
main()
{ float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a; fun(a,b,s);
printf(\*s); }
10.3.2 填空题
1.C语言提供了三种预处理语句,它们是 【1】 、 【2】 和条件编译。 2.下面程序中for循环的执行次数是 【1】 ,输出结果为 【2】 。
#include\ #define N 2
#define M N+1
#define NUM (M+1)*M/2 void main() { int i;
for(i=1;i<=NUM;i++); printf(\
3.下面程序的输出是 【1】 。
#define PR(ar) printf(\ main()
{ int j, a[]={ 1,3,5,7,9,11,13,15},*p=a+5; for(j=3; j; j--) { switch(j) {case 1:
case 2: PR(*p++); break; case 3: PR(*(--p)); } } }
}
4.以下程序的输出结果是 【1】 。
#define PR(ar) printf(\main()
{ int j,a[]={1,3,5,7,9,11,13,15},*p=a+5; for(j=3; j; j--) switch(j)
{ case 1:
case 2:PR(*p++); break; case 3:PR(*(--p)); } }
5.下面程序调用getone 函数开辟一个动态存储单元,调用assone 函数把数据输入此动态存储单元,调用outone 函数输出此动态存储单元中的数据。请填空。
#include \getone(int **s)
{ *s=( 【1】 )malloc(sizeof(int)); } assone(int *s)