当前位置:首页 >> 理学 >>

jisuanji (2)


1. 定程序中,函数 FUN 的功能是:计算出带有头接点的单向链表中各结点数据域 之和作为函数值返回。 #include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list { int data; struct list *next; } SLIST; SLIST *creatlist(int *); void outlist(SLIST *); int fun( SLIST *h) { SLIST *p; int s=0; p=h->next; while(p) { /**********************************found*********************************/ s+= p->___1___; data

/**********************************found*********************************/ p=p->___2___; } return s; next

} main( ) { SLIST *head; int a[N]={12,87,45,32,91,16,20,48}; head=creatlist(a); outlist(head); /**********************************found*********************************/ printf("\nsum=%d\n", fun(___3___)); } head

SLIST *creatlist(int a[ ]) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q;

} void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("The list is NULL!\n"); else { printf("\nHead "); do { printf("->%d", p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } }

} p->next=0; return h;

2. 给定程序中,函数 FUN 的功能是:求出形参 SS 所指字符串数组中最长字符串 的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组 中工有 M 个字符串,且串长<N。 #include <stdio.h> #include <string.h> #define M 5 #define N 20 void fun(char (*ss)[N]) { int i, j, k=0, n, m, len; for(i=0; i<M; i++) { len=strlen(ss[i]); if(i==0) n=len; if(len>n) { /**********************************found*********************************/ n=len; } k=___1___; i

} for(i=0; i<M; i++) if (i!=k) { m=n; len=strlen(ss[i]); /**********************************found*********************************/ for(j=___2___; j>=0; j--)

len ss[i][m--]=ss[i][j]; for(j=0; j<n-len; j++) /**********************************found*********************************/ ss[i][j]=____3____; } } main( ) {char s[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; int i; printf("\nThe original strings are :\n"); for(i=0; i<M; i++) printf("%s\n",ss[i]); printf("\n"); fun(ss); printf("\nThe result:\n"); for(i=0; i<M; i++) printf("%s\n",ss[i]); } '*'

3. 人员记录由编号和出生年,月,日组成,N 名人员的数据已在主函数中存入结构 体数组 std 且编号唯一。函数 fun 的功能是;找出指定编号人员的数据,作为函 数值返回,有主函数输出,若指定编号不存在,返回数据中的编号为空串。 #include <stdio.h> #include <string.h> #define N 8 typedef struct { char num[10]; int year,month,day ; }STU; /**********************************found*********************************/ ___1___fun(STU *std, char *num) STU

{

int

i;

STU a={"",9999,99,99};

for (i=0; i<N; i++) /**********************************found*********************************/ if( strcmp(____2_____,num)==0 ) std[i].num /**********************************found*********************************/ return (___3____); std[i] return a; } main( ) {STU std[N]={ {"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1}, {"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15}, {"777777",1983,6,22},{"888888",1984,8,19}}; STU p; char n[10]="666666"; p=fun(std,n); if(p.num[0]==0) printf("\nNot found !\n"); else { printf("\nSucceed !\n "); printf("%s %d-%d-%d\n",p.num,p.year,p.month,p.day); } }

4. 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递 增有序链接。函数 fun 的功能:删除链表中数据域值相同的结点,使之保留一 个。 #include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list

{

int data; struct list *next; } SLIST; void fun( SLIST *h) { SLIST *p, *q; p=h->next; if (p!=NULL) { q=p->next; while(q!=NULL) { if (p->data==q->data) { p->next=q->next; /**********************************found*********************************/ free(___1___); /**********************************found*********************************/ q=p->___2___; } else { p=q; /**********************************found*********************************/ q=q->___3___; } } next next q

} SLIST *creatlist(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("\nThe list is NULL!\n");

}

} main( ) { SLIST *head; int a[N]={1,2,2,3,4,4,4,5}; head=creatlist(a); printf("\nThe list before deleting :\n"); outlist(head); fun(head); printf("\nThe list after deleting :\n"); outlist(head);

}

else { printf("\nHead"); do { printf("->%d",p->data); p=p->next; printf("->End\n");

} while(p!=NULL);

5. 函数 fun 的功能是进行数字字符转换。若形参 ch 中是数字字符'0 ~ 9',则'0' 转换成'9', '1'转换成'8', '2'转换成'7' … '9'转换成'0';若是其他字符则保持不变; 并将转换后的结果作为函数值返回. #include <stdio.h>

/**********************************found*********************************/ ___1___fun(char ch) { /**********************************found*********************************/ if (ch>='0' &&___2____) /**********************************found*********************************/ return '9'- (ch-___3___); return ch ; } main( ) { char c1, c2; printf("\nThe result :\n"); c1='2'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); c1='8'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); c1='a'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); '0' ch<='9' char

}

6. 给定程序中,函数 fun 的功能是:对形参 ss 所指字符串数组中的 M 字符串按长 度由短到长进行排序。SS 所指字符串数组中共有 M 个字符串,且串长<N #include <stdio.h> #include <string.h> #define M 5 #define N 20 void fun(char (*ss)[N]) { int i, j, k, n[M]; char t[N]; for(i=0; i<M; i++) n[i]=strlen(ss[i]); for(i=0; i<M-1; i++) { k=i; /**********************************found*********************************/ for(j=___1___; j<M; j++) /**********************************found*********************************/ if(n[k]>n[j]) k=___2___; if(k!=i) { strcpy(t,ss[i]); strcpy(ss[i],ss[k]); /**********************************found*********************************/ strcpy(ss[k],___3___); n[k]=n[i]; } } } main( ) { char s[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; int i; printf("\nThe original strings are :\n"); t j i+1

}

for(i=0; i<M; i++) printf("%s\n",ss[i]); printf("\n"); fun(ss); printf("\nThe result :\n"); for(i=0; i<M; i++) printf("%s\n",ss[i]);

7. 函数 FUN 的功能是:从三个形参 a,b,c 中找出中间的哪个数,作为函数值返回。 例如,当 a=3,b=5,c=4 时,中数为 4。 #include int fun(int { int t; <stdio.h> a, int b, int c)

/**********************************found*********************************/ t = (a>b) ? (b>c? b :(a>c?c:___1___)) : ((a>c)?___2___ :

((b>c)?c:___3___)); return t; } main( ) { int a1=3, a2=5, a3=4, r; r = fun(a1, a2, a3); printf("\nThe middle number is : } 1. a 2. a 3.b

%d\n", r);

8. 给定程序中,函数 FUN 的功能是:统计出带有头结点的单向链表中接点的个数, 存放在形参 N 所指的存储单元中。 #include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list { int data; struct list *next; } SLIST;

SLIST *creatlist(int *a); void outlist(SLIST *); void fun( SLIST *h, int *n) { SLIST *p; /**********************************found*********************************/ *n=____1_____; 0 p=h->next; while(p) { (*n)++; /**********************************found*********************************/ p=____2____; p->next } } main( ) { SLIST *head; int a[N]={12,87,45,32,91,16,20,48}, num; outlist(head);

head=creatlist(a);

/**********************************found*********************************/ fun(head,____3____); &num printf("\nnumber=%d\n",num); } SLIST *creatlist(int a[ ]) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST));

} void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("The list is NULL!\n"); else { printf("\nHead "); do { printf("->%d",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } }

for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h;

9. 给定程序的功能是:调用函数 FUN 将指定源文件中的内容复制到指定的目标 文件中,复制成功时函数返回值为 1,失败时返回值为 0。在复制的过程中,把复 制的内容输出到终端屏幕。 主函数中源文件名房子变量 sfname 中,目标文件名 放在变量 tfname 中。 #include #include <stdio.h> <stdlib.h>

int fun(char *source, char *target) { FILE *fs,*ft; char ch;

/**********************************found*********************************/ if((fs=fopen(source,___1___))==NULL) "r" return 0; if((ft=fopen(target, "w"))==NULL)

return 0; printf("\nThe data in file :\n"); ch=fgetc(fs); /**********************************found*********************************/ while(!feof(___2___)) fs { putchar( ch ); /**********************************found*********************************/ fputc(ch,___3___); ft } fclose(fs); fclose(ft); printf("\n\n"); return 1; ch=fgetc(fs);

} main( ) { char sfname[20] ="myfile1",tfname[20]="myfile2"; FILE *myf; int i; char c; myf=fopen(sfname,"w"); printf("\nThe original data :\n"); for(i=1; i<30; i++){ c='A'+rand( )%25;fprintf(myf,"%c",c); printf("%c",c); } fclose(myf);printf("\n\n"); if (fun(sfname, tfname)) printf("Succeed!"); else printf("Fail!"); }

10. 给定 程序中,函数 FUN 的功能是:在形参 S 所指字符串中的每个数字字符之 后 插 入一个 * 。例如 , 形参 S 所指字符串为 :def35adh3kjsdf7. 执行结果 为:def3*5*adh3*kjsdf7* #include <stdio.h>

void fun(char *s) { int i, j, n;

for(i=0; s[i]!='\0'; i++) /**********************************found*********************************/ if(s[i]>='0' ___1___ s[i]<='9') && { n=0; /**********************************found*********************************/ while(s[i+1+n]!=___2___) n++; 0 for(j=i+n+1; j>i; j--) /**********************************found*********************************/ s[j+1]= ___3___; s[j] s[j+1]='*'; } } main( ) { char s[80]="ba3a54cd23a"; printf("\nThe original string is : %s\n",s); fun(s); printf("\nThe result is : %s\n",s); } i=i+1;

11. 给定程序中,函数 FUN 的功能是:将形参 STD 所指结构体数组中年龄最大者 的数据作为函数值返回,并将 main 函数输出。

#include <stdio.h> typedef struct { char name[10]; int age; }STD; STD fun(STD std[], int n) { STD max; int i; /**********************************found*********************************/ max=____1____; std[0] for(i=1; i<n; i++) /**********************************found*********************************/ if(max.age<___2___) max=std[i]; std[i].age return max; } main( ) { STD std[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15 STD max; };

max=fun(std,5); printf("\nThe result: \n"); /**********************************found*********************************/ printf("\nName : %s, max.name } Age : %d\n",___3___ ,max.age);

12. 给定程序中,函数 fun 功能是:在带有头结点的单向链表中,查找数据域中为 CH 的结点,找到后通过函数值返回该结点在链表中所处的顺序号;若不存在 值为 CH 的结点,函数返回 0 值。 #include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list { int data; struct list *next; } SLIST; SLIST *creatlist(char *); void outlist(SLIST *); int fun( SLIST *h, char ch) { SLIST *p; int n=0; p=h->next; /**********************************found*********************************/ while(p!=___1___) NULL { n++;

/**********************************found*********************************/ if (p->data==ch) return ___2___; else } return 0; p=p->next; n

} main( ) { SLIST *head; int k; char ch; char a[N]={'m','p','g','a','w','x','r','d'}; head=creatlist(a); outlist(head); printf("Enter a letter:"); scanf("%c",&ch); /**********************************found*********************************/ k=fun(___3___); head,ch

} SLIST *creatlist(char *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); do { printf("->%c",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } }

if (k==0) else

printf("\nNot found!\n"); printf("The sequence number is : %d\n",k);

13. 给定程序的功能是:从键盘输入若干行文本(每行不超过 80 个字符),写到文 件 myfile4.txt 中,用-1 作为字符串输入结素的标志。然后将文件的内容读出 显示在屏幕上。文件的读写分别由自定义函数 read Text 现. #include <stdio.h> #include <string.h> #include <stdlib.h> void WriteText(FILE *); void ReadText(FILE *); main( ) { FILE *fp; if((fp=fopen("myfile4.txt","w"))==NULL) { printf(" open fail!!\n"); exit(0); } WriteText(fp); fclose(fp); if((fp=fopen("myfile4.txt","r"))==NULL) { printf(" open fail!!\n"); exit(0); } 和 write Text 实

}

ReadText(fp); fclose(fp);

/**********************************found*********************************/ void WriteText(FILE ___1___ ) *fw { char str[81]; printf("\nEnter string with -1 to end :\n"); gets(str); while(strcmp(str,"-1")!=0) { /**********************************found*********************************/ fputs(___2___,fw); fputs("\n",fw); str gets(str); } } void ReadText(FILE *fr) { char str[81]; printf("\nRead file and output to screen :\n"); fgets(str,81,fr); while( !feof(fr) ) { /**********************************found*********************************/ printf("%s",___3___); fgets(str,81,fr); str

} }

14. 给定程序中,函数 FUN 的功能是:有 N X N 矩阵,根据给定的 m(m<=N)值,将 每个元素中的值均右移 m 个位置,左边置为 0。例如,N=3,m=2,有下列矩阵 1 4 7 2 5 8 3 6 9 程序执行结果为 0 0 0 0 0 0 1 4 7

#include <stdio.h> #define N 4 void fun(int (*t)[N], int m) { int i, j; /**********************************found*********************************/ for(i=0; i<N; ___1___ ) i++ { for(j=N-1-m; j>=0; j--) /**********************************found*********************************/ t[i][j+___2___ ]=t[i][j]; /**********************************found*********************************/ for(j=0; j<___3___; j++) t[i][j]=0; } } main( ) { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j, m; printf("\nThe original array:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%2d ",t[i][j]); m m

}

} printf("Input m (m<=%d): ",N);scanf("%d",&m); fun(t,m); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%2d ",t[i][j]); printf("\n"); }

printf("\n");

15. 函数 FUN 的功能是; 把形参 a 所指数组中的最大值放杂 a[0]中,接着求出 a 所指数组中的最小值防在 a[1]中;再把 a 所指数组元素中的次大值 a[2]中,把 a 所指数组的数据最初排列为:1,4,2,3,9,6,5,8,7,则按规则移动后,数据排列 为:9,1,8,2,7,3,6,4,5。形参 n 中存放 a 所指数组中数据的个数。 #include #define <stdio.h> N 9

/**********************************found*********************************/ void fun(int ___1___ , int *a { int i, j, max, min, px, pn, t; n)

/**********************************found*********************************/ for (i=0; i<n-1; i+=____2____) 2 { max = min = a[i]; px = pn = i; /**********************************found*********************************/

for (j=___3___; j<n; j++) i { if (max < a[j]) { max = a[j]; px = j; } if (min > a[j]) { min = a[j]; pn = j; } } if (px != i) { t = a[i]; a[i] = max; a[px] = t; if (pn == i) pn= px; } if (pn != i+1) { t = a[i+1]; a[i+1] = min; a[pn] = t; }

} main( ) { int b[N]={1,4,2,3,9,6,5,8,7}, i; printf("\nThe original data :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); fun(b, N); printf("\nThe data after moving :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); }

}

16. 给定程序中,函数 FUN 的功能是;求 SS 所指字符串数组中长度最厂的字符串 所在的行下标,作为函数值返回,并把其串长防在形参 n 所指变量中。SS 所指 字符串数组中共有 M 个字符串,且串长< N. #include #define #define <stdio.h> M N 5 20

/**********************************found*********************************/ int fun(char (*ss) [___1___], int N *n)

{

int

i, k=0, len=0;

for(i=0; i<M; i++) { len=strlen(ss[i]); /**********************************found*********************************/ if(i==0) *n=___2___; len if(len>*n) { /**********************************found*********************************/ *n=____3____; len } } return(k); k=i;

} main( ) { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; int n,k,i; printf("\nThe original strings are :\n"); for(i=0;i<M;i++)puts(ss[i]); k=fun(ss,&n); printf("\nThe length of longest string is : %d\n",n); printf("\nThe longest string is : %s\n",ss[k]); }

17. 函数 FUN 的功能是:逆置数组元素中的值。 例如:若 a 所指数组中的数据依次 为:1,2,3,4,5,6,7,8,9,则逆置后依次为:9,8,7。6,5,4,3,2,1。形参 n 给出数组中 数据的个数。 #include void fun(int <stdio.h> a[], int n)

{

int

i,t;

/**********************************found*********************************/ for n/2 { t=a[i]; /**********************************found*********************************/ a[i] = ___2___ a[n-1-i]; /**********************************found*********************************/ a[n-1-i]= ___3___; } } main( ) { int b[9]={1,2,3,4,5,6,7,8,9}, i; printf("\nThe original data :\n"); for (i=0; i<9; i++) printf("%4d ", b[i]); printf("\n"); fun(b, 9); printf("\nThe data after invert :\n"); for (i=0; i<9; i++) printf("%4d ", b[i]); printf("\n"); } t (i=0; i<___1___; i++)

18. 给定程序中,函数 FUN 的功能是:在形参 S 所指字符串中寻找与参数 C 相同 的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则函数不做 任何处理。

例 如 ,S 所 指 字 符 串 :baacda,c 中 的 字 符 为 :a, 执 行 后 S 所 指 字 符 串 为:baaaacdaa #include <stdio.h>

void fun(char *s, char c) { int i, j, n;

/**********found**********/ for(i=0; s[i]!=___1___; i++) '\0' if(s[i]==c) { /**********found**********/ n=____2____; 0 while(s[i+1+n]!='\0') n++; for(j=i+n+1; j>i; j--) s[j+1]=s[j]; /**********found**********/ s[j+1]=s[___3___] ; i } i=i+1;

} main() { char s[80]="baacda", c; printf("\nThe string: %s\n",s); printf("\nInput a character: "); scanf("%c",&c); fun(s,c); printf("\nThe result is: %s\n",s);

} 19. 函 数 FUN 的功能是 : 把形 参 a 所指数组总的奇 数原顺序依次存放到 a[0],a[1],a[2].……中,把偶数从数组中删除,奇数个数通过函数值返回。例如: 若 a 所指数组中的数据最初排列为: 9、1、4、2、3、6、5、8、7,删除偶 数后,a 所指数组中数据为:9、1、3、5、7,返回值为 5。 #include <stdio.h> #define N 9 int fun(int a[], int n) { int i,j; j = 0; for (i=0; i<n; i++) /**********************************found*********************************/ if (a[i]%2==___1___) { /**********************************found*********************************/ a[j] = a[i]; ___2___; j++ } /**********************************found*********************************/ return ___3___; } main( ) { int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf("\nThe original data :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); n = fun(b, N); printf("\nThe number of odd : %d \n", n); printf("\nThe odd number :\n"); for (i=0; i<n; i++) printf("%4d ", b[i]); printf("\n"); j 1

}

20.给定程序的功能是:调用函数 FUN 将指定源文件中的内容复制到指定的目标 文件中,复制成功时函数返回值为 0。在复制的过程中,把复制的内容输出到终 端屏幕。主函数中源文件名防在变量 sfname 中,目标文件名放在变量 tfname 中。 #include #include <stdio.h> <stdlib.h>

int fun(char *source, char *target) { FILE *fs,*ft; char ch;

/**********************************found*********************************/ if((fs=fopen(source, ___1___))==NULL) return 0; if((ft=fopen(target, "w"))==NULL) return 0; printf("\nThe data in file :\n"); ch=fgetc(fs); /**********************************found*********************************/ while(!feof(___2___)) { putchar( ch ); /**********************************found*********************************/ fputc(ch,___3___); } ch=fgetc(fs); ft fs "r"

} main( ) { char sfname[20] ="myfile1",tfname[20]="myfile2"; FILE *myf; int i; char c; myf=fopen(sfname,"w"); printf("\nThe original data :\n"); for(i=1; i<30; i++){ c='A'+rand( )%25;fprintf(myf,"%c",c); printf("%c",c); } fclose(myf);printf("\n\n"); if (fun(sfname, tfname)) printf("Succeed!"); else printf("Fail!"); }

fclose(fs); fclose(ft); printf("\n\n"); return 1;

21. 函数 FUN 的功能是:计算

#include #include

<stdio.h> <math.h> x)

double fun(double { double

f, t; int n;

/**********************************found*********************************/ f = 1.0+___1___; x t = x; n = 1; do { n++;

/**********************************found*********************************/ t *= x/___2___; n /**********************************found*********************************/ f += ___1___; t } while (fabs(t) >= 1e-6); return f;

} main( ) { double x, y; x=2.5; y = fun(x); printf("\nThe result is :\n"); printf("x=%-12.6f y=%-12.6f \n", x, y); }

22. 给定程序中,函数 FUN 的功能是:统计形参 S 所指字符串中数字字符出现的 次数,并存放在形参 t 所指的变量中最后在函数中输出。例如,形参所指的字 符串为:abcdef35adgh3kjsdf7.输出结果为:4 #include <stdio.h>

void fun(char *s, int *t) { int i, n; n=0; /**********************************found*********************************/ for(i=0; ___1___ !=NULL; i++) /**********************************found*********************************/ if(s[i]>='0'&&s[i]<=___2___) n++; '9' s[i]

/**********************************found*********************************/ *t=___3___; } main( ) { char s[80]="abcdef35adgh3kjsdf7"; int t; printf("\nThe original string is : %s\n",s); fun(s,&t); printf("\nThe result is : %d\n",t); } n

23. 用筛选法可得到 2—n(n<10000)之间的所有素数,方法是:首先从素数 2 开始, 将所有 2 的倍数的数从数表中删去(把数表中相应位置的值置成 0)接着从数 表中找下一个非 0 数,并从数表中找下一个非 0 数,并从数表中删去该书的所 有倍数:依次类推,直到所找的下一个数等于 n 为止。这样会得到一个序 列:2,3,5,7,11,13,17,19,23,…… 函数 FUN 用筛选法找出所有小于等于 n 的素数,并统计素数的个数作为函数 值返回。 #include int fun(int { int <stdio.h> n)

a[10000], i,j, count=0;

for (i=2; i<=n; i++) a[i] = i; i = 2; while (i<n) { /**********************************found************************************/ for (j=a[i]*2; j<=n; j+=___1___) a[i]

a[j] = 0; i++; /**********************************found************************************/ while (a[i]==___1___) i++; } printf("\nThe prime number between 2 to %d\n", n); for (i=2; i<=n; i++) /**********************************found************************************/ if (a[i]!=____3____) { count++; return count; printf( count%15?"%5d":"\n%5d",a[i]); } 0 0

} main() { int n=20, r; r = fun(n); printf("\nThe number of prime is : }

%d\n", r);

24 给定程序中,函数 FUN 的功能是:将 N X N 矩阵主对角线元素中的值与反向 对角线对应位置上元素中的值进行交换。例如,若 N=3,有下列矩阵: 1 4 7 2 5 8 3 6 9 交换后为: 9 3 4 8 2 5 7 1 6

#include

<stdio.h>

#define

N

4

/**********************************found*********************************/ void fun(int { int i,s; ___1___, int n) t[N][N]

/**********************************found*********************************/ for(___2___; i++) { s=t[i][i]; t[i][i]=t[i][n-i-1]; /**********************************found*********************************/ t[i][n-1-i]=___3___; } s i=0;i<N

} main( ) { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("\nThe original array:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%d ",t[i][j]); printf("\n"); } fun(t,N); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%d ",t[i][j]); printf("\n"); } }

25. 给定程序中,函数 FUN 的功能是:在形参 S 所指字符串中寻找与参数 C 相同 的字符,并在其后插入一个与相同的字符,若找不到相同的字符则函数不做任 何处理。 例如,S 所指字符串为:baacda,执行后 S 所指字符串为:baaaacdaa

#include

<stdio.h>

void fun(char *s, char c) { int i, j, n;

/**********************************found*********************************/ for(i=0; s[i]!=___1___ ; i++) if(s[i]==c) { /**********************************found*********************************/ n=___2___ ; while(s[i+1+n]!='\0') n++; for(j=i+n+1; j>i; j--) s[j+1]=s[j]; /**********************************found*********************************/ s[j+1]=___3___ ; } i=i+1;

} main( ) { char s[80]="baacda", c; printf("\nThe string: %s\n",s); printf("\nInput a character: "); scanf("%c",&c); fun(s,c); printf("\nThe result is: %s\n",s); }

26. 函数 FUN 的功能是:把形参 a 所指数组中的最小值防在元素 a[0]中,接着把形 参 a 所指数组中的最大值放在 a[1]元素中;再把 a 所指数组元素中的次小值放 在 a[2]中,把 a 所指数组元素中的次大值放在 a[3];其余以次类推。例如:若 a 所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7;则按规则移动后,数据排列

为:1,9,2,8,3,7,4,6,5。形参 n 中存放 a 所指数组中数据的个数。 注意:规定 FUN 函数中的 MAX 存放当前所找的最大值,PX 存放当前所找最 大值的下标。 # include #define void fun(int { int N <stdio.h> 9

a[], int n)

i,j, max, min, px, pn, t;

for (i=0; i<n-1; i+=2) { /**********************************found*********************************/ max = min =___1___; px = pn = i; for (j=i+1; j<n; j++) { /**********************************found*********************************/ if (max<___2___) { max = a[j]; px = j; } a[j] a[i]

/**********************************found*********************************/ if (min>___3___) { min = a[j]; pn = j; } } if (pn != i) { t = a[i]; a[i] = min; a[pn] = t; if (px == i) px =pn; } if (px != i+1) { t = a[i+1]; a[i+1] = max; a[px] = t; } a[j]

}

} main( ) { int b[N]={9,1,4,2,3,6,5,8,7}, i; printf("\nThe original data :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); fun(b, N); printf("\nThe data after moving :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); }

