20道上机考题和答案 2.docx

上传人:b****6 文档编号:6824544 上传时间:2023-01-10 格式:DOCX 页数:17 大小:20.92KB
下载 相关 举报
20道上机考题和答案 2.docx_第1页
第1页 / 共17页
20道上机考题和答案 2.docx_第2页
第2页 / 共17页
20道上机考题和答案 2.docx_第3页
第3页 / 共17页
20道上机考题和答案 2.docx_第4页
第4页 / 共17页
20道上机考题和答案 2.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

20道上机考题和答案 2.docx

《20道上机考题和答案 2.docx》由会员分享,可在线阅读,更多相关《20道上机考题和答案 2.docx(17页珍藏版)》请在冰豆网上搜索。

20道上机考题和答案 2.docx

20道上机考题和答案2

《C程序设计》课程期末上机考试

考试时间:

50分钟

考试方式:

从下面的20题中随机抽取一题,再附加一题,共需完成2道题。

分值分配:

第一题60分,第二题40分,共100分

考试时间:

2011.6.23第十八周周四

1.请编写函数longfun(longintx),功能是:

将长整型数x中每一位上为奇数的数依次取出,并逆序构成一个新数返回。

例如:

程序运行时输入123456789,输出:

b=97531。

#include

longfun(longintx)

{longs1=0,s2,m;

while(x!

=0)

{m=x%10;

if(m%2!

=0)

s1=(s1+m)*10;

x=x/10;

}

s2=s1/10;

return(s2);

}

voidmain()

{longa,b;

printf("Pleaseinputalongintnum:

");

scanf("%ld",&a);

b=fun(a);

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

}

2.编写函数voidfun(char*s,char*t,char*p)将未在字符串s中出现、而在字符串t中出现的字符,形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。

例如:

当s为"12345",t为"8624677"时,p中的字符为:

"867";

当s为”goodluck”,t为”thankyouverymuch”时,输出:

”thanyverm”

#include

#include

voidfun(char*s,char*t,char*p)

{inti,j,k=0,f;

p[0]='\0';

for(i=0;t[i]!

='\0';i++)

{f=1;

for(j=0;s[j]!

='\0';j++)

if(t[i]==s[j])f=0;

for(j=0;p[j]!

='\0';j++)

if(t[i]==p[j])f=0;

if(f)

{p[k++]=t[i];p[k]='\0';}

}

}

voidmain()

{chars1[50],s2[50],s3[50];

gets(s1);gets(s2);

fun(s1,s2,s3);

puts(s3);

}

3.编写函数intfun(intm),计算并返回满足表达式:

1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)<=m最大的n。

例如,当m=10000时,程序输出:

n=38。

#include

intfun(intm)

{ints=0,a,i;

for(i=0,a=0;s<=m;i++)

{a+=i;

s+=a;

}

return(i-2);

}

voidmain()

{intx;

scanf("%d",&x);

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

}

4.编写函数voidfun(int*x,intn),它的功能是:

删除数组x中所有包含数字6的数据,后续的剩余元素赋值为-1。

规定x中数据都为正数。

如程序运行时若输入:

12214616234161166391126713816

删除后输出:

12211911381-1-1-1-1-1-1

#defineN10

#include

voidfun(int*x,intn)

