海大c程上机题附答案及附加题-14页文档资料

海大c程上机题附答案及附加题-14页文档资料
海大c程上机题附答案及附加题-14页文档资料

1. 编写函数long fun(long x),它的功能是:将长整型参数x中每一位上为偶数的数依次取出,构成一个新数返回。高位仍在高位,低位仍在低位。例如:下面程序运行时输入:124578902,程序输出:2480

2.

#include

long fun(long x)

long i,m,sum=0;

int j=0,n;

for(i=x;i>0;)

m=i%10;

i=i/10;

if(m%2==0)

j++;

for(n=1;n

m=m*10;

sum+=m;

return sum;

void main()

long a,b;

printf("Enter a number:");

scanf("%ld",&a);

b=fun(a);

printf("b=%ld\n",b);

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("Enter a number(2-32767):");

scanf("%d",&x);

}while(x<2);

fun(x,a);

for(i=0;a[i]!=-1;i++)

printf("%d ",a[i]);

printf("\n");

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;j

if(x[j]>x[k])

k=j;

t=x[k];

x[k]=x[i];

x[i]=t;

void main()

int a[N],i;

for(i=0;i

scanf("%d",a+i);

fun(a,N);

for(i=0;i

printf("%d ",a[i]);

printf("\n");

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

temp=5*i;

w[i]=(float)(x[temp]+x[temp+1]+x[temp+2]+x[temp+3]+x[temp+4])/5;

return num;

void main()

int a[30],i,n,m;

float b[6];

printf("Input a number: ");

scanf("%d ",&n);

for(i=0;i

scanf("%d",&a[i]);

m=fun(a,n,b);

for(i=0;i

printf("%0.2f ",b[i]);

printf("\n");

5. 编写函数int fun(int x,long int y),功能:计算满足表达式x0+x1+x2+...+x n

#include

int fun(int x,long int y)

int i;

long sum=0,k=1;

for(i=0;sum

sum+=k;

k=k*x;

return i-2;

void main()

int x;long y;

scanf("%d%ld",&x,&y);

printf("n=%d\n",fun(x,y));

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;j

{for(i=0;ss[j][i]!=0;i++);

if(i>t) {x=j;t=i;}}

for(i=0;i

s[i]=ss[x][i];

s[i]='\0';

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("len=%d,str=%s\n",len,b);

7. 编写函数int countw(char *str),统计字符串str中单词的个数。单词之间以空格,逗号,句号作分隔,数字也看做单词。单词之间可能不止一个分隔符。如输入:

It's 10:10 o'clock ,I am late.屏幕上输出"There are 6 words."

#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("There are %d words.\n",countw(s));

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++) 发现两个空格则将后面的前移,前移后注意i后退一

str[t]=str[t+1]; 位。

str[t+1]='\0';

i--;

void main()

char s[100];

puts("Enter a string:");

gets(s);

fun(s);

puts(s);

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;t

m=sqrt(i);

for(j=2;j<=m;j++)

if(i%j==0)break;

if(j>m)

p[t]=i;

t++;

else

for(i=2;t

m=sqrt(i);

for(j=2;j<=m;j++)

if(i%j==0)break;

if(j>m)

p[t]=i;

t++;

void main()

int a,b,n[1000],i;

scanf("%d%d",&a,&b);

fun(a,b,n);

for(i=0;i

printf("%d ",n[i]);

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%10;

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("%d%d",&a,&b);

num=fun(a,b);

printf("num=%d\n",num);

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

if ( (s[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("%d",&x);

n=fun(x);

printf("n=%d\n",n);

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]

if(k!=i)

c=str[i];

str[i]=str[k];

str[k]=c;

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;i

for(j=0;j

if(a[j]

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

void main()

int i,a[11]={20,18,16,14,12,10,8,6,4,2},x;

void fun(int *,int n,int y);

scanf("%d",&x);

fun(a,10,x);

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

printf("%d ",*(a+i));

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

相关主题
相关文档
最新文档