27. 甲乙丙丁四人同时开始放鞭炮,甲每隔 t1 秒放一次,乙每隔 t2 秒放一次,丙每 隔 t3 秒放一次,丁每隔 t4 秒放一次,每人各放 n 次函数 FUN 的功能是根据形 参提供的值,求出总共听到多少次鞭炮声作为函数值返回。 注意,当几个鞭炮同 时炸响,只算一次响声,每次响声,第一次响声是在第 0 秒。 #include <stdio.h>

/**********************************found*********************************/ #define i int fun(int { int t1, int t2, int t3, int t4, int n) OK(i, t, n) ((___1___%t==0) && (i/t<n))

count, t , maxt=t1;

if (maxt < t2) maxt = t2; if (maxt < t3) maxt = t3; if (maxt < t4) maxt = t4; count=1; /* 给 count 赋初值 */

/**********************************found*********************************/ for(t=1; t< maxt*(n-1);___1___)

t++ { if(OK(t, t1, n) || OK(t, t2, n)|| OK(t, t3, n) || OK(t, t4, n) ) count++; } /**********************************found*********************************/ return ___3___; count } main( ) { int t1=7, t2=5, t3=6, t4=4, n=10, r;

r = fun(t1, t2, t3, t4, n); printf("The sound : } %d\n", r);

28. 给定程序的功能是调用 FUN 函数建立班级通讯录。通讯录中记录每位同学 的编号,姓名和电话号码。 班级的人数和学生的信息从键盘读入,每个人的信息 作为一个数据块写到名为 myfile5.dat 的二进制文件中。 #include <stdio.h> #include <stdlib.h> #define N 5 typedef struct { int num; char name[10]; char tel[10]; }STYPE; void check( );

/**********************************found*********************************/ int fun(___1____*std) STYPE { /**********************************found*********************************/ ___2___ *fp; int i; FILE

if((fp=fopen("myfile5.dat","wb"))==NULL) return(0); printf("\nOutput data to file !\n"); for(i=0; i<N; i++) /**********************************found*********************************/ fwrite(&std[i], sizeof(STYPE), 1,___3___); fclose(fp); return (1); } main( ) {STYPE s[10]={ {1,"aaaaa","111111"},{1,"bbbbb","222222"},{1,"ccccc","333333"}, {1,"ddddd","444444"},{1,"eeeee","555555"}}; int k; k=fun(s); if (k==1) { printf("Succeed!"); check( ); } else printf("Fail!"); } void check( ) { FILE *fp; int i; STYPE s[10]; fp

}

if((fp=fopen("myfile5.dat","rb"))==NULL) { printf("Fail !!\n"); exit(0); } printf("\nRead file and output to screen :\n"); printf("\n num name tel\n"); for(i=0; i<N; i++) { fread(&s[i],sizeof(STYPE),1, fp); printf("%6d %s %s\n",s[i].num,s[i].name,s[i].tel); } fclose(fp);

29. 函数 FUN 的功能是:将形参 a 所指数组中的前半部分元素中的值和后半部分 元素中的值对换。形参 n 中存放数组中数据的个数,若 n 为奇数,则中间元素 不动。例如:若 a 所指数组中的数据依次为:1 2 3 4 5 6 7 .8 9,则调换后 为:6,7,8,9,1,2,3,4。 #include #define void fun(int { int i, t, p; <stdio.h> N 9

a[], int n)

/**********************************found*********************************/ p = (n%2==0)?n/2:n/___1____; 2+1 for (i=0; i<n/2; i++) { t=a[i]; /**********************************found*********************************/ a[i] = a[p+___2___]; i

/**********************************found*********************************/ a[___3___]= t; p+I p+i } } main( ) { int b[N]={1,2,3,4,5,6,7,8,9}, i; printf("\nThe original data :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); fun(b, N); printf("\nThe data after moving :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); }

30.给定程序中,函数 FUN 的功能是:有 N X N 矩阵,以主对角线为对称线,对称元 素相加并将结果存放在左下三角元素中,右上三角元素置为 0。 例如,若 N=3,有下列矩阵: 1 4 7 2 5 8 2 6 9 1 6 10 计算结果为 0 5 14 0 0 9

#include #define

<stdio.h> N 4

/**********************************found*********************************/ void fun(int { int i, j; (*t)___1___ )

for(i=1; i<N; i++)

{ for(j=0; j<i; j++) { /**********************************found*********************************/ ___2___ =t[i][j]+t[j][i]; /**********************************found*********************************/ ___3___ =0; } } main( ) { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("\nThe original array:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%2d ",t[i][j]); printf("\n"); } fun(t); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%2d ",t[i][j]); printf("\n"); } } }

31. 给定程序中已建立一个带有头结点的单向链表,在 main 函数中将多次调用 FUN 函数,每调用一次 FUN 函数,输出链表尾部结点中的数据,并释放该结点, 使链表缩短。 #include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *p) { SLIST *t, *s;

t=p->next; s=p; while(t->next != NULL) { s=t; /**********************************found*********************************/ t=____1_____; } /**********************************found*********************************/ printf(" %d ",___2___); s->next=NULL; /**********************************found*********************************/ } SLIST *creatlist(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); do { printf("->%d",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } main( ) { SLIST *head; int a[N]={11,12,15,18,19,22,25,29}; head=creatlist(a); printf("\nOutput from head:\n"); outlist(head); printf("\nOutput from tail: \n"); while (head->next != NULL){ fun(head); printf("\n\n"); free(___3___); t s->data t->next

}

}

printf("\nOutput from head again :\n"); outlist(head);

32. 函数 FUN 的功能是:计算

的前 n 项。若 X=2.5,N=15 时,函数值为:1.142857。 #include #include <stdio.h> <math.h> x, int int n) i;

double fun(double { double f, t;

/**********************************found*********************************/ f =___1___; 1.0 t = -1; for (i=1; i<n; i++) { /**********************************found*********************************/ t *= (___2___)*x/n; /**********************************found*********************************/ f += ___3___; } return f; x, y; t -1

} main( ) { double

}

x=2.5; y = fun(x, 15); printf("\nThe result is :\n"); printf("x=%-12.6f y=%-12.6f\n", x, y);

33.给定程序中,函数 FUN 的功能是:计算 N X N 矩阵的主对角线元素和反向对角 线元素之和,并作为函数值返回。 注意:要求先累加主对角线元素中的值,软后累 加反向对角线的值。例如,若 N=3 有下列矩阵: 1 2 3 4 5 6 7 8 9 FUN 函数首先累加 1,5,9,然后累加 3,5,7,喊素的返回值为 30。 #include <stdio.h> #define N 4 fun(int t[][N], int n) { int i, sum; /**********************************found*********************************/ ___1___; for(i=0; i<n; i++) /**********************************found*********************************/ sum+=___2___ ; for(i=0; i<n; i++) /**********************************found*********************************/ sum+= t[i][n-i-___3___] ; } main( ) { int t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10},i,j; printf("\nThe original data:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%4d",t[i][j]); printf("\n"); } printf("The result is: %d",fun(t,N)); return sum; 1 t[i][i] sum=0

}

34. 给定程序中,函数 FUN 的功能是:将 S 所指字符串中的所有数字字符移到所 有非数字字符之后,并保持数字字符串和非数字字符原有的先后次序。例如, 形参 S 所指的字符串为:def35adh3kjsdf7. 执行结果为:defadhkjsdf3537. #include <stdio.h>

void fun(char *s) { int i, j=0, k=0; char t1[80], t2[80];

for(i=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') { /**********************************found*********************************/ t2[j]=s[i];___1___; } else t2[j]=0; t1[k++]=s[i]; t1[k]=0; j++

/**********************************found*********************************/ for(i=0; s[i]=t1[i] /**********************************found*********************************/ for(i=0;___3___; i++) s[k+i]=t2[i]; } main( ) { char s[80]="ba3a54j7sd567sdffs"; i<j i<k; i++) ___2___;

}

printf("\nThe original string is : %s\n",s); fun(s); printf("\nThe result is : %s\n",s);

35. 程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函 数 FUN 的功能是输出这位学生的信息。 #include <stdio.h> typedef struct { int num; char name[9]; char sex; struct { int year,month,day ;} birthday; float score[3]; }STU; /**********************************found*********************************/ void show(STU___1___) { int i; tt

printf("\n%d %s %c %d-%d-%d", tt.num, tt.name, tt.sex, tt.birthday.year, tt.birthday.month, tt.birthday.day); for(i=0; i<3; i++) /**********************************found*********************************/ printf("%5.1f",___2___); tt.score[i] printf("\n"); } main( ) { STU std={ 1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0 }; printf("\nA student data:\n");

/**********************************found*********************************/ show(___3___); } std

36. 给定程序中,函数 FUN 的功能是:求 SS 所指字符串数组中长度最短的字符串 所在的行下标,作为函数值返回,并把其串长放在形参 n 所指变量中。SS 所 指字符串数组中共有 M 个字符串,且串长<N 。 #include <stdio.h> #include <string.h> #define M 5 #define N 20 int fun(char (*ss)[N], int { int i, k=0, len= N;

*n)

/**********************************found*********************************/ for(i=0; i<___1___; i++) { len=strlen(ss[i]); if(i==0) *n=len; /**********************************found*********************************/ if(len ___2___ *n) < M

{ *n=len; k=i; } } /**********************************found*********************************/ return(___3___); i

} main( ) { ss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"}; int n,k,i; printf("\nThe original strings are :\n"); for(i=0;i<M;i++)puts(ss[i]); k=fun(ss,&n); printf("\nThe length of shortest string is : %d\n",n); printf("\nThe shortest string is : %s\n",ss[k]); } char

37. 函数 FUN 的功能是:把形参 a 所指数组中的偶数按原顺序依次存防到 a[0],a[1],a[2]……,把奇数从数组中删除,偶数个数通过函数值返回。例如: 若 a 所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7,删除奇数后 a 所指数 组中的数据为:4,2,6,8,返回值为 4。 #include #define int fun(int { int i,j; N <stdio.h> 9

a[], int n)

j = 0; for (i=0; i<n; i++) /**********************************found*********************************/ if (___1___== 0) { /**********************************found*********************************/ ____2____= a[i]; j++; } /**********************************found*********************************/ a[j] a[i]%2

return___3___; } main( ) { int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf("\nThe original data :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); n = fun(b, N); printf("\nThe number of even :%d\n", n); printf("\nThe even :\n"); for (i=0; i<n; i++) printf("%4d ", b[i]); printf("\n"); }

j

38. 函数 FUN 的功能是:统计长整数 N 的各个位上出现数字 1,2,3 的次数,并通 过外部(全部)变量 c1,c2,c3,返回主函数。例如:当 n=123114350 时,结果 为:c1=3 c2=1 c3=2 #include int <stdio.h>

c1,c2,c3; n)

void fun(long {

c1 = c2 = c3 = 0; while (n) {

/**********************************found*********************************/ switch(___1___) { /**********************************found*********************************/ case break /**********************************found*********************************/ 1: c1++;____2____; n%10

case break case 3: } n /= 10; } } main( ) { long

2:

c2++;___3___;

c3++;

n=123114350L;

fun(n); printf("\nThe result :\n"); printf("n=%ld } c1=%d c2=%d c3=%d\n",n,c1,c2,c3);

39. 给定程序中,函数 FUN 的功能是:把形参 S 所指字符中下标为奇数的字符右 移到下一个奇数位置,最右边被移出字符串的字绕回放到第一个奇数位置, 下标为偶数的字符不动(注:字符串的长度大雨等于 2)。例如,形参 S 所指的 字符串为:ahcbedgf. #include <stdio.h>

void fun(char *s) { int i, n, k; char c;

n=0;

for(i=0; s[i]!='\0'; i++) n++; /**********************************found*********************************/ if(n%2==0) n-1 else k=n-2; k=___1___;

/**********************************found*********************************/ c=___2___; for(i=k-2; i>=1; i=i-2) s[i+2]=s[i]; /**********************************found*********************************/ s[1]=___3___; } main( ) { char s[80]="abcdefgh"; printf("\nThe original string is : fun(s); printf("\nThe result is : } %s\n",s); %s\n",s); c s[k]

40. 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据 域中的数据递增有序连接。 函数 FUN 的功能是:把形参 X 的值放入一个新结 点并插入到链表中,插入后各结点仍保持递增有序 #include #include #define <stdio.h> <stdlib.h> N 8

typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *h, int x) { SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST)); /**********************************found*********************************/ s->data=___1___; x q=h; p=h->next; while(p!=NULL && x>p->data) { /**********************************found*********************************/ q=___2___; p=p->next; } s->next=p; /**********************************found*********************************/ q->next=___3___; s } SLIST *creatlist(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h; p

} void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); do { printf("->%d",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } main( ) { SLIST *head; int x; int a[N]={11,12,15,18,19,22,25,29}; head=creatlist(a); printf("\nThe list before inserting:\n"); outlist(head); printf("\nEnter a number : "); sccnf("%d",&x); fun(head,x); printf("\nThe list after inserting:\n"); outlist(head); }

41. 函数 FUN 的功能是进行字母的转换,若形参 ch 中是小写英文字母,则转换成 对应的大写英文字母;若 ch 中是大写英文字母,则转换成对应的小写英文字 母;若是其它字符保持不变,并将转换后的结果作为函数值返回。 #include #include <stdio.h> <ctype.h>

char fun(char ch) { /**********************************found*********************************/ if ((ch>='a') ___1___(ch<='z')) return ch -'a' + 'A'; if ( isupper(ch) ) /**********************************found*********************************/ &&

return ch +'a'-___2___ ; /**********************************found*********************************/ return___3___; } main( ) { char c1, c2; printf("\nThe result :\n"); c1='w'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); c1='W'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); c1='8'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); }

'A'

ch

42. 给定程序中,函数 FUN 的功能是:求形参 SS 所指字符串数组中最长字符串的 长度,将其余字符串右边用字符*补齐,使其与最长饿字符串等长。SS 所指字 符串数组中共有 M 个字符串,且串长<N. #include <stdio.h> #include <string.h> #define M 5 #define N 20 void fun(char (*ss)[N]) { int i, j, n, len=0; for(i=0; i<M; i++) { len=strlen(ss[i]); if(i==0) n=len; if(len>n)n=len; } for(i=0; i<M; i++) { /**********************************found*********************************/ n=strlen(___1___); ss[i] for(j=0; j<len-n; j++)

/**********************************found*********************************/ ss[i][___2___]='*'; n+j /**********************************found*********************************/ ss[i][n+j+___3___]='\0'; } } main( ) { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; int i; printf("The original strings are :\n"); for(i=0; i<M; i++) printf("%s\n",ss[i]); printf("\n"); fun(ss); printf("The result is :\n"); for(i=0; i<M; i++) printf("%s\n",ss[i]); } 1

43. 给定程序通过定义并赋初值的方式,利用结构体变量存储了一个学生的学号, 姓名和 3 门课的成绩。函数 FUN 的功能是将学生的各科成绩都乘以一个系 数 a。 #include <stdio.h> typedef struct { int num; char name[9]; float score[3]; }STU; void show(STU tt) { int i; printf("%d %s : ",tt.num,tt.name); for(i=0; i<3; i++) printf("%5.1f",tt.score[i]); printf("\n"); } /**********************************found*********************************/

void STU { int i;

modify(*ss,float

a)

for(i=0; i<3; i++) /**********************************found*********************************/ ss->___2___ score[i] } main( ) { STU std={ 1,"Zhanghua",76.5,78.0,82.0 }; float a; *=a;

printf("\nThe original number and name and scores :\n"); show(std); printf("\nInput a number : "); scanf("%f",&a);

/**********************************found*********************************/ modify(___3___,a); &std printf("\nA result of modifying :\n"); show(std); }

44. 给定程序中,函数 FUN 的功能是:将形参指针所指结构体数组中的三个元素

按 NUM 成员进行升序排列。 #include typedef { int <stdio.h> struct num;

char name[10]; }PERSON; /**********************************found*********************************/ void *std { /**********************************found*********************************/ ___2___ temp; PERSON if(std[0].num>std[1].num) { temp=std[0]; std[0]=std[1]; std[1]=temp; } if(std[0].num>std[2].num) { temp=std[0]; std[0]=std[2]; std[2]=temp; } if(std[1].num>std[2].num) { temp=std[1]; std[1]=std[2]; std[2]=temp; } fun(PERSON ___1___)

} main( ) { PERSON std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" }; int i; /**********************************found*********************************/ fun(___3___); printf("\nThe result is :\n"); for(i=0; i<3; i++) printf("%d,%s\n",std[i].num,std[i].name); std

}

45. 给定程序中,函数 FUN 的功能是:将自然数 1~10 以及他们的平方根写到名为 myfile3.txt 的文本文件中,然后再顺序读出显示在屏幕上。 #include #include <math.h> <stdio.h>

int fun(char *fname ) { FILE *fp; int i,n; float x;

if((fp=fopen(fname, "w"))==NULL) return 0; for(i=1;i<=10;i++) /**********************************found*********************************/ fprintf(___1___,"%d %f\n",i,sqrt((double)i)); printf("\nSucceed!!\n"); /**********************************found*********************************/ ___2___; fclose(fp) printf("\nThe data in file :\n"); /**********************************found*********************************/ if((fp=fopen(___3___,"r"))==NULL) fname return 0; fscanf(fp,"%d%f",&n,&x); while(!feof(fp)) { printf("%d %f\n",n,x); fclose(fp); fp

fscanf(fp,"%d%f",&n,&x);

}

} main( ) { char fname[]="myfile3.txt"; fun(fname); } 46. 给定程序中,函数 fun 的功能是:将 N X N 矩阵中元素的值按列右移 1 个位置, 右边被移出矩阵的元素绕回左边。 例如,N=3,有下列矩阵 1 4 7 2 5 8 3 6 9 3 6 9 计算结果是 1 4 7 2 5 8

return 1;

#include #define void fun(int { int

<stdio.h> N 4

(*t)[N])

i, j, x;

/**********************************found*********************************/ for(i=0; i<___1___; i++) { /**********************************found*********************************/ x=t[i][___2___] n-1 for(j=N-1; j>=0; j--) t[i][j]=t[i][j-1]; /**********************************found*********************************/ t[i][___3___]=x; 0 ; N

} main( ) { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("The original array:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%2d ",t[i][j]); printf("\n"); } fun(t); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%2d ",t[i][j]); printf("\n"); } }

}

47. 给定程序中,函数 FUN 的功能是:对形参 S 所指字符串中下标为奇数的字符 按 ASCII 码大小递增排序,并将排序后下标为奇数的字符取出,存入形参 P 所 指字符数组中,形成一个新串。 例如,形参 S 所指的字符串为:baawrskjghzlicda,执行后 P 所指字符数组中的 字符串应为:aachjlsw #include <stdio.h>

void fun(char *s, char *p) { int i, j, n, x, t;

n=0; for(i=0; s[i]!='\0'; i++) n++; for(i=1; i<n-2; i=i+2) { /**********************************found*********************************/ ___1___; /**********************************found*********************************/ t=i

for(j=___2___ ; j<n; j=j+2) i+2 if(s[t]>s[j]) t=j; if(t!=i) { x=s[i]; s[i]=s[t]; s[t]=x; } } for(i=1,j=0; i<n; i=i+2, j++) p[j]=s[i]; /**********************************found*********************************/ p[j]=___3___; } main( ) { char s[80]="baawrskjghzlicda", p[50]; printf("\nThe original string is : fun(s,p); printf("\nThe result is : } %s\n",p); %s\n",s); '\0'

48. 各定程序的功能是:从键盘输入若干行文字(每行不超过 80 个字符),写到文 件 myfile4.txt 中,用-1 作为字符串输入结束的标志。然后将文件的内容读出 显示在屏幕上。文件的读写分别由自定义函数 ReadText 和 writetext 实现。 #include <stdio.h> #include <string.h> #include <stdlib.h> void WriteText(FILE *); void ReadText(FILE *);

main( ) { FILE *fp; if((fp=fopen("myfile4.txt","w"))==NULL) { printf(" open fail!!\n"); exit(0); } WriteText(fp); fclose(fp); if((fp=fopen("myfile4.txt","r"))==NULL) { printf(" open fail!!\n"); exit(0); } ReadText(fp); fclose(fp); } /**********************************found*********************************/ void WriteText(FILE *fw { char str[81]; printf("\nEnter string with -1 to end :\n"); gets(str); while(strcmp(str,"-1")!=0) { /**********************************found*********************************/ fputs(___2___,fw); fputs("\n",fw); str gets(str); } } void ReadText(FILE *fr) { char str[81]; printf("\nRead file and output to screen :\n"); fgets(str,81,fr); ___1___)

while( !feof(fr) ) { /**********************************found*********************************/ printf("%s",___3___); fgets(str,81,fr); } } str

49. 给定程序中,函数 FUN 的功能是:有 N X N 矩阵的外围元素顺时针旋转。操 作顺序是:首先将第一行元素的值存入临时数组 r,然后使第一列成为第一行, 最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后 一列。 例如,若 N=3,有下列矩阵: 1 4 7 2 5 8 3 6 9 7 8 9 计算结果为 4 5 6 1 2 3

#include #define void fun(int { int

<stdio.h> N 4

(*t)[N])

j ,r[N];

for(j=0; j<N; j++) r[j]=t[0][j]; for(j=0; j<N; j++)

/**********************************found*********************************/ t[0][N-j-1]=t[j][___1___]; for(j=0; j<N; j++) t[j][0]=t[N-1][j]; /**********************************found*********************************/ for(j=N-1; j>=0;___2___) t[N-1][N-1-j]=t[j][N-1]; for(j=N-1; j>=0; j--) /**********************************found*********************************/ t[j][N-1]=r[___3___]; } main( ) { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("\nThe original array:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%2d ",t[i][j]); printf("\n"); } fun(t); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%2d ",t[i][j]); printf("\n"); } } j j-0

50.

#include #include

<stdio.h> <math.h> x) int n;

double fun(double { double f, t;

f = 1.0 + x; /**********************************found*********************************/ t = ___1___; n = 1; do { n++; /**********************************found*********************************/ t *= (-1.0)*x/___2___; f += t; } /**********************************found*********************************/ while (____3____>= 1e-6); fabs(t) return f; } n x

main( ) { double x, y; x=2.5; y = fun(x); printf("\nThe result is :\n"); printf("x=%-12.6f y=%-12.6f\n", x, y); } 51. 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。 函数 fun 的功能是将形参 a 中的数据进行修改,把修改后的数据作为函数值 返回主函数进行输出。 例如:传给形参 a 的数据中,学号、姓名、和三门课的成绩依次是:10001、 “ZhangSan” 95、80、88,修改后的数据应为:10002、 、96、81、89。 “LiSi” #include #include <stdio.h> <string.h>

struct student { long sno;

char name[10]; float }; /*******************************found******************************/ ___1___ fun(struct student a) struct student score[3];

{

int

i;

a.sno = 10002; /*******************************found******************************/ strcpy(__2__, "LiSi"); a.name

/*******************************found******************************/ for (i=0; i<3; i++) __3__+= 1; return a; } main() { struct student int i; s={10001,"ZhangSan", 95, 80, 88}, t; a.score[i]

printf("\n\nThe original data :\n"); printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);

for (i=0; i<3; i++) printf("%6.2f ", s.score[i]); printf("\n"); t = fun(s); printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",t.sno, t.name);

for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); printf("\n"); }

52. 给定程序中,函数 fun 的功能是:利用指针数组对形参 ss 所指字符串数组

中的字符串按由长到短的顺序排序,并输出排序结果。ss 所指字符串数组中 共有 N 个字符串,且串长小于 M 。 #include #include #define #define <stdio.h> <string.h> N M 5 8

