大学C程序上机考试题和答案.docx

上传人:b****7 文档编号:11165395 上传时间:2023-02-25 格式:DOCX 页数:31 大小:21.35KB
下载 相关 举报
大学C程序上机考试题和答案.docx_第1页
第1页 / 共31页
大学C程序上机考试题和答案.docx_第2页
第2页 / 共31页
大学C程序上机考试题和答案.docx_第3页
第3页 / 共31页
大学C程序上机考试题和答案.docx_第4页
第4页 / 共31页
大学C程序上机考试题和答案.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

大学C程序上机考试题和答案.docx

《大学C程序上机考试题和答案.docx》由会员分享,可在线阅读,更多相关《大学C程序上机考试题和答案.docx(31页珍藏版)》请在冰豆网上搜索。

大学C程序上机考试题和答案.docx

大学C程序上机考试题和答案

1

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

考试时间:

50分钟

考试方式:

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

分值分配:

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

考试时间:

第十八周

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

将长整型数x中每一位上为奇数的

数依次取出,并逆序构成一个新数返回。

例如:

程序运行时输入123456789,输

出:

b=97531。

#include

longfun(longintx)

{

longm,n,i;

n=x;

m=0;

while(n!

=0)

{

i=n%10;

if(i%2==1)

{

m*=10;

m+=i;

}

n-=i;

n=n/10;

}

returnm;

}

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”

2

#include

#include

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

{

inti,j,n;

intflag;

char*x,*y,*z;

y=t;

z=p;

n=0;

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

{

if(*y==0)

{

*z=0;

break;

}

x=s;

flag=0;

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

{

if(*x==0)

break;

if(*x==*y)

{

flag=1;

break;

}

x++;

}

if(flag==0)

{

x=p;

for(j=0;j

{

if(*x==*y)

{

flag=1;

break;

}

x++;

}

if(flag==0)

{

*z=*y;

z++;

n++;

}

}

y++;

}

}

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)

{

intn=0,s=0,t=0;

while(s<=m)

{

n++;

t+=n;

s+=t;

}

returnn-1;

}

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,s=0;

    for(i=0;i<10;i++)//查找含6的数据

    {

        for(j=x[i];j!

=0;j/=10)

        {

            if(6==j%10)

            {

                x[i]=-1;

                s++;

                break;

            }

        }

    }

    for(i=0;i<10&&s!

=0;i++)//更改数据

    {

        if(-1==x[i])

        {

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

            {

                if(-1!

=x[j])

                    break;

            }

            x[i]=x[--j];

            x[j]=-1;

            s--;

        }

    }

}

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

#include

longfun(inthigh,intn)

