y+=*(a+i)*t; }
⑷ }
16. 下列函数在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。 #include
float ⑴ ; int n; { int k; ⑵ *max=*p; ⑶ for(k=1;k if( ⑷ ) *max=t; if(t<*min) *min=t; } } 17. 下列函数用于将任意方阵(行数等于列数的二维数组)转置。 void mt( ⑴ ) 如数组 1 11 -3 -2 { int i,j; float t; 2 3 4 5 for(i=0;i (a+i*n+j)=*(a+j*n+i); 1 2 7 4 ⑶ 11 3 -4 5 } -3 4 4 6 } -2 5 2 7 18. 下列程序读入六个字符串,排序后输出。 #include void sort(char *a[],int n) { int i,j,l; char *temp; for(i=0;i for(j=i+1;j void main() 20 { char *name[6],ch[6][30]; int k; for(k=0;k<6;k++) ⑵ for(k=0;k<6;k++) gets(name[k]); ⑶ for(k=0;k<6;k++) puts(name[k]); } 19. 下列函数用于将链表中某个节点删除,其中n为全程量,表示链表中的节点个数。 struct tabdata *del(struct tabdata *h, long num) { struct tabdata *p1,*p2; int if(h==NULL) { printf(”\\nlist null!\\n”); ⑴ } p1=h; while(num!=p1->num&& ⑵ ) { p2=p1; p1=p1->next; } if(num==p1->num) { if(p1==h) h=p1->next; else ⑶ n--; printf(”delete:%ld\\n”,num); } else printf(”%ld not been found!\\n”,num); end: return h; } 20. 下列函数用于将链表中各节点的数据依次输出。 void print(struct student *head) { ⑴ p=head; if(head!=NULL) do { printf(”%ld\\n”,p->data); ⑵ } while ( ⑶ ); } 21. 已建立学生“英语”课程的成绩链表(成绩存于score域中),下列函数用于计算 平均成绩并输出。 void print(struct student *head) { struct student *p;float num; ⑴ ; ⑵ ; 21 if(head!=NULL) { for(num=0;p!=NULL; ⑶ ,i++) num+=p->score; num=num/i; printf(“%8.1f\\n”,num); } } 22. 已建立学生“英语”课程的成绩链表(成绩存于score域中,学号存于num域中), 下列函数用于输出待补考学生的学号和成绩,及补考学生人数。 void require(struct student *head) { struct student *p; ⑴ if( head!=NULL) { ⑵ while(p!=NULL) { if( ⑶ ) { printf(”} %6.1f\\n”,p->num,p->score); x++; } p=p->next; } printf(”%ld\\n”,x); } } 23. 下列函数用于向一非空链表插入结点(由p0指向),链表按照结点no域的升序排列。 struct ltab insert(struct ltab *head, struct ltab *stud) { struct ltab *p0, *p1, *p2; p1=head;p0=stud; while((p0->no>p1->no)&&( ⑴ )) { p2=p1; p1=p1->next; } if(p0->no<=p1->no) if(head==p1) { p0->next=head; head=p0;} else { p2->next=p0; ⑵ } else { p1->next=p0; ⑶ } return (head); } 24. 输入若干个学生的姓名、学号、数学、英语、计算机成绩到文件中student.dat。 #include { ⑴ char name[8],numb[8]; ⑵ scanf(\⑶ for(i=1;i<=n;i++) { 22 scanf(\ fprintf(fp,\ } ⑷ ; } 25. 下列程序将文件a.dat、b.dat按原顺序(文件中每行一个数,按从小到大排列)合并到文件c.dat中。 #include { FILE *f1,*f2,*f3; int x,y; f1=fopen(\ ⑴ ; fscanf(f1,\ while(!feof(f1)&&!feof(f2)) if(x fprintf(f3,\ } else { fprintf(f3,\ } if(feof(f1)) { ⑵ ; while(!feof(f2)) { fscanf(f2,\⑶ ; } } else { fprintf(f3, ⑷ ); while(!feof(f1)) { ⑸ ; fprintf(f3,\ } } fclose(f1); fclose(f2); fclose(f3); } 5 编程题 1. 编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。 2. 编程,计算并输出方程 X+Y=1989 的所有整数解。 3. 编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。 23 2 2 4. 一个数如恰好等于它的因子之和,这个数就称为“完数”。编程序找出1000以内的所有完数,并输出其因子(6是一个\完数\,它的因子是1,2,3)。 5. 输入一个正整数,输出它的所有质数因子(如180的质数因子为 2、2、3、3、5)。 6. 输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。 7. 输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素(如a[5]={2,3,4,5,6},b[6]={3,5,7,9,10,-1},则输出3、5)。 8. 输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素(如a[5]={2,3,4,5,6},b[6]={3,5,7,9,10,-1},则输出2、4、6、3、7、9、10、-1)。 9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中(不用strcpy函数)。拷贝时,'\\0'也要拷贝过去。'\\0'后面的字符不拷贝。 10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。 11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、c变成d、…、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。 12. 编写一个函数,处理n行、n列的二维数组:将每一行的元素同除以该行上绝对值最大的元素。 13. 编写函数,求任意阶多项式 a0+a1X+a2X+...+anX的值并返回多项式的值。 14. 设计一个函数,使给出一个数的原码,能得到该数的补码。 15. 编写函数,求m行、n列的二维数组全体元素中负数的个数。 16. 编写函数,返回在一个整数组中出现次数最多的数及其出现次数。 17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。 18.编写递归函数,将输入的以“?”结束的字符串按与输入相反的顺序输出。 19. 编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。 20. 编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。 21. 编写一个函数,统计m行n列二维数组中有多少个正数、多少个负数,多少个零,并返回统计结果。 22. 写一函数,在给定的一行以“.”结束的字符中,找出最长的单词并输出。 23. 编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输入这些记录,用print函数输出这些记录。 24. 把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。 25. 编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。 26. 编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。 27. 把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。 28. 求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。 24 2 n