void fun(char (*ss)[M]) { char *ps[N],*tp; int i,j,k;

for(i=0; i<N; i++) ps[i]=ss[i]; for(i=0; i<N-1; i++) { /*******************************found******************************/ k= __1__ ; for(j=i+1; j<N; j++) /*******************************found******************************/ if(strlen(ps[k]) < strlen(__2__) ) k=j; ps[j] i

/*******************************found******************************/ tp=ps[i]; ps[i]=ps[k]; ps[k]= __3__ ; } tp

printf("\nThe string after sorting by length:\n\n"); for(i=0; i<N; i++) puts(ps[i]); } main() { char ch[N][M]={"red","green","blue","yellow","black"};

int

i;

printf("\nThe original string\n\n"); for(i=0;i<N;i++)puts(ch[i]); printf("\n"); fun(ch); }

53. 给定程序中,函数 fun 的功能是将形参给定的字符串、整数、浮点数写到文 本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 #include <stdio.h> f)

void fun(char *s, int a, double {

/*******************************found******************************/ __1__ fp; char ch; fp = fopen("file1.txt", "w"); fprintf(fp, "%s %d %f\n", s, a, f); fclose(fp); fp = fopen("file1.txt", "r"); printf("\nThe result :\n\n"); ch = fgetc(fp); /*******************************found******************************/ while (!feof(__2__)) /*******************************found******************************/ fp FILE*

{ putchar(__3__); ch = fgetc(fp); } putchar('\n'); } main( ) { char a[10]="Hello!"; double c= 98.76; int b=12345; fclose(fp);

ch

fun(a,b,c); }

54. 给定程序中,函数 fun 的功能是:将形参 s 所指字符串中的数字字符转换成 对应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参 s 所指的字符串为:abs5def126jkm8,程序执行后的输出结果 为:22。 #include #include #include <stdio.h> <string.h> <ctype.h>

int fun(char *s) { int sum=0;

while(*s) /*******************************found******************************/ { if( isdigit(*s) ) sum+= *s- __1__ ; /*******************************found******************************/ __2__; } s++ '0'

/*******************************found******************************/ return __3__ ; } main( ) { char s[81]; int n; sum

printf("\nEnter a string:\n\n"); gets(s); n=fun(s); printf("\nThe result is: %d\n\n",n); }

55. 给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,将所有串 长超过 k 的字符串中右边的字符删除,只保留左边的 k 个字符。ss 所指字符 串数组中共有 N 个字符串,且串长小于 M。 #include #include #define #define <stdio.h> <string.h> N M 5 10

/*******************************found******************************/ void fun(char (*ss) __1__, int { int i=0 ; k) [M]

/*******************************found******************************/ while(i< __2__) { /*******************************found******************************/ ss[i][k]=__3__; i++; } '\0' N

} main( ) { char x[N][M]={"Create","Modify","Sort","skip","Delete"}; int i;

printf("\nThe original string\n\n"); for(i=0;i<N;i++)puts(x[i]); printf("\n"); fun(x,4); printf("\nThe string after deleted :\n\n"); for(i=0; i<N; i++) puts(x[i]); printf("\n"); }

56. 给定程序中,函数 fun 的功能是:计算 x 所指数组中 N 个数的平均值(规定 所有数均为正数) ,平均值通过形参返回主函数,将小于平均值且最接近平均 值的数作为函数值返回,在主函数中输出。 例如,有 10 个正数:46 值为:30.500000 主函数中输出:m=30.0 #include #define <stdlib.h> N 10 x[],double *av) 30 32 40 6 17 45 15 48 26,平均

double fun(double { int s=0; i,j;

double d,s;

for(i=0; i<N; i++) s = s +x[i];

/*******************************found******************************/ __1__=s/N; d=32767; for(i=0; i<N; i++) if(x[i]<*av && *av - x[i]<=d) /*******************************found******************************/ { d=*av-x[i]; j=__2__; } i *av

/*******************************found******************************/ return __3__; } main( ) { int i; double x[N],av,m; x[j]

for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);} printf("\n"); m=fun(x,&av); printf("\nThe average is: %f\n",av); printf("m=%5.1f ",m); printf("\n"); }

57. 给定程序中,函数 fun 的功能是:计算下式前 n 项的和作为函数值返回。 S=
n ?1 (2 ? n ? 1) ? (2 ? n ? 1) 1? 3 3 ? 5 5 ? 7 - 2 + 2 - … + (?1) 2 4 6 2 (2 ? n) 2

例如,当形参 n 的值为 10 时,函数返回:-0.204491。

#include

<stdio.h>

double fun(int n) { int i, k; double s, t;

s=0; /*******************************found******************************/ k=__1__; for(i=1; i<=n; i++) { /*******************************found******************************/ t=__2__; s=s+k*(2*i-1)*(2*i+1)/(t*t); /*******************************found******************************/ k=k*__3__; } return s; } main( ) { int n=-1; -1 2*i 1

while(n<0) { printf("Please input(n>0): "); scanf("%d",&n); } printf("\nThe result is: %f\n",fun(n)); }

58. 程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和 3 门课的

成绩。函数 fun 的功能是将存放学生数据的结构体数组,按照姓名的字典序 (从小到大)排序。 #include #include <stdio.h> <string.h>

struct student { long sno;

char name[10]; float }; void fun(struct student a[], int { /*******************************found******************************/ __1__ t; int i, j; struct student n) score[3];

/*******************************found******************************/ for (i=0; i<__2__; i++) for (j=i+1; j<n; j++) /*******************************found******************************/ if (strcmp(__3__) > 0) a[i].name,a[j].name { t = a[i]; } a[i] = a[j]; a[j] = t; } n-1

main() { struct student 70, 78}, {10003,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}}; int i, j; s[4]={ {10001,"ZhangSan", 95, 80, 88},{10002,"LiSi", 85,

printf("\n\nThe original data :\n\n"); for (j=0; j<4; j++) { printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name);

for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]); printf("\n"); } fun(s, 4); printf("\n\nThe data after sorting :\n\n"); for (j=0; j<4; j++) { printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name);

for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]); printf("\n"); } }

59. 给定程序中,函数 fun 的功能是:将形参 s 所指字符串中的所有数字字符顺 序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如,s 所指字符串为:asd123fgh5﹟﹟43df, 处理后新字符串为:12543asdfgh﹟﹟df。

#include #include #include #include

<stdio.h> <string.h> <stdlib.h> <ctype.h>

char *fun(char *s) { int i, j, k, n; char *p, *t;

n=strlen(s)+1; t=(char*)malloc(n*sizeof(char)); p=(char*)malloc(n*sizeof(char)); j=0; k=0; for(i=0; i<n; i++) { if(isdigit(s[i])) /*******************************found******************************/ { p[__1__]=s[i]; j++;} else } /*******************************found******************************/ for(i=0; i<__2__; i++) p[j+i]= t[i]; p[j+k]=0; /*******************************found******************************/ return __3__; } main( ) p k { t[k]=s[i]; k++; } j

{ char s[80]; printf("Please input: "); scanf("%s",s); printf("\nThe result is: %s\n",fun(s)); }

60. 给定程序中,函数 fun 的功能是将不带头节点的单向链表结点数据域中的数 据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、 6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。 #include #include #define <stdio.h> <stdlib.h> N 6

typedef struct node { int data; *next;

struct node } NODE; void fun(NODE { NODE *p, *q; p = h; while (p) {

*h) int t;

/*******************************found******************************/ q = __1__ ; /*******************************found******************************/ while (__2__) q!=NULL p->next

{ if (p->data > q->data) { t = p->data; p->data = q->data; q = q->next; } /*******************************found******************************/ p = __3__ ; } } NODE *creatlist(int { NODE *h,*p,*q; h=NULL; for(i=0; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h == NULL) h = p = q; else } return h; } *h) { p->next = q; p = q; } a[]) int i; p->next q->data = t; }

void outlist(NODE { NODE *p; p=h;

if (p==NULL) printf("The list is NULL!\n"); else { printf("\nHead "); } while(p!=NULL);

do { printf("->%d", p->data); p=p->next; printf("->End\n"); } } main( ) { NODE *head; int a[N]= {0, 10, 4, 2, 8, 6 };

head=creatlist(a); printf("\nThe original list:\n"); outlist(head); fun(head); printf("\nThe list after inverting :\n"); outlist(head); }

61. 给定程序中,函数 fun 的功能是根据形参 i 的值返回某个函数的值。当调用 正确时,程序输出: x1=5.000000. x2=3.000000. x1*x1+x1*x2=40.000000 #include <stdio.h> x)

double f1(double { return x*x; }

double f2(double

x, double

y)

{

return x*y;

}

/*******************************found******************************/ __1__ fun(int { if (i==1) i, double x, double y) double

/*******************************found******************************/ return __2__(x); else /*******************************found******************************/ return __3__(x, y); } main( ) { double x1=5, x2=3, r; f2 f1

r = fun(1, x1, x2); r += fun(2, x1, x2); printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n",x1, x2, r); }

62. 给定程序中,函数 fun 的功能是将带头节点的单向链表结点数据域中的数据 从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6, 排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。 #include #include #define <stdio.h> <stdlib.h> N 6

typedef struct node { int data; *next;

struct node } NODE; void fun(NODE { NODE *p, *q;

*h) int t;

/*******************************found******************************/ p = __1__ ; while (p) /*******************************found******************************/ { q = __2__ ; p->next while (q) /*******************************found******************************/ { if (p->data __3__ q->data) { t = p->data; q = q->next; p = p->next; } NODE *creatlist(int { NODE *h,*p,*q; a[]) int i; } } p->data = q->data; q->data = t; } > h

h = (NODE *)malloc(sizeof(NODE));

h->next = NULL; for(i=0; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h->next == NULL) h->next = p = q; else } return h; } void outlist(NODE { NODE *p; p = h->next; if (p==NULL) printf("The list is NULL!\n"); else { printf("\nHead "); } while(p!=NULL); *h) { p->next = q; p = q; }

do { printf("->%d", p->data); p=p->next; printf("->End\n"); } } main( ) { NODE *head; int a[N]= {0, 10, 4, 2, 8, 6 };

head=creatlist(a); printf("\nThe original list:\n");

outlist(head); fun(head); printf("\nThe list after sorting :\n"); outlist(head); }

63. 给定程序中,函数 fun 的功能是:找出 100 至 x(x≤999)之间各位上的数字 之和为 15 的所有整数,然后输出;符合条件的整数个数作为函数值返回。 例如:当 n 值为 500 时,各位数字之和为 15 的整数有:159、168、177、 186、195、249、258、267、276、285、294、339、348、357、366、375、 384、393、429、438、447、456、465、474、483、492。共有 26 个。 #include fun(int { int x) n, s1, s2, s3, t; <stdio.h>

/*******************************found******************************/ n=__1__; t=100; /*******************************found******************************/ while(t<=__2__) { s1=t%10; s2=(t/10)%10; s3=t/100; x 0

if(s1+s2+s3==15) { printf("%d ",t); n++; }

/*******************************found******************************/ __3__; } t++

return n; } main( ) { int x=-1;

while(x>999||x<0) { printf("Please input(0<x<=999): "); scanf("%d",&x); printf("\nThe result is: %d\n",fun(x)); } }

64. 给定程序中,函数 fun 的功能是将不带头结点的的单向链表逆置。即若原链 表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点 数据域依次为:10、8、6、4、2。 #include #include #define <stdio.h> <stdlib.h> N 5

typedef struct node { int data; *next;

struct node } NODE;

/*******************************found******************************/ __1__ fun(NODE *h) { NODE *p, *q, *r; p = h; NODE*

if (p == NULL) return NULL; q = p->next; p->next = NULL; /*******************************found******************************/ while (__2__) { r = q->next; q->next = p; p = q; q!=NULL

/*******************************found******************************/ q = __3__ ; } return p; } NODE *creatlist(int { NODE *h,*p,*q; h=NULL; for(i=0; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h == NULL) h = p = q; else } return h; { p->next = q; p = q; } a[]) int i; r

} void outlist(NODE { NODE *p; p=h; if (p==NULL) printf("The list is NULL!\n"); else { printf("\nHead "); } while(p!=NULL); *h)

do { printf("->%d", p->data); p=p->next; printf("->End\n"); } } main( ) { NODE *head; int a[N]={2,4,6,8,10};

head=creatlist(a); printf("\nThe original list:\n"); outlist(head); head=fun(head); printf("\nThe list after inverting :\n"); outlist(head); }

65. 给定程序中, 函数 fun 的功能是用函数指针指向要调用的函数, 并进行调用。 规定在_2_处使 f 指向函数 f1,在_3_处使 f 指向函数 f2。当调用正确时,程序 输出:

x1=5.000000. x2=3.000000. x1*x1+x1*x2=40.000000 #include <stdio.h> x) }

double f1(double { return x*x;

double f2(double x, double y) { return x*y; }

double fun(double a, double b) { /*******************************found******************************/ __1__ (*f)(); double r1, r2; double

/*******************************found******************************/ f = __2__ ; r1 = f(a); /*******************************found******************************/ f = __3__ ; r2 = (*f)(a, b); return r1 + r2; } main( ) { double x1=5, x2=3, r; /* point fountion f2 */ f2 /* point fountion f1 */ f1

r = fun(x1, x2);

printf("\nx1=%f,

x2=%f, x1*x1+x1*x2=%f\n",x1, x2, r);

}

66. 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。 所有学生数据均以二进制方式输出到 student.dat 文件中。 函数 fun 的功能是 从指定文件中找出指定学号的学生数据,读入此学生的数据,对该生的分数 进行修改,使每门课的分数加 3 分,修改后重写文件中该学生的数据,即用 该学生的新据覆盖原数据,其它学生数据不变;若找不到,则什么都不做。 #include #define <stdio.h> N 5 student

typedef struct { long sno;

char name[10]; float } STU; void fun(char *filename, long { FILE *fp; int i; sno) score[3];

STU n;

fp = fopen(filename,"rb+"); /*******************************found******************************/ while (!__1__) { fread(&n, sizeof(STU), 1, fp); /*******************************found******************************/ feof(fp)

if (n.sno__2__) break; if (!feof(fp))

}

==sno

{ for (i=0; i<3; i++) n.score[i] += 3; /*******************************found******************************/ fseek(fp, -1L*__3__, SEEK_CUR); sizeof(STU) fwrite(&n, sizeof(STU), 1, fp); fclose(fp); } main( ) { STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88}, {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87}, }

{10005,"ZhangSan", 95, 80, 88}}, ss[N]; int i,j; FILE *fp;

fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), N, fp); fclose(fp); printf("\nThe original data :\n"); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); for (j=0; j<N; j++)

{ printf("\nNo: %ld Name: %-8s Scores:

",ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } fun("student.dat", 10003); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); printf("\nThe data after modifing :\n"); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } }

67. 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。 函数 fun 的功能是将形参 a 所指结构体变量中的数据赋给函数中的结构体变 量 b,并修改 b 中的学号和姓名,最后输出修改后的数据。例如:a 所指变量 中的学号、姓名、和三门课的成绩依次是:10001、 “ZhangSan” 95、80、88, 、 则修改后输出 b 中的数据应为:10002、 、95、80、88。 “LiSi” #include #include <stdio.h> <string.h>

struct student

{

long

sno;

char name[10]; float }; void fun(struct { struct student student b; int a) i; score[3];

/*******************************found******************************/ b = __1__; b.sno = 10002; /*******************************found******************************/ strcpy(__2__, "LiSi"); printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name); b.name a

/*******************************found******************************/ for (i=0; i<3; i++) printf("%6.2f ", printf("\n"); } main( ) { struct student int i; s={10001,"ZhangSan", 95, 80, 88}; b.__3__); score[i]

printf("\n\nThe original data :\n"); printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);

for (i=0; i<3; i++) printf("%6.2f ",

s.score[i]);

printf("\n"); fun(s); }

68. 给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,删除所有 串长超过 k 的字符串,函数返回所剩字符串的个数。ss 所指字符串组中共有 N 个字符串,且串长小于 M。 #include #include #define #define <stdio.h> <string.h> N M 5 10 k)

int fun(char (*ss)[M], int { int i,j=0,len;

/*******************************found******************************/ for(i=0; i< __1__ ; i++) { len=strlen(ss[i]); /*******************************found******************************/ if(len<= __2__) /*******************************found******************************/ strcpy(ss[j++],__3__); } return j; } ss[i] k-1 N

main( ) { char x[N][M]={"Beijing","Shanghai","Tianjing","Nanjing","Wuhan"}; int i,f;

printf("\nThe original string\n\n"); for(i=0;i<N;i++)puts(x[i]); printf("\n"); f=fun(x,7); printf("The string witch length is less than or equal to 7 :\n"); for(i=0; i<f; i++) puts(x[i]);printf("\n"); }

69. 给定程序中,函数 fun 的功能是:将形参 s 所指字符串中所有 ASCII 码值小 于 97 的字符存入形参 t 所指字符数组中,形成一个新串,并统计出符合条件 的字符个数作为函数值返回。例如,形参 s 所指的字符串为:Abc@1x56*, 程序执行后 t 所指字符数组中的字符串应为:A@156*。 #include <stdio.h> *s, char *t)

int fun(char { int n=0;

while(*s) { if(*s < 97) { /*******************************found******************************/ *(t+n)= __1__ ; n++; } *s

/*******************************found******************************/ __2__ ; s++

} *(t+n)=0; /*******************************found******************************/ return __3__ ; } main( ) { char s[81],t[81]; int n; n

printf("\nEnter a string:\n"); gets(s); n=fun(s,t); printf("\nThere are %d letter which ASCII code is less than 97: %s\n",n,t); }

70. 给定程序中,函数 fun 的功能是:将形参 n 所指变量中,各位上为偶然的数 去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指 针 n 传回所指变量。 例如,输入一个数:27638496,新的数:为 739。 #include <stdio.h>

void fun(unsigned long *n) { unsigned long i=1; while(*n) /*******************************found******************************/ x=0, i; int t;

{ t=*n % __1__; /*******************************found******************************/ if(t%2!= __2__) { x=x+t*i; *n =*n /10; } /*******************************found******************************/ *n=__3__; } main( ) { unsigned long n=-1; while(n>99999999||n<0) { printf("Please input(0<n<100000000): "); scanf("%ld",&n); } fun(&n); printf("\nThe result is: %ld\n",n); } i=i*10; }

10

0

x

71. 给定程序中,函数 fun 的功能是:把形参 s 所指字符串中最右边的 n 个字符 复制到形参 t 所指字符数组中,形成一个新串。若 s 所指字符串的长度小

于 n,则将整个字符串复制到形参 t 所指字符数组中。 例如,形参 s 所指的字符串为:abcdefgh,n 的值为 5,程序执行后 t 所指字 符数组中的字符串数应为:defgh。 #include <stdio.h>

#include #define

<string.h> N 80

void fun(char *s, int n, char *t) { int len,i,j=0; len=strlen(s); /*******************************found******************************/ if(n>=len) strcpy(__1__); else { /*******************************found******************************/ for(i=len-n; i<=len-1; i++) t[j++]= __2__ ; s[i] t,s

/*******************************found******************************/ t[j]= __3__ ; } } main( ) { char s[N],t[N]; int n; ");gets(s); ‘\0’

printf("Enter a string:

printf( "Enter n:"); scanf("%d",&n); fun(s,n,t); printf("The string t : "); puts(t); }

72. 给定程序中, 函数 fun 的功能是: a 所指 3×5 矩阵中第 k 列的元素左移到 将

第 0 列, k 列以后的每列元素行依次左移, 第 原来左边的各列依次绕到右边。 例如,有下列矩阵: 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 若 k 为 2,程序执行结果为 3 3 3 4 4 4 5 5 5 1 1 1 2 2 2

#include #define #define

<stdio.h> M N 3 5 (*a)[N],int k)

void fun(int { int

i,j,p,temp;

/*******************************found******************************/ for(p=1; p<= __1__; p++) for(i=0; i<M; i++) { temp=a[i][0]; /*******************************found******************************/ for(j=0; j< __2__ ; j++) a[i][j]=a[i][j+1]; N k

/*******************************found******************************/ a[i][N-1]= __3__; } } main( ) { int x[M][N]={ {1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5} },i,j; temp

printf("The array before moving:\n\n"); for(i=0; i<M; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } fun(x,2); printf("The array after moving:\n\n"); for(i=0; i<M; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } }

73. 给定程序中,函数 fun 的功能是:将 a 所指 4×3 矩阵中第 k 行的元素与第 0 行元素交换。 例如,有下列矩阵: 1 4 7 10 2 5 8 11 3 6 9 12 <stdio.h> N M 3 4 若 k 为 2,程序执行结果为: 7 4 1 8 5 2 10 9 6 3 11 12

#include #define #define

/*******************************found******************************/

void fun(int (*a)[N], int __1__) { int i,j,temp ; /*******************************found******************************/ for(i = 0 ; i < __2__ ; i++) { temp=a[0][i] ; /*******************************found******************************/ a[0][i] = __3__ ; a[k][i] = temp ; } } main( ) { int x[M][N]={ {1,2,3},{4,5,6},{7,8,9},{10,11,12} },i,j; printf("The array before moving:\n\n"); for(i=0; i<M; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n\n"); } fun(x,2); printf("The array after moving:\n\n"); for(i=0; i<M; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n\n"); } }

k

N

a[k][i]

74. 给定程序中, 函数 fun 的功能是: 计算形参 x 所指数组中 N 个数的平均值 (规 定所有数均为正数) ,将所指数组中大于平均值的数据移至数组的前部,小于 等于平均值的数据移至 x 所指数组的后部,平均值作为函数值返回,在主函 数中输出平均值和移动后的数据。 例如,有 10 个正数:46 值为:30.500000 移动后的输出为:46 #include #include #define <stdlib.h> <stdio.h> N 10 *x) 32 40 45 48 30 6 17 15 26 30 32 40 6 17 45 15 48 26,平均

double fun(double { int i, j;

double s, av, y[N];

s=0; for(i=0; i<N; i++) s=s+x[i]; /*******************************found******************************/ av=__1__; for(i=j=0; i<N; i++) if( x[i]>av ){ /*******************************found******************************/ y[__2__]=x[i]; x[i]=-1;} for(i=0; i<N; i++) j++ s/N

/*******************************found******************************/ if( x[i]!= __3__) y[j++]=x[i]; for(i=0; i<N; i++)x[i] = y[i]; return av; } main( ) { int i; double x[N]; -1

for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);} printf("\n"); printf("\nThe average is: %f\n",fun(x)); printf("\nThe result :\n",fun(x)); for(i=0; i<N; i++) printf("%5.0f ",x[i]); printf("\n"); }

75. 给定程序中, 函数 fun 的功能是: 计算形参 x 所指数组中 N 个数的平均值 (规 定所有数均为正数) ,作为函数值返回;并将大于平均值的数放在形参 y 所指 数组中, 在主函数中输出。 例如, 10 个正数: 有 46 15 48 26,平均值为:30.500000 <stdlib.h> N 10 x[],double *y) 30 32 40 6 17 45

#include #define

double fun(double { int i,j;

double av;

/*******************************found******************************/ av=__1__; /*******************************found******************************/ for(i=0; i<N; i++) av = av + __2__; for(i=j=0; i<N; i++) /*******************************found******************************/ if(x[i]>av) y[__3__]= x[i]; y[j]=-1; return av; } main( ) { int i; double x[N],y[N]; j++ x[i]/N 0

for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);} printf("\n"); printf("\nThe average is: %f\n",fun(x,y)); for(i=0; y[i]>=0; i++) printf("%5.1f ",y[i]); printf("\n"); }

76. 给定程序中,函数 fun 的功能是:将形参 s 所指字符串中的所有字母字符顺 序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如, 所指字符串为: s asd123fgh543df,处理后新字符串为: asdfghdf12543。 #include <stdio.h>

#include #include

<stdlib.h> <string.h> *s) char *p, *t;

char *fun(char { int i, j, k, n;

n=strlen(s)+1; t=(char*)malloc(n*sizeof(char)); p=(char*)malloc(n*sizeof(char)); j=0; k=0; for(i=0; i<n; i++) { if(((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='Z'))) { /*******************************found******************************/ t[j]=__1__; j++;} else } /*******************************found******************************/ for(i=0; i<__2__; i++) t[j+i]=p[i]; k { p[k]=s[i]; k++; } s[i]

/*******************************found******************************/ t[j+k]= __3__; return t; } main( ) { char s[80]; printf("Please input: "); scanf("%s",s); ‘\0’

printf("\nThe result is: %s\n",fun(s)); }

77. 给定程序中,函数 fun 的功能是:找出 100~999 之间(含 100 和 999)所 有整数中各位上数字之和为 x(x 为一正整数)的整数,然后输出;符合条件的 整数个数作为函数值返回。 例如,当 x 值为 5 时,1~999 之间各位上数字之和为 5 的整数有:104、 113、122、131、140、203、212、221、230、302、311、320、401、410、 500。共有 15 个。当 x 值为 27 时,各位数字之和为 27 的整数是:999。 只有 1 个。 #include fun(int { int x) <stdio.h>

n, s1, s2, s3, t;

n=0; t=100; /*******************************found******************************/ while(t<=__1__) /*******************************found******************************/ { s1=t%10; s2=(__2__)%10; s3=t/100; t/10 999

/*******************************found******************************/ if(s1+s2+s3==__3__) { printf("%d ",t); n++; } t++; x

} return n; } main( ) { int x=-1; while(x<0) { printf("Please input(x>0): "); scanf("%d",&x); } printf("\nThe result is: %d\n",fun(x)); }

