海大c程上机题附答案及附加题

更新时间:2024-05-03 02:57:01 阅读量: 综合文库 文档下载

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

1. 编写函数long fun(long x),它的功能是:将长整型参数x中每一位上为偶数的数依次取出,构成一个新数返回。高位仍在高位,低位仍在低位。例如:下面程序运行时输入:124578902,程序输出:24802. #include long fun(long x) { long i,m,sum=0; int j=0,n; for(i=x;i>0;) { m=i; i=i/10; if(m%2==0) { j++;

for(n=1;n

return sum; }

void main() { long a,b;

printf(\ scanf(\ b=fun(a); printf(\}

2. 编写函数void fun(int k,int *p),功能是:将参数k(2≤k≤32767)所有的不相同质因子升序写入p所指的一维数组中,以-1作为所有质因子的结束标志。例如:下面程序运行时若输入200,输出:2 5;若输入27720,输出:2 3 5 7 11;若输入101,输出101。 #include #include void fun(int k,int *p) { int i,j,t=0; double b; for(i=2;i<=k;i++) 先判断是不是质数,在判断是不是因子。 { b=sqrt(i); for(j=2;j<=b;j++) if(i%j==0)break; if(j>b&&k%i==0) { p[t]=i; t++; } p[t]=-1; } }

void main() { int x,a[17]={0},i; do{ printf(\ scanf(\ }while(x<2); fun(x,a); for(i=0;a[i]!=-1;i++) printf(\ printf(\}

3. 编写函数void fun(int *x,int n),功能是:求出长度为n的数组x中的最大数与次最大数,并把最大数和a[0]对调,次最大数与a[1]对调,其余的数保持不变。下面程序运行时若输入:2 4 6 1 3 9 7 0 5 8,则输出:9 8 6 1 3 2 7 0 5 4。 #include #define N 10

void fun(int *x,int n) { int i,j,k,t; for(i=0;i<2;i++) { k=i;

for(j=i+1;jx[k]) { k=j; }

t=x[k]; x[k]=x[i]; x[i]=t; } }

void main() { int a[N],i; for(i=0;i

采用打擂台法,找到最大数的下标。 4. 数组x中保存有n个整数, 编写函数int fun(int *x,int n,float *w),对数组x进行如下操作:从第0个元素起对每5个元素求一个平均埴,并将这些均值依次存放在w所指的数组中。函数返回平均值的个数。例如:若输入n为14,14个数据为:11 21 35 24 55 16 27 58 18 0 11 12 13 14,则只为前10个求均值,输出结果为:29.20 23.80 #include

int fun(int *x,int n,float *w) { int num=n/5; 注意每个数的类型, int temp=0; int i; for(i=0;i

void main() { int a[30],i,n,m; float b[6]; printf(\ scanf(\ for(i=0;i

m=fun(a,n,b); for(i=0;i

printf(\}

5. 编写函数int fun(int x,long int y),功能:计算满足表达式x0+x1+x2+...+xn int fun(int x,long int y) { int i; long sum=0,k=1;

for(i=0;sum

return i-2; }

void main() { int x;long y; scanf(\ printf(\}

6. 编写函数int fun(char (*ss)[N],int m,char *s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最长的字符串,复制到s所指的字符数组中,然后返回此最长字符串的长度。 #include #include #define N 30

int fun(char (*ss)[N],int m,char *s) {

int i,j,t=0,x;

for(j=0;jt) {x=j;t=i;}} for(i=0;i

return(t); }

void main()

{ char a[8][N],b[N]; int i,len; for(i=0;i<8;i++) gets(a[i]); len=fun(a,8,b); printf(\

}

7. 编写函数int countw(char *str),统计字符串str中单词的个数。单词之间以空格,逗号,句号作分隔,数字也看做单词。单词之间可能不止一个分隔符。如输入: It's 10:10 o'clock ,I am late.屏幕上输出\ #include int countw(char *str) { int w=0,i,k=0;

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

if(str[i]==' '||str[i]==','||str[i]=='.') { w=0; 前面一个是‘ ’或‘,’或‘。’且后面一个为 } 字母或数字就可以说明有一个单词。

Else

if(w==0) { w=1; k++; }

return k; }

void main() { char s[200]; gets(s); printf(\}

8. 编写函数void fun(char *str),功能:字符串str中单词以空格作分隔,如果单词之间不止一个空格,则删除多余的空格,使单词之间只保留一个空格。字符串开始的空格也只保留一个。例如,程序运行时若输入: It's 10:10 o'clock , I am late. 输出: It's 10:10 o'clock , I am late. #include void fun(char *str) { int i,t; for(i=0;str[i]!='\\0';i++) if(str[i]==' '&&str[i+1]==' ') { for(t=i+1;str[t]!='\\0';t++) str[t]=str[t+1]; str[t+1]='\\0'; i--; } }

void main() { char s[100]; puts(\ gets(s); fun(s); puts(s); }

发现两个空格则将后面的前移,前移后注意i后退一 位。

9. 函数void fun(int x,int k,int *p)的功能是:求出比x大的最初k(k<1000)个素数,放入p所指数组中。例如:程序运行时输入:10 10,输出:11 13 17 19 23 29 31 37 41 43 #include #include

void fun(int x,int k,int *p) { int t=0; long i,j; double m; if(x>=1) for(i=x+1;tm) { p[t]=i; t++; } } else for(i=2;tm) { p[t]=i; t++; } } }

void main() { int a,b,n[1000],i; scanf(\ fun(a,b,n); for(i=0;i

}

{ printf(\}

puts(\

10. 编写函数int fun(int a,int b),在[a,b]范围内统计满足下面条件的数的个数。条件:该数是素数,且该数逆序后形成的数也是素数。例如,在[100,150]范围内101 107 113 131 149 满足条件,则下面程序运行时输入100 150,输出:num=5。 #include #include int fun(int a,int b) { int i,j,c,k=0,w,n,sum; double m,d; for(i=a;i<=b;i++) { m=sqrt(i); for(j=2;j<=m;j++) if(i%j==0)break; if(j>m)

{

for(w=i,sum=0;w>0;) { c=w; sum=10*sum+c; w=w/10; } d=sqrt(sum); for(n=2;n<=d;n++) if(sum%n==0)break; if(n>d) { k++; } } } return k; }

void main() { int num,a,b; scanf(\ num=fun(a,b); printf(\}

判断原数是不是质数 倒序 倒序后是不是质数

11. 编写函数void fun(char *s),功能:在s所指字符串中每两个字母之间加一个*,其余字符保持不变。

例如,下面程序运行时,若输入:I had 123_book. 输出:I h*a*d 123_b*o*o*k. #include #include void fun(char *s) { int i,j,L; L=strlen(s); for(i=1;i='a' && s[i] <='z' || s[i] >='A' && s[i] <='Z' ) && (s[i-1] >='a' && s[i-1] <='z' || s[i-1] >='A' && s[i-1] <='Z' )) { for(j=L;j>=i;j--) s[j+1]=s[j]; s[i]='*'; L++; } }

void main() { char x[80]; gets(x); fun(x); puts(x); }

12. 编写函数int fun(int k),功能:从5个红球, 6个白球,7个黑球中任意取出k(2≤k≤18)个球作为一组进行组合。在每组中,可以没有红球和白球,但必须要有黑球。不同组合的数目作为函数值返回。例如,若k为8时,正确的组合数是31;若k为2时,正确的组合数是3;或k为3时,正确的组合数是6 。 #include int fun(int k) { int red,white,black; int sum=0,temp; for(black=1;black<=7;black++) for(white=0;white<=6;white++) for(red=0;red<=5;red++) { temp=black+white+red; if(temp==k)sum++; }

return sum; }

void main() { int x,n;

scanf(\ n=fun(x);

printf(\}

13. 编写函数void fun(char *str),功能:对形参str所指字符串中的字符按ASCII码升序排序。例如,下面程序运行时输入:The C Programming Language<回车> 输出: CLPTaaaeegggghimmnnorru #include void fun(char *str) { int i,j,k=0; char c; for(i=0;str[i]!='\\0';i++) { k=i; for(j=i+1;str[j]!='\\0';j++) if(str[j]

void main() { char s[100]; gets(s); fun(s); puts(s); }

也可以采用冒泡法进行排序。 这里用的是换位法排序。

14. 请编写函数void fun(int *a, int n, int y),它的功能是:把y值插入到有n个数的a数组中,a数组中的数已按由大到小的次序排好,y的值从键盘读入。 插入后,数组中的数仍然有序。对照下面三种情况运行程序:

1) 插在最前 2) 插在最后 3) 插在中间 若输入数11, 输出 20 18 16 14 12 11 10 8 6 4 2 输入数1, 输出 20 18 16 14 12 10 8 6 4 2 1 输入数33, 输出 33 20 18 16 14 12 10 8 6 4 2 #include

void fun(int *a,int n,int y) { int i,j,t; a[n]=y; 将要插入的数放到最后,然后整体用冒泡法排序。 for(i=0;ivoid main() { int i,a[11]={20,18,16,14,12,10,8,6,4,2},x; void fun(int *,int n,int y); scanf(\ fun(a,10,x); for(i=0;i<11;i++) printf(\}

15. 编写函数int fun(char *s1,char *s2),在字符串s1中统计字符串s2出现的次数并返回。若s2在s1中未出现,则返回0。例如:

若输入的字符串s1为:abaaAabcaabbabca,字符串s2为:ab ,则程序输出:n=4 若输入的字符串s1为:abaaAabcaabbabca,字符串s2为:abd,则程序输出:No find #include #include

int fun(char *s1,char *s2) {

int i,j,m=0,n=0;

for(i=0;i

if(m==0) n++;

m=0; }

return n; }

void main()

{ char a[80],b[40]; int n;

printf(\ gets(a);

printf(\ gets(b); n=fun(a,b); if(n==0) printf(\ else printf(\}

i+j是为了再返回原来的起点。。。 每使用完一次m要将其归0.

16. 编写函数int fun(char *str),功能是:统计字符串str中不同字符的个数并做为函数值返回。例如,下面程序运行时若输入:One world,One dream! 输出:n=13 #include int fun(char *str) { int i,j,k=0; for(i=0;str[i];i++) { for(j=0;j=i)k++; } return k; }

void main() { char s[80]; int n; gets(s); n=fun(s); printf(\}

采用嵌套循环,将每一个数和它前面的进行比较,如果没有重复则加一。

17. 编写函数int fun(int m,int n,int *p),要求将范围[m,n]之间所有的fibonacci数写入p所指的一维数组中,fibonacci数的个数通过函数返回值带回。例如,[0,30]之间的fibonacci数有7个,它们是:1 2 3 5 8 13 21 ;[1000,32767]之间有7个,它们是:1597 2584 6765 10946 17711 28657 。

#include

int fun(int m,int n,int *p) { int t,num=0; long f,f1=1,f2=1; if(m>n){t=m;m=n;n=t;} for(f=1,t=0;f<=n;) { if(f>=m) { p[t]=f;t++;num++; } f1=f2; f2=f ; f=f1+f2; }

return num; }

void main() { int a,b,n,c[22],i; scanf(\ n=fun(a,b,c); for(i=0;i

18. 编写函数char *fun(char *s1,char *s2,int n),将字符串s1中后面的n个字符复制到s2所指数组中,若s1不足n个字符,则用*在前端补齐至n个字符,写入s2中。函数返回字符串s2的指针。例如,下面程序运行时, 若输入:“abcd1234”和6,则输出“cd1234” 若输入:“abcd1234”和10,则输出“**abcd1234” #include #include

char *fun(char *s1,char *s2,int n) { int i,k; k=strlen(s1); if(n=n) s1[i]='\\0'; } strcpy(s2,s1); if(n==k) strcpy(s2,s1); if(n>k) { for(i=n-1;i>=0;i--) { s1[i]=s1[i-n+k]; if(i<=n-k-1) s1[i]='*'; } s1[n]='\\0'; } strcpy(s2,s1); return s2; }

void main() { char c1[80],c2[80]; int n; gets(c1);

}

scanf(\fun(c1,c2,n); puts(c2);

19. 编写函数void fun(char *s,char *b,char *c),逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgH。 #include #include

void fun(char *a,char *b,char *c) { int i,l,m,k=0; if(strlen(a)>strlen(b))

{l=strlen(a);m=strlen(b);} else {m=strlen(a);l=strlen(b);k=1;} for(i=0;i=b[i]) c[i]=a[i]; else c[i]=b[i]; } if(k==0)

for(;i

for(;i

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

void main() { char s1[80],s2[80],s3[80]; gets(s1); gets(s2); fun(s1,s2,s3); puts(s3); }

20. 编写函数void fun(char *s),将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符和非数字字符原有的前后次序。

例如,若输入:num is 0532-66ouc78,OK. 执行结果为:num is -ouc,OK.05326678 #include #include

void swap(char *a,char *b) { char temp; temp=*a; *a=*b; *b=temp; }

void fun(char *s) { char i; int n; int num,m=0,o=0; num=strlen(s); for (i=0;s[i]!='\\0';i++) { if ((s[i]>='0') && (s[i]<='9')) m++; } for (i=0;s[i]!='\\0';i++) {

if ((s[i]>='0') && (s[i]<='9')) { o++; if(o>m) break;

for (n=i;n+1

swap(&s[n],&s[n+1]); } i--; }

} }

void main() {

}

char a[80]; gets(a); fun(a); puts(a);

选做1:编写函数int fun(char *str,char ch),统计字符串str中指定字符ch的个数,统计结果作为函数返回值带回。 #include #include

int fun(char *str,char ch) { int i=0,k,j; k=strlen(str); for(j=0;j

if(ch==str[j])i++; }

return(i); }

void main() { char a[100],b; puts(\ gets(a); puts(\ b=getchar(); printf(\}

选做2 编写函数float fun(int m),功能是:根据正整型形参m,计算如下公式的值:

y=1-1/2+1/3-1/4+1/5...+(-)1/m ,该值作为函数返回值。 #include #include float fun(int m) {

float s=0; int i=1;

for(i=1;i

if (i%2 == 0) { printf(\ } else { printf(\ } }

printf(\ }

void main() {int x;

scanf(\ fun(x); }

选做3. 编写函数 int fun(int (*p)[N],int m),功能:计算m行N列的二维数组外 围各数据之和。例如,下面程序输出:57 #include #define N 5

int fun(int (*p)[N],int m) {

int s=0,i;

for(i=0;i

for(i=1;i

return(s); }

void main()

{ int a[4][N]={{3,2,5,4,2},{6,2,3,9,1},{4,6,1,8,6},{7,6,5,4,2}}; printf(\ }

选做4. 编写函数 int fun(float *p,int n) ,功能:统计有n个数据的一维数组p中

大于平均值的数组元素个数。例如,若输入:3 5 6 1 2 8 9 6 输出:n=4 #include int fun(float *p,int n) {

int i,s=0,j=0; float a;

for(i=0;i

a=s/n;

for(i=0;ia) j++; }

return(j); }

void main()

{ float a[8];int n,i; for(i=0;i<8;i++) scanf(\ n=fun(a,8); printf(\ }

选做5.编写函数 float fun(float *p,int n) ,功能:计算有n个数据的一维数组p 的平均值并返回。例如,若输入:3 5 6 1 2 8 9 6 输出: average=5.00

注:部分程序代码在 d:\\学号\\T2.C 文件中,请启动TC程序完成本题。 #include

float fun(float *p, int n) { int i; float sum = 0; for (i = 0;i < n;i++) { sum+=p[i]; } return sum/n; }

void main() { float a[8]; int i = 0; for (i = 0; i < 8 ;i++) { scanf(\ } printf(\

}

选做6 编写函数void fun(char *str), 功能: 对字符串str进行逆序操作. 例如,下面程序运行时若输入:abcd12 ,则逆序后输出:21dcba

注:部分程序代码在 d:\\学号\\T2.C 文件中,请启动TC程序完成本题。 #include #include void fun(char *str) {

int i = 0,end = 0; char temp;

while (str[end] != '\\0' ) { end++; }

end--;

for (i = 0;i<(end/2)+1;i++) { temp = str[i]; str[i] = str[end-i]; str[end-i] = temp; } }

main()

{char a[80]; gets(a); fun(a); puts(a); }

选做7.编写函数 unsigned fun(unsigned x,unsigned y),计算参数x,y的最大公约数并返回。 x,y

互质时返回1。例如:若输入121 88 ,输出:11;若输入 39 28 ,输出1 注:部分程序代码在 d:\\学号\\T2.C 文件中,请启动TC程序完成本题。 #include

unsigned fun(unsigned x,unsigned y) { unsigned z; if (x

while (z>1)

{ if (x%z == 0 && y%z ==0) { return z; } z--; } return z; }

main() {int a,b;

scanf(\

printf(\ }

选做8. 一球从h米高度自由落下,每次落地后反弹回原高度的一半,再落下。编写函数 float fun(float h,int n),计算小球从h米原始高度开始,第n次触地后反弹

的高度,并作为函数值返回。 例如,当 h=100,n=2 时,函数返回 25.00

注:部分程序代码在 d:\\学号\\T2.C 文件中,请启动TC程序完成本题。 #include float fun(float h,int n) { int i; for (i = 1 ; i<=n ; i++) { h = h / 2; } return h; }

main()

{float high;int t;

scanf(\

printf(\ }

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

Top