第一套:
1.1 填空 给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶函数的数去除,剩余的书按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。 void fun(unsigned long *n)
{ unsigned long x=0, i; int t; i=1; while(*n)
/**********found**********/ { t=*n % 10 ;
/**********found**********/ if(t%2!= 0)
{ x=x+t*i; i=i*10; } *n =*n /10; }
/**********found**********/
*n=x; }
1.2 改错 给定程序MODI1.C 中函数fun的功能是:计算n!。 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 ;}
1.3 程序 请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。 long fun ( char *p)
{ /* 以下代码仅供参考 */
int i, len, t; /* len为串长,t为正负标识 */ long x=0; len=strlen(p); if(p[0]=='-')
{ t=-1; len--; p++; }
else t=1;
/* 以下完成数字字符串转换为一个数字 */ while(*p) x = x*10-48+(*p++); return x*t; } 第二套:
2.1填空 给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数些到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 void fun(char *s, int a, double f) {/**********found**********/ FILE * fp;
char ch;
fp = fopen(\
fprintf(fp, \fclose(fp);
fp = fopen(\
printf(\ ch = fgetc(fp);
/**********found**********/ while (!feof(fp)) {
/**********found**********/ putchar(ch); ch = fgetc(fp); } putchar('\\n');
fclose(fp); }
2.2 改错 给定程序MODI1.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正函数fun中指定部位的错误,使它能得出正确的结果。 #include
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';}
2.3程序 请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。 void fun(char s[][N], char *b)
{ int i,j,n=0;
for(i=0; i < N;i++) /* 请填写相应语句完成其功能 */ {
for(j = 0 ; j < M ; j++) { b[n] = s[j][i] ;
n = i * M + j + 1; } } b[n]='\\0'; } 第三套:
3.1填空 程序通过定义学生机构体变量,存储了学生的学号,姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。 void fun(char *filename, STU n) { FILE *fp;
/**********found**********/
fp = fopen(filename, \/**********found**********/
fseek(fp, -1L*sizeof(STU), SEEK_END);
/**********found**********/
fwrite(&n, sizeof(STU), 1, fp); fclose(fp);}
3.2改错 给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。 typedef struct aa { int data; struct aa *next; } NODE;
NODE *Creatlink(int n, int m) { NODE *h=NULL, *p, *s; int i;
/**********found***********/
p=(NODE *)malloc(sizeof(NODE)); h=p;
p->next=NULL;
for(i=1; i<=n; i++)
{ s=(NODE *)malloc(sizeof(NODE));
s->data=rand()%m; s->next=p->next; p->next=s; p=p->next; } /**********found***********/
return h;}
3.3程序 请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。(有问题) int fun( char *s) { int k = 1 ; while(*s)
{ if (*s == ' ') k++ ; s++ ; } return k ; } 第四套:
4.1填空 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排列后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。 #define N 5 typedef struct student { long sno; char name[10]; float score[3];
} STU;
void fun(char *filename) { FILE *fp; int i, j;
STU s[N], t;
/**********found**********/ fp = fopen(filename, \ fread(s, sizeof(STU), N, fp); fclose(fp);
for (i=0; i
{ t = s[i]; s[i] = s[j]; s[j] = t; } fp = fopen(filename, \/**********found**********/
fwrite(s, sizeof(STU), N, fp); fclose(fp);}
4.2改错 给定程序MODI1.C中函数fun的功能是:在字符串的最前端假如n个*号,形成新串,并且覆盖原串。注意:字符串的长度最长允许为79。 void fun ( char s[], int n ) { char a[80] , *p; int i;
/**********found***********/ p=s;
for(i=0; i { a[i]=*p; i++;} /**********found***********/ while(*p++); a[i]=0; strcpy(s,a);} 4.3程序 请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的认输放在d[1]中,把20至29岁年龄段的人数放在d[2]中,期于依此类推,把100岁(含100)以上年龄的人数都放在d[10]中。结果在主函数中输出。 void fun( int *a, int *b) { int i, j ; for(i = 0 ; i < M ; i++) b[i] = 0 ; for(i = 0 ; i < N ; i++) { j = a[i] / 10 ; if(j > 10) b[M - 1]++ ; else b[j]++ ;} } 第五套: 5.1填空 给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成响应的整数、浮点数,然后将其显示在屏幕上。 void fun(char *s, int a, double f) {/**********found**********/ FILE * fp; char str[100], str1[100], str2[100]; int a1; double f1; fp = fopen(\ fprintf(fp, \ %d %f\\n\/**********found**********/ fclose(fp) ; fp = fopen(\/**********found**********/ fscanf(fp,\ fclose(fp); a1 = atoi(str1); f1 = atof(str2); printf(\ 5.2改错 给定程序MODI1.C中函数fun的功能是:对N名学生的学习成绩按从高到低的顺序找出前m(≤10)名学生出来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首笛子作为函数值返回。 typedef 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); for(i=0; i b[j].s=0; } return t;} 5.3程序 请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10。 int fun(int a[], int n) { int i, j = 1, k = a[0] ; for(i = 1 ; i < n ; i++) if(k != a[i]) { a[j++]=a[i] ; k = a[i] ; }