78. 给定程序中,函数 fun 的功能是将参数给定的字符串、整数、浮点数写到文 本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi 和 atof 将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 #include #include <stdio.h> <stdlib.h> f)

void fun(char *s, int a, double {

/*******************************found******************************/ __1__ fp; char str[100], str1[100], str2[100]; int a1; double f1; FILE*

fp = fopen("file1.txt", "w"); fprintf(fp, "%s %d %f\n", s, a, f);

/*******************************found******************************/ __2__ ; fp = fopen("file1.txt", "r"); /*******************************found******************************/ fscanf(__3__,"%s%s%s", str, str1, str2); fclose(fp); a1 = atoi(str1); f1 = atof(str2); fp floes(fp)

printf("\nThe result :\n\n%s %d %f\n", str, a1, f1); } main( ) { char a[10]="Hello!"; double int b=12345;

c= 98.76; fun(a,b,c); }

79. 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。 所有学生数据均以二进制方式输出到文件中。函数 fun 的功能是重写形参 filename 所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原 来的数据,其它学生的数据不变。 #include #define <stdio.h> N 5 student

typedef struct { long sno;

char name[10];

float } STU;

score[3];

void fun(char *filename, STU n) { FILE *fp;

/*******************************found******************************/ fp = fopen(__1__, "rb+"); filename

/*******************************found******************************/ fseek(fp, -1L*sizeof(STU), __2__); SEEK_END

/*******************************found******************************/ fwrite(__3__, sizeof(STU), 1, fp); fclose(fp); main() { STU t[N]={ {10001,"MaChao", 91, 92, 77},{10002,"CaoKai", 75, 60, 88}, {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87}, } &n

{10005,"ZhangSan", 95, 80, 88}}; STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N]; int i,j; FILE *fp;

fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), N, fp); fclose(fp); fp = fopen("student.dat", "rb"); fclose(fp); printf("\nThe original data :\n\n"); for (j=0; j<N; j++) fread(ss, sizeof(STU), N, fp);

{ printf("\nNo: %ld Name: %-8s Scores:

",ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } fun("student.dat", n); printf("\nThe data after modifing :\n\n"); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);

for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } }

80. 给定程序中,函数 fun 的功能是计算下式 S=
1? 3 3 ? 5 5 ? 7 (2 ? n ? 1) ? (2 ? n ? 1) - 2 + 2 -…+ (?1) n?1 2 4 6 2 (2 ? n) 2

直到

(2 ? n ? 1) ? (2 ? n ? 1) ≤ 10?6 ,并把计算结果作为函数值返回。 2 (2 ? n)

例如:若形参 e 的值为 1e-6,函数的返回值为-0.205601 #include <stdio.h>

double fun(double e) { int i, k; double s, t, x;

s=0;

k=1;

i=2;

/*******************************found******************************/ x=__1__/4; /*******************************found******************************/ while(x __2__ e) { s=s+k*x; k=k* (-1); t=2*i; > 3.0

/*******************************found******************************/ x=__3__*(2*i+1)/(t*t); i++; return s; } main( ) { double e=1e-6; } } (2*i-1)

printf("\nThe result is: %f\n",fun(e));

81. 给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中查找与形参 t 所指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值) ,未 找到则返回-1。ss 所指字符串数组中共有 N 个内容不同的字符串,且串长小 于 M。 #include #include #define <stdio.h> <string.h> N 5

#define

M

8

int fun(char (*ss)[M],char *t) { int i;

/*******************************found******************************/ for(i=0; i< __1__ ; i++) /*******************************found******************************/ if(strcmp(ss[i],t)==0 ) return __2__ ; return -1; } main( ) { char ch[N][M]={"if","while","switch","int","for"},t[M]; int n,i; i N

printf("\nThe original string\n\n"); for(i=0;i<N;i++)puts(ch[i]); printf("\n"); printf("\nEnter a string for search: n=fun(ch,t); /*******************************found******************************/ if(n==-1) else } printf("\nDon't found!\n"); "); gets(t);

printf("\nThe position is %d .\n",n);

82. 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。

函数 fun 的功能是对形参 b 所指结构体变量中的数据进行修改,最后在主函 数中输出修改后的数据。 例如:b 所指变量 t 中的学号、姓名、和三门课的成绩依次是:10002、 “ZhangQi” 93、85、87,修改后输出 t 中的数据应为:10004、 、 “LiJie” 93、 、 85、87。 #include #include <stdio.h> <string.h>

struct student { long sno;

char name[10]; float }; void fun( struct student *b) { int i; score[3];

/*******************************found******************************/ b__1__ = 10004; ->sno

/*******************************found******************************/ strcpy(b__2__, "LiJie"); } main( ) { struct student int i; t={10002,"ZhangQi", 93, 85, 87}; ->name

printf("\n\nThe original data :\n"); printf("\nNo: %ld Name: %s\nScores: ",t.sno, t.name);

for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); printf("\n"); /*******************************found******************************/ fun(__3__); printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",t.sno, t.name); &t

for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); printf("\n"); }

83. 给定程序中,函数 fun 的功能是:判定形参 a 所指的 N×N(规定 N 为奇数) 的矩阵是否是“幻方” 若是,函数返回值为 1;不是,函数返回值为 0。 , “幻方” 的判定条件是;矩阵每行、每列、主对角线及反对角线上元素之和都相等。 例如,以下 3×3 的矩阵就是一个“幻方” : 4 3 8 #include #define int fun(int { int <stdio.h> N 3 9 5 1 2 7 6

(*a)[N])

i,j,m1,m2,row,colum;

m1=m2=0; for(i=0; i<N; i++) { j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; }

if(m1!=m2) return 0; for(i=0; i<N; i++) /*******************************found******************************/ { row=colum= __1__; for(j=0; j<N; j++) { row+=a[i][j]; colum+=a[j][i]; } 0

/*******************************found******************************/ if( (row!=colum) __2__ (row!=m1) ) return 0; } /*******************************found******************************/ return __3__; } main( ) { int x[N][N],i,j; 1 ||

printf("Enter number for array:\n"); for(i=0; i<N; i++) for(j=0; j<N; j++) scanf("%d",&x[i][j]); printf("Array:\n"); for(i=0; i<N; i++)

{ for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } if(fun(x)) printf("The Array is a magic square.\n"); else printf("The Array isn't a magic square.\n"); }

84. 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。 函数 fun 的功能是将形参 a 所指结构体变量 s 中的数据进行修改, 并把 a 中 地址作为函数值返回主函数,在主函数中输出修改后的数据。 例如:a 所指变量 s 中的学号、姓名、和三门课的成绩依次是:10001、 “ZhangSan” 95、80、88,修改后输出 t 中的数据应为:10002、 、96、 、 “LiSi” 81、89。 #include #include <stdio.h> <string.h>

struct student { long sno;

char name[10]; float }; /*******************************found******************************/ __1__ fun(struct student { int i; *a) struct student* score[3];

a->sno = 10002;

strcpy(a->name, "LiSi"); /*******************************found******************************/ for (i=0; i<3; i++) __2__ += 1; a->score[i]

/*******************************found******************************/ return __3__ ; } main( ) { struct student int i; s={10001,"ZhangSan", 95, 80, 88}, *t; 1

printf("\n\nThe original data :\n"); printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);

for (i=0; i<3; i++) printf("%6.2f ", s.score[i]); printf("\n"); t = fun(&s); printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",t->sno, t->name);

for (i=0; i<3; i++) printf("%6.2f ", t->score[i]); printf("\n"); }

85. 给定程序中,函数 fun 的功能是:计算下式前 n 项的和作为函数值返回。 S=
1? 3 3 ? 5 5 ? 7 (2 ? n ? 1) ? (2 ? n ? 1) + 2 + 2 +…+ 2 4 6 2 (2 ? n) 2

例如,当形参 n 的值为 10 时,函数返回:9.612558。

#include

<stdio.h>

double fun(int n) { int i; double s, t;

/*******************************found******************************/ s=__1__; /*******************************found******************************/ for(i=1; i<=__2__; i++) { t=2.0*i; /*******************************found******************************/ s=s+(2.0*i-1)*(2.0*i+1)/__3__; } return s; } main( ) { int n=-1; (t*t) n 0

while(n<0) { printf("Please input(n>0): "); scanf("%d",&n); } printf("\nThe result is: %f\n",fun(n)); }

86. 给定程序中,函数 fun 的功能是:计算出形参 s 所指字符串中包含的单词个 数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。 例如,形参 s 所指的字符串为:This is a C language program ,函数的返

回值为 6。 #include <stdio.h>

int fun(char *s) { int n=0, flag=0;

while(*s!='\0') { if(*s!=' ' && flag==0) { /*******************************found******************************/ __1__ ; flag=1;} n++

/*******************************found******************************/ if (*s==' ') flag= __2__ ; /*******************************found******************************/ __3__ ; } return n; } main( ) { char str[81]; int n; s++ 0

printf("\nEnter a line text:\n"); gets(str); n=fun(str); printf("\nThere are %d words in this text.\n\n",n); }

87. 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。

所有学生数据均以二进制方式输出到文件中。函数 fun 的功能是从形参 filename 所指的文件中读入学生数据,并按照学号从小到大排序后,再用二 进制方式把排序后的学生数据输出到 filename 所指的文件中,覆盖原来的文 件内容。 #include #define <stdio.h> N 5

typedef struct student { long sno;

char name[10]; float } STU; void fun(char *filename) { FILE *fp; int i, j; score[3];

STU s[N], t; /*******************************found******************************/ fp = fopen(filename, __1__); fread(s, sizeof(STU), N, fp); fclose(fp); for (i=0; i<N-1; i++) for (j=i+1; j<N; j++) /*******************************found******************************/ if (s[i].sno __2__) >s[j].sno “rb”

{ t = s[i];

s[i] = s[j];

s[j] = t;

}

fp = fopen(filename, "wb"); /*******************************found******************************/ __3__(s, sizeof(STU), N, fp); fclose(fp); } main( ) { STU t[N]={ {10005,"ZhangSan", 95, 80, 88}, {10003,"LiSi", 85, 70, 78}, fwrite

{10002,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}, {10001,"MaChao", 91, 92, 77}}, ss[N]; int i,j; FILE *fp;

fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), 5, fp); fclose(fp); printf("\n\nThe original data :\n\n"); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",t[j].sno, t[j].name);

for (i=0; i<3; i++) printf("%6.2f ", t[j].score[i]); printf("\n"); } fun("student.dat"); printf("\n\nThe data after sorting :\n\n"); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), 5, fp);

fclose(fp); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } }

88. 给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中,查找含有 形参 substr 所指子串的所有字符串并输出,若没找到则输出相应信息。ss 所 指字符串数组中共有 N 个字符串, 且串长小于 M。 程序中库函数 strstr(s1,s2) 的功能是在 s1 串中查找 s2 子串,若没有,函数值为 0,若有,为非 0。 #include #include #define #define <stdio.h> <string.h> N M 5 15 (*ss)[M], char *substr)

