全国计算机二级C上机 编程题

更新时间:2023-03-08 09:41:12 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

全国计算机等级考试C语言――编程题

1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如,当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为10、20、30、40。第一个for循环用来计算score数组中分数的总和,然后用aver/=m求出平均值,第二个循环用来找出小于平均分的元素,并放到数组below中,这里要注意j的递增方式。 #include #include #include

int fun(int score[],int m,int below[]) { int i,j=0,aver=0; for(i=0;i{ int i,n,below[9];

int score[9]={10,20,30,40,50,60,70,80,90}; n=fun(score,9,below);

printf(\ for(i=0;i #include void fun(int *a,int *n) { int i,m=0;

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

if(((i%7==0) || (i==0)) && !((i%7==0) && (i==0))) { a[m]=i;m+=1;} *n=m;} main( )

{ int aa[1000],n,k; clrscr( ); fun(aa,&n);

for(k=0;k

if((k+1)==0) printf(\else printf(\

-1-

3.请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。由于要求的数不能是偶数故编程时从1开始循环而步长为2这样正好保正i永远的奇数。这里也要注意存放结果的数组pp的下标变化方式。 #include #include

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(\ scanf(\ fun(x,aa,&n);

for(i=0;i

4.请编写一个函数void fun(char *tt,int pp[]),统计在字符串中'a'到'z'26个字母各自出现的次数,并依次放在pp所指数组中。例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0本题采用的是字母的ASCII码值与数组pp下标的对应转换关系分别求出对应字母的个数。第一个for是给pp赋初值0,第二个for用于控制在字符串内从头到尾移动。由于字母'a'的ASCII码值为97而它的个数要放在pp[0]中,而'a'-97的值正好为0。 #include #include 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(\ scanf(\ fun(aa,bb);

for(k=0;k<26;k++) printf(\ printf(\

5.请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m 的k个素数存入xx所指的数组中。例如,若输入:17,5,则应输出:19,23,29,31,37。本题中的for循环用来判断一个数是否为素数,

-2-

由于个数只能是k个所以用do-while循环来控制。 #include #include

void fun(int m,int k,int xx[]) { int i,j=0,p=m+1; do { for( i=2;i=p) xx[j++]=p; p++;} while(j

{ int m,n,zz[1000];

printf(\ scanf(\ fun( m,n,zz);

for(m=0;m

6.请编写一个函数void fun(char a[],char b[],int n),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串World,然后输入3,则调用该函数后的结果为Word。 #include #include #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 (\ gets(strl);

printf (\ scanf (\ fun(strl,str2,n);

printf (\ wf=fopen(\ fun(\ fprintf(wf,\ fclose(wf);} 7.请编写一个函数int fun(int *s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储

-3-

单元中。例如,输入如下整数:876 675 896 101 301 401 980 431 451 777则输出结果为:6,980。 #include #include

int fun(int *s,int t,int *k) { int i,max; max=s[0]; for( i=0;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; fun(a,10,&k);

printf(\

8.编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。s=1+1/(1+2)+1/(1+2+3)+.......+1/(1+2+3+4+......+n),例如:若n的值为11时,函数的值为1.833333。 #include float fun(int n) { int i,sum=1; float s=1; for(i=2;i<=n;i++) { sum=sum+i; s=s+1.0/sum;} return s;} long chsdc(int n) { int i,s; s=0;

for(i=0;i

{ int n;float s;

printf(\ scanf(\ s=fun(n);

printf(\

9.编写函数fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。p=m!/n!(m-n)!。例如:m=12,n=8时,运行结果为495.000000。 #include #include

float fun( int m,int n) { int i,j,k; long int t=1,s=1,p=1; float q;

for(i=1;i<=m;i++) t*=i; for(j=1;j<=n;j++) s*=j;

-4-

for(k=1;k<=m-n;k++) p*=k; q=(float)t/s/p; return q;} main( )

{ printf(\

10.编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。

Xn+1=cos(Xn) 迭代步骤如下:

(1)取x1初值为0.0;

(2)x0=x1,把x1的值赋给x0;

(3)x1=cos(x0),求出一个新的x1;

(4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2); (5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。 程序将输出结果Root=0.739085。 #include #include #include float fun() { float x0,x1=0; do { x0=x1;

x1=cos(x0);} while( fabs(x0-x1)>1e-006); return x1;} main( )

{ printf(\ 11.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如:a数组中的值为该题的关键是如何表示出左下半角的元素,当从上往下到第i行时只有左边的i个元素要置为0(每行总是如此)。用外层for来控制行而内嵌的for来控制每行的左边元素,故而在内嵌for中j最大只能循环到i(即表示出第i行左边的i个元素)。

1 9 7 0 9 7 a= 2 3 8 0 0 8 4 5 6 ,则返回主程序后a数组中的值应为 0 0 0 。 #include #include #include #define N 5 int fun(int a[][N]) { int i,j; for(i=0;i

-5-

for(i=0;i

{ a[i][j]=rand( ); printf(\ fun(a);

printf(\ for(i=0;i

for(j=0;j

01a?245193592786174384951 21则返回主程序后s的值应为3.375。注意不能重复计算,第一个for循环求出第一列与最后一列的和,第二个for循环求出第一行与最后一行(已除去两头元素),要注意第二个for中起始为1,最后为N-2。

#include #include #include #define N 5 double fun (int w[][N]) { int i,t=0; double s=0; for(i=0;i

{ 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; printf(\ for(i=0;i

printf(\ s=fun(a);

printf(\ printf(\13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。该题用for(i=0;i

-6-

中都要用到多重循环(一般为二重)。

#include \ #include \ #define M 3 #define N 4 void fun(int tt[M][N],int pp[N]) { int i,j; for(i=0;i

{ int t[M][N]={{22,45,56,30},{19,33,45,38},{20,22,66,40}}; int p[N],i,j,k; printf(\ for(i=0;i

for(j=0;j

printf(\

for(k=0;k

1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为61。

该题的第一个for循环是计算矩阵的最上一行和最下一行的总和,第二个for是计算除两头元素以外的最左一列和最右一列的元素的和,最后sum就是周边元素的和。

#include #include #define M 4 #define N 5 int fun(int a[M][N]) { int sum=0,i; for(i=0;i

{ int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}}; int i,j,y; printf(\ for(i=0;i

for(j=0;j

printf(\

-7-

15.请编写一个函数 unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;若w值为923,则函数返回23。由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if语句。 #include #include unsigned fun( unsigned w ) { if(w>=10000) return w000; if(w>=1000) return w00; if(w>=100) return w0; return w;} main( )

{ unsigned x;

printf( \ scanf( \

if(x<10) printf(\

else printf (\16.请编一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时。如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加5后该位就要向前进一位数(即五入)。进行加5运算后除10再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100,这样又出现了两位小数。该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成0。

#include #include float fun(float h) { long t; h=h*1000; t=(h+5)/10;

return (float)t/100; }

main( ) { float a;

printf(\ scanf(\

printf(\ printf(\

printf(\

17.请编一个函数fun(char *s),该函数的功能是把字符串中的内容逆置。例如:字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba。该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s+i

#include

-8-

#include #include #define N 81 fun(char *s)

{ int i=0,t,n=strlen(s); for(;s+i

{ t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;} }

main( ) { char a[N];

printf(\

printf(\fun(a);

printf(\

printf(\puts(a); }

18.编写程序,实现矩阵(3行3列)的转置(即行列互换)。例如,若输入下面的矩阵: 100 200 300 则程序输出 100 400 700

400 500 600 200 500 800 700 800 900 300 600 900

这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列互换时a[j]在好是与a[j][i]互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i<2;i++)再套for(j=i+1;j<3;j++)来完成左上角的走动。

#include #include int fun(int array[3][3]) { int i,j,t;

for(i=0;i<2;i++) for(j=i+1;j<3;j++)

{t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;} }

main( ) { int i,j;

int array[3][3]={{100,200,300},{400,500,600},{700,800,900}}; clrscr();

for(i=0;i<3;i++) {for(j=0;j<3;j++)

printf(\printf(\fun(array);

printf(\for(i=0;i<3;i++) {for(j=0;j<3;j++)

-9-

printf(\printf(\}

19.编写函数fun,该函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。 例如:若程序执行时输入字符串为:turbo c and borland c++

从键盘上输入字符n,则输出后变为:turbo c ad borlad c++ 如果输入的字符在字符串中不存在,则字符串照原样输出。

注:该题的算法是让i控制一个一个字符往后走,在移动过程中如果s[i]不是要删的字符,则将其按顺序放到新串中(新串亦是用s来做,只是用k来控制新串的下标,由于要删除一些元素,因此新串的下标总是比原下标i要慢。因而可用此法即同一字符串变量的方法。 #include #include int fun(char s[],int c) {int i,k=0;

for(i=0;s[i];i++)

if(s[i]!=c) s[k++]=s[i]; s[k]='\\0'; }

main( )

{ static char str[]=\char ch; clrscr();

printf(\printf(\

scanf(\fun(str,ch);

printf(\}

20.编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。

注:循环for(i=2;i=k)用于判断在上一个for()循环中i能否走到k,如果能则表示在2到k-1的数都不能整除k,即k为素数。 #include #include #define MAX 100

int fun( int lim, int aa[MAX]) { int i,j=0,k;

for( k=2; k=k) aa[j++]=k;} return j;

-10-

}

main( )

{ int limit,i,sum;int aa[MAX];

printf(\ scanf(\ sum=fun(limit,aa); for(i=0; i

printf(\

21.编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。 例如,若原来的字符串为CEAedca,则排序后输出为CedcEAa。

?????????????????????????????????????????????????????????????

/*该题采用的排序法是选择法进行降序排序,算法是用外for()循环从字符串的前端往后端走动,每走动一个字符都用内嵌的for()循环在该字符后找出最小的字符与该字符进行换位。直到外for()循环走到最后一个字符。此外,此题还要注意把首尾字符除开,即在最外层for()循环中从1开始,只到num-2即可。*/ #include #include #include int fun(char *s,int num) { int i,j,t;

for(i=1;i

for(j=i+1;j

{ t=s[i];s[i]=s[j];s[j]=t;} }

main( )

{ char s[10];

printf(\输入7个字符的字符串:\ gets(s); fun(s,7);

printf(\

22.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。 #include #include #define N 8 struct slist { double s;

struct slist *next;};

typedef struct slist STREC; double fun( STREC *h )

-11-

{ double max ; int i ; max=h->s; for(i=0 ; i

if((h+i)->s>max) max=(h+i)->s; return max; }

STREC * creat( double *s)

{ STREC *h,*p,*q; int i=0;

h=p=(STREC*)malloc(sizeof(STREC));p->s=0; while(i

{ q=(STREC*)malloc(sizeof(STREC)); q->s=s[i]; i++; p->next=q; p=q;} p->next=0; return h;}

outlist( STREC *h) { STREC *p;

p=h->next; printf(\ do

{ printf(\ printf(\main( )

{ double s[N]={85,76,69,85,91,72,64,87}, max; STREC *h; h=creat(s); outlist(h); max=fun( h );

printf(\

23.请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出YES,否则返回0,主函数中输出N0。回文是指顺读和倒读都一样的字符串。 例如,字符串LEVEL是回文,而字符串123312就不是回文。 #include #define N 80 int fun(char *str) {int i,n=0,fg=1; char *p=str;

while (*p) {n++; p++;} for (i=0;i

if (str[i]==str[n-1-i]); else {fg=0;break;} return fg; }

main( )

{ char s[N] ;

-12-

printf(\ printf(\

if(fun(s)) printf(\ YES\\n\ else printf(\ NO\\n\}

24.请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。 #include #include long fun ( char *p) { long s=0,t;

int i=0,j,n=strlen(p),k,s1; if(p[0]=='-') i++; for(j=i;j<=n-1;j++) { t=p[j]-'0'; s1=10;

for (k=j;k

if(p[0]=='-') return -s; else return s; }

main( )

{ char s[6];long n;

printf(\ gets(s); n=fun(s);

printf(\

25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入:beijing shanghai(为回车键),函数将返回shanghai。 #include

char *fun ( char *s, char *t) { char *ss=s, *tt=t;

while((*ss)&&(*tt)) { ss++; tt++; } if(*tt) return(t); else return(s); }

main( )

{ char a[20],b[10],*p,*q; int i;

printf(\ gets( a);

printf(\ gets( b);

-13-

printf(\

26.请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):

X/2=1+1/3+1×2/3×5+1×2×3/3×5×7+1×2×3×4/3×5×7×9+...+1×2×3×...×n/3×5×7×(2n+1) 程序运行后,如果输入精度0.0005,则程序输出为3.14…。 #include #include

double fun ( double eps) { double s;

float n,t,pi;

t=1;pi=0;n=1.0;s=1.0; while((fabs(s))>=eps) {pi+=s;

t=n/(2*n+1); s*=t; n++;} pi=pi*2; return pi; }

main( )

{ double x;

printf(\

scanf(\ }

27.请编写一个函数fun,它的功能是:求出1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传送给m的值为50,则程序输出:7 11 14 21 22 28 33 35 42 44 49 #include #include #define M 100

void fun ( int m, int *a , int *n ) { int i,k; *n=0;

for(i=1,k=0; i<=m; i++) if((i%7==0)||(i==0)) { a[k++]=i; (*n)++; } }

main( )

{ int aa[M], n, k; fun ( 50, aa, &n ); for ( k=0; k

if((k+1) ==0) printf(\ else printf( \

-14-

printf(\

28.请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。 #include #include

void fun(int a[], int n , int *max, int *d ) { int i;

*max=a[0]; *d=0;

for(i=0;i*max) {*max=a[i]; *d=i;} }

main( )

{int i, x[20], max , index, n=10;

for (i=0;i

fun( x, n , &max, &index);

printf(\ Index =M\\n\ }

29.请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。

例如,若输入abc4Efg,则应输出aBc4EFg。 #include #include #include void fun(char *ss) { int i;

for(i=0;ss[i]!='\\0';i++)

if(i%2==1&&ss[i]>='a'&&ss[i]<='z') ss[i]=ss[i]-32; }

main( )

{ FILE *wf;

char tt[81],s[10]=\

printf(\ gets(tt);

printf(\ fun(tt);

printf(\ wf=fopen(\

-15-

fun(s);

fprintf(wf,\ fclose(wf);}

30.请编写一个函数fun,它的功能是:求出—个2×M整型二维数组中最大元素的值,并将此值返回调用函数。 #define M 4

#include fun (int a[][M] )

{ int i,j,max= a[0][0] ; for(i=0;i<2;i++) for(j=0;j

if(max

main( ) {

FILE *wf;

int arr[2][M]={5,8,3,45,76,-4,12,82}; printf(\ wf=fopen(\ fprintf (wf,\ fclose(wf);}

31.请编写函数fun,其功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFGl23456,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是246。 #include #include #include

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

for(i=0;s[i]!= '\\0' ;i++)

if(i%2==0 && s[i]%2==0) t[j++]=s[i]; t[j]='\\0'; }

main( )

{ FILE *wf;

char s[100] ,t[100];

printf(\ scanf(\ fun(s,t);

printf(\

-16-

wf=fopen(\ fun(\ fprintf(wf,\ fclose(wf);}

32.请编写函数fun,其功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFG12345,其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是135。 #include #include #include

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

for( i=0; i

if(i%2!=0&&s[i]%2!=0) { t[j]=s[i];j++;} t[j]= '\\0' ; } main( )

{ char s[100], t[100];

printf(\ scanf(\ fun(s,t);

printf(\

33.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。 例如,字符串中的内容为****A*BC*DEF*C*******,若n的值为4,删除后,字符串中的内容则应当是****A*BC*DEF*G****,若n的值7,则字符串中的内容仍为****A*BC*DEF*C*******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。 #include #include

void fun ( char *a , int n ) { int i=0, k=0; char *p, *t; p=t=a;

while ( *t) t++; t--;

while (*t==’*’) {k++; t-- ;} t++; if (k>n)

{ while(*p&&p

-17-

}

main( ) {

FILE *wf;

char s[81],*t=\ printf(\ gets(s); fun(s);

printf(\ puts(s);

wf=fopen(\ fun(t);

fprintf(wf,\ fclose(wf); }

34.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不只一个,函数返回分数最高的学生的人数。 #include #define N 16 typedef struct { char num[10]; int s ; }STRUC;

int fun (STRUC *a, STRUC *b) { int i,j=0,max=a[0].s; for(i=0;i

if(max

if(max==a[i].s) b[j++]=a[i]; return j; }

main ()

{ STRUC s[N]={{\ {\ {\ {\ STRUC h[N]; int i, n; FILE *out; n=fun(s,h);

printf(\

-18-

for (i=0; i

printf(\ printf(\

out=fopen(\ fprintf(out, \ for(i=0; i

fprintf(out, \ fclose(out); }

35.请编写一个函数,用来删除字符串中的所有空格。 例如,输入asd af aa z67,则输出为asdafaaz67。 #include #include #include int fun(char *str) { char *p=str; for(; *str; str++)

if(*str!=' ') *p++=*str; *p='\\0'; }

main( )

{ char str[81];int n;

printf(\ gets(str); puts(str); fun(str);

printf(\

36.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。

例如,若字符串中的内容为*******A*BC*DEF*G****,移动后,字符串中的内容应当是A*BC*DEF*G**********。在编写函数时,不得使用C语言提供的字符串函数。 #include #include void fun ( char *a)

{ int i=0,n=0 ; char *p ; p=a;

while (*p=='*') {n++ ; p++; }

while (*p) { a[i]= *p ; i++; p++ ; } while(n!=0) { a[i]= '*' ;i++ ;n-- ; } a[i]= '\\0' ; }

main( )

-19-

{

FILE *wf;

char s[81],*t=\ printf(\ gets(s); fun(s);

printf(\ puts(s);

wf=fopen(\ fun(t);

fprintf(wf,\ fclose(wf); }

37.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。 例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。 #include #define N 8 typedef struct { char num[10]; double s[N]; double ave; } STRUC;

void fun(STRUC *p) { int i;

p->ave=0.0 ; for(i=0;i

p->ave=p->ave+p->s[i]; p->ave= p->ave/N ; }

main( ) {

FILE *wf;

STRUC s={ \ int i; fun(&s);

printf(\ for(i=0;i

printf(\

printf(\ wf=fopen(\

fprintf(wf,\ fclose(wf);}

-20-

38.请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串123412132,输入字符1,则输出3。

注:本题用while()循环来控制字符的移动,每移动一个字符都要进行判断(if(*ss==c))是否为指定的字母,若是则个数加1。这里要注意如何让ss指针向下走动(ss++)。 #include #include #define M 81

int fun(char *ss,char c) { int num=0;

while(*ss!='\\0') {if(*ss==c) num++; ss++;} return(num); }

main( )

{ char a[M],ch;

printf(\

printf(\

printf(\

39.请编写函数fun,该函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。 #include #define N 80

void fun(int *w, int p, int n) { int i,k=0,b[N];

for(i=p+1; i

main( )

{ int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i,p,n=15;

printf(\

for(i=0; i

printf(\ for(i=0; i

40.请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。

例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是DEFGHIJKABC。

-21-

#include #include #define N 80

void fun (char *w,int m) { int i,j; char t; for(i=1;i<=m;i++) { t=w[0];

for(j=1;w[j]!='\\0';j++) w[j-1]= w[j] ; w[j-1] =t; } }

main( )

{ FILE *wf; char a[N]= \ int m;

printf(\ puts(a);

printf(\ m: \ scanf(\ fun(a,m);

printf(\ puts(a);

printf(\

wf=fopen(\ fun(a,3);

fprintf(wf,\ fclose(wf);}

41.请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如,若二维数组中的数据为:W W W W 则字符串中的内容应是WSHWSHWSH。 S S S S H H H H #include #define M 3 #define N 4

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

for(i=0;i

for(j=0;j

main( )

{ FILE *wf;

char a[100],w[M][N]={{ 'W', 'W', 'W', 'W'},{'S', 'S', 'S', 'S'},{'H', 'H', 'H', 'H'}}; int i,j;

printf(\

-22-

for(i=0;i

{ for(j=0;j

printf(\ printf(\ } fun(w,a);

printf(\ puts(a);

printf(\

wf=fopen(\ fprintf(wf,\ fclose(wf); }

42.下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),该函数的功能是:使数组右上半三角元素中的值乘以m。

197a?2384562181424651612例如:若m的值为2,a数组中的值为,则返回主程序后a数组中的值应为。

/*该题的关键也是在如何表示右上半角,本题采用的是在一行内从最后一列的元素开始往前乘,只有j>=i时才改变。*/

#include #include #include #define N 5

int fun( int a[][N], int m) { int i,j;

for(i=0; i=i; j--) a[i][j]*=m; }

main( )

{ int a[N][N],m,i,j;

printf(\for( i=0; i

{a[i][j]=rand() ; printf(\printf(\}

do m=rand(); while( m>=3); printf(\fun( a,m);

printf(\for(i=0; i

-23-

{for(j=0; j

43.编写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。

函数strlen用于求出字符串的长度,这个题中主要是*max=p;不能换成max=&p;如果用maz=&p;则只改变了max的指向,它不能传回给实参。因此我们要改变max指向地址中的内容,这才能使得实参ps有正确的值。#include \#include \#include \

fun(char (*a)[81], int num,char **max) { char *p=a[0];int i; for(i=1;i

if(strlen(a[i])>strlen(p)) p=a[i]; *max=p; }

main( )

{ char ss[10][81],*ps; int n,i=0;

printf(\gets(ss[i]); puts(ss[i]);

while(!strcmp(ss[i],\{ i++;

gets(ss[i]); puts(ss[i]); } n=i;

fun(ss,n,&ps);

printf(\}

44.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asd asasdfg asd as zx67 asdmklo,子字符串为as,则应输出6。

注:由于小串中只有2个字符所以可用str[i]==sbustr[0]&&str[i+1]==substr[1]来判断小串是否与长串当前位置(str[i])相同(即出现一次)。因而只要让长串当前位置逐一向后移即可(用for()循环来完成)。 #include \#include \#include \

int fun(char *str,char *substr) { int i,n=0,s=strlen(str); for(i=0;i

if((str[i]==substr[0])&&(str[i+1]==substr[1])) n++; return n;

-24-

}

main( )

{ char str[81],substr[3]; int n;

printf(\gets(str);

printf(\gets(substr); puts (str); puts(substr); n=fun(str,substr); printf(\

45.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。 #include #include

void fun (char *a,int n ,int h , int e) { int i,j=0;

for(i=h;i< n-e ;i++) a[j++]=a[i]; a[j]= ‘\\0’ ; }

main( )

{ FILE *wf ; char s[81],*t,*f;

char *p=\ int m=0,tn=0, fn=0;

printf(\ gets(s); t=f=s;

while(*t) { t++;m++;} t-- ;

while(*t=='*') {t--;tn++;} while(*f=='*') {f++;fn++;} fun( s, m, fn, tn);

printf(\ puts(s);

wf=fopen(\ fun(p,21,4,7);

fprintf(wf,\ fclose(wf);}

-25-

46.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。 #include #define N 16 typedef struct { char num[10]; int s ;}STRUC;

void fun (STRUC a[]) { int i,j; STRUC t;

for(i=1 ;i

for(j=0;j< N-1;j++) if(a[j].s

{t=a[j];a[j]=a[j+1];a[j+1]=t;} }

main () {

FILE *wf;

STRUC s[N]={{ \ {\ {\ {\ int i;

FILE *out; fun(s);

printf(\ for (i=0; i

printf(\ }

printf(\

out=fopen(\ for(i=0; i

{if((i)%4==0&&i) fprintf(out, \ fprintf(out, \ }

fprintf(out, \ fclose(out);

wf=fopen(\ for (i=0; i

-26-

{if((i)%4==0&&i) fprintf(wf,\

fprintf(wf,\ } fclose(wf); }

47.请编写—个函数void fun(char *ss),其功能是:将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。

例如,若输入abc4EFg,则应输出aBc4EFg。 #include #include void fun ( char *ss) { int i;

for(i=0;ss[i]!='\\0';i++)

{ if(i%2 ==1&&ss[i]>='a' && ss[i]<='z') ss[i]= ss[i] -32;} }

main( )

{ FILE *wf;

char tt[51],*s=\

printf(\ gets(tt);

printf(\ fun(tt);

printf(\ wf=fopen(\ fun(s);

fprintf(wf,\ fclose(wf);}

48.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。 例如,当a=45,b=12,调用该函数后c=4152。

本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用10对它求余得到个位数上的数,将它除10得到十位数上的数。 #include #include

void fun ( int a, int b , long *c)

{ *c=(a/10)*1000+(b/10)*100+(a)*10+b ; } main( )

{ int a,b; long c; printf(\scanf(\

-27-

fun(a,b,&c);

printf(\}

49.请编写函数fun,其功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s中剩余的字符形成的新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFGl2345,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是BDFl2345。 #include #include #include

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

if (i%2==0&&s[i]%2!=0) ; else { t[j]=s[i] ; j++ ; } t[j]= '\\0' ; }

main( )

{ char s[100], t[100];

printf(\ scanf(\ fun(s,t);

printf(\

50.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。

#include #include #include #define N 10 typedef struct ss

{ char num[10]; int s;} STU; fun( STU a[], STU *s) { int i; *s=a[0];

for( i=1;i

if (a[i].s>(*s).s) *s=a[i]; }

main( )

{ STU a[N]={ {\

{\int i;

-28-

printf(\

for(i=0;i

fun( a,&m);

printf(\

printf(\}

51.请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。例如,若输入17,则应输出:9和4 6 8 9 10 12 14 15 16。

注:内嵌的for循环用于判断是否是素数,在j #include

void fun( int m, int *k, int xx[] ) { int i,j; *k=0;

for( i=2; i

if( i%j==0) { xx[(*k)++]=i; break;} }

main( )

{ int m, n,zz[100];

printf(\scanf( \fun(n,&m,zz);

printf(\for(n=0; n

52.编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。例如,分别输入下面两个字符串:FirstString-- SecondString

则程序输出:FirstString—SecondString

注:第一个for()循环用于让i成为第一个字符串的结束符的下标,要注意在这个for()后要有一个分号否则出错。第二个for()的作用是将第二个字符串一个一个字符依次放到第一个字符串的未尾。此外,还要注意最后一定要有p1[i]='\\0';来给字符串加上结束符。 #include #include

void fun(char p1[],char p2[]) { int i,j;

for(i=0;p1[i];i++);

for(j=0;p2[j];j++) p1[i++]=p2[j];

-29-

p1[i]='\\0'; }

main( )

{ char s1[80],s2[80]; clrscr();

printf(\scanf(\printf(\printf(\

printf(\fun(s1,s2);

printf(\printf(\

53.请编写函数fun,该函数的功能是:实现B=A+A’,即把矩阵A加上矩阵A的转置,存放在矩阵B中。计算结果在main函数中输出。

例如,输入下面的矩阵: 其转置矩阵为: 则程序输出: 1 2 3 l 4 7 2 6 10 4 5 6 + 2 5 8 = 6 10 14 7 8 9 3 6 9 10 14 18

本题没有先求出A的转置,而是直接利用转置的性质(即第一行作为转置后的第一列,第二行作为转置后的第二列,的行列互换的性质)。而且最后要求出两矩阵的相加后得出的新矩阵,由转置性质可知原a[j][i]转置后位置为a[i][j],在表达式:b[i][j]=a[i][j]+a[j][i]第一个a为A的元素,第二个a为A'的元素。 #include #include

void fun(int a[3][3],int b[3][3]) { int i,j;

for(i=0;i<3;i++) for(j=0;j<3;j++)

b[i][j]=a[i][j]+a[j][i]; }

main( )

{int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3]; int i,j; fun(a,t);

for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(\printf(\

54.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。

#include

-30-

#define N 8 typedef struct { char num[10]; double s; } STRUC;

double fun(STRUC *a, STRUC *b, int *n) { int i,j=0;

double av=0.0; for(i=0;i

for(i=0;i

if(a[i].s

return av; }

main( ) {

FILE *wf;

STRUC s[N]={{ \ { \ STRUC h[N],t; FILE *out; int i,j,n; double ave;

ave=fun(s,h,&n);

printf(\ for(i=0;i

printf(\ printf(\

out=fopen(\ fprintf(out, \ for(i=0;ih[j].s)

{t=h[i]; h[i]=h[j]; h[j]=t;} for(i=0;i

fprintf(out, \ fclose(out);

wf=fopen(\

fprintf(wf, \ for(i=0;i

fprintf(wf, \ \ fclose(wf);

-31-

}

55.请编写函数fun,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。 例如,若二维数组中的数据为:33 33 33 33 44 44 44 44 55 55 55 55

则一维数组中的内容应是:33 33 33 33 44 44 44 44 55 55 55 55 #include

void fun (int (*s)[10], int *b, int *n, int mm, int nn) { int i,j,k=0;

for(i=0;i

main( ) {

FILE *wf;

int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}}, i, j; int a[100]={0},n=0 ; printf(\ for (i=0; i<3; i++) {for (j=0;j<4;j++)

printf(\ printf(\ }

fun(w,a, &n,3,4);

printf(\ for(i=0; i

wf=fopen(\ for(i=0; i

fprintf(wf,\ fclose(wf); }

56.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了尾部的*号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符串函数。 例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的则内容应当是ABCDEFG*******。 #include #include

void fun(char *a,char *p)

-32-

{ char *t=a; for(;t<=p;t++)

if(*t!='*' ) *(a++)=*t;

for(;*t!='\\0' ;t++) *(a++)=*t; *a='\\0'; }

main( ) {

FILE *wf;

char h[81],*t,p[81]=\ printf(\ gets(h); t=h;

while(*t) t++; t--;

while(*t=='*') t--; fun(h,t);

printf(\ puts(h);

wf=fopen(\ t=p;

while(*t) t++;

t--; while(*t=='*') t--; fun(p,t);

fprintf(wf,\ fclose(wf); }

57.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。

例如,输入的分数是60和69,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在high中。 #include #define N 16 typedef struct { char num[10]; int s ; }STRUC;

int fun (STRUC *a, STRUC *b, int l, int h )

-33-

{ int i,j=0;

for(i=0;i

if(a[i].s>=l && a[i].s<=h) b[j++]=a[i]; return j; }

main () {

FILE *wf;

STRUC s[N]={{ \ {\ {\ {\ STRUC h[N],tt; FILE *out;

int i, j, n, low, heigh, t;

printf(\ scanf(\ if(heigh

{t=heigh;heigh=low; low=t;} n=fun(s,h,low, heigh);

printf(\ for(i=0;i

printf(\ printf(\

out=fopen(\ fprintf(out, \ n=fun(s,h,80,98); for(i=0;ih[j].s)

{tt=h[i];h[i]=h[j];h[j]=tt;} for(i=0;i

fprintf(out, \ fprintf(out, \ fclose(out);

wf=fopen(\ for(i=0;i

fprintf(wf, \ fclose(wf); }

58.编写函数fun,它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。例如,若n为1000时,函数值应为s=153.909064。

-34-

#include #include #include double fun(int n) { int sum,i;sum=0; for(i=0;i

{ if(i%3==0&&i%7==0) sum=sum+i;} return (sqrt(sum)); }

main( )

{ printf(\

59.请编写函数fun,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。例如,若字符串数组中的M个字符串为:AAAA BBBBBBB CC

则合并后的字符串的内容应是AAAABBBBBBBCC。 #include #include #define M 3 #define N 20

void fun(char a[M][N],char *b) { int i,j, k=0;

for(i=0;i

for(j=0;a[i][j]!='\\0';j++) b[k++]=a[i][j]; b[k]='\\0'; }

main( ) {

FILE *wf;

char w[M][N]={\

char a[100]={ \ printf(\ for(i=0;i

printf(\ printf(\ printf(\

wf=fopen(\ fprintf(wf,\ fclose(wf); }

-35-

60.请编写函数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。 #include #define N 80

int fun(int a[], int n) { int i, j=1;

for(i=1;i

if(a[j-1]!=a[i]) a[j++]=a[i]; return j; }

main( ) {

FILE *wf;

int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10}, i, n=20; printf(\ for(i=0; i

printf(\ for(i=0; i

wf=fopen(\ for(i=0; i

fprintf(wf,\ fclose(wf); }

61.请编写函数fun,该函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]中。结果在主函数中输出。

#include # define N 50 # define M 11

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

for(j=0;j

if(a[i]>=100) b[10]++; else b[a[i]/10]++;

-36-

}

double rnd() {

static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return((double)r/m); }

main( ) {

FILE *wf;

int age[N], i,d[M];

int b[N]={32,45,15,12,86,49,97,3,44,52,17,95,63}; for(i=0; i

age[i]=(int)(115*rnd()); printf(\ for(i=0; i

printf((i+1)==0? \ printf(\ fun(age,d);

for(i=0; i<10; i++)

printf(\ :M\\n\ printf(\ : M\\n\ wf=fopen(\ fun(b,d);

for(i=0; i<10; i++)

fprintf(wf,\ :M\\n\ fprintf(wf,\ : M\ fclose(wf); }

62.请编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。 #include #include #define N 80 int fun(char *s) { int i,j=0;

for(i=0;s[i]!='\\0';i++)

if(s[i]!=' '&&(s[i+1]==' '||s[i+1]=='\\0')) j++; return j; }

main( ) {

FILE *wf;

-37-

char line[N]; int num=0;

printf(\ gets(line);

num=fun(line);

printf(\ wf=fopen(\

fprintf(wf,\ fclose(wf); }

63.请编写一个函数fun,它的功能是:计算并输出给定整数n的所有因子(不包括1与自身)之和。规定n的值不大于1000。

例如,若主函数从键盘给n输入的值为856,则输出为sum=763。 #include int fun(int n) { int s=0,i;

for(i=2;i<=n-1;i++) if(n%i==0) s+=i; return s; }

main( )

{ int n,sum;

printf(\ \ scanf(\ sum=fun(n);

printf(\

64.请编写函数fun,其功能是:将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFGl2345,其中字符A的ASCII码值为奇数、…字符1的ASCII码值也为奇数、…都应当删除,其他依次类推。最后t所指的数组中的内容应是BDF24。 #include #include #include

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

for(i=0; i

if (s[i]%2==0) { t[j]=s[i] ; j++ ; } t[j]= '\\0' ; }

main( ) {

FILE *wf;

-38-

char s[100],t[100];

printf(\ scanf(\ fun(s,t);

printf(\ wf=fopen(\ fun(\ fprintf(wf,\ fclose(wf); }

65.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。 例如,当a=45,b=12,调用该函数后c=2415。

本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用10对它求余得到个位数上的数,将它除10得到十位数上的数。 #include #include

void fun ( int a, int b , long *c)

{ *c=(b)*1000+(a/10)*100+(b/10)*10+a ; } main( )

{ int a,b; long c; printf(\scanf(\fun(a,b,&c);

printf(\

66.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是ABCDEFG。 #include #include void fun(char *a) { int i,j=0;

for(i=0;a[i]!='\\0';i++) if(a[i]!='*') a[j++]=a[i]; a[j]='\\0'; }

main( )

{ FILE *wf;

char s[81],*p=\ printf(\ gets(s); fun(s);

-39-

printf(\ puts(s);

wf=fopen(\ fun(p);

fprintf(wf,\ fclose(wf);}

67.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数是strcmp)。 #include #include #include #define N 16 typedef struct { char num[10]; int s; }STRUC;

STRUC fun(STRUC *a, char *b) { int i;

STRUC str={\ for(i=0;i

if(strcmp(a[i].num,b)==0) str=a[i]; return str; }

main( ) {

FILE *wf;

STRUC s[N]={{ \ {\ {\ {\ STRUC h; char m[10]; int i;

FILE *out;

printf(\ for(i=0;i

printf(\

printf(\ }

printf(\ gets(m);

-40-

本文来源:https://www.bwwdw.com/article/g0k3.html

Top