{inti,j=0,k,t;

for(i=0;i

{

k=x[i];

while(k!

=0)

{

t=k%10;

if(t==6)

break;

else

k=k/10;

}

if(k==0)

x[j++]=x[i];

}

for(;j

x[j]=-1;

return;

}

voidmain()

{inta[N],i;

for(i=0;i

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

fun(a,N);

for(i=0;i

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

printf("\n");

}

5.编写函数longfun(inthigh,intn),功能是:

计算并返回high以内(不包含high)最大的n个素数之和。

若不足n个,则到最小素数2为止。

例如:

若high=100,n=10,则函数的返回值为:

732;若high=11,n=10,则函数返回:

17。

#include

longfun(inthigh,intn)

{inti,j,m=0,s=0;

for(i=high-1;i>=2;i--)

{

for(j=2;j

if(i%j==0)break;

if(j>=i)

{m+=1;

s+=i;

}

if(m==n)break;

}

returns;

}

voidmain()

{intk,n;

scanf("%d%d",&k,&n);

printf("sum=%ld\n",fun(k,n));

}

6.请编写函数intfun(int*a,intn),它的功能是:

把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。

例:

若输入:

123456789101112131415,输出:

2468101214n=7

#include

intfun(int*a,intn)

{inti,j=0;

for(i=0;i

if(*(a+i)%2==0)

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

j++;

}

a[j]=-1;

return(j);

}

voidmain()

{intx[15],i,n;

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

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

n=fun(x,15);

for(i=0;x[i]!

=-1;i++)

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

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

}

7.给定程序中,函数fun的功能是:

有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。

然后按每一行的最大值对二维数据各行降序排序。

例如,有右侧数组数据:

11524342522求最大值并对调后:

11224342552

223346581647223346471658

8342542647004254264783

456789456789

4596171839245217183996

排序后最终输出:

45217183996

04254264783

223346471658

11224342552

456789

#defineN6

#defineM5

#include

voidfun(inta[M][N])

{inti,j,t,m,max,k;

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

{max=a[i][0];m=0;

for(j=1;j<6;j++)

{

if(max

{

max=a[i][j];

m=j;

}

}

t=a[i][m];

a[i][m]=a[i][5];

a[i][5]=t;

}

for(k=0;k<4;k++)

for(i=0;i<4-k;i++)

if(a[i][5]

for(j=0;j<6;j++)

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

}

voidmain()

{intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},

{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;

fun(x);

for(i=0;i

{for(j=0;j

printf("%3d",x[i][j]);

printf("\n");

}

}

8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。

转换后的二进制数以字符串的方式放置于p所指向的数组中。

如输入13,输出1101,输入-13,输出-1101。

#include"stdio.h"

#include

voidfun(intx,char*p)

{inti,k=x;

chars[80];

for(i=0;;i++)

{if(x%2==0)s[i]='0';

elses[i]='1';

x/=2;

if(x==0)break;

}

if(k<0)*(p+0)='-';

for(;i>=0;i--,p++)

if(k<0)*(p+1)=s[i];

else*p=s[i];

if(i==-1)

{if(k<0)*(p+1)='\0';

else*p='\0';

}

}

voidmain()

{inta;

charc[18];

scanf("%d",&a);

fun(a,c);

printf("%d'SBINARYIS:

%s\n",a,c);

}

9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:

形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。

求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。

#defineN30

#include

intfun(char(*ss)[N],intm,char*s)

{inti;

s=strcpy(s,*(ss+0));

for(i=0;i

if(strcmp(*(ss+i),s)>0)

strcpy(s,*(ss+i));

return(strlen(s));

}

voidmain()

{chara[8][N],b[N];

inti,len;

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

gets(a[i]);

len=fun(a,8,b);

printf("len=%d,str=%s\n",len,b);

}

10.给定程序中,函数voidfun(char*s)的功能是:

在形参s所指字符串中的每个数字字符之后插入一个*号。

例如,形参s所指的字符串为:

def35adh3kjsdf7。

执行结果为:

def3*5*adh3*kjsdf7*。

#include

#include

#include

voidfun(char*s)

{inti,j;

chara[100];

for(i=0,j=0;*(s+i)!

='\0';i++,j++)

{a[j]=*(s+i);

if(*(s+i)>='0'&&*(s+i)<='9')

{*(a+j+1)='*';j++;}

}

a[j]='\0';

strcpy(s,a);

}

voidmain()

{charstr[80];

gets(str);fun(str);

puts(str);

}

11.给定程序中,函数voidfun(char*s)的功能是:

把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:

字符串的长度大于等于2)。

例:

若输入:

abcd123,输出:

3badc21

#include

voidfun(char*s)

{inti;chart;

for(i=1;*(s+i)!

='\0';i++)

if(i%2==0)

{t=*(s+0);*(s+0)=*(s+i);*(s+i)=t;}

}

voidmain()

{charstr[80];

gets(str);

fun(str);

puts(str);

}

12.编写函数voidfun(char*s1,char*s2),功能是:

对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。

例如,下面程序若输入:

TheCProgrammingLanguage,输出:

□□LTaegghmnor。

(□表空格)

#include

voidfun(char*s1,char*s2)

{inti,j,k,n=0;chart;

for(i=0;*(s1+i)!

=0;i++)n+=1;

for(i=0;i

{k=i;

for(j=i+1;j

if(k!

=i){t=s1[k];s1[k]=s1[i];s1[i]=t;}

}

for(i=0,j=0;i

{if(i%2==0){s2[j]=s1[i];j++;}

}

s2[j]=0;

}

voidmain()

{chara[80],b[80];

gets(a);

fun(a,b);

puts(b);

}

13.函数voidfun(chars[])的功能是:

将s所指字符串中ASCII值为奇数的字符删除。

例如,若s所指字符串中的内容为:

“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。

最后s中内容是:

“BDF24”。

#include

voidfun(chars[])

{inti,j;

for(i=0;s[i]!

='\0';i++)

if(s[i]%2!

=0)

{for(j=i;s[j]!

='\0';j++)

s[j]=s[j+1];

i--;

}

}

voidmain()

{chara[80];

gets(a);

fun(a);

puts(a);

}

14.请编写一个函数intfun(longintx),它的功能是:

判断整数x是否是同构数。

若是同构数,函数返回1;否则返回0。

所谓“同构数”是指这样的数,它出现在它的平方数的右边。

例如:

输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。

要求x的值不大于10000。

#include

intfun(longintx)

{longm,a;

for(a=10;;a*=10)

{m=x*x%a;

if(x==m)return

(1);

if(x*x/a==0)return(0);

}

}

voidmain()

{intx;

scanf("%d",&x);

if(fun(x)==1)

puts("Yse");

elseputs("No");

}

15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。

程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。

注意,这里是将1作为起始计数。

#include

voidfun(chars1[],chars2[],intm,intn)

{inti,a,b;

a=strlen(s2);

b=(a

a:

m+n-1);

for(i=m-1;i

{*s1=*(s2+i);s1++;}

*s1='\0';

}

voidmain()

{staticchara[100],b[100];

ints,len;

voidfun(chars1[],chars2[],intm,intn);

puts("ENTERASTRING:

");

gets(a);

puts("ENTERSTARTINGPOSITIONANDLENGTH:

");

scanf("%d,%d",&s,&len);

fun(b,a,s,len);

printf("THESRBSTINGIS:

%s\n",b);

}

16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。

输入输出在main中实现。

如输入"youHAVE10books,don'tyou?

"输出"YouHave10Books,Don'tYou?

"。

单词以空格、逗号、句号分隔。

#include

voidfun(char*str)

{inti;

if(*(str+0)>='a'&&*(str+0)<='z')

*(str+0)=*(str+0)-32;

for(i=1;*(str+i)!

='\0';i++)

{if(*(str+i-1)==''||*(str+i-1)==','||*(str+i-1)=='.')

{if(*(str+i)>='a'&&*(str+i)<='z')

*(str+i)=*(str+i)-32;

}

elseif(*(str+i)>='A'&&*(str+i)<='Z')

*(str+i)=*(str+i)+32;

}

}

voidmain()

{chara[100];

gets(a);

fun(a);

puts(a);

}

17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。

写函数voidfun(int*p,intn,intm),实现上述功能。

在main()中输入与输出。

如下面程序输出78910123456。

注意,m可能大于n。

#include"stdio.h"

voidfun(int*p,intn,intm)

{inti,j;

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

{for(j=n-1;j>=0;j--)

*(p+j+1)=*(p+j);

*(p+0)=*(p+n);

}

}

voidmain()

{voidfun(int*,int,int);

intx[10]={1,2,3,4,5,6,7,8,9,10},i;

fun(x,10,14);

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

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

printf("\n");

}

18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。

如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。

#include

#include

voidfun(char*s1,char*s2)

{inti,j,k;

for(j=0,i=1;s2[j]!

='\0';)

{for(k=strlen(s1);k>=i;k--)

s1[k+1]=s1[k];

s1[i]=s2[j];

j++;i++;

if(s1[i])i++;

}

}

voidmain()

{chara[100],b[100];

voidfun(char*,char*);

gets(a);

gets(b);

fun(a,b);

puts(a);

}

19.传说可以根据两个人的生日来计算其缘分.方法:

将两个人的生日各位相加,将得到的数再一次各位相加,直到其值为一个一位数,此数即代表两个人的缘分.例如,两个生日为:

19820523,19841111,则各位相加:

1+9+8+2+5+2+3+1+9+8+4+1+1+1+1得:

56;再5+6得11;再1+1得2,即为两人的缘分.编写计算缘分程序,两个生日由键盘输入.

#include"stdio.h"

intfun(longx,longy)

{longsum=0,m;

for(m=x+y;m>0||sum>=10;)

{sum+=m%10;

m/=10;

if(m==0&&sum>=10)

{m=sum;

sum=0;

}

}

return(sum);

}

voidmain()

{longx,y;

intk;

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

k=fun(x,y);

printf("yuanfenis%d",k);

}

20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。

到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。

若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。

函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。

#include

intfun(intn,int*p)

{intarr1[10000]={0};

inti,j;

intt1,t2;

for(i=0;i

{

arr1[i]=i+1;

}

*p=arr1[2];

p++;

for(j=0;j

{

t1=arr1[0];

t2=arr1[1];

for(i=0;i

{

arr1[i]=arr1[i+3];

}

arr1[n-3-j]=t1;

arr1[n-2-j]=t2;

*p=arr1[2];

p++;

}

*p=arr1[0];

p++;

*p=arr1[1];

return*p;

}

voidmain()

{intm,a[10000],i,num;

scanf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1