c语言经典100

Python010

c语言经典100,第1张

您好,c语言经典100题:

程序1】

题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数

都是多少

1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去

掉不满足条件的排列.

2.程序源代码:

main()

{

int

i,j,k

printf("\n")

for(i1i<5i++)

/*以下为三重循环*/

for(j1j<5j++)

for

(k1k<5k++)

{

if

(i!k&&i!j&&j!k)

/*确保i,j,k三位互不相同*/

printf("%d,%d,%d\n",i,j,k)

}

}

【程序2】

题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%利润高

于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提

成7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于

40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于

100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数

1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型.

2.程序源代码:

main()

{

long

int

i

int

bonus1,bonus2,bonus4,bonus6,bonus10,bonus

scanf("%ld",&i)

bonus1100000*0.1bonus2bonus1+100000*0.75

bonus4bonus2+200000*0.5

bonus6bonus4+200000*0.3

bonus10bonus6+400000*0.15

if(i<100000)

bonusi*0.1

else

if(i<200000)

bonusbonus1+(i-100000)*0.075

else

if(i<400000)

bonusbonus2+(i-200000)*0.05

else

if(i<600000)

bonusbonus4+(i-400000)*0.03

else

if(i<1000000)

bonusbonus6+(i-600000)*0.015

else

bonusbonus10+(i-1000000)*0.01

printf("bonus%d",bonus)

}

【程序3】

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少

1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后

的结果满足如下条件,即是结果.请看具体分析:

2.程序源代码:

#include

"math.h"

main()

