第7章习题.docx
- 文档编号:23370520
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:17
- 大小:17.93KB
第7章习题.docx
《第7章习题.docx》由会员分享,可在线阅读,更多相关《第7章习题.docx(17页珍藏版)》请在冰豆网上搜索。
第7章习题
第七章
7.1用一条语句分别完成下列要求。
假定已经声明了实型变量number1和number2,并且number1被初始化为7.3。
(1)把变量fPtr声明为指向float类型的对象的指针。
(2)把变量number1的地址赋给指针变量fPtr。
(3)打印fPtr所指向的对象的值。
(4)把fPtr指向的对象的值赋给变量number2。
(5)打印number2的值。
(6)用转换说明符%p打印number1的地址。
(7)用转换说明符%p打印存储在fPtr中的地址。
打印出的值等于number1的地址吗?
#include
voidmain()
{
floatnumber1=7.3,number2;
float*fPtr;
fPtr=&number1;
printf("%f\n",*fPtr);
number2=*fPtr;
printf("%f\n",number2);
printf("%p\n",&number1);
printf("%p\n",fPtr);
}
7.3设有下面程序段,哪些语句是非法的?
(1)inti,j,*p,*q;
i=2;
P=&i;
j=*q++**p;
(2)intpa,pb,a[4],b[4]={1,2,3};
pa=a;
*pb=b;
pa[0]=b[0];
*++pa=4;
a[2]=b[2];
*(pa+3)=5;
(3)swap(px,py)
int*px,*py;
{
inttemp;
temp=px;
px=py;
py=temp;
}
1)第3行p大写错误
2)第1行pa,pb没有定义为指针
第3行*pb=b错误,应为pb=b
3)无法起到交换数据的作用
7.5找出并改正其中的错误,解释其输出信息的含义。
(1)inta[]={5,6,1,8,3};
voidmain()
{inta[5],*p=a+3;
printf("\na[%d]=%d\na[%d+1]=%d\n\n",p-a,*p,p-a,*p+1);
}
(2)voidmain()
{floata[30],*p;
inti;
p=a[0];
for(i=0;i<30;i++);
scanf("%f",*p++);
for(i=1;i<30;i++)
{max=sum=*p;
if(*++p>max)max=*p;
sum=sum+*p;
}
printf("max=%f,ave=%f\n",max,sum/30);
}
(3)#defineNULL0
voidmain()
{int*p=NULL;
*p=25;
printf("%d\n",*p);
}
1)改为
inta[]={5,6,1,8,3};
voidmain()
{int*p=a+3;
printf("\na[%d]=%d\na[%d+1]=%d\n\n",p-a,*p,p-a,*(p+1));
}
2)改为
voidmain()
{
floata[30],*p;
inti;
doublemax,sum=0;
p=&a[0];
for(i=0;i<30;i++)
scanf("%f",*p++);
max=a[0];
p=&a[1];
for(i=1;i<30;i++)
{
if(*p>max)max=*p;
sum=sum+*p;
p++;
}
printf("max=%f,ave=%f\n",max,sum/30);
}
3)改为
voidmain()
{int*p=NULL;
intt;
p=&t;
*p=25;
printf("%d\n",*p);
}
7.7用指针方法编写一个程序,输入三个整数,将它们按由小到大的顺序输出。
7.7
#include
voidmain()
{
inta,b,c;
int*pa,*pb,*pc;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
if(b>c)
{
pa=&a;pb=&b;pc=&c;
}
elseif(c>a)
{
pa=&c;pb=&a;pc=&b;
}
else
{
pa=&a;pb=&c;pc=&b;
}
else
if(b { pa=&c;pb=&b;pc=&a; } elseif(a>c) { pa=&b;pb=&a;pc=&c; } else { pa=&b;pb=&c;pc=&a; } printf("%d%d%d",*pc,*pb,*pa); } 7.9用指针方法编写一个程序,输入三个字符串,将它们按由小到大的顺序输出。 #include #include voidmain() { chara[30],b[30],c[30]; char*pa,*pb,*pc; scanf("%s%s%s",a,b,c); if(strcmp(a,b)>0) if(strcmp(b,c)>0) { pa=a;pb=b;pc=c; } elseif(strcmp(c,a)>0) { pa=c;pb=a;pc=b; } else { pa=a;pb=c;pc=b; } else if(strcmp(b,c)<0) { pa=c;pb=b;pc=a; } elseif(strcmp(a,c)>0) { pa=b;pb=a;pc=c; } else { pa=b;pb=c;pc=a; } printf("%s%s%s",pc,pb,pa); } 7.11编写函数,对传送过来的三个数选出最大和最小数,并通过形参传回调用函数。 7.11 #include #include voidfunc(inta,intb,intc,int*max,int*min) { int*pa,*pb,*pc; if(a>b) if(b>c) { pa=&a;pb=&b;pc=&c; } elseif(c>a) { pa=&c;pb=&a;pc=&b; } else { pa=&a;pb=&c;pc=&b; } else if(b { pa=&c;pb=&b;pc=&a; } elseif(a>c) { pa=&b;pb=&a;pc=&c; } else { pa=&b;pb=&c;pc=&a; } *max=*pa; *min=*pc; } voidmain() { inta=1,b=2,c=3; intmax,min; func(a,b,c,&max,&min); printf("max=%dmin=%d",max,min); } 7.13用指针参数编写一个字符串连接的函数radd(char*s,char*t,intf),其中f为标志变量,当f=0时,将s指向的字符串连接到t指向的字符串的后面;当f=1时,将t指向的字符串连接到s指向的字符串的后面。 并写出调用该函数的完整程序。 #include #include voidradd(char*s,char*t,intf) { if(f==0) strcat(t,s); if(f==1) strcat(s,t); } voidmain() { chars[100]="test1"; chart[100]="test2"; radd(s,t,0); printf("t+s=>t: %s",t); } 7.15用指针编程序将a数组中的n个整数按输入时的相反顺序排列。 #include voidmain() { inta[10]={1,2,3,4,5,6,7,8,9,10},t,i; int*pa,*pb; pa=&a[0]; pb=&a[9]; while(pa { t=*pa; *pa=*pb; *pb=t; pa++; pb--; } for(i=0;i<10;i++) printf("%d",a[i]); } 7.17用函数voidsort(int*p,intn)实现将n个数按递减排序。 主函数中输入n个数并输出排序好的数。 #include voidsort(int*p,intn) { inti,j,m,t; for(i=0;i { m=i; for(j=i+1;j if(p[m] m=j; if(m! =i) { t=p[i]; p[i]=p[m]; p[m]=t; } } } voidmain() { inta[10]={1,2,3,4,5,6,7,8,9,10},t,i; sort(a,10); for(i=0;i<10;i++) printf("%d",a[i]); } 7.19某学生班有30个学生,5门课的成绩。 (1)求各门课的平均分; (2)求每个学生的平均分; (3)按学生的平均分降序排列输出学生信息; (4)找出不及格的学生,并输出其学号、不及格课程的名称和成绩; (5)找出平均成绩在x1至x2之间的所有学生,统计其人数并输出学生的学号和平均成绩。 用指针分别编写5个函数实现以上5个要求。 #include #defineN30 intdata[N][7]; intfunc_1(intindex) { inti; ints=0; for(i=0;i s+=data[i][index]; returns/N; } intfunc_2(intsno) { inti; ints=0; for(i=1;i<=5;i++) s+=data[sno][i]; returns/5; } voidfunc_3() { inti,j,t,max; for(i=0;i data[i][6]=func_2(i); for(i=0;i { max=i; for(j=i+1;j if(data[max][6] max=j; if(max! =i) { for(j=0;i<7;j++) { t=data[i][j];data[i][j]=data[max][j];data[max][j]=t; } } printf("Sno: %d,score: %d,%d,%d,%d,%d\n",data[i][0],data[i][1],data[i][2],data[i][3],data[i][4],data[i][5]); } } voidfunc_4() { inti,j; for(i=0;i { for(j=1;j<=5;j++) { if(data[i][j]<60) printf("Sno: %d,failed: %d,score: %d\n",data[i][0],j,data[i][j]); } } } voidfunc_5(intx1,intx2) { inti,count=0; for(i=0;i data[i][6]=func_2(i); for(i=0;i { if(x1<=data[i][6]&&data[i][6]<=x2) { count++; printf("Sno: %d,Avg: %d\n",data[i][0],data[i][6]); } } printf("Countof%d-%dis: %d",x1,x2,count); } 7.21设二维整型数组da[4][3],试用数组指针的方法,求每行元素的和。 #include voidmain() { intda[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int(*pa)[3]; inti,j,s; for(i=0;i<4;i++) { pa=&da[i]; s=0; for(j=0;j<3;j++) s+=(*pa)[j]; printf("Row: %dSum: %d\n",i,s); } } 7.23利用malloc函数开辟动态存储单元,存放输入的三个整数,然后按从小到大的顺序输出这三个数。 #include #include voidmain() { inti,j,min,t; int*pdata; pdata=(int*)malloc(sizeof(int)*3); scanf("%d%d%d",&pdata[0],&pdata[1],&pdata[2]); for(i=0;i<3-1;i++) { min=i; for(j=i+1;j<3;j++) if(pdata[min]>pdata[j]) min=j; t=pdata[i];pdata[i]=pdata[min];pdata[min]=t; } printf("%d%d%d",&pdata[0],&pdata[1],&pdata[2]); } 7.25编写一程序,统计从键盘输入的命令行中第二个参数所包含的英文字符个数。 #include voidmain(intargc,char*argv[]) { intn=0; char*s; for(s=argv[1];*s;s++) { if(('A'<=*s&&*s<='Z')|| ('a'<=*s&&*s<='z')) n++; } printf("Count=%d",n); } 7.27使用命令行参数编写一程序,能实现将一个任意正整数n变换成相应的二进制数输出。 #include voidmain(intargc,char*argv[]) { inti,j,min,a=0; char*s; intt[100],count=0; s=argv[1]; for(;*s;s++) { if('0'<=*s&&*s<='9') a=a*10+(*s-'0'); else break; } for(;a;) { t[count++]=a%2; a/=2; } for(i=count-1;i>=0;i--) { printf("%d",t[i]); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题