void fun(char { int i,find=0;

/*******************************found******************************/ for(i=0; i< __1__ ; i++) N

/*******************************found******************************/ if( strstr(ss[i], __2__) != NULL ) { find=1; puts(ss[i]); printf("\n"); } substr

/*******************************found******************************/ if (find==__3__) printf("\nDon't found!\n") } main( ) { char x[N][M]={"BASIC","C langwage","Java","QBASIC","Access"},str[M]; int i; 0

printf("\nThe original string\n\n"); for(i=0;i<N;i++)puts(x[i]); printf("\n"); printf("\nEnter a string for search : fun(x,str); } "); gets(str);

89. 给定程序中,函数 fun 的功能是:将形参 n 中,各位上为偶数的取出,并按 原来从高位到低位的顺序组成一个新的数,并作为函数返回。 例如,从主函数输入一个整数:27638496,函数返回值为:26846。 #include <stdio.h> n) t;

unsigned long fun(unsigned long { unsigned long s=n; x=0, s, i; int

/*******************************found******************************/ i=__1__; /*******************************found******************************/ while(__2__) s!=0 1

{ t=s%10; if(t%2==0) { /*******************************found******************************/ x=x+t*i; } s=s/10; return x; } main( ) { unsigned long n=-1; } i=__3__; i*10

while(n>99999999||n<0) { printf("Please input(0<n<100000000): "); scanf("%ld",&n); } printf("\nThe result is: %ld\n",fun(n)); }

90. 给定程序中,函数 fun 的功能是将带头结点的单向链表逆置。即若原链表中 从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据 域依次为:10、8、6、4、2。 #include #include #define <stdio.h> <stdlib.h> N 5

typedef struct node { int data;

struct node } NODE; void fun(NODE

*next;

*h)

{ NODE *p, *q, *r; /*******************************found******************************/ p = __1__; h->next

/*******************************found******************************/ if (__2__) return; p->next==NULL q = p->next; p->next = NULL; while (q) { r = q->next; q->next = p;

/*******************************found******************************/ p = q; } h->next = p; } NODE *creatlist(int { NODE *h,*p,*q; a[]) int i; q = __3__; r

h = (NODE *)malloc(sizeof(NODE)); h->next = NULL;

for(i=0; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h->next == NULL) h->next = p = q; else } return h; } void outlist(NODE { NODE *p; p = h->next; if (p==NULL) printf("The list is NULL!\n"); else { printf("\nHead "); } while(p!=NULL); *h) { p->next = q; p = q; }

do{ printf("->%d", p->data); p=p->next; printf("->End\n"); } } main( ) { NODE *head; int a[N]={2,4,6,8,10};

head=creatlist(a); printf("\nThe original list:\n"); outlist(head); fun(head);

printf("\nThe list after inverting :\n"); outlist(head); }

91. 给定程序中, 函数 fun 的功能是: 计算形参 x 所指数组中 N 个数的平均值 (规 定所有数均为正数) ,将所指数组中小于平均值的数据移至数组的前部,大于 等于平均值的数据移至 x 所指数组的后部,平均值作为函数值返回,在主函 数中输出平均值和移动后的数据。 例如,有 10 个正数:46 值为:30.500000 移动后的输出为:30 #include #include #define <stdlib.h> <stdio.h> N 10 *x) 6 17 15 26 46 32 40 45 48 30 32 40 6 17 45 15 48 26,平均

double fun(double { int i, j;

double av, y[N];

av=0; /*******************************found******************************/ for(i=0; i<N; i++) av +=__1__; for(i=j=0; i<N; i++) if( x[i]<av ){ /*******************************found******************************/ x[i]/N

y[j]=x[i]; x[i]=-1; __2__;} i=0; while(i<N) { if( x[i]!= -1 ) y[j++]=x[i];

j++

/*******************************found******************************/ __3__; } for(i=0; i<N; i++)x[i] = y[i]; return av; } main( ) { int i; double x[N]; i++

for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);} printf("\n"); printf("\nThe average is: %f\n",fun(x)); printf("\nThe result :\n",fun(x)); for(i=0; i<N; i++) printf("%5.0f ",x[i]); printf("\n"); }

92. 给定程序中,函数 fun 的功能是:判断形参 s 所指字符串是否是“回文” (Palindrome),若是,函数返回值为 1;不是,函数返回值为 0。 “回文”是正 读和反读都一样的字符串(不区分大小写字母) 。

例如,LEVEL 和 Level 是“回文” 而 LEVLEV 不是“回文” , 。 #include #include #include <stdio.h> <string.h> <ctype.h>

int fun(char *s) { char *lp,*rp; /*******************************found******************************/ lp= __1__ ; rp=s+strlen(s)-1; while((toupper(*lp)==toupper(*rp)) && (lp<rp) ) { /*******************************found******************************/ lp++; rp __2__ ; } -s

/*******************************found******************************/ if(lp<rp) __3__ ; else main( ) { char s[81]; printf("Enter a string: "); scanf("%s",s); return 1; } return 0

if(fun(s)) printf("\n\"%s\" is a Palindrome.\n\n",s); else printf("\n\"%s\" isn't a Palindrome.\n\n",s); }

93. 给定程序中,函数 fun 的功能是:在 3×4 的矩阵中找出在行上最大、在列上

最小的那个元素,若没有符合条件的元素则输出相应信息。 例如,有下列矩阵: 1 7 3 2 8 5 13 10 9 4 6 7

程序执行结果为:find: a[2][2]=9 #include #define #define <stdio.h> M N 3 4 (*a)[N])

void fun(int { int

i=0,j,find=0,rmax,c,k;

while( (i<M) && (!find)) { rmax=a[i][0]; c=0; for(j=1; j<N; j++) if(rmax<a[i][j]) { /*******************************found******************************/ rmax=a[i][j]; c= __1__ ; } find=1; k=0; while(k<M && find) /*******************************found******************************/ { if (k!=i && a[k][c]<=rmax) find= __2__ ; k++; } 0 i

if(find) printf("find: a[%d][%d]=%d\n",i,c,a[i][c]); /*******************************found******************************/ __3__ ; } if(!find) printf("not found!\n"); } main( ) { int x[M][N],i,j; i++

printf("Enter number for array:\n"); for(i=0; i<M; i++) for(j=0; j<N; j++) scanf("%d",&x[i][j]); printf("The array:\n"); for(i=0; i<M; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n\n"); } fun(x); }

94. 给定程序中,函数 fun 的功能是:找出形参 s 所指字符串中出现频率最高的 字母(不区分大小写) ,并统计出其出现的次数。 例如,形参 s 所指的字符串为:abcAbsmaxless,程序执行后的输出结果为: letter ’a’:3 times

letter ’s’:3 times #include #include #include <stdio.h> <string.h> <ctype.h>

void fun(char *s) { int k[26]={0},n,i,max=0; char ch;

while(*s) { if( isalpha(*s) )

/*******************************found******************************/ { ch=tolower(__1__); n=ch-'a'; /*******************************found******************************/ k[n]+= __2__ ; s++; /*******************************found******************************/ if(max<k[n]) max= __3__ ; } printf("\nAfter count :\n"); for(i=0; i<26;i++) if (k[i]==max) printf("\nletter \'%c\' : %d times\n",i+'a',k[i]); } main( ) k[n] } 1 *s

{

char s[81]; printf("\nEnter a string:\n\n"); gets(s); fun(s); }

95. 给定程序中,函数 fun 的功能是计算下式: S=
1? 3 3 ? 5 5 ? 7 (2 ? n ? 1) ? (2 ? n ? 1) + 2 + 2 +…+ 2 4 6 2 (2 ? n) 2

直到

(2 ? n ? 1) ? (2 ? n ? 1)
( 2?n ) 2

≤ 10?6 ,并把计算结果作为函数值返回。

#include

<stdio.h>

double fun(double e) { int i; double s, x;

/*******************************found******************************/ s=0; x=1.0; while(x>e){ /*******************************found******************************/ __2__; /*******************************found******************************/ x=(2*i-1)*(2*i+1)/((__3__)*(2*i)); s=s+x; } return s; 2.0*i i++ i=__1__; 0

} main( ) { double e=1e-6;

printf("\nThe result is: %f\n",fun(e)); }

96.给定程序中,函数 fun 的功能是建立一个 N×N 的矩阵。矩阵元素的构成规 律是:最外层元素的值全部为 1;从外向内第 2 层元素的值全部为 2;第 3 层元素的值全部为 3,…依次类推。例如,若 N=5,生成的矩阵为: 1 1 1 1 1 #include #define <stdio.h> N 7 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1

/*******************************found******************************/ void fun(int { int i,j,k,m; (*a) __1__) [N]

if(N%2==0) m=N/2 ; else m=N/2+1;

for(i=0; i<m; i++) /*******************************found******************************/

{ for(j= __2__ ; j<N-i; j++) a[i][j]=a[N-i-1][j]=i+1; for(k=i+1; k<N-i; k++)

i

/*******************************found******************************/ a[k][i]=a[k][N-i-1]= __3__; } } main( ) { int x[N][N]={0},i,j; i+1

fun(x); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } }

97.给定程序中,函数 fun 的功能是:找出 N×N 矩阵中每列元素中的最大值, 并按顺序依次存放于形参 b 所指的一维数组中。 #include #define <stdio.h> N 4 (*a)[N], int *b)

void fun(int { int i,j;

for(i=0; i<N; i++) /*******************************found******************************/ { b[i]= __1__; for(j=1; j<N; j++) /*******************************found******************************/ if(b[i] __2__ a[j][i]) b[i]=a[j][i]; } } main( ) { int x[N][N]={ {12,5,8,7},{6,1,9,3},{1,2,3,4},{2,8,4,3} },y[N],i,j; > a[0][i]

printf("\nThe matrix :\n"); for(i=0;i<N; i++) { for(j=0;j<N; j++) printf("%4d",x[i][j]); printf("\n"); } /*******************************found******************************/ fun(__3__); printf("\nThe result is:"); for(i=0; i<N; i++) printf("%3d",y[i]); printf("\n"); } x,y

98.给定程序中,函数 fun 的功能是:调用随机函数产生 20 个互不相同的整数

放在形参 a 所指数组中(此数组在主函数中已置 0) 。 #include #define void { int <stdlib.h> N 20 *a)

fun( int i, x, n=0;

x=rand()%20; /*******************************found******************************/ while (n<__1__) { for(i=0; i<n; i++ ) /*******************************found******************************/ if( x==a[i] ) __2__; break N

/*******************************found******************************/ if( i==__3__){ a[n]=x; n++; } x=rand()%20; } } main( ) { int x[N]={0} ,i; n

fun( x ); printf("The result : for( i=0; i<N; i++ ) { printf("%4d",x[i]); \n");

if((i+1)%5==0)printf("\n"); } printf("\n\n"); }

99.给定程序中,函数 fun 的功能是:将形参 n 中,各位上为偶数的数取出,并 按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。 例如,输入一个整数:27638496,函数返回值为:64862。 #include <stdio.h> n)

unsigned long fun(unsigned long { unsigned long while(n) { t=n%10; x=0; int t;

/*******************************found******************************/ if(t%2==__1__) 0

/*******************************found******************************/ x=__2__+t; x*10

/*******************************found******************************/ n=__3__; } return x; } main( ) n/10

{ unsigned long n=-1; while(n>99999999||n<0) { printf("Please input(0<n<100000000): "); scanf("%ld",&n); } printf("\nThe result is: %ld\n",fun(n)); } 100.下列给定程序中,函数 fun()的作用是:将字符串 tt 中的大写字母都改为对 应的小写字母,其他字符不变。例如,若输入“Ab,cD” 则输出“ab,cd” , 。 试题程序: #include #include #include <stdio.h> <string.h> <conio.h>

/*******************************found******************************/ char __1__ fun(char tt[]) { int i; for(i=0;tt[i];i++) { /*******************************found******************************/ if((tt[i]>='A')&&(tt[i]<= __ 2__ )) tt[i]+=32; } return(tt); ‘Z’ *

} main() { char tt[81]; printf("\nPlease enter a string: "); gets(tt); /*******************************found******************************/ printf("\nThe result string is: \n%s",fun(__ 3__ )); } tt

改 错 题

1、给定程序中 fun 函数的功能是:根据整型形参 m 的值,计算如下公式的值:

例如,若 m 中的值为 5,则应输出 0.536389。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! #include <stdio.h> double fun ( int m ) { double int i; y = 1.0 ;

/**************found**************/ for(i = 2 ; i < m ; i++) i++) /**************found**************/ y -= 1 /(i * i) ; return( y ) ; } 改为:y -= 1.0 /(i * i) ; 改为:for(i = 2 ; i <= m ;

main( ) { int n = 5 ; printf( "\nThe result is %lf\n", fun ( n ) ) ; }

2、给定程序中 fun 函数的功能是:将 s 所指字符串的正序和反序进行连接,形 成一个新串放在 t 所指的数组中。 例如, s 所指字符串为“ABCD”时, t 所指字符串的内容应为“ABCDDCBA” 当 则 #include <stdio.h> #include <string.h>

/************found************/ void fun (char s, char t) char * t) { int i, d; 改为:void fun (char * s,

d = strlen(s); for (i = 0; i<d; i++) t[i] = s[i]; for (i = 0; i<d; i++) t[d+i] = s[d-1-i]; /************found************/ t[2*d-1] = '\0'; } 改为:t[2*d] = '\0';

main() { char s[100], t[100];

printf("\nPlease enter string S:"); scanf("%s", s); fun(s, t); printf("\nThe result is: %s\n", t); }

3、给定程序中 fun 函数的功能是:将 s 所指字符串中位于奇数位置的字符或 ASCII 码为偶数的字符放入 t 所指数组中(规定第一个字符放在第 0 位中) 。 例如:字符串中的数据为:AABBCCDDEEFF,则应输出 ABBCDDEFF。 #include <stdio.h> #include <string.h> #define N 80

void fun(char *s, char t[]) { int i, j=0;

for(i=0; i<strlen(s); i++) /***********found**********/ if(i%2 && s[i]%2==0) =0) t[j++]=s[i]; /***********found**********/ t[i]='\0'; } main() { char s[N], t[N]; printf("\nPlease enter string s : "); gets(s); fun(s, t); printf("\nThe result is : %s\n",t); 改为:t[j]='\0'; 改为:if(i%2= =0 || s[i]%2=

}

4、 给定程序中 fun 函数的功能是: 计算 n!。 例如, n 输入 5, 给 则输出 120.000000。 #include <stdio.h> double fun ( int n ) { double result = 1.0 ; /************found************/ if n = = 0 return 1.0 ; while( n >1 && n < 170 ) /************found************/ result *= n-return result ; } 改为:result *= n--; 改为:if (n == 0)

main ( ) { int n ; printf("Input N:") ; scanf("%d", &n) ; printf("\n\n%d! =%lf\n\n", n, fun(n)) ; }

5、给定程序中 fun 函数的功能是:先从键盘上输入一个 3 行 3 列的矩阵的各个 元素的值,然后输出主对角线元素之和。 #include <stdio.h> int fun() { int a[3][3],sum; int i,j; /*********found**********/ ______; for (i=0;i<3;i++) { for (j=0;j<3;j++) /*********found**********/ scanf("%d",a[i][j]); } for (i=0;i<3;i++) sum=sum+a[i][i]; printf("Sum=%d\n",sum); } main() { fun(); } 改为:scanf("%d",&a[i][j]); 改为:sum=0

6、 给定程序中 fun 函数的功能是: 求

, (此

处 aa…aa 表示 n 个 a,a 和 n 的值在 1 至 9 之间) 。例如,a=3,n=6,则以

上表达式为: s=333333-33333-3333-333-33-3,其值是:296298。a 和 n 是 fun 函数的形 参。 #include <stdio.h> long fun (int a, int n) { int j;

/**************found**************/ long s = 0, t=1; 改为:long s = 0, t=0;

/**************found**************/ for ( j = 0 ; j <=n ; j++) 改为:for ( j = 0 ; j <n ; j++)

t = t * 10 + a ; s=t; for ( j = 1 ; j < n ; j++) { /**************found**************/ t = t % 10 ; s=s-t; return(s) ; } } 改为:t = t / 10 ;

main( ) { int a, n ;

printf( "\nPlease enter a and n:") ; scanf( "%d%d", &a, &n ) ; printf( "The value of function is: %ld\n", fun ( a, n ) ); }

7、给定程序中 fun 函数的功能是:求 k!(k<13),所求阶乘的值作为函数值返回。 例如:若 k=10,则应输出 3628800。 #include <stdio.h> long { /************found************/ if k > 0 return (k*fun(k-1)); /************found************/ else if ( k=0 ) return 1L; } 改为:else if ( k==0 ) 改为:if(k > 0) fun ( int k)

main() { int k = 10 ; printf("%d!=%ld\n", k, fun ( k )) ; }

8、给定程序中 fun 函数的功能是:由形参给定 n 个实数,输出平均值,并统计 在平均值以上(含平均值)的实数个数。 例 如 , n=8 时 , 输 入 :

193.99,195.673,195.757,196.051,196.092,196.596,196.579,196.763, 所得 平均值为:195.838745,在平均值以上的实数个数应为:5。 #include <stdio.h> int fun(float x[], int n) { /************found************/ int j, c=0, float xa=0.0; xa=0.0; for (j=0; j<n; j++ ) xa += x[j]/n; printf("ave =%f\n",xa); for (j=0; j<n; j++ ) /************found************/ if (x[j] => xa) c++; return c; } 改为:if (x[j] >= xa) 改 为 : int j, c=0; float

main ( )

{

float x[100] = { 193.199, 195.673, 195.757, 196.051, 196.092, 196.596, 196.579, 196.763 }; printf("%d\n", fun (x, 8)); }

9、给定程序中 fun 函数的功能是:将 tt 所指字符串中的小写字母都改为对应的 大写字母,其它字符不变。例如:若输入“Ab,cD” 则输出“AB,CD” , #include <stdio.h> #include <string.h> char* fun( char tt[] ) { int i; for( i = 0; tt[i]; i++ ) /**********found***********/ if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) ) 'z' ) ) /**********found***********/ tt[i] += 32; return( tt ); } 改为:tt[i] - = 32; 改为:if((tt[i] >= 'a')&&( tt[i] <=

main( ) { char tt[81]; printf( "\nPlease enter a string: " );

gets( tt ); printf( "\nThe result string is:\n%s", fun( tt ) ); }

10、给定程序中 fun 函数的功能是:在 p 所指字符串中找出 ASCII 码值最大的 字符, 将其放在第一个位置上; 并将该字符前的原字符向后顺序移动。 例如, 调用 fun 函数这前给字符串输入:ABCDeFGH,调用后字符串中的内容为: eABCDFGH。 #include <stdio.h> /**********found**********/ fun( char *p ) 改为:void fun( char *p )

{

char

max,*q;

int

i=0;

max=p[i]; while( p[i]!=0 ) { if( max<p[i] ) { max=p[i]; /**********found**********/ q=p+I } i++; } 改为:q=p+i;

/**********found**********/ wihle( q>p ) 改为:while(q>p )

{ *q=*(q-1); q--; }

p[0]=max; } main() { char str[80]; "); gets(str); "); puts(str);

printf("Enter a string:

printf("\nThe original string: fun(str); printf("\nThe string after moving:

"); puts(str); printf("\n\n"); }

11、给定程序 MODI1.CJ 是建立一个带头结点的单向链表,并用随机函数为各 结点赋值。给定程序中 fun 函数的功能是将单向链表结点(不包括头结点) 数据域为偶数的值累加起来,并作为函数值返回。 #include <stdio.h> #include <stdlib.h> typedef { int { int int struct data; aa *next; }NODE;

struct aa *h)

fun(NODE sum = 0 ;

NODE *p;

/***********found**********/ p=h; /***********found**********/ while(p->next) { if(p->data%2==0) sum +=p->data; /***********found**********/ p=h->next; } return sum; } NODE *creatlink(int n) { NODE *h, *p, *s, *q; int i, x; 改为:p=p->next; 改为:while(p) 改为:p=h->next;

h=p=(NODE *)malloc(sizeof(NODE)); for(i=1; i<=n; i++) { s=(NODE *)malloc(sizeof(NODE)); s->data=rand()%16; p->next=s; p->next=NULL; return h; } outlink(NODE *h, FILE *pf) s->next=p->next; }

p=p->next;

{

NODE *p; p = h->next; fprintf(pf ,"\n\nTHE LIST :\n\n while(p) { fprintf(pf ,"->%d ",p->data ); p=p->next; } fprintf (pf,"\n"); HEAD " );

} outresult(int { s, FILE *pf) %d\n",s);}

fprintf(pf,"\nThe sum of even numbers :

main( ) { NODE *head; head=creatlink(12); head->data=9000; outlink(head , stdout); even=fun(head); printf("\nThe } result :\n"); outresult(even, stdout); int even;

12、给定程序中 fun 函数的功能是:求三个数的最小公倍数。例如,给主函数中 的变量 x1,x2,x3 分别输入 15 11 2,则输出结果应当是:330。 #include <stdio.h> /************found************/

fun(int int { z) int

x, y, z )

改为: fun(int

x, int

y,

j,t ,n ,m;

/************found************/ j=1; t=j%x; m=j%y ; n=j%z; 改为:j = x;

/************found************/ while(t!=0&&m!=0&&n!=0) while(t!=0||m!=0||n!=0) { j = j+1; t=j%x; m=j%y; n=j%z; } 改 为 :

/************found************/ return i; } main( ) { int x1,x2,x3,j ; x2 x3: "); scanf("%d%d%d",&x1,&x2,&x3); 改为:return j;

printf("Input x1

printf("x1=%d, x2=%d, x3=%d \n",x1,x2,x3); j=fun(x1,x2,x3); printf("The minimal common multiple is : %d\n",j); }

13、给定程序中 fun 函数的功能是:先将在字符串 s 中的字符按正序存放到 t 串 中,然后把 s 中的字符按逆序连接到 t 串的后面。例如:当 s 听字符串为

“ABCDE”时,则 t 中的字符串应为“ABCDEEDCBA” 。 #include <stdio.h> #include <string.h> void fun (char *s, char *t) { int i, sl; sl = strlen(s); /************found************/ for( i=0; i<=s1; i ++) t[i] = s[i]; for (i=0; i<sl; i++) t[sl+i] = s[sl-i-1]; /************found************/ t[sl] = '\0'; } 改为:t[2*sl] = '\0'; 改为:for( i=0; i< sl; i ++)

main() { char s[100], t[100]; printf("\nPlease enter string s:"); scanf("%s", s); fun(s, t); printf("The result is: %s\n", t); }

14、给定程序中 fun 函数的功能是:从 s 所指字符串中删除所有小写字母 c。 #include <stdio.h> void { fun( char *s ) int i,j;

for(i=j=0; s[i]!='\0'; i++) if(s[i]!='c') /************found************/ s[j]=s[i]; /************found************/ s[i]='\0'; } main() { char s[80]; printf("Enter a string: printf("The original string: fun(s); printf("The string after deleted : } "); puts(s);printf("\n\n"); "); gets(s); "); puts(s); 改为:s[j]='\0'; 改为:s[j++]=s[i];

15、给定程序中 fun 函数的功能是:从整数 1 到 55 之间,选出能被 3 整除、且 有一位上的数是 5 的那些数, 并把这些数放在 b 所指的数组中, 这些数的个 数作为函数值返回。规定,函数中 a1 放个位数,a2 放十位数。

#include <stdio.h> /************found************/ fun( int *b ) 改 为 : int fun( int *b )

{

int

k,a1,a2,i=0;

/************found************/ for(k=10; k<=55; k++) { { /************found************/ a2=k/1O; a1=k-a2*10; if((k%3==0 && a2==5)||(k%3==0 && a1==5)) { b[i]=k; i++; } } /************found************/ return k; } main( ) { int a[100],k,m; 改为:return i; 改为:a2=k/10; 改为:for(k=10; k<55; k++)

m=fun( a ); printf("The result is :\n"); for(k=0; k<m; k++) printf("%4d",a[k]); printf("\n");

}

16、给定程序中 fun 函数的功能是:求 S 的值。

例如,当 k 为 10 时,函数值应为:1.533852。 #include <stdio.h> #include <math.h>

/************found************/ void fun( int { k) w, p, q; 改为:float fun( int k)

int n; float s, n = 1; s = 1.0;

while ( n <= k ) { w = 2.0 * n; p = w - 1.0; q = w + 1.0; s = s * w *w/p/q; n++; } /************found************/ return s 改为:return s;

}

main ( ) { printf("%f\n", fun (10)); }

17、给定程序中 fun 函数的功能是:将十进制正整数 m 转换成 k(2<=k<=9)进制 数,并按高位到低位顺序输出。 例如,若输入 8 和 2,则应输出 1000(即十进制数 8 转换成二进制表示是 1000) 。 #include <conio.h> #include <stdio.h> /**********found**********/ fun( int m, int k ) { int aa[20], i; for( i = 0; m; i++ ) { /**********found**********/ aa[i] = m/k; m /= k; } for( ; i; i-- ) /**********found**********/ 改为:aa[i] = m% k; 改为: void fun( int m, int k )

printf( "%d", aa[ i ] );

改为: printf( "%d", aa[ i-1] );

}

main( ) { int b, n; printf( "\nPlease enter a number and a base:\n" ); scanf( "%d %d", &n, &b ); fun( n, b ); printf("\n"); }

18、给定程序中 fun 函数的功能是:根据整型形参 n,计算如下公式的值。

例如:若 n=10,则应输出 0.617977. #include <stdio.h> /************found************/ int { fun ( int n ) float A=1; int i; 改为:float fun ( int n )

/************found************/ for (i=2; i<n; i++) 改为:for (i=2; i<=n; i++)

A = 1.0/(1+A); return A ; }

main( ) { int n;

printf("\nPlease enter n: ") ; scanf("%d", &n ) ; printf("A%d=%f\n", n, fun(n) ) ; }

19、给定程序中 fun 函数的功能是:输出 M 行 M 列整数方阵,然后求两条对角 线上元素之和,返回此和数。 #include <stdio.h> #define M 5

/************found************/ int fun(int n, int xx[][]) 改 为 : int fun(int n, int

xx[M][M]) { int i, j, sum=0;

printf( "\nThe %d x %d matrix:\n", M, M ); for( i = 0; i < M; i++ ) { for( j = 0; j < M; j++ ) /************found************/ printf( "%f ", xx[i][j] ); xx[i][j] ); printf("\n"); } for( i = 0 ; i < n ; i++ ) 改 为 : printf( "%4d ",

sum += xx[i][i]+xx[i][ n-i-1 ]; return( sum ); } main( ) { int aa[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 ( "\nThe sum of all elements on 2 diagnals is %d.",fun( M, aa )); }

20、给定程序中 fun 函数的功能是:求出 s 所指字符串中最后一次出现的 t 所指 子字符串的地址,通过函数值返回,在主函数中从此地址开始的字符串;若 未打到,则函数值为 NULL。 例如:当字符串中的内容为: “abcdabfabcdx” t 中的内容为“ab”时,输出结 , 果为: abcdx。 当字符串中的内容为: “abcdabfabcdx” t 中的内容为“abd” , 时,则程序输出未打到住处:not be found! #include #include <stdio.h> <string.h>

char * fun (char *s, char *t ) { char *p , *r, *a;

/************found************/ a = Null; 改为:a = NULL;

while ( *s ) { p = s; r = t;

while ( *r ) /************found************/ if ( r == p ) { r++; else p++; } 改为:if ( r* ==* p )

break;

if ( *r == '\0' ) a = s; s++; return a ; } }

main() { char s[100], t[100], *p;

printf("\nPlease enter string S :"); scanf("%s", s ); printf("\nPlease enter substring t :"); scanf("%s", t ); p = fun( s, t ); if ( p ) printf("\nThe result is : else } %s\n", p);

printf("\nNot found !\n" );

21、 给定程序中 fun 函数的功能是: 统计一个无符号整数中各位数字值为零的个

数,通过形参传回主函数,并把该整数中各位上最大的数字值作为函数值返 回。例如,若输入无符号整数 30800,则数字值为零的个数为 3,各位上数 字值最大的是 8。 #include <stdio.h> int { fun(unsigned n, int int do { t=n%10; /**************found**************/ if(t=0) count++; if(max<t) n=n/10; }while(n); /**************found**************/ zero=count; return max; } main( ) { unsigned n; int zero,max; 改为:* zero=count; max=t; 改为:if(t==0) count=0,max=0,t; *zero)

printf("\nInput n(unsigned): "); scanf("%d",&n); max = fun( n,&zero );

printf("\nThe result: max=%d }

zero=%d\n",max,zero);

22、给定程序中 fun 函数的功能是:求整数 x 的 y 次方的低 3 位值。例如,整数 5 的 6 次方为 15625,此值的低 3 位值为 625。 #include <stdio.h> long { int long fun(int i; t=1; x, int y, long *p )

/**************found**************/ for(i=1; i<y; i++) t=t*x; *p=t; /**************found**************/ t=t/1000; return t; } main( ) { long t,r; int x,y; 改为:t=t%1000; 改为:for(i=1; i<=y; i++)

printf("\nInput x and y: "); scanf("%ld%ld",&x,&y); t=fun(x,y,&r); printf("\n\nx=%d, y=%d, r=%ld, last=%ld\n\n",x, y,r,t );

}

23、给定程序中 fun 函数的功能是:给一维数组 a 输入任意 4 个整数,并按下 列的规律输出。例如输入 1,2,3,4,程序运行后输出以下方阵。 4 3 2 1 #include <stdio.h> #define M 4 1 4 3 2 2 1 4 3 3 2 1 4

/**************found**************/ void fun(int { int a) 改为:void fun(int a[M])

i,j,k,m;

printf("Enter 4 number : "); for(i=0; i<M; i++) scanf("%d",&a[i]); printf("\n\nThe result :\n\n"); for(i=M;i>0;i--) { k=a[M-1]; for(j=M-1;j>0;j--) /**************found**************/ aa[j]=a[j-1]; a[0]=k; 改为:a[j]=a[j-1];

for(m=0; m<M; m++) printf("%d printf("\n"); } } main() { int a[M]; }

",a[m]);

fun(a); printf("\n\n");

24、在主函数中从键盘输入若干个数放入数组中,用 0 结束输入并放在最后一 个元素中。给定程序中 fun 函数的功能是:计算数组元素中值为正数的平均 值(不包括 0) 。例如,数组中元素中值依次为:39,-47,21,2,-8,15, 0,则程序运行结果为 19.250000。 #include <stdio.h> double fun ( int x[]) { /************found************/ int sum = 0.0; 0.0; int c=0, i=0; while (x[i] != 0) { if (x[i] > 0) { sum += x[i]; c++; } i++; } 改 为 : double sum =

/************found************/ sum \= c; return sum; } 改为:sum /= c;

main( ) { int x[1000]; int i=0;

printf( "\nPlease enter some data (end with 0): " ); do { scanf("%d", &x[i]); } while (x[i++] != 0); printf("%f\n", fun ( x )); }

25、给定程序中 fun 函数的功能是:根据整形形参 m,计算如下公式的值:

例如,若 m 中的值为 5,则应输出 1.463611。 #include <stdio.h> double { fun ( int m)

double int i;

y = 1.0 ;

/**************found**************/ for(i = 2 ; i < m ; i++) i++) 改为:for(i = 2 ; i <= m ;

/**************found**************/ y += 1 / (i * i) ; return( y ) ; } 改为:y += 1.0 / (i * i) ;

main( ) { int n = 5 ; printf( "\nThe result is %lf\n", fun ( n ) ) ; }

26、 给定程序中 fun 函数的功能是: p 所指字符串中每个单词的最后一个字母 将 改成大写。 (这里的“单词”是指由空格隔开的字符串) 。例如,若输入“I am a student to take the examination.” 则应输出“I aM A studenT tO takE thE , examinatioN.” 。 #include <ctype.h> #include <stdio.h> void fun( char *p ) { int k = 0; for( ; *p; p++ ) if( k ) { /**********found***********/ if( p == ' ' ) 改为:if(* p == ' ' )

{ k = 0; /**********found***********/ * (p-1) = toupper( *( p - 1 ) ) - 1 ) ); } } else } k = 1; 改为: (p-1) = toupper( *( p *

main( ) { char chrstr[64]; int d ; printf( "\nPlease enter an English sentence within 63 letters: "); gets(chrstr); chrstr[d] = ' ' ; d=strlen(chrstr) ; chrstr[d+1] = 0 ; %s", chrstr);

printf("\n\nBefore changing:\n fun(chrstr); printf("\nAfter changing:\n }

%s", chrstr);

27、给定程序中 fun 函数的功能是:将 n 个无序整数从小到大排序。 #include <stdio.h>

#include <stdlib.h> fun ( int { int n, int i, j, p, t; *a )

for ( j = 0; j<n-1 ; j++ ) { p = j; /************found************/ for ( i=j+1; i<n-1 ; i++ ) 改为:for ( i=j+1; i<n ; i++ )

if ( a[p]>a[i] ) /************found************/ t=i; if ( p!=j ) { t = a[j]; a[j] = a[p]; a[p] = t; } } } 改为:p=i;

putarr( int { int i;

n,

int

*z )

for ( i = 1; i <= n; i++, z++ ) { printf( "%4d", *z ); if ( !( i%10 ) ) printf( "\n" ); } printf("\n"); }

main( ) { int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11;

printf( "\n\nBefore sorting %d numbers:\n", n ); putarr( n, aa ); fun( n, aa ); printf( "\nAfter sorting %d numbers:\n", n ); putarr( n, aa ); }

28、 给定程序中 fun 函数的功能是: s 所指字符串中的字母转换为按字母序列 将 的后续字母(但 Z 转换为 A,z 转换为 a) ,其它字符不变。 #include <stdio.h> #include <ctype.h> void { /**********found***********/ while(*s!='@') { if(*s>='A' & *s<='Z' || *s>='a' && *s<='z') { if(*s=='Z') *s='A'; 改为:while(*s!='\0') fun (char *s)

else if(*s=='z') *s='a'; else } /**********found***********/ (*s)++; } 改为:s++; *s += 1;

} main( ) { char s[80]; printf("\n printf("\n fun ( s ); printf ("\n\n } The Cords :\n\n "); puts(s); Enter a string with length < 80. :\n\n The string : \n\n "); puts(s); "); gets(s);

29、给定程序中 fun 函数的功能是:在字符串的最前端加入 n 个*号,形成新串, 并且覆盖原串。 (注意:字符串的长度最长允许为 79) 。 #include <stdio.h> #include <string.h> /**********found***********/ void int { fun ( char s[], int n) char a[80] , *p; int i; n) 改为:void fun ( char *s,

/**********found***********/ s=p; for(i=0; i<n; i++) a[i]='*'; do 改为:p=s;

{ a[i]=*p; i++; } /**********found***********/ while(*p); a[i]=0; strcpy(s,a); } main( ) { int n; char s[80]; : "); gets(s); 改为:while(*p++);

printf("\nEnter a string

printf("\nThe string \"%s\"\n",s); printf("\nEnter n ( number of * ) : fun(s,n); printf("\nThe string after inster : \"%s\" \n" ,s); } "); scanf("%d",&n);

30、给定程序中 fun 函数的功能是:实现两个整数的交换。例如给 a 和 b 分别 输入 60 和 65,输出结果为 a=65 #include <stdio.h> /**********found**********/ void fun ( int a, b ) 改为:void fun ( int * a, b=60。

int * b )

{ int

t;

/**********found**********/ t = b; *a = t; } b=a; a = t; 改为:t = *b; *b = *a ;

main ( ) { int a, b; "); scanf ( "%d%d", &a, &b );

printf ( "Enter a , b : fun ( &a , &b ) ; printf (" a = %d }

b = %d\n ", a, b );

31、给定程序中 fun 函数的功能是:首先把 b 所指字符串中的字符按逆序存放, 然后将 a 所指字符串中的字符和 b 所指字符串中的字符, 按排列的顺序交叉 合并到 c 所指数组中,过长的剩余字符接在 c 所指数组的尾部。例如,当 a 所指字符串中的内容为“abcdefg” b 所指字符串中的内容为“1234”时,c 所 , 指数组中的内容应该为“a4b3c2d1efg” 而当 a 所指字符串中的内容为“1234” ; , b 所 指 字 符 串 中 的 内 容 为 时 “ abcdefg ” c 所 指 数 组 中 的 内 容 应 该 为 , “1g2f3e4dcba” 。 #include <stdio.h> #include <string.h>

void fun( char *a, char *b, char *c ) { int i , j; char ch;

i = 0;

j = strlen(b)-1;

/************found************/ while ( i > j ) { ch = b[i]; b[i] = b[j]; b[j] = ch; i++; j--; } 改为:while ( i < j )

while ( *a || *b ) { if ( *a ) if ( *b ) } /************found************/ c = 0; } 改为:*c = ‘\0' { *c = *a; { *c = *b; c++; a++; } c++; b++; }

main( ) { char s1[100],s2[100],t[200];

printf("\nEnter s1 string : ");scanf("%s",s1); printf("\nEnter s2 string : ");scanf("%s",s2); fun( s1, s2, t ); printf("\nThe result is : %s\n", t ); }

32、给定程序中 fun 函数的功能是:读入一个字符串(长度<20) ,将该字符串 中的所有字符按 ASCII 码升序排序后输出。例如:若输入 edcba,则应输出 abcde。 #include <stdio.h> void fun( char t[] ) { char c; int i, j;

/**********found***********/ for( i = strlen( t ); i; i-- ) i-- ) for( j = 0; j < i; j++ ) /**********found***********/ if( t[j] < t[ j + 1 ] ) { c = t[j]; t[j] = t[ j + 1 ]; t[j + 1 ] = c; } } 改为:if( t[j] > t[ j + 1 ] ) 改为: i = strlen( t ); i>0; for(

main( ) { char s[81]; printf( "\nPlease enter a character string: " ); gets( s ); printf( "\n\nBefore sorting:\n \"%s\"", s );

fun( s ); printf( "\nAfter sorting decendingly:\n } \"%s\"", s );

33、 给定程序中 fun 函数的功能是: 将一个八进制数字字符组成的字符串转换为 其面值相等的十进制整数。规定输入的字符串最多只能包含 5 位八进制数字 字符。例如,若输入 77777,则输出将是 32767。 #include <stdio.h> int { fun( char *p ) int n;

/**********found**********/ n= *P-'o'; p++; while( *p!=0 ) { /**********found**********/ n=n*7+*P-'o'; p++; return n; } main() { char s[6]; int i; int n; } 改为:n=n*8+*p-'0'; 改为:n= *p-'0';

printf("Enter a string (Ocatal digits): "); gets(s);

if(strlen(s)>5){ printf("Error: String too longer !\n\n");exit(0); } for(i=0; s[i]; i++) if(s[i]<'0'||s[i]>'7') { printf("Error: %c not is ocatal digits!\n\n",s[i]);exit(0); } printf("The original string: n=fun(s); printf("\n%s is convered to integer number: %d\n\n",s,n); } "); puts(s);

34、给定程序中 fun 函数的功能是:求出以下分数序列的前 n 项之和。

和的值通过函数值返回 main 函数。 #include <stdio.h>

/**************found**************/ fun (int n ) { int a = 2, b = 1, c, k ; s=0.0 ; 改为:double fun (int n )

double

for ( k = 1; k <= n; k++ ) { s = s + 1.0 * a / b ; /**************found**************/ c = a; a += b; b += c; 改为: = a; c a += b; b = c;

} return(s) ; } main( ) { int n=5; fun ( n ) ) ; }

printf( "\nThe value of function is: %lf\n",

35、给定程序中 fun 函数的功能是:从 s 所指字符串中,找出与 t 所指字符串相 同的子串的个数作为函数值返回。例如,当 s 所指字符串中的内容为 “abcdabfab” t 所指字符串的内容为“ab” 则函数返回整数 3. , , #include #include <stdio.h> <string.h> char *t)

int fun (char *s, { int n;

char *p , *r;

n = 0; while ( *s ) { p = s; r = t;

while ( *r ) /************found************/ if ( r == p ) { 改为:if ( *r == *p ) {

/************found************/ r++; p++ 改为:r++; p++;

} else break;

/************found************/ if ( r == '\0' ) n++; s++; } return n; } 改为:if ( *r == '\0' )

main() { char s[100], t[100]; int m;

printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring t:"); scanf("%s", t); m = fun( s, t); printf("\nThe result is: m = %d\n", m); }

36、给定程序中 fun 函数的功能是:先将 s 所指字符串中的字符按逆序存放到 t 所指字符串中,然后把 s 所指串中的字符按正序连接到 t 所指串的后面。例 如, s 所指的字符串为“ABCDE”时, t 所指的字符串应为“EDCBAABCDE” 当 则 #include <stdio.h> #include <string.h>

void fun (char *s, char *t) { /************found************/ int i; 改为:int i, s1;

sl = strlen(s); for (i=0; i<sl; i++) /************found************/ t[i] = s[sl-i]; for (i=0; i<sl; i++) t[sl+i] = s[i]; t[2*sl] = '\0'; } main( ) { char s[100], t[100]; printf("\nPlease enter string s:"); scanf("%s", s); fun(s, t); printf("The result is: %s\n", t); } 改为:t[i] = s[sl-i-1];

37、给定程序中 fun 函数的功能是:依次取出字符串中所有数字字符,形成新的 字符串,并取代原字符串。 #include <stdio.h> void fun(char *s)

{

int

i,j;

for(i=0,j=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') /**********found**********/ s[j]=s[i]; /**********found**********/ s[j]="\0"; } main( ) { char item[80]; printf("\nEnter a string printf("\n\nThe fun(item); printf("\n\nThe string of changing is : \"%s\"\n",item ); } string : ");gets(item); 改为:s[j]= ‘\0’; 改为:s[j++]=s[i];

is : \"%s\"\n",item);

38、给定程序中 fun 函数的功能是:统计字符串中各元音字母(即 A,E,I,O,U) 的个数。注意,字母不分大小写。例如输入:THIs is a boot,则输出应该 是:1、0、2、2、0。 #include <stdio.h> /**********found**********/ fun ( char num[5] ) *s, int num[5] ) 改为:void fun(char *s, int

{

int

k, i=5;

for ( k = 0; k<i; k++ ) /**********found**********/ num[i]=0; for (; *s; s++) { i = -1; /**********found**********/ switch ( s ) { case 'a': case 'A': {i=0; break;} case 'e': case 'E': {i=1; break;} case 'i': case 'I': {i=2; break;} case 'o': case 'O': {i=3; break;} case 'u': case 'U': {i=4; break;} } if (i >= 0) num[i]++; } } main( ) { char s1[81]; int num1[5], i; 改为:switch ( *s ) 改为:num[k]=0;

printf( "\nPlease enter a string: " ); gets( s1 ); fun ( s1, num1 ); for ( i=0; i < 5; i++ ) printf ("%d ",num1[i]); printf ("\n"); }

39、给定程序中 fun 函数的功能是:计算正整数 num 的各位上的数字之积。例

如,若输入 252,则输出应该是 20。若输入 202,则输出应该是 0。 #include <stdio.h> long { /************found************/ long k; do { k*=num%10 ; /************found************/ num\=10 ; } while(num) ; return (k) ; } main( ) { long n ; printf("\Please enter a number:") ; scanf("%ld",&n) ; printf("\n%ld\n",fun(n)) ; } 改为:num/=10 ; 改为:long k=1; fun (long num)

40、假定整数数列中的数不重复,并存放在数组中。给定程序中 fun 函数的功能 是:删除数列中值为 x 的元素。n 中存放的是数列中元素的个数。 #include <stdio.h> #define N 20

fun(int *a,int n,int x) { int p=0,i;

a[n]=x; while( x!=a[p] ) p=p+1; /**********found**********/ if(P==n) else { for(i=p;i<n;i++) return -1; 改为:if(p==n) return -1;

/**********found**********/ a[i+1]=a[i]; return n-1; } } main( ) { int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i; 改为:a[i]=a [i+1];

n=10; printf("The original data :\n"); for(i=0;i<n;i++) printf("%5d",w[i]); printf("\nInput x (to delete): "); scanf("%d",&x); printf("Delete n=fun(w,n,x); if ( n==-1 ) printf("***Not be found!***\n\n"); : %d\n",x);

else { printf("The data after deleted:\n"); for(i=0;i<n;i++) printf("%5d",w[i]);printf("\n\n"); } }

41、给定程序中 fun 函数的功能是:计算并输出下列级数的前 N 项之和 大于 q 为止,q 的值通过形参传入。

直到

例如,若 q 的值为 50.0,则函数值为 49.394948。 #include <stdio.h> double { fun( double q ) s,t;

int n; double n = 2; s = 2.0; while (s<=q) { t=s;

/************found************/ s=s+(n+1)/n; n++; } 改为: s=s+(double)(n+1)/n;

printf("n=%d\n",n); /************found************/ return s; 改为:return t;

} main ( ) { printf("%f\n", fun(50)); }

42、给定程序中 fun 函数的功能是:根据输入的三个边长(整型值) ,判断能束 构成三角形,构成的是等边三解形还是等腰三角形。若能构成等边三角形函 数返回 3,若能构成等腰三角形函数返回 2,若能构成一般三角形函数返回 1,若不能构成三角形函数返回 0。 #include <stdio.h> #include <math.h> /**************found**************/ void fun(int b,int { c) a,int b,int c) 改 为 : int fun(int a,int

if(a+b>c && b+c>a && a+c>b) { if(a==b && b==c)

/**************found**************/ return 1; else if(a==b||b==c||a==c) return 2; /**************found**************/ else } retrun 1 改为:else return 1; 改为:return 3;

else } main() { int

return 0;

a,b,c,shape; "); scanf("%d%d%d",&a,&b,&c); c=%d\n",a,b,c);

printf("\nInput a,b,c:

printf("\na=%d, b=%d, shape =fun(a,b,c); printf("\n\nThe shape :

%d\n",shape); }

43、给定程序中 fun 函数的功能是:计算 n 的 5 次方的值(规定 n 的值大于 2 小于 8) ,通过形参指针传回主函数,并计算该值的个位、十位、百位上数 字之和作为函数值返回。例如,7 的 5 次方是 16807,其低 3 位数的和值是 15。 #include <stdio.h> #include <math.h> int { fun( int int d,s,i; n ,int *value )

/**************found**************/ d=0; s=0; 改为:d=1; s=0;

for(i=1; i<=5; i++) d=d*n; *value=d; for(i=1; i<=3; i++)

{ s=s+d%10; /**************found**************/ s=s\10; } return s; } main( ) { int do { printf("\nEnter n( 2<n<8): while(n<=2||n>=8); sum=fun( n,&v ); printf("\n\nThe result:\n value=%d sum=%d\n\n",v,sum); } ");scanf("%d",&n); } n, sum, v; 改为:d=d/10;

44、给定程序中 fun 函数的功能是:判断一个整数是否是素数,若是返回 1,否 则返回 0。 main( )函数中, fun 返回 1 输出 YES, 在 若 若返回 0 则输出 NO!。 #include <stdio.h> int { fun ( int m ) int k = 2; while ( k <= m && (m%k)) /************found************/ k++ 改为:k++;

/************found************/ if (m = k ) return 1; else } main( ) { int n; scanf( "%d", &n ); return 0; 改为:if (m == k )

printf( "\nPlease enter n: " );

if ( fun ( n ) ) printf( "YES\n" ); else printf( "NO!\n" ); }

45、给定程序中 fun 函数的功能是:判断 ch 中的字符是否与 str 所指串中的某 个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。 #include <stdio.h> #include <string.h> /**********found**********/ void fun(char str, char ch ) char ch ) { while ( *str && *str != ch ) str++; 改为:void fun(char * str,

/**********found**********/ if ( *str == ch ) 改为:if ( *str == ‘\0’ )

{ str [ 0 ] = ch;

/**********found**********/ str[1] = '0'; } } main( ) { char s[81], c; 改为:str[1] = '\0';

printf( "\nPlease enter a string:\n" ); gets ( s ); printf ("\n Please enter the character to search : " ); c = getchar(); fun(s, c) ; s); }

printf( "\nThe result is %s\n",

46、 给定程序中 fun 函数的功能是: 按顺序给 s 所指数组中的元素赋予从 2 开始 的偶数,然后再按顺序对每五个元素求一个平均值,并针这些值依次存放在 w 所指的数组中。 s 所指数组中元素的个数不是 5 的倍数,多余部分忽略 若 不计。例如,s 所指数组在 14 个元素,则只对前 10 个元素进行处理,不对 最后的 4 个元素求平均值。 #include <stdio.h> #define fun(double { int k,i; SIZE 20

*s, double *w) double sum;

for(k=2,i=0;i<SIZE;i++) { s[i]=k; k+=2; }

/**********found**********/ sun=0.0; for(k=0,i=0;i<SIZE;i++) { sum+=s[i]; /**********found**********/ if(i+1%5==0) { w[k]=sum/5; } return k; } main( ) { double int a[SIZE],b[SIZE/5]; sum=0; k++; } 改为:if((i+1)%5==0) 改为:sum=0.0;

i, k;

k = fun(a,b); printf("The original data:\n"); for(i=0; i<SIZE; i++) { if(i%5==0) printf("\n"); printf("%4.0f", a[i]); printf("\n\nThe result :\n"); for(i=0; i<k; i++) printf("%6.2f printf("\n\n"); } ",b[i]); }

47、给定程序中 fun 函数的功能是:按以下递归公式求函数值。

例如,当给 n 输入 5 时,函数值为 18;当给 n 输入 3 时,函数值为 14。 #include <stdio.h> /************found************/ fun ( n ) { int c; 改为:int fun ( int n )

/************found************/ if(n=1) c = 10 ; else c= fun(n-1)+2; 改为:if(n==1)

return(c); } main( ) { int n;

printf("Enter n : "); scanf("%d",&n); printf("The result : %d\n\n", fun(n)); }

48、给定程序中 fun 函数的功能是:用二分法求方程

的一个根,

并要求绝对误差不超过 0.001。例如,若给 m 输入-100,给 n 输入 90,则 函数求得一个根值为 2.000。 #include <stdio.h>

#include <math.h> double funx(double { x)

return(2*x*x*x-4*x*x+3*x-6); } m, double n)

double fun( double {

/************found************/ int r; 改为:double r;

r=(m+n)/2; /************found************/ while(fabs(n-m)<0.001) while(fabs(n-m)>0.001) { if(funx(r)*funx(n)<0) else n=r; } m=r; 改 为 :

r=(m+n)/2; return r; } main( ) { double m,n, root;

printf("Enter m n : root=fun( m,n );

\n"); scanf("%lf%lf",&m,&n);

printf("root = %6.3f\n",root); }

49、 给定程序中 fun 函数的功能: 用选择法对数组中的 n 个元素按从小到大的顺 序进行排序。 #include <stdio.h> #define void N 20

fun(int a[], int n)

{ int i, j, t, p; for (j = 0 ;j < n-1 ;j++) { /************found************/ p=j for (i = j;i < n; i++) if(a[i] < a[p]) /************found************/ p = j; t = a[p] ; a[p] = a[j] ; a[j] = t; } main( ) { int a[N]={9,6,8,3,-1},i, m = 5; printf("排序前的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); fun(a,m); printf("排序后的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); } } 改为:p = i; 改为:p = j;

50、给定程序中 fun 函数的功能是:计算函数 F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y) 的值。其中 x 和 y 的值不等,z 和 y 的值不等。例如,当 x 的值为 9、y 的 值为 11、z 的值为 15 时,函数值为-3.50。 #include <stdio.h> #include <math.h> #include <stdlib.h> /************found************/ #define FU(m,n) FU(m,n) (m)/(n) (m/n) 改 为 : #define

float fun(float a,float b,float c) { float value;

value=FU(a+b,a-b)+FU(c+b,c-b); /************found************/ Return(Value); } main( ) { float x,y,z,sum; x y z: "); 改为:return(value);

printf("Input

scanf("%f%f%f",&x,&y,&z); printf("x=%f,y=%f,z=%f\n",x,y,z); if (x==y||y==z){printf("Data error!\n");exit(0);}

sum=fun(x,y,z); printf("The result is : %5.2f\n",sum); }

51、给定程序中 fun 函数的功能是:根据形参 m 的值,计算如下公式的值:

t ?1?

1 1 1 1 ? ? ? ...... ? 2 3 4 m

例如,若输入 5,则应输出 2.283333。 #include <stdio.h> double fun( int m ) { double t = 1.0; int i; for( i = 2; i <= m; i++ ) /**********found**********/ t += 1.0/k; /**********found**********/ ________ } main( ) { int m; printf( "\nPlease enter 1 integer number:" ); scanf( "%d", &m ); 改为:return t; 改为:t += 1.0/i;

printf( "\nThe result is %lf\n", fun( m ) ); }

52、 给定程序中 fun 函数的功能是: 用递归算法计算裴波拉契数列中第 n 项的值, 从第 1 项起,裴波拉契数列为:1、1、2、3、5、8、13、21…… 例如,若给 n 输入 7,则裴波拉契数值为 13。 #include <stdio.h> long fun(int { /**********found**********/ switch(g); { case 0: return 0; /**********found**********/ case 1 ;case 2 : return 1 ; return 1 ; } return( fun(g-1)+fun(g-2) ); } main( ) { long fib; int n; 改 为 : case 1 :case 2 : 改为:switch(g): g)

printf("Input n: fib=fun(n);

"); scanf("%d",&n); printf("n = %d\n",n);

printf("fib = %d\n\n",fib); }

53、 给定程序中 fun 函数的功能是: 用冒泡法对 6 个字符串按由小到大顺序进行 排列。 #include <stdio.h> #include <string.h> #define MAXLINE 20 /**************found**************/ fun ( char *pstr[6]) *pstr[6]) { int i, j ; 改 为 : void fun ( char

char *p ; for (i = 0 ; i < 5 ; i++ ) { /**************found**************/ for (j = i + 1, j < 6, j++) { /**************found**************/ if(strcmp(*(pstr + i), (pstr + j)) > 0) *(pstr + j)) > 0) { p = *(pstr + i) ; 改 为 : if(strcmp(*(pstr + i), 改为: (j = i + 1;j < 6;j++) for

/**************found**************/ *(pstr + i) = pstr + j ; j) ; 改为:*(pstr + i) = *(pstr +

*(pstr + j) = p ; } } } main( ) { int i ;

}

char *pstr[6], str[6][MAXLINE] ; for(i = 0; i < 6 ; i++) pstr[i] = str[i] ; printf( "\nEnter 6 string(1 string at each line): \n" ) ; for(i = 0 ; i < 6 ; i++) scanf("%s", pstr[i]) ; fun(pstr) ; printf("The strings after sorting:\n") ; for(i = 0 ; i < 6 ; i++) printf("%s\n", pstr[i]) ; }

54、给定程序中 fun 函数的功能是:将 m(1<=m<=10)个字符串连接起来,组 成一个新串,放入 pt 所指存储区中。例如,把 3 个串“abc” “CD” “EF”连接起 , , 来,结果是“abcCDEF” 。 #include <stdio.h> #include <string.h> /************found************/ int fun ( char str[][10], int m, char *pt ) 改为:void fun ( char str[][10], int m,char *pt )

{ /************found************/ Int k, q, i ; 改为:int k, q, i ;

for ( k = 0; k < m; k++ ) { q = strlen ( str [k] ); for (i=0; i<q; i++) /************found************/ pt[i] = str[k,i] ; pt += q ; } main( ) { int m, h ; pt[0] = 0 ; } 改为:pt[i] = str[k][i] ;

char s[10][10], p[120] ; printf( "\nPlease enter m:" ) ; scanf("%d", &m) ; gets(s[0]) ;

printf( "\nPlease enter %d string:\n", m ) ; for ( h = 0; h < m; h++ ) gets( s[h]) ; fun(s, m, p) ; printf( "\nThe result is : %s\n", p) ; }

55、已知一个数列从第 0 项开始的前三项分别为 0、0、1,以后各项都是其相邻 前三项之和。给定程序中 fun 函数的功能是:计算并输出该数列前 n 项的平 方根之和, 的值通过形参传入。 n 例如, n=10 时, 当 输出结果为 23.197745。

#include <stdio.h> #include <math.h> /************found************/ fun(int n) { double sum, s0, s1, s2, s; int k; 改为:double fun(int n)

sum = 1.0; if (n <= 2) sum = 0.0; s0 = 0.0; s1 = 0.0; s2 = 1.0; for (k = 4; k <= n; k++) { s = s0 + s1 + s2; sum += sqrt(s); s0 = s1; s1 = s2; s2 = s; /************found************/ return sum } main ( ) { int n; printf("Input N="); scanf("%d", &n); printf("%f\n", fun(n) ); } 改为:return sum; }

56、给定程序中 fun 函数的功能是:求两个非零正整数的最大公约数,并作为函

数值返回。例如,num1 和 num2 分别输入 49 和 21,则输出最大公约数为 7;若给 num1 和 num2 分别输入 27 和 81,则输出最大公约数为 27。 #include <stdio.h> int { fun(int int r,t; a,int b)

if(a<b) { /************found************/ t=a; b=a; a=t; } r=a%b; while(r!=0) { a=b; b=r; r=a%b; } /************found************/ return(a); } main( ) { int num1, num2,a; num1 num2: "); scanf("%d%d",&num1,&num2); 改为:return(b); 改为:t=a; a=b; a=t;

printf("Input

printf("num1= %d num2= %d\n\n",num1,num2); a=fun(num1,num2); printf("The maximun common divisor is %d\n\n",a); } 57、给定程序中 creatlink 函数的功能是:创建带头节点的单向链表,并为各节

点数值域赋 0 到 m-1 的值。 #include <stdio.h> #include <stdlib.h> typedef { int struct data; aa *next; aa

struct } NODE;

NODE *Creatlink(int n, int { NODE *h=NULL, *p, *s; int i;

m)

/**********found***********/ p=(NODE )malloc(sizeof(NODE)); *)malloc(sizeof(NODE)); h=p; /**********found***********/ p->next=NULL; for(i=1; i<=n; i++) { s=(NODE *)malloc(sizeof(NODE)); /**********found***********/ s->data=rand()%m; s->next=p->next; p->next=s; 改为:s->data=rand()%(m-1); 改为:p=s; 改 为 : p=(NODE

p=p->next; } /**********found***********/ return p; } outlink(NODE { NODE *p; p=h->next; printf("\n\nTHE LIST :\n\n while(p) { printf("->%d ",p->data); p=p->next; printf("\n"); } main( ) { NODE *head; head=Creatlink(8,22); outlink(head); } } HEAD "); *h) 改为:return h;

58、给定程序中 fun 函数的功能是:计算整数 n 的阶乘。 #include <stdio.h> double fun(int n)

{

double result=1.0; while (n>1 && n<170)

/*********found*********/ result*=--n; /*********found*********/ return _____; } main( ) { int n; printf("Enter an integer: "); scanf("%d",&n); printf("\n\n%d!=%lg\n\n",n,fun(n)); } 改为:return result; 改为:result*=n--;

59、给定程序中 fun 函数的功能是:删除 p 所指字符串中的所有空白字符(包括 Tab、回车符及换行符) 。输入字符串时用‘#’结束输入。 #include <string.h> #include <stdio.h> #include <ctype.h> fun ( char *p) { int i,t; char c[80];

/************found************/ For (i = 0,t = 0; p[i] ; i++) 改为:for (i = 0,t = 0; p[i] ; i++)

if(!isspace(*(p+i))) c[t++]=p[i]; /************found************/ c[t]="\0"; strcpy(p,c); } main( ) { char c,s[80]; int i=0; printf("Input a string:"); c=getchar(); while(c!='#') { s[i]=c;i++;c=getchar(); } s[i]='\0'; fun(s); puts(s); } 改为:c[t]=’\0’;

60、数列中,第一项值为 3,后一项都比前一项的值增 5;给定程序中 fun 函数 的功能是:计算前 n 项(4<n<50)项的累加和,在累加过程中把那些被 4 除后余 2 的当前累加值放入数组中, 符合条件的累加值的个数作为函数值返 回主函数。例如,当 n 的值为 20 时,该数列为 3,8,13,18,23,28… 93,98。符合此条件的累加值应为 42,126,366,570,1010。 #include <stdio.h> #define int { fun(int int N n,int 20 *a)

i,j,k,sum;

/**************found**************/ sum=j==0; for(k=3,i=0;i<n;i++,k+=5) { sum=sum+k; /**************found**************/ if(sum%4=2) a[j++]=sum; return j; } main( ) { int a[N],d,n,i; } 改为:if(sum%4==2) 改为:sum=j=0;

printf("\nEnter n (4<n<=50): ");scanf("%d",&n); d=fun(n,a); printf("\n\nThe result :\n"); for(i=0; i<d; i++)printf("%6d",a[i]);printf("\n\n"); }