{

inti,f;

longmax,s,m;

if(high%2==1)

max=high-2;

else

max=high-1;

s=0;

m=0;

while(m2)

{

f=0;

for(i=3;i<=sqrt(max);i+=2)

{

if(max%i==0)

{

f=1;

break;

}

}

if(f==0)

{

s+=max;

m++;

}

max-=2;

}

if(m

s+=2;

6

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作为有效数据的结束标志。

例:

若输入:

1234567

89101112131415,输出:

2468101214n=7

#include

intfun(int*a,intn)

{

inti,j;

i=0;

for(j=0;j

{

if(*(a+j)%2==1)

*(a+j)=-1;

else

{

*(a+i)=*(a+j);

if(j>i)

*(a+j)=-1;

i++;

}

}

returni;

}

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

}

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,k,m,t;

for(i=0;i

{

k=0;

for(j=1;j

if(a[i][k]

k=j;

t=a[i][k];

a[i][k]=a[i][N-1];

a[i][N-1]=t;

}

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[k][N-1]

k=j;

if(i!

=k)

{

for(m=0;m

{

t=a[k][m];

a[k][m]=a[i][m];

a[i][m]=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

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

转换后的二

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

如输入13,输出1101,输入

-13,输出-1101。

#include

voidfun(intx,char*p)

{

intm=0x40000000;

unsignedinti=0;

if(x<0)

{

*(p+i)='-';

i++;

x=-x;

}

while((m&x)==0)

m=m>>1;

while(m!

=0)

{

if((m&x)==0)

{

*(p+i)='0';

i++;

}

else

{

*(p+i)='1';

i++;

}

m=m>>1;

}

*(p+i)=0;

}

main()

{

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

9

所指的字符数组中,然后返回此最大字符串的长度。

#include

#defineN30

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

{

intlen[20];

inti,j,t,n;

char*p;

n=N;

p=ss;

for(i=0;i

{

len[i]=0;

while(*(p+i*n+len[i])!

=0)

len[i]++;

}

t=len[0];

j=0;

for(i=1;i

if(len[i]>t)

{

t=len[i];

j=i;

}

for(i=0;i

*(s+i)=*(p+j*n+i);

*(s+t)=0;

returnt;

}

main()

{

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*。

10

#include

#include

#include

voidfun(char*s)

{

charstr[80];

inti,j;

i=0;

j=0;

while(*(s+i)!

=0)

{

str[j]=*(s+i);

j++;

if(*(s+i)>=0x30&&*(s+i)<0x40)

{

str[j]='*';

j++;

}

i++;

}

str[j]=0;

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

*(s+i)=str[i];

}

voidmain()

{

charstr[80];

gets(str);

fun(str);

puts(str);

}

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

把形参s所指字符串中下标为

偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数

位置,下标为奇数的字符不动(注:

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

例:

若输入:

abcd123,

输出:

3badc21

#include

voidfun(char*s)

{

intlen=0;

inti;

11

chart,r;

while(*(s+len)!

=0)

len++;

t=*(s);

for(i=0;i

{

r=*(s+i);

*(s+i)=t;

t=r;

}

*s=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)

{

chart[80],c;

inti,j,len=0;

while(*(s1+len)!

=0)

{

t[len]=*(s1+len);

len++;

}

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

for(j=0;j

{

if(t[j]>t[j+1])

{

c=t[j];

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

t[j+1]=c;

}

}

j=0;

for(i=0;i

{

*(s2+j)=t[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;

i=0;

j=0;

while(s[i]!

=0)

{

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

{

s[j]=s[i];

j++;

}

else

s[i]=0;

i++;

}

s[j]=0;

}

voidmain()

{

13

chara[80];

gets(a);

fun(a);

puts(a);

}

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

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

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

所谓“同构数”是指这样的数,它出现

在它的平方数的右边。

例如:

输入整数5,5的平方数是25,5是25中右侧的数,

所以5是同构数,输出"Yes"。

要求x的值不大于10000。

#include

#include

intfun(longintx)

{

intn;

longy;

y=x*x;

n=log10(x)+1;

n=pow(10,n);

if(y%n==x)

return1;

else

return0;

}

voidmain()

{

intx;

scanf("%d",&x);

if(fun(x)==1)

puts("Yes");

else

puts("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;

for(i=0;i

s1[i]=s2[m+i-1];

s1[n]=0;

}

main()

{

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)

{

inthf=1;

char*p=str;

while(*p!

=0)

{

if(*p>='A'&&*p<='Z')

if(hf==0)

{

*p+=32;

p++;

continue;

}

else

{

hf=0;

p++;

continue;

}

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

if(hf==0)

{

p++;

continue;

}

else

{

*p-=32;

hf=0;

p++;

continue;

}

switch(*p)

{

case'.':

case',':

case'':

hf=1;

default:

p++;

continue;

}

}

}

voidmain()

{

chara[100];

gets(a);

fun(a);

puts(a);

}

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

写函

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

在main()中输入与输出。

如下面程序输出78910123456。

注意,m可能大于n。

#include

voidfun(int*p,intn,intm)

{

inta[80];

inti;

for(i=0;i

a[i]=*(p+i);

for(i=0;i

*(p+(i+m)%10)=a[i];

}

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)

{

char*p1,*p2;

charc[100];

inti;

p1=s1;

p2=s2;

i=0;

while(*p1!

=0||*p2!

=0)

{

if(*p1!

=0)

{

c[i]=*p1;

i++;

p1++;

}

if(*p2!

=0)

{

c[i]=*p2;

i++;

p2++;

}

}

c[i]=0;

i=0;

p1=s1;

while(c[i]!

=0)

{

*p1=c[i];

p1++;

i++;

}

*p1=0;

}

main()

{

chara[100],b[100];

voidfun(char*,char*);

gets(a);

gets(b);

fun(a,b);

pu

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

当前位置:首页 > 人文社科 > 设计艺术

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

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