上机考试题2011秋季学期(验证正确) 联系客服

发布时间 : 星期五 文章上机考试题2011秋季学期(验证正确)更新完毕开始阅读407569320b4c2e3f5727636a

《C程序设计》课程期末上机考试 考试时间:50分钟 考试方式:从下面的20题中随机抽取一题,再附加一题,共需完成2道题。附加题不事先给定

分值分配:第一题60分,第二题40分,共100分

考试时间:第十八周

1. 编写函数long fun(long x),它的功能是:将长整型参数x中每一位上为偶数的数依次取 #include

void fun(int k,int *p) { int i,j,x=0;

for(i=2;i<=k;i++) { if(k%i==0) {

for(j=2;j<=i;j++) {if(i%j==0) break;}

if(j>=i) 出,构成一个新数返回。高位仍在高位,低位仍在低位。例如:下面程序运行时输入:124578902,程序输出:24802. #include long fun(long x) {

int i=0,m,a[20]; long b=0; do {

m=x; if(m%2==0) {

a[i]=m; i=i+1; } }

while((x/=10)!=0);

for(i=i-1;i>=0;i--) {

b=b*10+a[i]; }

return b; }

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。

{p[x]=i;x++;} } }

for(i=x;i<17;i++)

p[i]=-1;

} int i,j,x=0;

for(i=2;i<=k;i++) {

if(k%i==0) {

for(j=2;j<=i;j++) {if(i%j==0) break;} if(j>=i) {p[x]=i;x++;} } }

for(i=x;i<17;i++) p[i]=-1; void main()

{ int x,a[17]={0},i;

do{ printf(\a number(2-32767):\ 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。

1

#include #define N 10

void fun(int *x,int n) {

int *p,*t=x,s;

for(p=x;p*t?p:t;

s=*x;*x=*t;*t=s; t=x+1;

for(p=x+1;p*t?p:t;

s=*(x+1);*(x+1)=*t;*t=s }

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

for(i=0;i

for(i=0;i

printf(\ printf(\ }

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 a,i,j; float sum=0; a=n/5;

for(i=0;i

for(j=(5*i);j<5*(i+1);j++) sum+=x[j]; w[i]=sum/5; sum=0; } }

void main()

{int a[30],i,n,m; float b[6];

printf(\scanf(\ for(i=0;i

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

printf(\ printf(\ }

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

x0+x1+x2+...+xn

的最大的n并作为函数返回值带回。例如,当x=2,y=1000时,程序输出8。 #include

int fun(int x,long int y) {

int i;

long a=x,sum=1; for(i=1;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所指的字符数组中,然后返回此最长字符串的长度。 #define N 30

#include

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

{

int i,j,max=0,imax=0; for(i=0;i

for(j=0;ss[i][j]!='\\0';j++); if(j>max) {max=j;imax=i;} }

strcpy(s,ss[imax]); return max;

2

}

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 i,num=0,word=0;

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

if(str[i]=='

'||str[i]==','||str[i]=='.') word=0; else if(word==0) {

word=1; num++; } }

return num; }

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

printf(\are %d words.\\n\ }

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

for(i=0;i<100;i++) {

if(str[i]==' ') {

if(str[i+1]==' ') {

for(j=i+1;str[j]!='\\0';j++) {str[j]=str[j+1];}

i-=1; } }

}

}

void main() {char s[100];

puts(\ 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

void fun(int x,int k,int *p) {

int m,i,j,n=0; if(x<1)x=1;

for(m=x+1;n<=k;m++) {

j=sqrt(m);

for(i=2;i<=j;i++) {if(m%i==0) break;} if(i>=j+1) {*p++=m;n++;} } }

void main()

{int a,b,n[1000],i; scanf(\ fun(a,b,n);

for(i=0;i

3

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 num=0,x,x1,y,i,j; for(x=a;x<=b;x++) {

for(i=2;i

if(x%i==0) break; }

if(i==x) {

for(x1=x,y=0;x1!=0;) {

y*=10; a=x1; x1/=10; y+=a; }

for(j=2;j

if(y%j==0) break; }

if(j==y) num++; } }

return num; }

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 void fun(char *s) {

int i,j,k,n=0; char a,b;

for(i=0;*(s+i)!='\\0';i++); n=i;

for(i=0;*(s+i)!='\\0';i++) {

a=*(s+i); b=*(s+i+1);

if(((a<='z')&&(a>='a')||(a<='Z')&&(a>='A'))&&((b<='z')&&(b>='a')||(b>='A')&&(b<='Z')))

{ for(j=0;j<=n-i;j++) { k=n;

*(s+k-j+1)=*(s+k-j); } *(s+i+1)='*'; n++; } } }

strcpy(s,a); } }

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 i,j,h,n=0; for(i=1;i<=7;i++) for(j=0;j<=5;j++)

4