61、给定程序中 fun 函数的功能是:计算 S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+… f(n)的值。例如,当 n 为 5 时,函数值应为:10.407143。f(x)函数定义如下:

#include <stdio.h> #include <math.h> /************found************/

f( double x) { if (x == 0.0 || x == 2.0) else if (x < 0.0) else return 0.0; return (x -1)/(x-2); return (x +1)/(x-2); }

改为:double f( double x)

double fun( int { int i; double

n) s=0.0, y;

for (i= -n; i<=n; i++) {y=f(1.0*i); s += y;} /************found************/ return s } main ( ) { printf("%f\n", fun(5) ); } 改为:return s;

62、给定程序中 fun 函数的功能是:求出数组中最大数和次最大数,并把最大数 和 a[0]中的数对调,次最大数和 a[1]中的数对调。 #include <stdio.h> #define N 20

/**********found**********/ int n) fun ( int * a, int n) 改为: void fun ( int * a, int

{

int i, m, t, k ; for(i=0;i<2;i++) {

/**********found**********/ m=0; for(k=i+1;k<n;k++) /**********found**********/ if(a[k]>a[m]) k=m; t=a[i];a[i]=a[m];a[m]=t; } main( ) { int x, b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i; ", b[i]); } 改为:if(a[k]>a[m]) m=k; 改为:m=i+1;

for ( i=0; i<n; i++ ) printf("%d printf("\n"); fun ( b, n ); for ( i=0; i<n; i++ ) printf("%d printf("\n"); }

", b[i]);

63、 给定程序中 fun 函数的功能是: 找出一个大于给定整数 m 且紧随 m 的素数, 并作为函数值返回。 #include <stdio.h> int fun(int m) { int i, k ;

for (i = m + 1 ; ; i++) { for (k = 2 ; k < i ; k++) /**************found**************/ if (i % k != 0) break ; /**************found**************/ if (k < i) return(i); } } main( ) { int n; clrscr( ); printf(“\n please enter n: “); printf(“%d\n”,fun(n)); } 改为:if (k >= i) 改为:if (i % k == 0)

scanf(“%d”,&n);

64、给定程序中 fun 函数的功能是:将 p 所指字符串中的所有字符复制到 b 中, 要求复制三个字符之后插入一个空格。例如,在调用 fun 函数之前给 a 输入 字符串:ABCDEFGHIJK,调用函数之后,字符数组 b 中的内容则为:ABC DEF GHI JK。 #include <stdio.h> void { int fun(char *p, char *b) i, k=0;

while(*p)

{ /**********found**********/ i=1; /**********found**********/ while( i<=3 ||*p ) { /**********found**********/ b[k]=p; k++; p++; i++; } if(*p) { /**********found**********/ b[k++]=" "; } } b[k]='\0'; } main( ) { char a[80],b[80]; printf("Enter a string: "); gets(a); 改为:b[k++]=’ ‘; 改为:b[k]=*p; 改为:while( i<3 && *p ) 改为:i=0;

printf("The original string: "); puts(a);

fun(a,b); printf("\nThe string after insert space: "); puts(b); printf("\n\n"); }

65、给定程序中 fun 函数的功能是:计算小于形参 k 的最大的 10 个能被 13 或 17 整除的自然数之和。k 的值由主函数传入,若 k 的值为 500,则函数值为 4622。 #include <stdio.h> int fun( int { int m=0, k) mc=0, j ;

while ((k >= 2) && (mc < 10)) { /************found************/ if ((k%13 = 0) || (k%17 = 0)) == 0)) { m = m+ k; k--; } return m; /************found************/ _____ 改为:} mc++; } 改为:if ((k%13 == 0) || (k%17

main ( )

{

printf("%d\n", fun (500));

}

66、 给定程序中 fun 函数的功能是: 将长整形数中每一位上为奇数的数依次取出, 构成一个新书放在 t 中。高位仍在高位,低位仍在低位。例如,当 s 中的数 为:87653142 时,t 中的数为:7531。 #include <stdio.h> void fun (long { int long d; sl=1; s, long *t)

/************found************/ t = 0; while ( s > 0) { d = s%10; /************found************/ if (d%2 == 0) { *t = d * sl + *t; s /= 10; } main( ) { long s, t; clrscr(); printf("\nPlease enter s:"); scanf("%ld", &s); } sl *= 10; } 改为:if (d%2 != 0) 改为:*t = 0;

fun(s, &t); printf("The result is: %ld\n", t); }

67、给定程序中 fun 函数的功能是:交换主函数中两个变量的值。例如:若变量 a 中的值原为 8,b 中的值为 3。程序运行后 a 中的值为 3,b 中的值为 8。 #include <stdio.h> /*********found**********/ int fun(int x,int y) { int t; 改为:int fun(int *x,int *y)

/*********found**********/ t=x;x=y;y=t; } main( ) { int a,b; a=8;b=3; fun(&a,&b); printf("%d, %d\n",a,b); } 改为:t=*x;*x=*y;*y=t;