{

long

int

i,x,y,z

for

(i1i2)/*如果是闰年且月份大于2,总天数应该加一天*/

sum++

printf("it

is

the

%dth

day.",sum)}

【程序4】

题目:输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊

情况,闰年且输入月份大于3时需考虑多加一天。

2.程序源代码:

main()

{

int

day,month,year,sum,leap

printf("\nplease

input

year,month,day\n")

scanf("%d,%d,%d",&year,&month,&day)

switch(month)/*先计算某月以前月份的总天数*/

{

case

1:sum0break

case

2:sum31break

case

3:sum59break

case

4:sum90break

case

5:sum120break

case

6:sum151break

case

7:sum181break

case

8:sum212break

case

9:sum243break

case

10:sum273break

case

11:sum304break

case

12:sum334break

default:printf("data

error")break

}

sumsum+day

/*再加上某天的天数*/

if(year%4000||(year%40&&year%100!0))/*判断是不是闰年*/

leap1

else

leap0

if(leap1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/

sum++

printf("It

is

the

%dth

day.",sum)}

【程序5】

题目:输入三个整数x,y,z,请把这三个数由小到大输出.

1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,

然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小.

2.程序源代码:

main()

{

int

x,y,z,t

scanf("%d%d%d",&x,&y,&z)

if

(x>y)

{txxyyt}

/*交换x,y的值*/

if(x>z)

{tzzxxt}/*交换x,z的值*/

if(y>z)

{tyyzzt}/*交换z,y的值*/

printf("small

to

big:

%d

%d

%d\n",x,y,z)

}

【程序6】

题目:用*号输出字母c的图案.

1.程序分析:可先用'*'号在纸上写出字母c,再分行输出.

2.程序源代码:

#include

"stdio.h"

main()

{

printf("hello

c-world!\n")

printf("

****\n")

printf("

*\n")

printf("

*

\n")

printf("

****\n")

}

【程序7】

题目:输出特殊图案,请在c环境中运行,看一看,very

beautiful!

1.程序分析:字符共有256个.不同字符,图形不一样.

2.程序源代码:

#include

"stdio.h"

main()

{

char

a176,b219

printf("%c%c%c%c%c\n",b,a,a,a,b)

printf("%c%c%c%c%c\n",a,b,a,b,a)

printf("%c%c%c%c%c\n",a,a,b,a,a)

printf("%c%c%c%c%c\n",a,b,a,b,a)

printf("%c%c%c%c%c\n",b,a,a,a,b)}

【程序8】

题目:输出9*9口诀.

1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列.

2.程序源代码:

#include

"stdio.h"

main()

{

int

i,j,result

printf("\n")

for

(i1i<10i++)

{

for(j1j<10j++)

{

resulti*j

printf("%d*%d%-3d",i,j,result)/*-3d表示左对齐,占3位*/

}

printf("\n")/*每一行后换行*/

}

}

【程序9】

题目:要求输出国际象棋棋盘.

1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格.

2.程序源代码:

#include

"stdio.h"

main()

{

int

i,j

for(i0i<8i++)

{

for(j0j<8j++)

if((i+j)%20)

printf("%c%c",219,219)

else

printf("

")

printf("\n")

}

}

【程序10】

题目:打印楼梯,同时在楼梯上方打印两个笑脸.

1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数.

2.程序源代码:

#include

"stdio.h"

main()

{

int

i,j

printf("\1\1\n")/*输出两个笑脸*/

for(i1i<11i++)

{

for(j1j<ij++)

printf("%c%c",219,219)

printf("\n")

}

}

【程序11】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月

后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少

1.程序分析:

兔子的规律为数列1,1,2,3,5,8,13,21....

2.程序源代码:

main()

{

long

f1,f2

int

i

f1f21

for(i1i<20i++)

{

printf("%12ld

%12ld",f1,f2)

if(i%20)

printf("\n")/*控制输出,每行四个*/

f1f1+f2

/*前两个月加起来赋值给第三个月*/

f2f1+f2

/*前两个月加起来赋值给第三个月*/

}

}

【程序12】

题目:判断101-200之间有多少个素数,并输出所有素数.

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,

则表明此数不是素数,反之是素数.

2.程序源代码:

#include

"math.h"

main()

{

int

m,i,k,h0,leap1

printf("\n")

for(m101m<200m++)

{

ksqrt(m+1)

for(i2i<ki++)

if(m%i0)

{leap0break}

if(leap)

{printf("%-4d",m)h++

if(h%100)

printf("\n")

}

leap1

}

printf("\nthe

total

is

%d",h)

}

南开二级C语言上机100题

1、 改错题1

下列给定程序的功能是:读入一个整数(2<=k《=10000》,打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出2、3、5、7、11。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include<conio.h>

#include<stdio.h>

*******************************

IsPrime(int n) ——————去掉分号

{int i,m

m=1

for ( i=2i<ni++)

******************************

if !(n%i) ——————if (!(n%i))

{ m=0break}

return (m)

}

main()

{ int j,k

clrscr()

printf("nPlease enter an integer number between 2 and 10000:")scanf("%d",&k)

printf("nnThe prime factor(s) of %d is (are):",k)

for (j=2j<=kj++)

if ((!(k%j))&&(IsPrime(j)) printf("n %4d",j)

printf("n")

)

2、 编程题1

m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值行会,将低于平均分的分数放在below所指的数组中。

例如,但score数组的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该时4,below中的数据应为10、20、30、40。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include <conio.h>

#include <stdio.h>

#include <string.h>

int fun (int score[],int m, int below[])

{

——————int i,k=0float aver=0

for(i=0i<mi++)

aver+=(score[i])

aver/=m

for (i=0i<mi++)

if (score[i]<aver)

{below[k]=score[i]

k++

retern(k)}

}

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=0i<ni++) printf ("%d",below[i])

}

3、 改错2

下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或等于的字符一次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串为:aBcdeFgh。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#include <studio.h>

#include <string.h>

****************************************

voidfun(char *p,char *q,char *c)——去分号

***************************************

{int k=1 ——1改为0

***************************************

while(*p!=*q) —— != 改为 ||

***************************************

{if (*p<*q) c[k]=*q ——小于号改为小于等于

else c[k]=*p

if (*p) p++

if (*q) q++

k++

}

}

main()

{char a[10]="aBCDeFgh",b[10]="ABcd",c[80]={''}

fun(a,b,c)

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

printf("The string b:")puts (b)

printf("The result:")puts(c)

}

4、 改错3

下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#include <stdio.h>

#include <conio.h>

void fun (char *s)

{ int i,j

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

****************************************

if (s[i]>='0' &&s[i]<='9')

s[j]=s[i]——————j改为j++

***************************************

s[j]="\0" ——————s[j]='\0'

}

main()

{char item[80]

clrscr()

printf("\nEnter a string:")gets(item)

printf("\n\nThe string is :\%s\n",item)

fun (item)

printf("\n\nThe string of changing is :\%s\n",item)

}

5、 改错4

下列给定程序中,函数fun的功能是:分别铜级字符串中大写字母和小写字母的个数。例如,给字符串s输入:AAaaBBb123CCccccd,则应该输出结果:upper=6,lower=8。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#include <conio.h>

#include <stdio.h>

**********************************

void fun (char *s,int a, int b) ————a应为*a,b应为*b

{ while(*s)

{ if (*s>='A' &&*s<='Z')

***********************************

a++ ————(*a)++

if (*s>='a' &&*s<='z')

************************************

b++ ————(*b)++

s++

}

}

main()

{ char s[100]int upper=0,lower=0

clrscr()

printf("nPlease a string:")gets(s)

fun(s,&upper, &lower)

printf("n upper=%d lower=%dn",upper,lower)

}

6、 改错5

假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数fun的功能是:删除数列中值为x的元素。n中存放的是数列中元素的个数。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#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

if (p==n) return -1

else

{for (i=pi<ni++)

******************************************

a[i+1]=a[i] ————a[i]=a[i+1]

return n-1

}

}

main()

{int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i

n=10

printf("The original data:n")

for (i=0i<ni++) printf("%5d",w[i])

printf("nInput x (to delete):")scanf("%d",&x)

printf("Delete:%dn",x)

n=fun(w,n,x)

if (n==-1) printf("***Nor be found!***nn")

else

{printf("The data after deleted:n")

for (i=0,i<ni++) printf("%5d",w[i])printf("nn")

}

}

7、 改错6

下列给定程序中,函数fun的功能是:根据整型形参m的值,计算如下公式的值。t=1-1/2×2-1/3×3-…-1/m×m

例如,若m中的值为5,则应输出:0.536389。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include <conio.h>

#include <stdio.h>

double fun (int m)

{ double y=1.0

int i

***************************************

for (i=2i<mi++) ———— “<”改为“<=”

***************************************

y-=1/(i*i) ————“1”改为“1.0”

return(y)

}

main ()

{int n=5

clrscr()

printf("\nRhe result is %1f\n",fun(n))

}

8、 改错7

下列给定程序中,函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include <stdio.h>

#define N 20

void fun(int a[],int n)

{ int i,j,t,p

for (j=0j<n-1j++)

***************************

{p=j ——加上“;”

for (i=ji,ni++) ——j改为j+1

if (a[i]<a[p])

*********************************

p=j ——j改为i

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=0i<mi++) printf("%d",a[i])printf("\n")

fun(a,m)

printf("排序后的数据:")

for (i=0i<mi++) printf("%d",a[i])printf("\n")

}

9、 改错8(2004.7.27)

下列给定程序中,函数fun的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为eABCDFGH。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include <stdio.h>

fun(char *p)

{ char max,*qint i=0

max=p[i]

while(p[i]!=0)

{ if(max<p[i])

{max=p[i]

*******************************

p=q+i——改为q=p+i

}

i++

}

******************************

while(q<p)——q<p改为q>p

{*q=*(q-1)

q--

}

p[0]=max

}

main()

{char str[80]

printf("Enter a string:")gets(Str)

printf("\nThe original string: ")puts(Str)

fun(str)

printf("\nThe string agter moving:")puts (str)ptintf("\n\n")

}

10、 改错9(2004.7.27)

下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:

80.5 60 72 90.5 98 51.5 88 64

则低于平均分的学生人数为4(平均分为:75.5625)。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include <conio.h>

#include <stdio.h>

#define N 20

int fun (float *s,int n,float *aver)

{float ave,t=0.0

int count=0,k,i

for (k=0k<nk++)

*******************************

t=s[k]——t+=s[k]

ave=t/n

for (i=0i<ni++)

if (s[i]<ave) count++

******************************

*aver=&ave ——去掉&

return count

}

main()

{float s[30],aver

int m,i

clrscr()

printf("nPlease enter m:"scanf("%d",&m)

printf("nPlease enter %d mark:n",m)

for (i=0i<mi++) scanf("%f",s+i)

printf("nThe number of students:%dn",fun(s,m,&aver))

printf("Ave=%fn",aver)

)

11、 改错10(2004.8.1)

下列给定程序中,函数fun的功能是:将s所指字符串中出现的t1所指子串全部替换成t2所指子字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符产中的内容为abcdabfab,t1所指子串中的内容为ab,t2所指子串中的内容为99时,结果,在2

所指的数组中内容应为99cd99f99。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

int fun (char *s, char *t1,char*t2,char*w)

{

int i char *p,*r,*a

strcpy(w,s)

while(*w)

{p=wr=t1

********************************************

while(r) ——r改为*r

if(*r==*p) {r++p++}

else break

if(*r=='')

{a=wr=t2

*******************************************

while(*r){*a=*ra++r++} ——改为while(*r){*a=*ra++r++}

w+=strlen(t2)

}

else w++

}

}

main()

{

char s[100],t1[100],t2[100],w[100]

clrscr()

printf("nPlease enter string S:")scanf("%s",s)

printf("nPlease enter string t1:")scanf("%s",t1)

printf("nPlease enter string t2:")scanf("%s",t2)

if (strlen(t1)==strlen(t2))

{

printf("nThe result is :%sn",w)

}

else printf("Error:strlen(t1)!=strlen(t2)n")

}

12、 改错11(2004.8.1)

给定程序MODI1.C中,fun函数的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之积。

请改正程序中的错误,或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include <stdio.h>

int fun ()

{

int a [3] [3], sum

int i, j

***********************************

_____——sum = 1

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

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

*****************************************

scanf (〃%d〃 a [i] [j]) ——scanf("%d", &a[i][j])

}

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

sum=sum*a[i] [i]

printf (〃Sum=%dn〃, sum)

}

main ()

{fun ()}

13、 改错12(8.1)

下列程序的功能是:读入一个整数 k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数:2310,则应输出:2、3、5、7、11。

请改正程序中的语法错误,使程序能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include 〃conio.h〃

#include 〃stdio.h〃

************************************************

IsPrime ( int n )——IsPrime(int n)

{ int i, m

m = 1

for ( i = 2i <n/ i++ )

*********************************************

if !( n%i ) ——if(!(n%i))

{ m=0break }

return ( m )

}

main ()

{ int j, k

clrscr ()

printf (〃nPease enter an integer number between 2 and 10000:〃)scanf ( 〃%d〃,&k )

printf ( 〃nn The prime factor (s) of % d is ( are ):〃, k )

for ( j = 2j <= kj++ )

if ( ( ! k%j ) ) &&( IsPrime ( j ) ) }printf ( 〃n % 4d〃, j )

printf (〃n〃)

}

14、 改错13(8.4)

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

t=1+ 1/2 + 1/3 + 1/4 + … + 1/m

例如,若输入5,则应输出2.283333。

请改正程序中的语法错误,使程序能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include<conio.h>

#include<stdio.h>

double fun(int m)

{

double t=1.0

int i

for(i=2i<=mi++)

*******************************************

t+=1.0/k ——k改为i

*********************************************

____________ ——填return t

}

main()

{

int m

clrscr()

printf(“nPlease enter 1 integer number:”)

scanf(“%d”,&m)

printf(“nThe result is %1fn”,fun(m))

}

15、 改错14(8.4)

下列程序中,fun和funx函数的功能是:

用二分法求方程2x×x×x-4x×x+3x-6=0的一个根,并要求绝对误差不超过0.001。例如,若给m输入-100,给n输入90,则函数求得的一个根为2.000。

请改正程序中的语法错误,使程序能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include<stdio.h>

#include<math.h>

double funx(double x)

{

return(2*x*x*x-4*x*x+3*x-6)

}

double fun(double m, double n)

{

**************************************

int r——改为double r

r=(m+n)/2

**********************************

while(fabs(n-m)<0.001) —— "<" 改为" >= "

{if(funx(r)*funx(n)<0 m=r

else n=r

r=(m+n)/2

)

return r

)

main()

{

double m,n,root

printf("Enter m n:n")scanf("%1f%1f",&m,&n)

root=fun(m,n)

printf("root=%6.3fn",root)

}

16、 改错15(8.5)

下列给定程序中,函数fun的功能是:判断字符ch是否与str所指串中的某个字符相同;若相同,则什么也不做,若不同,则将器插在串的最后。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#include <conio.h>

#include <stdio.h>

#include <string.h>

**********************************

void fun(char str, char ch)------------------------1

{ while(*str &&*str!=ch) str++

**********************************

if (*str==ch)------------------------------------2

{ str[0]=ch

*********************************

str[1]='0'------------------------------------3

}

}

main()

{char s[81],c

clrscr()

printf("nPlease enter a string:n")gets(s)

printf("nPlease enter the character to search:")

c=getchar()

fun(s,c)

printf("nThe result is %sn",s)

}

15 题Answer:

1. void fun(char *str, char ch)

2. if (*str=='

17、 改错16(8.5)

下列给定程序中,函数Creatlink的功能是:创建带头结点的单项链表,并为各结点数据域赋0到m-1的值。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

typedef struct aa

{ int data

struct aa *next

}NODE

NODE *Creatlink(int n, int m)

{NODE *h=Null, *p,*s

int i

s=(NODE *)malloc(sizeof(NODE))

********************************************

h=p-------------------------------------1

p->next=NULL

for (i=1i<=ni++)

{s=(NODE *)malloc(sizeof(NODE))

********************************************

s->data=rand()%m-----------------------2

s->next=p->next

p->next=s

p=p->next

}

********************************************

return p--------------------------------3

}

outlink(NODE *h)

{NODE *p

p=h->next

printf("nnTHE LIST:nn HEAD")

while(p)

{printf("->%d",p->data)

p=p->next

}

printf("n")

}

main()

{ NODE *head

clrscr()

head=Creatlink(8,22)

outlink(head)

}

16 题Answer:

1. h=p=s

2. s->data=rand()%(m-1)

3. return h

18、 改错17(8.5)

下列给定程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#include <conio.h>

#include <stdio.h>

int fun(int k)

{int m=0, mc=0,j

while ((k>=2)&&(mc<10))

*********************************

{if ((k%13=0)||(k%17=0))-------------------1

{m=m+kmc++}

k--

}

return m

**********************************

_____________-------------------------------2

main()

{clrscr()

printf("%dn",fun(500))

}

17 题Answer:

1. if ((k%13==0)||(k%17==0))

2. }

19、 改错18(8.5)

下列给定程序中,函数fun的功能是:实现两个整数的交换。例如给a和b分别输入60和65,输出为:a=65 b=60

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#include <conio.h>

#include <stdio.h>

********************************

void fun (int a,b)--------------------------1

{int t

*******************************

t=bb=aa=t-------------------------------2

}

main()

{int a,b

clrscr()

printf("Enter a,b:")scanf("%d%d",&a,&b)

fun(&a,&b)

printf("a=%d b=%dn",a,b)

}

18 题Answer:

1. void fun (int *a,int *b)

2. t=*b*b=*a*a=t

20、 改错19(8.5)

下列给定程序中,函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,一次构成一个新数放在t中。例如,当s中的数为7654321时,t是的数为642。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#include <conio.h>

#include <stdio.h>

********************************

void fun (long s, long t)--------------------------1

{long sl=10

s/=10

*t=s%10

****************************

while (s<0)--------------------------------------2

{s=s/100

*t=s%10*sl+*t

sl=sl*10

}

}

main()

{long s,t

clrscr()

printf("nPlease enter s:")scanf("%ld",&s)

fun(s,&t)

printf("The result is : %ldn",t)

}

19 题Answer:

1. void fun (long s, long *t)

2. while (s>0)

21、 改错20(8.5)

N个有序整数数列已放在一堆数组中,下列给定程序中,函数fun的功能是:利用折半查找算法找整数m再数组中的位置。若找到,则返回其下标值;反之,则返回-1。

折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!

试题程序

#include <stdio.h>

#define N 10

************************************

void fun(int a[],int m)--------------------------1

{int low=0,high=N-1,mid

while(low<=high)

{mid=(low+high)/2

if (m<a[mid])

high=mid-1

***************************************

else if (m>=a[mid])----------------------------2

low=mid+1

else return(mid)

}

return(-1)

}

main()

{int i,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m

printf("a数组中的数据如下:")

for(i=0i<Ni++) 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")

}

20 题Answer:

1. int fun(int a[],int m)

2. else if (m>a[mid])

我有,不过太多了,就不放上来了。

给一些经典的。

1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人作为函数值返回,将低于平均分的分数放在below所指定的函数中。

1.int fun(int score[],int m,int below[])

{int i,k=0,aver=0

for(i-0i<mi++)

aver+=score[i]

aver/=m

for(i=0,i<mi++)

if(score[i]<aver)

{below[k]=score[i]

k++}

return k}

2.请编写函数fun,它的功能是:求出1到100之内能北7或者11整除,但不能同时北7和11整除的所有证书,并将他们放在a所指的数组中,通过n返回这些数的个数。

2.void fun(int *a,int *n)

{int i,j=0

for(i=2i<1000i++)

if((i%7==0//i%11==0))&i%77!=0)

a[j++]=i

*n=j}

3.请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。

3. void fun(int x, int pp[],int *n)

{int i=1,j=0,k=0,*t=pp

for(i=0i<=xi++)

if(i%2!=0)

{t[j]=i

j++}

for(i=0i<ji++)

if(x%t[i]==0)

{pp[k]=t[i]

k++}

*n=k}

4.请编写一个函数void fun(char *tt,int pp[]),统计在tt字符中"a"到"z"26各字母各自出现的次数,并依次放在pp所指的数组中。

4. void fun(char *tt,int pp[])

{int i

for(i=0i<26i++)

pp[i]=0

while (*tt)

{switch(*tt)

{case'a':pp[0]++break

case'b':pp[1]++break

case'c':pp[2]++break

case'd':pp[3]++break

case'e':pp[4]++break

case'f':pp[5]++break

case'g':pp[6]++break

case'h':pp[7]++break

case'i':pp[8]++break

case'j':pp[9]++break

case'k':pp[10]++break

case'l':pp[11]++break

case'm':pp[12]++break

case'n':pp[13]++break

case'o':pp[14]++break

case'p':pp[15]++break

case'q':pp[16]++break

case'r':pp[17]++break

case's':pp[18]++break

case't':pp[19]++break

case'u':pp[20]++break

case'v':pp[21]++break

case'w':pp[22]++break

case'x':pp[23]++break

case'y':pp[24]++break

case'z':pp[25]++break}

tt++}

}

5.请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k各素数存入xx所指的数组中。

5. void fun(int m,int k,int xx[])

{int g=0,i,j,flag=1

for(i=m+1i<m*mi++)

{for(j=2j<ij++)

{if (i%j!=0)

flag=1

else

{flag=0

break}

}

if (flag==1&j>=i)

{if (k>0)

{xx[g++]=i

k--}

else

break}}}

6.请编写一个函数void fun(char a[],char[],int n),其功能是:删除以各字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。

6. void fun(char a[],char b[],int n)

{int i,j=0

for (i=0i<LENi++)

if(i!=n)

{b[j]=a[i]

j++}

b[j]='\0'}

7.请编写一个函数int fun(int *s,int t,int *k),用来求除数组的最大元素在数组中的下标并存放在k所指的储存单元中。

7. void fun(int *s,int t,int*k)

{int i,max

max=s[0]

for (i=0i<ti++)

if (s[i]>max)

{max=s[i]

*k=i}}

8.编写函数fun,功能是:根据以下攻势计算s,计算结果作为函数值返回;n通过形参传入。s=1+1/(1+2)+1/(1+2+3)+.......+1/(1+2+3+4+......+n)

8. float fun(int n)

{int i

float s=1.0,t=1.0

for (i=2i<=ni++)

{t=t+i

s=s+1/t}

return s}

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

9. p=m!/n!(m-n)!

float fun(int m,int n)

{float p,t=1.0

int i

for (i=1i<=mi++)

t=t*i

p=t

for (t=1.0,i=1i<=ni++)

t=t*i

p=p/t

for(t=1.0,i=1i<m-ni++)

t=t*i

p=p/t

return p}

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

迭代步骤如下:(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。

10. folat fun()

{float x1=0.0,x0

do

{x0=x1

x1=cos(x0)}

while (fabs(x0-x1)>=1e-6)

return x1}

11.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数 fun(int a[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。

11. int fun(int a[][N])

{int i,j

for(i=0i<Ni++)

for(j=0j<ij++)

a[i][j]=0}

12.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s。

12.double fun (int w[][N])

{int i,j,k=0

double s=0.0

for (j=0j<Nj++)

{s+=w[0][j]

k++}

for (j=0j<Nj++)

{s+=w[N-1][j]

k++}

for (i=1i<=N-2i++)

{s+=w[i][0]

k++}

return s/=k}

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

13. void fun(int tt[M][N],int pp[N])

{int i,j,min

for (j=0j<Nj++)

{min=tt[0][j]

for (i=0i<Mi++)

{if (tt[i][j]<min)

min=tt[i][j]}

pp[j]=min}}

14.请别写函数fun,函数的功能使求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。

14. int fun (int a[M][N])

{int i,j,s=0

for (j=0j<Nj++)

{s+=a[0][j]

s+=a[M-1][j]}

for (i=1i<=M-2i++)

{s+=a[i][0]

s+=a[i][N-1]}

return s}

15.请编写一个函数unsigned fun(unsigned w),w使一个大于10的无符号整数,若w使n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回。

15. unsigned fun(unsigned w)

{unsigned t,s=0,s1=1,p=0

t=w

while(t>10)

{if(t/10)

p=t%10

s=s+p*s1

s1=s1*10

t=t/10}

return s}

16.请编写一个函数float fun(double h),函数的功能使对变量h中的值保留2位小树,并对第三位进行四舍五入(规定h中的值位正数)。

16. float fun (float h)

{long t

float s

h=h*1000

t=(h+5)/10

s=(float)t/100.0

return s}

17.请编写一个函数fun(char *s),该函数的功能使把字符串中的内容拟置。

17. void fun(char *s)

{char ch

int i,m,n

i=0

m=n=strlen(s)-1

while(i<(n+1)/2)

{ch=s[i]

s[i]=s[m]

s[m]=ch

i++

m--}}

18.编写程序,实现矩阵(3行3列)的转置(即行列互换)。

18. void fun(int array[3][3])

{int i,j,temp

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

{temp=array[i][j]

array[i][j]=array[j][i]

array[j][i]=temp}}

19.编写函数fun,该函数的功能是:从字符中删除指定的字符,同一字母的大、小写按不同字符处理。

19. void fun(char s[],int c)

{int i=0

char*p

p=s

while(*p)

{if(*p!=c)

{s[i]=*p

i++}

p++}

s[i]='\0'}

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

20. int fun(int lim,int aa[MAX])

{int k=0,i,j

for(i=limi>1i--)

{for(j=2j<ij++)

if(i%j==0)

break

else

continue

if(j>=i)

{aa[k]=i

k++}}

return k++}

21.请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ASCII码降序排列。

21.void fun(char *s,int num)

{char t

int i,j

for (i=1i<num-2i++)

for (j=i+1j<num-1j++)

if(s[i]<s[j])

{t=s[i]

s[i]=s[j]

s[j]=t}}

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

22. double fun (STREC *h)

{ double max

STREC *q=h

max=h->s

do

{if(q->s>max)

max=q->s

q=q->next}

while(q!=0)

return max}

23.请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出YES,否则返回0,主函数中输出NO。回文是指顺读和倒读都是一样的字符串。

23. int fun(char *str)

{int i,n=0,fg=1

char *p=str

while (*p)

{n++

p++}

for (i=0i<n/2i++)

if (str[i]==str[n-1-i])

else

{fg=0

break}

return fg}

24.请编写一个函数fun,它的功能是:将一个字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。

24. long fun(char *p)

{long s=0,t

int i=0,j,n=strlen(p),k,s1

if(p[0]=='-')

i++

for(j=ij<=n-1j++)

{t=p[j]-'0'

s1=10

for (k=jk<n-1k++)

t*=s1

s+=t}

if(p[0]=='-')

return -s

else

return s}

25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。

25. char *fun(char *s,char *t)

{char *p,*t1=t,*s1=s

int n=0,m=0

while(*s1)

{n++

s1++}

while(*t1)

{m++

t1++}

if(n>=m)

p=s

else

p=t

return p}

26.请编写一个函数fun,它的功能是:根据以下公式求X的值(要求满足精度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...。

26. double fun(double eps)

{double s

float n,t,pi

t=1pi=0n=1.0s=1.0

while((fabs(s))>=eps)

{pi+=s

t=n/(2*n+1)

s*=t

n++}

pi=pi*2

return pi}

27.请编写一个函数fun,它的功能是:求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

27.void fun(int m,int *a,int *n)

{int i,j*n=0

for(i=1i<=mi++)

if(i%7==0//i%11==0)

{a[j]=i

j++}

*n=j}

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

28. void fun(int a[],int n, int *max,int *d)

{int i

*max=a[0]

*d=0

for(i=0i<ni++)

if(a[i]>*max)

{*max=a[i]

*d=i}}

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

29. void fun(char *ss)

{int i,n

n=strlen(ss)

for(i=1i<ni+=2)

if(ss[i]>='a'&&ss[i]<='z')

ss[i]=ss[i]-32}

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

30. int fun(int a[][M])

{int i,j,max

max=a[0][0]

for(i=0i<2i++)

for(j=0j<Mj++)

if(a[i][j]>max)

max=a[i][j]

return max}

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

31. void fun(char *s,char t[])

{int i,j,n

n=strlen(s)

for(i=0i<ni++)

if(i%2==0&s[i]%2==0)

{t[j]=s[j]

j++}

t[j]='\0'}

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

32. void fun(char *s,char t[])

{int i,j=0,n

n=strlen(s)

for(i=0i<ni++)

if(i%2!=0&s[i]%2!=0)

{t[j]=s[j]

j++}

t[j]='\0'}

33.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。

33. 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<t+n)

{a[i]=*p

i++

p++}

a[i]='\0'}}

34.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能使:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。

34. int fun(STREC*a,STREC *b)

{int i,j=0,max

max=a[0].s

for(i=0i<Ni++)

if(a[i].s==max)

{*(b+j)=a[i]

j++

n++}

return n}

35.请编写一个函数,用来删除字符串中的所有空格。

35. void fun(char *str)

{int i=0

char *p=str

while(*p)

{if(*p!='')

{str[i]=*p

i++}

p++}

str[i]='\0'}

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

36. 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++

i--}

a[i]='\0'}

37.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。

37. void fun(STREC *p)

{double av=0.0

int i

for(i=0i<Ni++)

av+=p->s[i]

av/=N

p->ave=av}

38.请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。

38. int fun(char *ss,char c)

{int n=0

while(*ss)

{if(*ss==c)

n++

ss++}

return n}

39.请编写函数fun,该函数的功能是:移动一维数组中的内容,若数组中由n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。

39. void fun(int *w,int p,int n)

{int b[N],i,j=0

for(i=0i<=pi++)

b[i]=w[i]

for(i=p+1i<ni++)

{w[j]=w[i]

j++}

for(i=0i<=pi++)

{w[j]=b[i]

j++}}

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

40.void fun(char *w,int m)

{char b[N]

int i,j=0

for(i=0i<mi++)

{b[j]=w[i]

j++}

for(i=0i<strlen(w)-mi++)

w[i]=w[i+m]

for(j=0j<mj++)

{w[i]=b[j]

i++}

w[i]='\0'}

41.请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

41. void fun(char (*s)[N],char *b)

{int i,j,k=0

for(j=0j<nj++)

for(i=0i<Mi++)

{b[k]=*(*(s+i)+j)

k++}

b[k]='\0'}

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

42. void fun(int a[][N],int m)

{int i,j

for(j=0j<Nj++)

for(i=0i<=ji++)

a[i][j]=a[i][j]*m}

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

43. char *fun(char (*a)[81],int num)

{int i

char *max

max=a[0]

for(i=0i<numi++)

if(strlen(max)<strlen(a[i]))

max=a[i]

return max}

44.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。

44. int fun(char *str,char *substr)

{int n

char *p,*r

n=0

while(*str)

{p=str

r=substr

while(*r)

if(*r==*p)

{r++

p++}

else

break

if(*r=='\0')

n++

str++}

return n}

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

45.void fun(char *a,int n,int h,int e)

{int i=0

char *p

for(p=a+hp<a+n-ep++)

{*(a+i)=*p

i++}

*(a+i)='\0'}

46.学生得记录由学号和成绩组称个,N名大学生得数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能时:按分数的高低排列学生的记录,高分在前。

46. void fun(STREC a[])

{int i,j

STREC t

for(i=0i<N-1i++)

for(j=is<Nj++)

if(a[i].s<a[j].s)

{t=a[i]

a[i]=a[j]

a[j]=t}}

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

47. void fun(char *ss)

{int i,n=0

char *p=ss

while(*p)

{n++

p++}

for (i=0i<ni++)

if ((ss[i]='a'&ss[i]<='z')

ss[i]=ss[i]-32

ss[i]='\0'}

48.请编写函数fun,其功能是:将两个两位数的正整数a,b合并成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。

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

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

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

49. void fun(char *s,char t[])

{int i,j=0,n=strlen(s)

for(i=0i<ni++)

if(i%2==0&s[i]%2!=0)

else

{f[j]=s[i]

j++}

t[j]='\0'}

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

50. void fun(STU a[],STU *s)

{int i,max

max=a[0].s

for (i=0i<Ni++)

if(a[i].s>max)

{max=a[i].s

*s=a[i]}}

51.请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指的数组中,非素数的个数通过k传回。

51. void fun(int m,int *k,int xx[])

{int i,j

int t=0

for(i=2i<mi++)

{j=2

while(j<i)

{if(i%j==0)

{xx[t]=i

t++

break}

j++}

*k=t}}

52.编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。

52. void fun(char p1[],char p2[])

{int i=0,n=0

char *p=p1,*q=p2

while (*p)

{p++

n++}

i=n

while(*p)

{p1[i]=*q

q++

i++}

p1[i]='\0'}

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

53. void fun(int a[3][3],int b[3][3])

{int i,j,at[3][3]

for(i=0i<=2i++)

for(j=0j<=2j++)

at[i][j]=a[j][i]

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

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

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

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

54. double fun(STREC *a, STREC *b,int *n)

{double aver=0.0

int i,j=0

*n=0

for (i=0i<Ni++)

aver+=a[i].s

aver/=N

for(i=0i<Ni++)

if(a[i].s<aver)

{b[j]=a[i]

(*n)++

j++}

return aver}