—填空题
【文件】将格式化结果输出到文件
void fun(char *filename, STU n)
{ FILE *fp;
fseek(__2__, -(long)sizeof(STU), SEEK_END);
fwrite(&n, sizeof(STU), 1, __3__);
fclose(fp);
}
【算数】将数组中大于平均数的数放在y数组中输出
double fun(double x[],double *y)
{ int i,j; double av;
av=__1__;
for(i=0; i<N; i++)
av=av+__2__;
for(i=j=0; i<N; i++)
if(x[i]>av) y[__3__]= x[i];
y[j]=-1;
return av;
}
【算数】求数组中最接近平均数的数
double fun(double x[],double *av)
{ int i,j; double d,s;
s=0;
for(i=0; i<N; i++) s = s +x[i];
__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__;
}
return __3__;
}
【算数】求出一组数的平均数 然后将小于数组平均数的数移至数组前部,大于的移至数组后部
double fun(double *x)
{ int i, j; double av, y[N];
av=0;
for(i=0; i<N; i++)
av+=__1__;
for(i=j=0; i<N; i++)
if( x[i]<av ){
y[j]=x[i]; x[i]=-1;
__2__;
}
i=0;
while(i<N)
{ if( x[i]!= -1 ) y[j++]=x[i];
__3__;
}
for(i=0; i<N; i++)x[i] = y[i];
return av;
}
【算数】求出一组数的平均数 然后将小于数组平均数的数移至数组前部,大于的移至数组后部
double fun(double *x)
{ int i, j; double av, y[N];
av=0;
for(i=0; i<N; i++)
av+=__1__;
for(i=j=0; i<N; i++)
if( x[i]<av ){
y[j]=x[i]; x[i]=-1;
__2__;
}
i=0;
while(i<N)
{ if( x[i]!= -1 ) y[j++]=x[i];
__3__;
}
for(i=0; i<N; i++)x[i] = y[i];
return av;
}
【字符】将两组字符型数组转换为数值型相加
long ctod( char *s )
{ long d=0;
while(*s)
if(isdigit( *s)) {
d=d*10+*s-__1__;
__2__;
}
return d;
}
long fun( char *a, char *b )
{
return __3__;
}
【算数】生成不重复随机数
void fun( int *a)
{ int i, x, n=0;
x=rand()%20;
while (n<N)
{ for(i=0; i<n; i++ )
if( x==a[i] )
break;
if( i==n)
{ a[n]=x; n++; }
x=rand()%20;
}
}
【数组】求数组中每列的最大值
#include <stdio.h>
#define N 4
void fun(int (*a)[N], int *b)
{ int i,j;
for(i=0; i<N; i++) {
b[i]=__1__;
for(j=1; j<N; j++)
if(b[i]<__2__)
b[i]=a[j][i];
}
}
void 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;
printf("\nThe matrix :\n");
for(i=0;i<N; i++)
{ for(j=0;j<N; j++) printf("%4d",x[i][j]);
printf("\n");
}
fun(__3__);
printf("\nThe result is:");
for(i=0; i<N; i++) printf("%3d",y[i]);
printf("\n");
}
【数组】打印自然数字层矩阵
void fun(int (*a)__1__)
{ int i,j,k,m;
if(N%2==0) m=N/2 ;
else m=N/2+1;
for(i=0; i<m; i++) {
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++)
a[k][i]=a[k][N-i-1]=__3__;
}
}
【算数】判断一个二维数组是否是幻方(行列对角线和相等)
#define N 3
int fun(int (*a)[N])
{ int 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++) {
row=colum=__1__;
for(j=0; j<N; j++)
{ row+=a[i][j]; colum+=a[j][i]; }
if( (row!=colum)__2__(row!=m1) ) return 0;
}
return __3__;
}
【函数】使用函数指针指向函数后调用
double f1(double x)
{ return x*x; }
double f2(double x, double y)
{ return x*y; }
double fun(double a, double b)
{
double (*f)();
double r1, r2;
f = f1 ;
r1 = f(a);
f = f2 ;
r2 = (*f)(a, b);
return r1 + r2;
}
【算数】对链表中的数据进行由小到大排序
void fun(NODE *h)
{ NODE *p, *q; int t;
p = h->next ;
while (p) {
q = p->next ;
while (q) {
if (p->data > q->data)
{ t = p->data; p->data = q->data; q->data = t; }
q = q->next;
}
p = p->next;
}
}
【字符】将字符串中的数字字符和字母字符分开
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])) {
p[j]=s[i]; j++;}
else
{ t[k]=s[i]; k++; }
}
for(i=0; i<k; i++) p[j+i]= t[i];
p[j+k]=0;
return p;
}
【数组】矩阵交换指定行的值
void fun(int (*a)[N], int __1__)
{ int i,temp ;
for(i = 0 ; i < __2__ ; i++)
{ temp=a[0][i] ;
a[0][i] =__3__;
a[k][i] = temp;
}
}
【数组】将数组第k列以后的列往前移动
void fun(int (*a)[N],int k)
{ int i,j,p,temp;
for(p=1; p<= k; p++)
for(i=0; i<M; i++)
{ temp=a[i][0];
for(j=0; j< N-1 ; j++) a[i][j]=a[i][j+1];
a[i][N-1]= temp;
}
}
【数组】找出数组中行上最大,列上最小的元素
void fun(int (*a)[N])
{ 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]) {
rmax=a[i][j]; c=__1__; }
find=1; k=0;
while(k<M && find) {
if (k!=i && a[k][c]<=rmax) find=__2__;
k++;
}
if(find) printf("find: a[%d][%d]=%d\n",i,c,a[i][c]);
__3__;
}
if(!find) printf("not found!\n");
}
【字符】复制字符串的后面n个字符到新的数组
void fun(char *s, int n, char *t)
{ int len,i,j=0;
len=strlen(s);
if(n>=len) strcpy(__1__);
else {
for(i=len-n; i<=len-1; i++) t[j++]=__2__;
t[j]= __3__;
}
}
【算数】对一个字符串进行回文数判断
int fun(char *s)
{ char *lp,*rp;
lp=__1__;
rp=s+strlen(s)-1;
while((toupper(*lp)==toupper(*rp)) && (lp<rp) ) {
lp++; rp __2__ ; }
if(lp<rp) __3__;
else return 1;
}
【字符】统计输入文本中的单词个数
int fun(char *s)
{ int n=0, flag=0;
while(*s!='\0')
{ if(*s!=' ' && flag==0) {
__1__; flag=1;}
if (*s==' ') flag=__2__;
__3__;
}
return n;
}
【算数】将数组中ASCII码小于97的字符统计个数并存入另一个数组
int fun(char *s, char *t)
{ int n=0;
while(*s)
{ if(*s < 97) {
*(t+n)=__3__; n++; }
/**********found**********/
__3__;
}
*(t+n)=0;
return __3__;
}
【算数】将字符串里面的数字累加
int fun(char *s)
{ int sum=0;
while(*s) {
if( isdigit(*s) ) sum+= *s-__1__;
__2__;
}
return __3__;
}
【字符】统计字符串中单词频率最高的字符
void fun(char *s)
{ int k[26]={0},n,i,max=0; char ch;
while(*s)
{ if( isalpha(*s) ) {
ch=tolower(__1__);
n=ch-'a';
/**********found**********/
k[n]+=__2__;
}
s++;
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]);
}
【算数】按长度给二维数组的字符串排序
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++) {
k=__1__;
for(j=i+1; j<N; j++)
if(strlen(ps[k]) < strlen(__2__) ) k=j;
tp=ps[i]; ps[i]=ps[k]; ps[k]=__3__;
}
printf("\nThe string after sorting by length:\n\n");
for(i=0; i<N; i++) puts(ps[i]);
}
【算数】多个函数的调用
double f1(double x)
{ return x*x; }
double f2(double x, double y)
{ return x*y; }
__1__ fun(int i, double x, double y)
{ if (i==1)
return __2__(x);
else
return __3__(x, y);
}
void main()
{ double x1=5, x2=3, r;
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);
}
【算数】将结构体中的数据按学号由小到大排序后再写入文件
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;
fp = fopen(filename, "rb");
fread(s, sizeof(STU), N, fp);
fclose(fp);
for (i=0; i<N-1; i++)
for (j=i+1; j<N; j++)
if (s[i].sno > s[j].sno)
{ t = s[i]; s[i] = s[j]; s[j] = t; }
fp = fopen(filename, "wb");
fwrite(s, sizeof(STU), N, fp);
fclose(fp);
}
【数组】按升序排序取中间值,将小于中间值的数覆盖为中间值
int fun(int x[])
{ int i,j,k,t,mid,b[N];
for(i=0;i<N;i++) b[i]=x[i];
for(i=0;i<=N/2;i++)
{ k=i;
for(j=i+1;j<N;j++) if(b[k]>b[j]) k=j;
if(k != i )
{
t=b[i]; b[i]=b[k]; b[k]=t;
}
}
mid=b[4];
for(i=0; i<N; i++)
if(x[i] < mid) x[i]=mid;
return mid;
}
【数组】取出数组中前n个数,每行输出5个数
void fun( int *a, int n )
{ int i;
for(i=0; i<n; i++)
{
if( __1__==0 )
printf("__2__");
printf("%d ",__3__);
}
}
【算法】将三个结构体数据用指针连接形成一个单向链表
typedef struct list
{ char data;
struct list *next;
} Q;
void fun( Q *pa, Q *pb, Q *pc)
{ Q *p;
pa->next=__1__;
pb->next=pc;
p=pa;
while( p )
{
printf(" %c",__2__);
p=__3__;
}
printf("\n");
}
【算数】自然数累加
void fun( int *a , int n )
{ int i, t;
for( i=0; i<n; i++ )
a[i]=__1__;
i=0;
__2__=1;
while( i<n )
{ a[i]= 1;
t++;
i=__3__;
}
}
【算法】 统计一串数字中各数字出现的次数
void fun( int m, int a[10])
{ int i;
for (i=0; i<10; i++)
a[i] =__1__;
while (m > 0)
{
i = __2__;
a[i]++;
m = __3__;
}
}
【算数】多项式计算
double fun(int n)
{ int i, k; double s, t;
s=0;
k=__1__;
for(i=1; i<=n; i++) {
t=__2__;
s=s+k*(2*i-1)*(2*i+1)/(t*t);
k=__3__;
}
return s;
}
【算数】多项式计算
double fun(double e)
{ int i; double s, x;
s=0; i=__1__;
x=1.0;
while(x>e){
__2__;
x=(2.0*i-1)/((__3__)*(2.0*i));
s=s+x;
}
return s;
}
【字符】将字符串中数字字符后面添加"*"
void fun(char *s)
{ int i, j, n;
for(i=0; s[i]!='\0'; i++)
if(s[i]>='0'__1__s[i]<='9')
{ n=0;
while(s[i+1+n]!= __2__) n++;
for(j=i+n+1; j>i; j--)
s[j+1]=__3__;
s[j+1]='*';
i=i+1;
}
}
【算法】实现单链表逆置
typedef struct node {
int data;
struct node *next;
} NODE;
__1__ * fun(NODE *h)
{ NODE *p, *q, *r;
p = h;
if (p == NULL)
return NULL;
q = p->next;
p->next = NULL;
while (q)
{
r =__2__;
q->next = p;
p = q;
q =__3__;
}
return p;
}
【结构体】函数传参修改结构体类型成员变量的值
struct student {
long sno;
char name[10];
float score[3];
};
__1__ fun(struct student a)
{ int i;
a.sno = 10002;
strcpy(__2__, "LiSi");
for (i=0; i<3; i++) __3__+=1;
return a;
}
【算法】实现单链表逆置
typedef struct node {
int data;
struct node *next;
} NODE;
void fun(NODE *h)
{ NODE *p, *q, *r;
p = h->__1__;
if (p==__2__) return;
q = p->next;
p->next = NULL;
while (q)
{ r = q->next; q->next = p;
p = q;
q = __3__;
}
h->next = p;
}
【字符】取出数组中ASCII码为奇数的字符并将字符按ASCII码递增排序存入数组
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) {
__1__;
for(j=__2__+2 ; j<n; j=j+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];
p[j]=__3__;
}
【文件】将数据写入文本文件再读取显示
void fun(char *s, int a, double f)
{
__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);
while (!feof(__2__))
{
putchar(__3__);
ch = fgetc(fp);
}
putchar('\n');
fclose(fp);
}
【字符】将字符串里面的指定的字符变为两个
void fun(char *s, char c)
{ int i, j, n;
for(i=0; s[i]!=__1__ ; i++)
if(s[i]==c)
{
n=__2__;
while(s[i+1+n]!='\0') n++;
for(j=i+n+1; j>i; j--) s[j+1]=s[j];
s[j+1]=__3__;
i=i+1;
}
}
【字符】将字符串中的字母字符和数字字符提取出来
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(((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='Z'))) {
t[j]=__1__; j++;}
else
{ p[k]=s[i]; k++; }
}
for(i=0; i<__2__; i++) t[j+i]=p[i];
t[j+k]= __3__;
return t;
}