68、 给定程序中 fun 函数的功能是: 利用插入排序法对字符串中的字符按从小到 大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行 排序。 然后把第三个字符插入到前两个字符中, 插入后前三个字符依然有序; 再把第四个字符插入到前三个字符中,……。待排序的字符串已在主函数中 赋予。 #include <stdio.h>

#include <string.h> #define void { int N 80

insert(char *aa) i,j,n; char ch;

/**********found**********/ n=strlen[ aa ]; for( i=1; i<n ;i++ ) { /**********found**********/ c=aa[i]; j=i-1; while ((j>=0) && ( ch<aa[j] )) { aa[j+1]=aa[j]; j--; aa[j+1]=ch; } main( ) { char a[N]="QWERTYUIOPASDFGHJKLMNBVCXZ"; int i; %s\n", a); } } 改为:ch=aa[i]; 改为:n=strlen(aa);

printf ("The original string : insert(a) ; printf("The string after sorting :

%s\n\n",a ); }

69、给定程序中 fun 函数的功能是:为一个偶数寻找两个素数,这两个素数之和 等于该偶数,并将这两个素数通过形参指针传回主函数。 #include <stdio.h> #include <math.h> void { int fun(int i,j,d,y; a,int *b,int *c)

for(i=3;i<=a/2;i=i+2) { /**************found**************/ Y=1; for(j=2;j<=sqrt((double)i);j++) if(i%j==0) y=0; if(y==1) { /**************found**************/ d==a-i; for(j=2;j<=sqrt((double)d);j++) if(d%j==0) y=0; if(y==1) { *b=i; *c=d; } } } main( ) { int a,b,c; } 改为:d=a-i; 改为:y=1;

do { printf("\nInput a: fun(a,&b,&c); printf("\n\n%d = %d + %d\n",a,b,c); } "); scanf("%d",&a); } while(a%2);

70、给定程序中 fun 函数的功能是:比较两个字符串,将长的那个字符串的首地 址作为函数值返回。 #include <stdio.h> /**********found**********/ char fun(char *s, char *t) { int sl=0,tl=0; tt=t; char *ss, *tt; char *t) 改 为 : char *fun(char *s,

ss=s; while(*ss)

{ sl++; /**********found**********/ (*ss)++; } while(*tt) { tl++; /**********found**********/ (*tt)++; 改为:tt++; 改为:ss++;

} if(tl>sl) else } main( ) { char a[80],b[80],*p,*q; printf("\nEnter a string : int i; return t; return s;

"); gets(a); "); gets(b); }

printf("\nEnter a string again :

printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b));

71、给定程序中 fun 函数的功能是:读入一个英文文本行,将其中每个单词的第 一个字符改为大写,然后输出次文本行。 (这里的“单词”是指由空格隔开的 字符串) 。例如,若输入“I am a student to take the examination.” 则应输出 , “I Am A Student To Take The Examination.” 。 #include <ctype.h> #include <string.h> /************found************/ include (stdio.a) 改为:# include “stdio.h”

/************found************/ upfst ( char p ) { int k=0; 改为:upfst ( char *p )

for ( ; *p; p++ )

if ( k ) else } main( ) { char chrstr[81]; if ( *p != ' ' )

{ if ( *p == ' ' ) { k = 1;

k = 0; }

*p = toupper( *p ); }

printf( "\nPlease enter an English text line: " ); printf( "\n\nBefore changing:\n upfst( chrstr ); printf( "\nAfter changing:\n %s\n", chrstr ); } %s", chrstr );

gets( chrstr );

72、给定程序中 fun 函数的功能是:根据形参 m 的值(2<=m<=9) ,在 m 行 m 列的二维数组中存放如下所示规律的数据,由 main 函数输出。例如, 若输入 2,则输出 1 2 2 4 若输入 4,则输出 1 2 3 4 #include <conio.h> #define int M 10 2 4 6 8 3 6 9 4 8 12

12 16

a[M][M] = {0} ;

/**************found**************/ fun(int **a, int m) 改为:void fun(int (*a)[M],

int m) { int j, k ; for (j = 0 ; j < m ; j++ ) for (k = 0 ; k < m ; k++ ) /**************found**************/ a[j][k] = k * j ; } main ( ) { int i, j, n ; scanf ("%d", &n ) ; 改为:a[j][k] = (k+1) * (j+1);

printf ( " Enter n : " ) ; fun ( a, n ) ; for ( i = 0 ; i < n ; i++) {

for (j = 0 ; j < n ; j++) printf ( "%4d", a[i][j] ) ; printf ( "\n" ) ; }

}

73、给定程序中 fun 函数的功能是:对 N 名学生的学习成绩,按从高到低的顺 序找出前 m(m<=10)名学生来,并将这些学生数据存放在一个动态分配 的连续存储区中,此存储区的首地址作为函数值返回。 #include <stdio.h> #include <alloc.h>

#include <string.h> #define typedef { N 10 struct ss

char num[10]; int s;

} STU; STU *fun(STU a[], int m) { STU b[N], *t; int i,j,k;

/**********found**********/ t=(STU *)calloc(sizeof(STU),m) *)malloc(sizeof(STU)); for(i=0; i<N; i++) b[i]=a[i]; for(k=0; k<m; k++) { for(i=j=0; i<N; i++) if(b[i].s > b[j].s) /**********found**********/ t(k)=b(j); b[j].s=0; } return t; } outresult(STU a[], FILE *pf) 改为:t[k]=b[j]; j=i; 改 为 : t=(STU

{

int

i;

for(i=0; i<N; i++) fprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s); fprintf(pf,"\n\n"); } main( ) { STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77}, {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }; STU *pOrder; int i, m;

printf("***** The Original data *****\n"); outresult(a, stdout); printf("\nGive the number of the students who have better score: scanf("%d",&m); while( m>10 ) { printf("\nGive the number of the students who have better score: "); scanf("%d",&m); } pOrder=fun(a,m); printf("***** THE printf("The top RESULT *****\n"); :\n"); ");

for(i=0; i<m; i++) printf(" %s %d\n",pOrder[i].num , pOrder[i].s);

free(pOrder);

}

74、 给定程序中 fun 函数的功能是: 从低位开始取出长整形变量 s 中奇数为上的 数,依次构成一个新书放在 t 中。高位仍在高位,地位仍在低位。例如,当 s 中的数为:7654321 时,t 中的数为 7531。 #include <stdio.h> /************found************/ void fun (long long *t) { long sl=10; s, long t) 改为:void fun (long s,

*t = s % 10; while ( s > 0) { s = s/100; *t = s%10 * sl + *t; /************found************/ sl = sl*100; } } main( ) { long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); 改为:sl = sl*10;

printf("The result is: %ld\n", t);

}

75、给定程序中 fun 函数的功能是:从 n(形参)个学生的成绩中统计出低于平 均分的学生人数,此人数有函数值返回,平均分存放在形参 aver 所指的存 储单元中。 例如, 若输入 8 名学生的成绩:80.5 88 60 72 90.5 98 51.5

64,则低于平均分的学生人数为 4(平均分为 75.5625) 。

#include <stdio.h> #define N 20 *s, int n, float *aver )

int fun ( float { float int

ave, t = 0.0 ; count = 0, k, i ;

for ( k = 0 ; k < n ; k++ ) /**************found**************/ t = s[k] ; ave = t / n ; for ( i = 0 ; i < n ; i++ ) if ( s[ i ] < ave ) count++ ; /**************found**************/ *aver = Ave ; return count ; } main ( ) 改为:*aver = ave ; 改为: t+= s[k] ;

{

float int

s[30], aver ; m, i ; " ) ; scanf ("%d", &m ) ;

printf ( "\nPlease enter m:

printf ( "\nPlease enter %d mark :\n ", m ) ; for( i = 0 ; i < m ; i++ ) scanf ( "%f", s + i ) ; printf( "\nThe number of students : %d \n" , fun ( s, m, &aver ) ); printf( "Ave = %f\n", aver ) ; }

76、给定程序中 fun 函数的功能是:根据整形形参 m,计算如下公式的值。

例如,若 m=2000,则应输出 0.000160。 #include <stdio.h> /************found************/ fun ( int m) { double y = 0, d ; int i; m) 改 为 : double fun ( int

/************found************/ for( i = 100, i <= m, i += 100 ) += 100 ) { d = (double)i * (double)i ; y += 1.0 / d ; } 改为:for( i = 100;i <= m; i

return( y ) ; } main( ) { int n = 2000 ; }

printf( "\nThe result is %lf\n", fun ( n ) ) ;

77、给定程序中 fun 函数的功能是:读入一个整数 k(2<=k<=10000) ,打印它 的所有质因子(即所有为素数的因子) 。例如,若输入整数 2310,则应输出: 2、3、5、7、11。 #include <stdio.h> /************found************/ IsPrime ( int { int n ); 改为:IsPrime ( int n)

i, m;

m = 1; for ( i = 2; i < n; i++ )

/************found************/ if !( n%i ) { m = 0; return ( m ); } main( ) { int j, k; break ; } 改为:if (!( n%i ))

printf( "\nPlease enter an integer number between 2 and 10000: " );

scanf( "%d", &k ); printf( "\n\nThe prime factor(s) of %d is( are ):", k ); for( j = 2; j <= k; j++ ) if( ( !( k%j ) )&&( IsPrime( j ) ) ) printf("\n"); } printf( "\n %4d", j );

78、给定程序中 fun 函数的功能是:根据以下公式求л值,并作为函数值返回。 例如,给指定精度的变量 eps 输入 0.0005 时,应当输出 Pi=3.140578。

#include <math.h> #include <stdio.h> double fun(double eps) { double s=0.0; /************found************/ t=0; /************found************/ while( t>eps) { s+=t; t=t * n/(2*n+1); n++; } 改为:while( t>=eps) 改为:t=1.0; s,t; int n=1;

/************found************/ return(s); } 改为:return(s*2);

main( ) { double x;

printf("\nPlease enter a precision: "); scanf("%lf",&x); printf("\neps=%lf, Pi=%lf\n\n",x,fun(x)); }

79、 给定程序中 fun 函数的功能是: 分别统计字符串中大些字母和小写字母的个 数。例如,给字符串 s 输入:AAaaBBb123CCccccd,则应输出结果:upper – 6, lower -8。 #include <stdio.h> /**********found**********/ void fun ( char *s, int a, int b ) *a, int *b ) { while ( *s ) { if ( *s >= 'A' && *s <= 'Z' ) /**********found**********/ *a=a+1 ; if ( *s >= 'a' && *s <= 'z' ) /**********found**********/ *b=b+1; s++; } main( ) } 改为:(*b)++; 改为:(*a)++; 改为:void fun ( char *s, int

{

char

s[100];

int

upper = 0, lower = 0 ; " ); gets ( s );

printf( "\nPlease a string : fun ( s, & upper, &lower );

printf( "\n upper = %d

lower = %d\n", upper, lower );

}

80、给定程序中 fun 函数的功能是:找出 100 至 n(不大于 1000)之间三位数 字相等的所有整数,把这些整数放在 s 所指数组中,个数作为函数值返回。 #include <stdio.h> #define int { fun(int int j=0; for(i=100; i<n; i++) { /**************found**************/ k=n; a=k%10; k/=10; 改为:k=i; N 100

*s, int n)

i,j,k,a,b,c;

/**************found**************/ b=k%10; k/=10; 改为:b=k%10;

/**************found**************/ c=k%10 if( a==b && a==c ) s[j++]=i; } return j; 改为:c=k/10;

} main( ) { int a[N], n, num=0, i; "); scanf("%d",&n); } while(n >

do { printf("\nEnter n( <=1000 ) : 1000); num = fun( a,n ); printf("\n\nThe result :\n"); for(i=0; i<num; i++)printf("%5d",a[i]); printf("\n\n"); }

81、由 N 个有序整数组成的数列已放在一维数组中,给定程序中 fun 函数的功 能是:利用折半查找算法查找整数 m 在数组中的位置。若找到,返回其下 标值;反之,返回-1。折半查找的基本算法是:每次查找前先确定数组中待 查的范围:low 和 high(low<high) ,然后把 m 与中间位置(mid)中元素 的值进行比较。如果 m 的值大于中间位置元素中的值,则下一次的查找范 围放在中间位置之后的元素中;反之,下一次的查找范围罗在中间位置之前 的元素中。直到 low>high,查找结束。 #include <stdio.h> #define N 10

/************found************/ void fun(int m) a[], int m ) 改为:int fun(int a[], int

{

int

low=0,high=N-1,mid;

while(low<=high) { mid=(low+high)/2; if(m<a[mid]) high=mid-1;

/************found************/ else If(m > a[mid]) low=mid+1; else } return(-1); } main() { int i,a[N]={-3,4,7,9,13,45,67,89,100,180 },k,m; return(mid); 改为:else if(m > a[mid])

printf("a 数组中的数据如下:"); for(i=0;i<N;i++) printf("%d ", a[i]); printf("Enter m: "); scanf("%d",&m); k=fun(a,m); if(k>=0) printf("m=%d,index=%d\n",m,k); else printf("Not be found!\n"); }

82、给定程序中 fun 函数的功能是:从 3 个红球,5 个白球,6 个黑球中任意取 出 8 个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和

白球。组合数作为函数值返回。正确的组合数应该是 15。程序中 i 的值代表 红球数,j 的值代表白球数,k 的值代表黑球数。 #include <stdio.h> int { fun() int i,j,k,sum=0;

printf("\nThe result :\n\n"); /**************found**************/ for(i=0; i<=3; i++) { for(j=1; j<=5; j++) { k=8-i-j; /**************found**************/ if(K>=0 && K<=6) 改 为 : 改为:for(i=1; i<=3; i++)

if((k>=1&&k<=6)&& (i!=0&&j!=0)||k==0) { sum=sum+1; printf("red:%4d white:%4d black:%4d\n",i,j,k); } } } return sum; } main( ) { int sum;

sum=fun();

printf("sum =%4d\n\n",sum); }

83、给定程序中 fun 函数的功能是:根据整型形参 m,计算如下公式的值。

例如,若主函数中输入 5,则应输出-0.283333。 #include <stdio.h> double fun( int m ) { double t = 1.0; int i; for( i = 2; i <= m; i++ ) /**********found**********/ t = 1.0-1 /i; /**********found**********/ _______; } main( ) { int m ; printf( "\nPlease enter 1 integer numbers:\n" ); scanf( "%d", &m); printf( "\n\nThe result is %lf\n", fun( m ) ); } 改为:return t; 改为:t-=1.0/i;

84、给定程序中 fun 函数的功能是:计算 s 所指字符串中含有 t 所指字符串的数

目,并作为函数值返回。 #include <stdio.h> #include <string.h> #define int { N 80 char *t)

fun(char *s, int n;

char *p , *r;

n=0; while ( *s ) { p=s; /*********found**********/ r=p; while(*r) if(*r==*p) { r++; /*********found**********/ if(*r= O) n++; /*********found**********/ ______; } return n; } main( ) 改为:s++; 改为:if(*r== ‘\0’) p++; } else break; 改为:r=t;

{

char a[N],b[N];

int

m;

printf("\nPlease enter string a : "); gets(a); printf("\nPlease enter substring b : "); gets( b ); m=fun(a, b); printf("\nThe result is : m = %d\n",m); }

85、给定程序中 fun 函数的功能是:首先将大写字母转换为对应小写字母,若小 写字母为 a~u,则将其装换位其后的第 5 个字母;若小写字母为 v~z,使其 值减 21。转换后的小写字母作为函数值返回。例如,若形参是字母 A,则转 换为小写字母 f,若形参是字母 W,则转换为小写字母 b。 #include <stdio.h> #include <ctype.h> char fun(char c) { if( c>='A' && c<='Z')

/**************found**************/ C=C+32; if(c>='a' && c<='u') /**************found**************/ c=c-5; else if(c>='v'&&c<='z') c=c-21; return c; } 改为:c=c+5; 改为:c=c+32;

main( ) { char c1,c2; printf("\nEnter a letter(A-Z): if( isupper( c1 ) ) { c2=fun(c1); printf("\n\nThe letter \'%c\' change to \'%c\'\n", c1,c2); else printf("\nEnter (A-Z)!\n"); } } "); c1=getchar();

86、给定程序中 fun 函数的功能是:将 s 所指字符串中出现的与 t1 所指字符串 相同的子串全部替换成 t2 所指字符串, 所形成的新串放在 w 所指的数组中。 在此处,要求 t1 与 t2 所指字符串的长度相同。例如,当 c 所指字符串中的 内容为“abcdabfab” t1 所指子串中的内容为: ,t2 所指子串中的内容为: , “ab” “99”时,结果在 w 所指的数组中的内容应为: “99cd99f99” 。 #include #include <stdio.h> <string.h>

/************found************/ int fun (char *s, char *t1, char *t2 , char *w) char *t1, char *t2 , char *w) */

/* 改为:void fun (char *s, { int i; char *p , *r, *a;

strcpy( w, s ); while ( *w ) { p = w; r = t1;

/************found************/ while ( r ) if ( *r == *p ) else if ( *r == '\0' ) { a = w; r = t2; while ( *r ){ /************found************/ *a = *r; a++; r++ } w += strlen(t2) ; } else } } main( ) { char s[100], t1[100], t2[100], w[100]; w++; 改为:*a = *r; a++; r++; { r++; break; p++; } 改为:while ( *r )

printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring t1:"); scanf("%s", t1); printf("\nPlease enter substring t2:"); scanf("%s", t2); if ( strlen(t1)==strlen(t2) ) { fun( s, t1, t2, w); printf("\nThe result is : %s\n", w); }

else

printf("Error : strlen(t1) != strlen(t2)\n"); }

87、给定程序中 fun 函数的功能是:逐个比较 p、q 所指两个字符串对应位置中 的字符, ASCII 值大或相等的字符依次放到 c 所指数组中, 把 形成一个新的 字符串。例如,若主函数中 a 字符串为:aBCDeFgH,主函数中 b 字符串 为:ABcd,则 c 中的字符串应为:aBcdeFgH。 #include <stdio.h> #include <string.h> void { /************found************/ int k = 1; /************found************/ while( *p != *q ) { if( *p<*q ) else if(*p) p++; if(*q) q++; k++; } main( ) { char a[10]="aBCDeFgH", b[10]="ABcd", c[80]={'\0'}; } c[k]=*q; c[k]=*p; 改为:while( *p ||*q ) 改为:int k = 0; fun(char *p ,char *q, char *c)

fun(a,b,c); printf("The string a: printf("The string b: printf("The result : "); puts(a); "); puts(b); "); puts(c); }

88、给定程序中 fun 函数的功能是:把主函数中输入的 3 个数,最大的放在 a 中,最小的放在 c 中。例如,输入的数为:55 a-55.0,b-34.0,c-12.0。 #include <stdio.h> void { /**********found**********/ float *k; { k=*p; *p=*q; *q=k; } 改为:float k; fun(float *p,float *q,float *s) 12 34,输出结果应当是:

if( *p<*q )

/**********found**********/ if( *p>*s ) { if( *q<*s ) } main( ) { float a,b,c; a b c: "); scanf("%f%f%f",&a,&b,&c); { k=*s; *s=*p; *p=k; } k=*q; *q=*s; *s=k; } 改为:if( *p<*s )

printf("Input

printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c); fun(&a,&b,&c); printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c); }

89、给定程序中 fun 函数的功能是:利用夏明的公式求л的近似值,直到最后一 项的绝对值小于指定的数(参数 num)为止:

例如,程序运行后,输入 0.0001,则程序输出 3.1414。 #include <math.h> #include <stdio.h> float fun ( float num ) { int s ; float n, t, pi ; t = 1 ; pi = 0 ; n = 1 ; s=1;

/**************found**************/ while(t >= num) num) { pi = pi + t ; n=n+2; s = -s ; 改 为 : while(fabs(t) >=

/**************found**************/ t=s%n; } pi = pi * 4 ; return pi ; 改为:t = s / n;

} main( ) { float n1, n2 ; printf("Enter a float number: ") ; scanf("%f", &n1) ; n2 = fun(n1) ; printf("%6.4f\n", n2) ; }

90、 给定程序中 fun 函数的功能是: 计算并输出 high 以内最大的 10 个素数之和。 high 的值由主函数传给 fun 函数。若 high 的值为 100,则函数的值为 732。 #include <stdio.h> #include <math.h> int fun( int high ) { int sum = 0, n=0, j, yes;

/************found************/ while ((high >= 2) && (n < 10) (n < 10)) { yes = 1; for (j=2; j<=high/2; j++ ) if (high % j ==0 ){ /************found************/ yes=0; break 改为:yes=0; break; 改为: while ((high >= 2) &&

} if (yes) high--; } { sum +=high; n++; }

return sum ; } main ( ) { printf("%d\n", fun (100)); }

