30 C程序设计基础习题集
{ int i;
for(i=0;i if(isupper(str[i])) str[i]=str[i]+32; } 9. 写出下列程序的输出结果。 #include if(*p1==' '&&*(p1+1)==' ') strcpy(p1,p1+1); else p1++; } void main() { char aa[]=\ printf(\ } 输出结果: aa bb cccc ddd efg h aa bb cccc ddd efg h 10. 编制函数,将字符串中连续的相同字符仅保留1个(字符串\处理后为\)。 解答:#include for(i=1;i for(j=i;j 11. 下列程序求二维数组a中最大值与b中最大值之差,填空将下列程序补充完整。 #include float find_max( float **x,int m,int n) { int i,j; float max=x[0][0]; for(i=0;i if(*(*(x+i)+j)>max) max= *(*(x+i)+j); 或 x[i][j]; return max; } 程序设计基础习题集 31 void main() { float a[5][5],b[6][4], *pa[5],*pb[6] ; int i,j; for(i=0;i<5;i++) pa[i]=a[i]; for(i=0;i<6;i++) pb[i]=b[i]; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf(\ for(i=0;i<6;i++) for(j=0;j<4;j++) scanf(\ printf(\ } 12. 编制函数,将float类型二维数组的每一行同除以该行上绝对值最大的元素。要求分别以8.4.2节介绍的两种方法编写,并上机调试。 解答:方法一: #include void f(float **x, int m, int n) { int i,j; float max; for(i=0;i for(j=1;j void main() { float a[5][6]; int i,j; float *b[5]; for(i=0; i<5; i++) for(j=0;j<6;j++) scanf(\ for(i=0;i<5;i++) b[i]=a[i]; f(b,5,6); for(i=0;i<5;i++) { for(j=0;j<6;j++) printf(\ } 方法二: #include void f(float *p, int m, int n) { int i,j; float max; for(i=0;i for(j=1;j void main() { float a[5][6]; int i,j; for(i=0;i<5;i++) for(j=0;j<6;j++) scanf(\ 32 C程序设计基础习题集 f(a[0],5,6) for(i=0; i<5; i++) { for(j=0;j<6;j++) printf(\ } 13. 编制函数,在字符串数组中查找与另一字符串相等的字符串,函数返回值为该字符串的地址或NULL(当查找不到时)。 解答: #include char *str(char *str[], int n, char *s) { int i; for(i=0; i void main() { char *s[5]={\ printf(\ } 14. 下列程序中,函数find_data在已从小到大排序好的数组中寻找指定数data,采用二分查找算法,找到则返回该数组元素地址,找不到返回NULL。请填空将程序补充完整。 #include float* find_data(float *a,int n,float data) { int low,mid,high ; low=0; high=n-1; while(low<=high) { mid=(low+high)/2; if(a[mid]>data) high=mid-1; else if(a[mid] return NULL ; } void main() { float b[10],*p,data; for(int i=0;i<10;i++) scanf(\要求输入数据值从小到大 */ scanf(\输入待查找的数据 */ p=find_data(b,10,data); if(p) printf(\ else printf(\查找不到%f\\n\ } 程序设计基础习题集 33 15. 程序填空,将求下列两个定积分之和的程序补充完整。 ?62(x2?x?sinx)dx??(log10x2?x?3)dx37其中,求定积分的函数采用用梯形公式n(main中对应的实参取50)等份积分区间。 #include float f1(float),f2(float); float fs( float a,float b,int n, float(*f)(float)) { float s=0,x=a,h=(b-a)/n; int i; for(i=1;i<=n;i++) { s+=((*f)(x)+(*f)(x+h))*h/2; x+=h; } return s ; } void main() { float y; y=fs(2,6,50,f1)+fs(3,7,50,f2); printf(\ } float f1(float x) { return x*x+x*sin(x); } float f2(float x) { return log10(x*x)-x+3 ;} 习 题 九 1. 构造一个表示通讯录中每个“记录”的数据类型,声明该类型的标识符。 解答:struct person{ char name[9];int pho;}; ⒉ 编程,先输入n,再输入通讯录中若干个人的记录到结构体数组中,按电话号码的升序对结构体数组排序后输出。 解答: #include struct person{ char name[9]; int pho; }; void main() { struct person *p,temp; int n,i,j,k; scanf(\ for(i=0;i k=i; for(j=i+1;j for(i=0;i 34 C程序设计基础习题集 3. 改写第2题,调用自定义函数对结构体数组各元素按电话号码的升序排序。 解答: #include struct person{ char name[9]; int pho; }; void sort(struct person *p,int n) { struct person temp; int i,j,k; for(i=0;i k=i; for(j=i+1;j void main() { struct person *p,temp; int n,i,j,k; scanf(\ for(i=0;i for(i=0;i 解答: #include struct node { char x; struct node* t; }; void main() { struct node *h=NULL,*p1,*p2; char ch; while((ch=getchar())!='.') { p2=(struct node*) malloc(sizeof(struct node)); p2->x=ch; if(h==NULL) h=p1=p2; else { p1->t=p2; p1=p2;} } p2->t=NULL; p1=h; while(p1!=NULL){ if(isalpha(p1->x))putchar(p1->x); p1=p1->t; } putchar('\\n'); } 5.阅读下列程序,写出输出结果。 程序⑴ #include { struct T1{ char c[4],*s;} s1={\ struct T2{ char *cp; T1 ss1;} s2={\ printf(\ printf(\ printf(\ printf(\ }