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 <stdio.h>
fun(int x)
{ int n, s1, s2, s3, t;
/*******************************found******************************/
n=__1__; 0
t=100;
/*******************************found******************************/
while(t<=__2__) x
{ s1=t%10; s2=(t/10)%10; s3=t/100;
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 <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct node
{ int data;
struct node *next;
} NODE;
/*******************************found******************************/
__1__ fun(NODE *h) NODE*
{ NODE *p, *q, *r;
p = h;
if (p == NULL) return NULL;
q = p->next;
p->next = NULL;
/*******************************found******************************/
while (__2__) q!=NULL
{ r = q->next; q->next = p; p = q;
/*******************************found******************************/
q = __3__ ; r
}
return p;
}
NODE *creatlist(int a[])
{ NODE *h,*p,*q; int i;
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 { p->next = q; p = q; }
}
return h;
}
void outlist(NODE *h)
{ NODE *p;
p=h;
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"); }
}
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>
double f1(double x)
{ return x*x; }
double f2(double x, double y)
{ return x*y; }
double fun(double a, double b)
{
/*******************************found******************************/
__1__ (*f)(); double
double r1, r2;
/*******************************found******************************/
f = __2__ ; /* point fountion f1 */ f1
r1 = f(a);
/*******************************found******************************/
f = __3__ ; /* point fountion f2 */ f2
r2 = (*f)(a, b);
return r1 r2;
}
main( )
{ double x1=5, x2=3, r;
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 <stdio.h>
#define N 5
typedef struct student
{ long sno;
char name[10];
float score[3];
} STU;
void fun(char *filename, long sno)
{ FILE *fp;
STU n; int i;
fp = fopen(filename,"rb ");
/*******************************found******************************/
while (!__1__) feof(fp)
{ fread(&n, sizeof(STU), 1, fp);
/*******************************found******************************/
if (n.sno__2__) break; } ==sno
if (!feof(fp))
{ 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、“LiSi”、95、80、88。
#include <stdio.h>
#include <string.h>
struct student
{ long sno;
char name[10];
float score[3];
};
void fun(struct student a)
{ struct student b; int i;
/*******************************found******************************/
b = __1__; a
b.sno = 10002;
/*******************************found******************************/
strcpy(__2__, "LiSi"); b.name
printf("\nThe data after modified :\n");
printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name);
/*******************************found******************************/
for (i=0; i<3; i ) printf("%6.2f ", b.__3__); score[i]
printf("\n"); }
main( )
{ struct student s={10001,"ZhangSan", 95, 80, 88};
int 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 <stdio.h>
#include <string.h>
#define N 5
#define M 10
int fun(char (*ss)[M], int k)
{ int i,j=0,len;
/*******************************found******************************/
for(i=0; i< __1__ ; i ) N
{ len=strlen(ss[i]);
/*******************************found******************************/
if(len<= __2__) k-1
/*******************************found******************************/
strcpy(ss[j ],__3__); ss[i]
}
return j;
}
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>
int fun(char *s, char *t)
{ int n=0;
while(*s)
{ if(*s < 97) {
/*******************************found******************************/
*(t n)= __1__ ; n ; } *s
/*******************************found******************************/
__2__ ; s
}
*(t n)=0;
/*******************************found******************************/
return __3__ ; n
}
main( )
{ char s[81],t[81]; int 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 x=0, i; int t;
i=1;
while(*n)
/*******************************found******************************/
{ t=*n % __1__; 10
/*******************************found******************************/
if(t%2!= __2__) 0
{ x=x t*i; i=i*10; }
*n =*n /10;
}
/*******************************found******************************/
*n=__3__; x
}
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); }
71. 给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t 所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。
例如,形参s所指的字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串数应为:defgh。
#include <stdio.h>
#include <string.h>
#define N 80
void fun(char *s, int n, char *t)
{ int len,i,j=0;
len=strlen(s);
/*******************************found******************************/
if(n>=len) strcpy(__1__); t,s
else {
/*******************************found******************************/
for(i=len-n; i<=len-1; i ) t[j ]= __2__ ; s[i]
/*******************************found******************************/
t[j]= __3__ ; ‘\0’
}
}
main( )
{ char s[N],t[N]; int n;
printf("Enter a string: ");gets(s);
printf( "Enter n:"); scanf("%d",&n);
fun(s,n,t);
printf("The string t : "); puts(t); }
72. 给定程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。
例如,有下列矩阵: 若k为2,程序执行结果为
1 2 3 4 5 3 4 5 1 2
1 2 3 4 5 3 4 5 1 2
1 2 3 4 5 3 4 5 1 2
#include <stdio.h>
#define M 3
#define N 5
void fun(int (*a)[N],int k)
{ int i,j,p,temp;
/*******************************found******************************/
for(p=1; p<= __1__; p ) k
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
/*******************************found******************************/
a[i][N-1]= __3__; temp
}
}
main( )
{ int x[M][N]={ {1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5} },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"); }
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行元素交换。
例如,有下列矩阵: 若k为2,程序执行结果为:
1 2 3 7 8 9
4 5 6 4 5 6
7 8 9 1 2 3
10 11 12 10 11 12
#include <stdio.h>
#define N 3
#define M 4
/*******************************found******************************/
void fun(int (*a)[N], int __1__) k
{ int i,j,temp ;
/*******************************found******************************/
for(i = 0 ; i < __2__ ; i ) N
{ temp=a[0][i] ;
/*******************************found******************************/
a[0][i] = __3__ ; a[k][i]
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"); }