91、给定程序中 fun 函数的功能是:将字符串中的字符按逆序输出,但不改变字 符串中的内容。例如,若字符串为 abcd,则应输出 dcba。 #include <stdio.h> /************found************/ fun (char a) { if ( *a ) { fun(a+1) ; /************found************/ printf("%c" *a) ; } } main( ) { char s[10]="abcd"; printf("处理前字符串=%s\n 处理后字符串=", s); 改为:printf("%c", *a) ; 改为:void fun(char *a)

fun(s); printf("\n") ; }

92、给定程序中 fun 函数的功能是:求出以下分述序列的前 n 项之和。和值通过 函数值返回到 main 函数。

2 3 5 8 13 21 , , , , , ,...... 1 2 3 5 8 13

例如,若 n=5,则应输出 8.391667。 #include <stdio.h> /************found************/ fun ( int n) { int a, b, c, k; double a = 2; b = 1; s; n) 改 为 : double fun ( int

s = 0.0;

for ( k = 1; k <= n; k++ ) { /************found************/ s = s + (Double)a / b; / b; c = a; } return s; } a = a + b; b = c; 改为: = s + (double)a s

main( ) { int n = 5; fun ( n ) ); }

printf( "\nThe value of function is: %lf\n",

93、 给定程序中 fun 函数的功能是: 从低位开始取出长整型变量 s 中偶数位上的 数,依次构成一个新数放在 t 中。高位仍在高位,低位仍在低位。例如,当 s 中的数为:7654321 时,t 中的数为 642。 #include <stdio.h> /************found************/ void fun (long long *t) { long sl=10; *t = s % 10; s, long t) 改为:void fun (long s,

s /= 10;

/************found************/ while ( s < 0) { s = s/100; } main() { long s, t; *t = s%10*sl + *t; 改为:while ( s > 0) sl = sl * 10; }

printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t);

}

94、 给定程序中 fun 函数的功能是: 将长整型数中每一位上为偶数的数依次取出, 构成一个新数放在 t 中。高位仍在高位,低位仍在低位。例如,当 s 中的数 为:87653142 时,t 中的数为 8642。 #include <stdio.h> void fun (long s, long *t) {

/************found************/ int long d; sl=1; 改为:long d;

*t = 0; while ( s > 0) { d = s%10; /************found************/ if (d%2=0) { *t=d* sl+ *t; sl *= 10; } 改为:if (d%2==0)

/************found************/ s \= 10; } } main( ) { long s, t; 改为:s /= 10;

printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); }

95、给定程序中 fun 函数的功能是:将 s 所指字符串中最后一次出现的与 t1 所 指字符串相同的子串替换成 t2 所指字符串,所形成的新串放在 w 所指的数 组中。在此处,要求 t1 与 t2 所指字符串的长度相同。例如,当 c 所指字符 串中的内容为“abcdabfabc” t1 所指子串中的内容为: ,t2 所指子串中的 , “ab” 内容为: “99”时,结果在 w 所指的数组中的内容应为: “abcdabf99c” 。 #include <stdio.h> #include <string.h> /************found************/ int fun (char *s, char *t1, char *t2 , char *w) char *t1, char *t2 , char *w) */

/* 改为:void fun (char *s, { int i; char

*p , *r, *a;

strcpy( w, s ); /************found************/ while ( w ) { p = w; r = t1; 改为:while ( *w )

while ( *r ) /************found************/ IF ( *r == *p ) 改为:if ( *r == *p )

{ r++; else break;

p++; }

if ( *r == '\0' ) a = w; w++; r = t2; while ( *r ){ *a = *r; a++; r++; } } main() { char s[100], t1[100], t2[100], w[100]; }

printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring t1:"); scanf("%s", t1); printf("\nPlease enter substring t2:"); scanf("%s", t2); if ( strlen(t1)==strlen(t2) ) { else fun( s, t1, t2, w); printf("\nThe result is : %s\n", w); printf("\nError : strlen(t1) != strlen(t2)\n"); } }

96、给定程序中 fun 函数的功能是:应用递归算法求形参 a 的平方根。求平方根 的迭代公式如下:

例如,a 为 2 时,平方根为 1.414214。 #include <stdio.h>

#include <math.h> /**********found**********/ double fun(double a, dounle x0) double x0) { double x1, y; 改为: double fun(double a,

x1=(x0+ a/x0)/2.0; /**********found**********/ if( fabs(x1-xo)>0.00001 ) if( fabs(x1-x0)>=0.00001 ) y=fun(a,x1); else y=x1; 改 为 :

return y; } main( ) { double x;

printf("Enter x: "); scanf("%lf",&x); printf("The square root of %lf is %lf\n",x,fun(x,1.0)); }

97、给定程序中 fun 函数的功能是:统计子字符串 substr 在字符串 str 中出现的 次数。例如,若字符串为 aaas lkaaas,子字符串为 as,则应输出 2。 #include <stdio.h> /**********found**********/

fun( char * str, char * substr) char * substr) { int i, j, k, num=0;

改为:int fun( char * str,

/**********found**********/ for(i=0,str[i],i++) for(j=i,k=0;substr[k]==str[j];k++,j++) if(substr[k+1]== ‘\0’) return num; } main() { char str[80],substr[80]; printf(“ Input a string:”); gets(str); printf(“ Input a substring:”); gets(substr); printf(“%d\n”, fun(str,substr)); } { num++; break; } 改为:for(i=0;str[i];i++)

98、给定程序中 fun 函数的功能是:从 N 个字符串中找出最长的那个串,并将 其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组 中。 #include <stdio.h> #include <string.h> #define N 5 #define M 81

/**********found**********/ fun(char (*sq)[N]) (*sq)[M]) { int i; char *sp; sp=sq[0]; for(i=0;i<N;i++) if(strlen(sp)<strlen(sq[i])) sp=sq[i]; /**********found**********/ return sq; } main( ) { char str[N][M], * longest; int i; printf(“Enter %d lines:\n”, N); for(i=0;i<N;i++) gets(str[i]); 改为:return sp; 改 为 : char * fun(char

printf(“\n The string :\n”,N); for(i=0;i<N;i++) longest=fun(str); printf(“\n The longest string :\n”); puts(longest); } puts(str[i]);

99、下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋

值。给定程序中 fun 函数的功能是将单向链表结点(不包括头结点)数据域 中的最大值,并作为函数值返回。 #include <stdio.h> #include <stdlib.h> typedef { int struct data; aa *next; }NODE;

struct aa

/***********found**********/ fun(NODE { int *h) 改为:int fun(NODE *h)

max = -1 ;

NODE *p; p=h; while(p) { if(p->data>max) max=p->data; /***********found**********/ p=h->next; } return max; } outresult(int s, FILE *pf) { fprintf(pf, “\n The max in link: %s\n”,s); } 改为:p=p->next;

NODE *creatlink(int n) { NODE *h, *p, *s, *q;

int

i, x;

h=p=(NODE *)malloc(sizeof(NODE)); for(i=1; i<=n; i++) { s=(NODE *)malloc(sizeof(NODE)); s->data=rand()%16; p->next=s; p->next=NULL; return h; } outlink(NODE { NODE *p; p = h->next; fprintf(pf ,"\n\nTHE LIST :\n\n HEAD " ); *h, FILE *pf) s->next=p->next; }

p=p->next;

while(p) { fprintf(pf ,"->%d ",p->data ); p=p->next; } fprintf (pf,"\n"); } outresult(int { s, FILE *pf) %d\n",s); }

fprintf(pf,"\nThe sum of even numbers :

main( ) { NODE *head; head=creatlink(12); even=fun(head); int even; head->data=9000; outlink(head , stdout);

printf("\nThe

result :\n"); outresult(even, stdout); }

100、给定程序中 fun 函数的功能是:通过某种方式是相两个变量值的交换,规 定不允许增加语句和表达式。 例如: 若变量 a 中的值原为 8, 中的值为 3。 b 程序运行后 a 中的值为 3,b 中的值为 8。 #include <stdio.h> int fun(int * x,int y) { int t; /*********found**********/ t=x; x=y; /*********found**********/ return(y); } main( ) { int a=3,b=8; clrscr(); printf("%d, } %d\n",a,b); b=fun(&a,b); printf("%d, %d\n",a,b); 改为:return(t); 改为:t=*x;*x=y;

第三部分

编程题

1.m 个人的成绩存放在 score 数组中,请编写函数 fun,它的功能是:将低于平均分 的人数作为函数值返回,将低于平均分的分数放在 below 所指的数组中。 例如,当 score 数组中的数据为 10、20、30、40、50、60、70、80、90 时,函数 返回的人数应该是 4,below 中的数据应为 10、20、30、40。 ??????????????????????????????????????????? ????????????????? #include <string.h> #include <conio.h> #include <stdio.h> /*第一个 for()循环用来计算 score 数组中分数的总和, 然后用 aver/=m 求出平均 值,第二个循环用来找出小于平均分的元素,并放到数组 below 中,这里要注 意 j 的递增方式。*/ int fun(int score[],int m, int below[]) { int i,j=0,aver=0; for(i=0;i<m;i++) aver+=score[i]; aver/=m;

for(i=0;i<m;i++) if(score[i]<aver) below[j++]=score[i]; return j; } main() { int i,n,below[9]; int score[9]={10,20,30,40,50,60,70,80,90}; clrscr(); n=fun(score,9,below); printf("\nBelow the average score are :"); for(i=0;i<n;i++) printf("%4d",below[i]); } 2.请编写函数 fun,它的功能是:求出 1 到 1000 之内能被 7 或 11 整除、但不能同 时被 7 和 11 整除的所有整数并将它们放在 a 所指的数组中,通过 n 返回这些数的 个数。 ??????????????????????????????????????????? ?????????????????? #include <conio.h> #include <stdio.h> /*该题关键就是如何表示能被 7 或 11 整除,但不能同时被 7 和 11 整除。用 (i%7==0)//(i%11==0)来表示能被 7 或 11 整除,用 !((i%7==0)&&(i%11==0))

来表示不能同时被 7 和 11 整除。 void fun(int *a,int *n) { int i,m=0; for(i=1;i<1000;i++) if(((i%7==0)//(i%11==0))&&!((i%7==0)&&(i%11==0))) {a[m]=i;m+=1;} *n=m; } main() { int aa[1000],n,k; clrscr(); fun(aa,&n); for(k=0;k<n;k++) if((k+1)%10==0) printf("\n"); else printf("%d,",aa[k]); }

3.请编写函数 void

fun(int x,int pp[ ],int

*n),它的功能是:求出能整除 x 且不是

偶数的各整数,并按从小到大的顺序放在 pp 所指的数组中,这些除数的个数通过 形参 n 返回。例如,若 x 中的值为 30,则有 4 个数符合要求,它们是 1,3,5,15。 ??????????????????????????????????????????? ??????????????????

#include <conio.h> #include <stdio.h> /*由于要求的数不能是偶数故编程时从 1 开始循环而步长为 2 这样正好保正 i 永 远的奇数。这里也要注意存放结果的数组 pp 的下标变化方式。*/ void fun(int x, int pp[], int *n) { int i,j=0; for( i=1;i<=x; i=i+2) if( x%i==0) pp[j++]=i; *n=j; } main() { int x, aa[1000], n, i; printf("\n please enter an integer number:\n"); scanf("%d ",&x); fun(x,aa,&n); for(i=0;i<n;i++) printf("%d ", aa[i]); printf("\n"); }

4.请编写一个函数 void

fun(char *tt,int pp[]),统计在字符串中‘a’到‘z’26 个字母

各自出现的次数,并依次放在 pp 所指数组中。 例如,当输入字符串 abcdefgabcdeabc 后,程序的输出结果应该是:3 3 3 2 2 1 1 0 000000000000000000 ??????????????????????????????????????????? ?????????????????? #include<conio.h> #include<stdio.h> /* 34 题: 本题采用的是字母的 ASCII 码值与数组 pp 下标的对应转换关系分别求 出对应字母的个数。第一个 for()是给 pp 赋初值 0,第二个 for()用于控制在字符 串内从头到尾移动。由于字母'a'的 ASCII 码值为 97 而它的个数要放在 pp[0]中, 而'a'-97 的值正好为 0,其它的依此类推。*/ void fun(char *tt,int pp[]) { int i; for(i=0;i<26;i++) pp[i]=0; for(;*tt;tt++) if(*tt<='z'&&*tt>='a') pp[*tt-97]++; } main() { char aa[1000]; int bb[26],k;

clrscr(); printf("\nPlease enter a char string:");scanf("%s",aa) ; fun(aa,bb); for(k=0;k<26;k++) printf("%d",bb[k]); printf("\n"); }

5.请编写一个函数 void fun(int m,int k,int xx[]),该函数的功能是:将大于整数 m 且 紧靠 m 的 k 个素数存入 xx 所指的数组中。 例如,若输入:17,5,则应输出:19,23,29,31,37。 ??????????????????????????????????????????? ?????????????????? #include <conio.h> #include <stdio.h> /*本题中的 for()循环用来判断一个数是否为素数,由于个数只能是 k 个所以用 do-while 循环来控制。*/ void fun(int m, int k, int xx[]) { int i,j=0,p=m+1; do {for( i=2; i<p; i++) if(p%i==0) break;

if(i>=p) xx[j++]=p; p++; } while(j<k); } main() { int m,n,zz[1000]; printf("\n please enter two integers: "); scanf("%d%d",&m,&n); fun( m,n,zz); for(m=0; m<n; m++) printf("%d ", zz[m]); printf("\n"); }

6.请编写一个函数 void fun(char a[],char b[],int n),其功能是:删除一个字符串中 指定下标的字符。 其中,a 指向原字符串,删除后的字符串存放在 b 所指的数组中,n 中存放指定的下标。 例如,输入一个字符串 World,然后输入 3,则调用该函数后的结果为 Word。 ??????????????????????????????????????????? ?????????????????? #include <stdio.h> #include <conio.h>

#define

LEN 20

void fun (char a[ ], char b [ ], int n) { int i,k=0; for(i=0;a[i]!='\0';i++) if(i!=n) b[k++]=a[i]; b[k]='\0'; } main( ) { FILE *wf; char strl[LEN], str2[LEN]; int n ; printf ("Enter the string : \n") ; gets (strl) ; printf ("Enter the position of the string deleted: ") ; scanf ("%d", &n) ; fun (strl, str2, n) ; printf ("The new string is : %s \n", str2) ; wf=fopen("out.dat","w"); fun("world",str2,3);

fprintf(wf,"%s",str2); fclose(wf); }

7.请编写一个函数 int fun(int *s,int t,int *k),用来求出数组的最大元素在数组中的 下标并存放在 k 所指的存储单元中。 例如,输入如下整数:876 675 896 101 301 401 980 431 451 777 则输出结果 为:6,980。 ??????????????????????????????????????????? ?????????????????? #include<conio.h> #include <stdio.h>

int fun(int *s,int t,int *k) { int i , max ; max=s[0]; for ( i=0; i<t; i++) if(s[i]>max) { max=s[i]; *k=i; } } main() {int a[10]={876,675,896,101,301,401,980,431,451,777},k;

clrscr() ; fun(a,10,&k); printf("%d,%d\n",k,a[k]); }

8.编写函数 fun,函数的功能是:根据以下公式计算 s,计算结果作为函数值返回;n 通过形参传入。 s=1+1/(1+2)+1/(1+2+3)+.......+1/(1+2+3+4+......+n) 例如:若 n 的值为 11 时,函数 的值为 1.833333。 ??????????????????????????????????????????? ?????????????????? #include <stdio.h> float fun(int n) { int i,s; s=0; for(i=0,i<=n,i++){ s=s+1/chsdc(i); } return(s); } long chsdc(int n) { int i,s;

s=0; for(i=0,i<n,i++){ s=s+i; } return(s); } main() { int n; float s; printf("\nPlease enter N:"); scanf("%d", &n); s = fun(n); printf("the result is: %f\n", s); NONO(); }

NONO ( ) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, n ; float s;

fp = fopen("K:\\k1\\24000322\\in.dat","r") ; wf = fopen("K:\\k1\\24000322\\out.dat","w") ;

for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%d", &n) ; s = fun(n) ; fprintf(wf, "%f\n", s) ; } fclose(fp) ; fclose(wf) ; }

9.编写函数 fun,它的功能是:根据以下公式求 P 的值,结果由函数值带回。m 与 n 为两个正整数且要求 m>n。p=m!/n!(m-n)!。例如:m=12,n=8 时,运行结果为 495.000000。 ??????????????????????????????????????????? ?????????????????? #include <conio.h> #include <stdio.h> float fun( int m, int n) { int i,j,k; long int float q; for(i=1; i<=m; i++) t*=i; for(j=1; j<=n; j++) s*=j; t=1,s=1,p=1;

for(k=1; k<=m-n; k++) p*=k; q=(float)t/s/p; return q; } main() { printf("\np=%lf\n", fun(12,8)); } 10.编写函数 fun,它的功能是:利用以下所示的简单迭代方法求方程 cos(x)-x=0 的 一个实根。 Xn+1=cos(Xn) 迭代步骤如下: ⑴取 x1 初值为 0.0; ⑵x0=x1,把 x1 的值赋给 x0; ⑶x1=cos(x0),求出一个新的 x1; ⑷若 x0-x1 的绝对值小于 0.000001,则执行步骤(5),否则执行步骤(2); ⑸所求 x1 就是方程 cos(x)-x=O 的一个实根,作为函数值返回。 程序将输出结果 Root=0.739085。 ??????????????????????????????????????????? ?????????????????? #include <conio.h> #include <math.h> #include <stdio.h>

float fun() { float x0,x1=0; do { x0=x1; x1=cos(x0); }while( fabs(x0-x1)>1e-006); return x1; } main() { printf("root=%f\n",fun()); } 11.下列程序定义了 N×N 的二维数组,并在主函数中自动赋值。 请编写函数 fun(int a[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成 0。例如:a 数组 中的值为
1 9 7 a? 2 3 8 4 5 6 0 9 7 0 0 8 0 0 0

,则返回主程序后 a 数组中的值应为

??????????????????????????????????????????? ?????????????????? #include<stdio.h> #include<conio.h> #include<stdlib.h> #define N 5 /* 29 题: 该题的关键是如何表示出左下半角的元素,当从上往下到第 i 行时只有

左边的 i 个元素要置为 0(每行总是如此) 。用外层 for()来控制行而内嵌的 for()来控制每 行的 左边元素,故而在内嵌 for()中 j 最大只能循环到 i(即表示出第 i 行左边的 i 个元 素) 。* / int fun(int a[][N]) {int i,j; for(i=0;i<N;i++) for(j=0;j<=i;j++) a[i][j]=0; } main() {int a[N][N],i,j; clrscr(); printf("*** The array ****\n"); for(i=0;i<N;i++) {for(j=0;j<N;j++) {a[i][j]=rand()%10;printf("%4d",a[i][j]);} printf("\n"); } fun(a);

printf("The result\n"); for(i=0;i<N;i++) {for(j=0;j<N;j++) printf("%4d",a[i][j]); printf("\n"); } }

12.下列程序定义了 N×N 的二维数组,并在主函数中赋值。请编写函数 fun,函数 的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的 s。例如: 若 a 数组中的值为
0 1 2 7 9 1 9 7 4 5 a? 2 3 8 3 1 4 5 6 8 2 5 9 1 4 1

则返回主程序后 s 的值应为 3.375。

??????????????????????????????????????????? ?????????????????? #include <stdio.h> #include <conio.h> #include <stdlib.h> #define N 5 /* 注意不能重复计算, 第一个 for()循环求出第一列与最后一列的和, 第二个 for() 循环求出第一行与最后一行 (已除去两头元素) 要注意第二个 for() , 中起始为 1, 最后为 N-2。*/

double fun (int w[][N]) { int i,t=0; double s=0; for(i=0;i<N;i++) {s+=w[i][0]+w[i][N-1]; t+=2;} for(i=1;i<N-1;i++) {s+=w[0][i]+w[N-1][i]; t+=2;} s=s/t; return s; } main() { int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1}; int i,j; double s; clrscr(); printf("***** The array *****\n"); for(i=0;i<N;i++) {for(j=0;j<N;j++) printf("%4d",a[i][j]); printf("\n"); } s=fun(a);

printf("***** The result *****\n"); printf("The sum is %lf\n",s); } 13.请编一个函数 void fun(int tt[M][N],int pp[N]),tt 指向一个 M 行 N 列的二维数组, 求出二维数组每列中最小元素,并依次放入 pp 所指一维数组中。 二维数组中的数 已在主函数中赋予。 ??????????????????????????????????????????? ?????????????????? #include "conio.h" #include "stdio.h" #define M 3 #define N 4 /*注:该题用 for(i=0;i<N;i++)来控制一列一列地找,而内嵌循环 for(j=0;j<M; j++)用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化最快,即 外层循 环改变一个值, 内层循环就要循环完一次,对于多重循环一定要好好去体会和理 解,在 多数题目中都要用到多重循环(一般为二重) 。*/ void fun(int tt[M][N],int pp[N]) { int i, j; for(i=0;i<N;i++) { pp=tt[0][i];

for(j=0;j<M;j++) if(tt[j][i]<pp[i]) pp[i]=tt[j][i]; } } main() { int t[M][N]={ {22,45,56,30}, {19,33,45,38}, {20,22,66,40}}; int p[N],i,j,k; clrscr(); printf("the original data is:\n"); for(i=0;i<M;i++) {for(j=0;j<N;j++) printf("%6d",t[i][j]); printf("\n"); } fun(t,p); printf("\nthe result is:\n"); for(k=0;k<N;k++) printf("%4d",p[k]); printf("\n"); }

14.请编写函数 fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。 二维数组中的值在主函数中赋予。 例如:若二维数组中的值为 1 2 6 1 9 9 3 9 9 5 9 9 7 4 8 0 3 5 7 9 则函数值为 61。

??????????????????????????????????????????? ?????????????????? #include <conio.h> #include <stdio.h> #define M 4 #

相关文章:
计算机基础(2题)
计算机病毒的预防措施: (1) (2) (3) (4) (5) (6) (7) (1) (2) (3) 安装可实时监控的杀毒软件、定期更新病毒库 经常运行操作系统的更新 安装防火墙...
计算机基础2
文件型 答案: D 一个非空树,它的根结点数目___ A、 1 或多于 1 B、只能是 1 C、至少 2 D、 0 或 1 答案: B 组成计算机指令的两部分是___。 A...
计算机试题(2)
物理器件采用中小规模集成电路的计算机被称为___。 A.第一代计算机 B.第二代计算机 C.第三代计算机 D.第四二代计算机 2. 人类第一台机械式计算机是由___发...
计算机应用基础(第2版)_在线作业 1-6全 100分
计算机应用基础(第2版)_在线作业 1-6全 100分_教育学_高等教育_教育专区。网上农大 计算机应用基础(第2版)_在线作业_6 计算机应用基础(第 2 版)_在线作业_...
计算机应用基础(第2版)_在线作业_3
计算机应用基础(第2版)_在线作业_3_教育学_高等教育_教育专区。一、单选题 1. (5 分) 访问控制中的“授权”是用来___。 ? ? ? ? 得分: 5 知识点: ...
9、计算机辅助(2)AI
计算机辅助设计(2)AI 理论课程教学大纲课程名称: 英文名称: 课程代码: 学分: 总学时: 适用专业: 先修课程: 考核方式: 计算机辅助设计(2)AI Adobe Illustrator...
网上农大计算机应用基础(第2版)6套在线作业满分答案
5.0 5.0 传真 5.0 5.0 主机由 CPU﹑RAM 及 ROM 组成 计算机应用基础(第 2 版)-在线作业_D 用户名:W320902142053 最终成绩:100.0 360 安全卫士中的软件管家...
计算机试卷2
计算机试卷2_IT认证_资格考试/认证_教育专区。计算机试卷2 一、单选题 1.第三代计算机采用___作为主要的电子元器件。 A.大规模集成电路 B.小规模电子管 C.晶...
计算机应用基础(第2版)_在线作业_1
计算机应用基础(第2版)_在线作业_1_远程、网络教育_成人教育_教育专区。计算机应用基础(第 2 版)_在线作业_1 交卷时间:2016-02-14 12:07:46 一、单选题 1...
计算机应用基础(第2版)_在线作业_5
计算机应用基础(第2版)_在线作业_5_教育学_高等教育_教育专区。一、单选题 1. (5 分) 在计算机内部,数据加工、处理和传送的形式是___。 ? ? ? ? 得分:...
更多相关标签: