二《C程序设计》上机考试练习.docx

上传人:b****4 文档编号:24762388 上传时间:2023-06-01 格式:DOCX 页数:42 大小:28.81KB
下载 相关 举报
二《C程序设计》上机考试练习.docx_第1页
第1页 / 共42页
二《C程序设计》上机考试练习.docx_第2页
第2页 / 共42页
二《C程序设计》上机考试练习.docx_第3页
第3页 / 共42页
二《C程序设计》上机考试练习.docx_第4页
第4页 / 共42页
二《C程序设计》上机考试练习.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

二《C程序设计》上机考试练习.docx

《二《C程序设计》上机考试练习.docx》由会员分享,可在线阅读,更多相关《二《C程序设计》上机考试练习.docx(42页珍藏版)》请在冰豆网上搜索。

二《C程序设计》上机考试练习.docx

二《C程序设计》上机考试练习

上机程序调试及程序设计练习

一、程序填空

(1)找Armstrong(水仙花)数:

371=3*3*3+7*7*7+1*1*1

#include

#include

voidmain()

{inti,a,b,c。

for(i=100。

i<=999。

i++)

{a=i/100。

_______1_______//b=i%100/10。

c=i%10。

if(________2________)//a*a*a+b*b*b+c*c*c==i

printf("%disaArmstrongnumber!

\n",i)。

}

}

(2)输入1个整数后,输出该数地位数.(例:

输入3214则输出4,输入-23156则输出5).

#include

voidmain()

{intn,k=0。

scanf("%d",&n)。

while(_____1_____){//n!

=0

k++。

_____2_____。

//n=n/10

}

printf("%d\n",k)。

}

(3)求输入地整数各位数字之和,如输入234则输出9,输入-312则输出6.

#include

#include

voidmain()

{

intn,s=0。

scanf("%d",&n)。

______1______//if(n<0)n=-n。

while(n!

=0){

______2______//s+=n%10。

n=n/10。

}

printf("%d\n",s)。

}

(4)调用函数f,将一个整数首尾倒置.例如:

若程序输入12345,则输出54321;若程序输入-34567,则输出-76543.

#include

#include

longf(longn)

{longm,y=0。

m=fabs(n)。

while(m!

=0){

y=y*10+m%10。

____1____//m=m/10;

}

if(n>=0)returny。

else_____2_____//return-y。

}

voidmain()

{

printf("%ld\t",f(12345))。

printf("%ld\n",f(-34567))。

}

(5)调用函数f,从字符串中删除所有地数字字符.

#include

#include

#include

voidf(char*s)

{inti=0。

while(s[i]!

='\0'){

if(isdigit(s[i]))____1____(s+i,s+i+1)。

//strcpy

___2___i++。

}//else

}

voidmain()

{charstr[80]。

gets(str)。

f(str)。

puts(str)。

}

(6)调用find函数在输入地字符串中查找是否出现"the"这个单词.如果查到返回出现地次数,如果未找到返回0.

#include

intfind(char*str)

{char*fstr="the"。

inti=0,j,n=0。

while(str[i]!

='\0')

{

for(______1______)//j=0。

j<3。

j++

if(str[j+i]!

=fstr[j])break。

if(______2______)n++。

//j>=3

i++。

}

returnn。

}

voidmain()

{chara[80]。

gets(a)。

printf("%d",find(a))。

}

(7)输入地一个小写字母,将字母循环后移5个位置后输出.例如:

'a'变成'f','w'变成'b'.

#include

voidmain()

{charc。

c=getchar()。

if(______1______)//c>='a'&&c<='u'

c=c+5。

else

if(c>='v'&&c<='z')

______2______//c=c-'v'+'a'。

putchar(c)。

}

(8)将字符串s中所有地字符'c'删除.

#include

voidmain()

{chars[80]。

inti,j。

gets(s)。

for(i=j=0。

______1______。

i++)//s[i]!

='\0'

if(s[i]!

='c')

{s[j]=s[i]。

______2______//j++。

}

s[j]='\0'。

puts(s)。

}

(9)对x=1,2,……,10,求f(x)=x*x-5*x+sin(x)地最大值.

#include

#include

#definef(x)x*x-5*x+sin(x)

voidmain()

{intx。

floatmax。

______1______//max=f

(1)。

for(x=2。

x<=10。

x++)

______2______//if(f(x)>max)max=f(x)。

printf("%f\n",max)。

}

(10)输入三个整数,按由小到大地顺序输出这三个数.

#include

voidswap(______1______)//int*pa,int*pb

{/*交换两个数地位置*/

inttemp。

temp=*pa。

*pa=*pb。

*pb=temp。

}

voidmain()

{inta,b,c,temp。

scanf("%d%d%d",&a,&b,&c)。

if(a>b)

swap(&a,&b)。

if(b>c)

swap(&b,&c)。

if(______2______)//a>b

swap(&a,&b)。

printf("%d,%d,%d",a,b,c)。

}

(11)调用函数f,去除数组中地负数,输入数组x[7],输出结果为:

1346

#include//数组元素地删除

voidf(int*a,int*m)

{inti,j。

for(i=0。

i<*m。

i++)

if(a[i]<0){

for(j=i--。

j<*m-1。

j++)a[j]=a[j+1]。

_____1_____。

//*m=*m-1或者(*m)--

}

}

voidmain()

{inti,n=7,x[7]={1,-2,3,4,-5,6,-7}。

_______2_______。

//f(x,&n)。

for(i=0。

i

i++)printf("%5d",x[i])。

printf("\n")。

}

(12)调用函数f计算代数多项式1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x当x=1.7时地值.

#include

floatf(float,float*,int)。

voidmain()

{floatb[5]={1.1,2.2,3.3,4.4,5.5}。

printf("%f\n",f(1.7,b,5))。

}

floatf(_______1________)//floatx,float*a,intn

{floaty=a[0],t=1。

inti。

for(i=1。

i

i++){t=t*x。

y=y+a[i]*t。

}

_____2_____//returny。

}

(13)分别统计字符串中英文字母、数字、和其他字符出现地次数.

#include

#include

voidmain()

{chara[80]。

intn[3]={0},i。

gets(a)。

________1________//for(i=0。

a[i]!

='\0'。

i++)

{if(tolower(a[i])>='a'&&tolower(a[i])<='z')/*统计字母个数*/

n[0]++。

elseif(________2________)/*统计数字个数*///a[i]>='0'&&a[i]<='9'

n[1]++。

else

n[2]++。

}

for(i=0。

i<3。

i++)printf("%d\n",n[i])。

}

(14)将输入地十进制整数n通过函数DtoH函数转换为十六进制数,并将转换结果以字符串形式输出.(例如:

输入十进制数79,将输出十六进制4f.)

#include

#include

chartrans(intx)

{

if(x<10)return'0'+x。

else_______1________//return'a'+x-10。

}

intDtoH(intn,char*str)

{

inti=0。

while(n!

=0)

{

________2________//str[i]=trans(n%16)。

n/=16。

i++。

}

returni-1。

}

voidmain()

{

inti,k,n。

char*str。

//注意:

题目有错!

str是悬挂指针.应改为:

charstr[80]。

scanf("%d",&n)。

k=DtoH(n,str)。

for(i=0。

i<=k。

i++)printf("%c",str[k-i])。

}

(15)将输入地十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出.

#include

voidDec2Bin(intm)

{

intbin[32],j。

for(j=0。

m!

=0。

j++)

{

bin[j]=______1______。

//m%2

m=m/2。

}

for(。

j!

=0。

j--)

printf("%d",______2______)。

//bin[j-1]

}

voidmain()

{

intn。

scanf("%d",&n)。

Dec2Bin(n)。

}

(16)数列地第1、2项均为1,此后各项值均为该项前二项之和.计算数列第30项地值.

#include

_______1______//longf(intn)。

或者longf(int)。

voidmain()

{printf("%ld\n",f(30))。

}

longf(intn)

{if(______2______)//n==1||n==2

return1。

else

returnf(n-1)+f(n-2)。

}

(17)该程序计算四位学生地平均成绩,保存在结构中,然后列表输出这些学生地信息.

#include

structSTUDENT

{charname[16]。

intmath。

intenglish。

intcomputer。

intaverage。

}。

voidGetAverage(structSTUDENT*pst)/*计算平均成绩*/

{intsum=0。

sum=______1______。

//pst->math+pst->english+pst->computer

pst->average=sum/3。

}

voidmain()

{inti。

structSTUDENTst[4]={{"Jessica",98,95,90},{"Mike",80,80,90},

{"Linda",87,76,70},{"Peter",90,100,99}}。

for(i=0。

i<4。

i++)

{GetAverage(______2______)。

//st+i或者&st[i]

}

printf("Name\tMath\tEnglish\tCompu\tAverage\n")。

for(i=0。

i<4。

i++)

{printf("%s\t%d\t%d\t%d\t%d\n",st[i].name,st[i].math,st[i].english,

st[i].computer,st[i].average)。

}

}

(18)输入m、n(要求输入数均大于0).输出它们地最大公约数.

#include

voidmain()

{intm,n,k。

while(scanf("%d%d",&m,&n),______1______)。

//m<=0||n<=0

for(___2___。

n%k!

=0||m%k!

=0。

k--)。

//k=m>n?

n:

m

printf("%d\n",k)。

}

(19)求出a中各相邻两个元素地和,并将这些和存放在数组b中,按每行3个元素地形式输出.例如:

b[1]=a[0]+a[1],……,b[9]=a[8]+a[9].

#include

voidmain()

{inta[10],b[10],i。

printf("\nInput10numbers:

")。

for(i=0。

i<10。

i++)/*数组输入*/

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

for(i=1。

i<10。

i++)

b[i]=______1______。

/*计算b数组中地元素*///a[i-1]+a[i]

for(i=1。

i<10。

i++)

{printf("%3d",b[i])。

if(______2______)printf("\n")。

/*每行打印3个数据*///i%3==0

}

}

(20)输入整数n(n>0),求m使得2地m次方小于或等于n,2地m+1次方大于或等于n.

#include

voidmain()

{intm=0,t=1,n。

while(_____1________)。

//scanf(“%d”,&n),n<=0//逗号表达式

while(!

(t<=n&&t*2>=n)){

_____2_____//t=t*2。

m++。

}

printf(“%d\n”,m)。

}

二、程序改错

(1)输入一个字符串,将组成字符串地所有非英文字母地字符删除后输出.

#include

#include//注意:

题目有错!

应增加一行:

#include

voidmain()

{charstr[256]。

inti,j,k=0,n。

gets(str)。

n=strlen(str)。

for(i=0。

i

i++)

/********1********/

if(tolower(str[i])<'a'||tolower(str[i])>'z')//if(tolower(str[i])>='a'&&tolower(str[i])<='z')

{

/********2********/

str[n]=str[i]。

n++。

//str[k]=str[i]。

k++。

}

str[k]='\0'。

printf("%s\n",str)。

}

(2)输入一个字符串,将组成字符串地所有字符先按顺序存放到字符串t中,再将字符串中地字符按逆序连接到字符串t后面.例如:

输入"ABCD",则字符串t为"ABCDDCBA".

#include

#include

voidfun(char*s,char*t)

{inti,sl。

sl=strlen(s)。

for(i=0。

i

i++)

t[i]=s[i]。

for(i=0。

i

i++)

/********1********/

t[sl+i]=s[sl-i]。

//t[sl+i]=s[sl-1-i]。

/********2********/

t[sl]="\0"。

//t[sl+i]='\0'。

}

voidmain()

{chars[100],t[100]。

scanf("%s",s)。

fun(s,t)。

printf("%s",t)。

}

(3)运行时输入10个数,然后分别输出其中地最大值、最小值.

#include

voidmain()

{floatx,max,min。

inti。

/********1*******/

for(i=0。

i<=10。

i++){//for(i=1。

i<=10。

i++){

scanf("%f",&x)。

/*******2********/

if(i=1){max=x。

min=x。

}//if(i==1){max=x。

min=x。

}

if(x>max)max=x。

if(x

}

printf("%f,%f\n",max,min)。

}

(4)用选择法对10个整数按升序排序.

#include

#defineN10

voidmain()

{inti,j,min,temp。

inta[N]={5,4,3,2,1,9,8,7,6,0}。

printf("\nThearrayis:

\n")。

/*输出数组元素*/

for(i=0。

i

i++)printf("%5d",a[i])。

for(i=0。

i

i++)/*排序操作*/

{min=i。

for(j=i+1。

j

j++)

/******1******/

if(a[min]<=a[j])min=j。

//if(a[min]>a[j])min=j。

/******2******/

temp=a[min]。

a[min]=a[j]。

a[j]=temp。

/*数据交换*/

//改成temp=a[min]。

a[min]=a[i]。

a[i]=temp。

}

printf("\nThesortednumbers:

\n")。

/*输出排序结果*/

for(i=0。

i

i++)printf("%5d",a[i])。

printf("\n")。

}

(5)输入x和正数eps,计算多项式1-x+x*x/2-x*x*x/3!

+……地和直到末项地绝对值小于eps为止.

#include

#include

voidmain()

{floatx,eps,s=1,t=1,i=1。

scanf("%f%f",&x,&eps)。

do{

/*****1*****/

t=-t*x/++i。

//t=-t*x/i++。

s+=t。

/*****2*****/

}while(fabs(t)

//}while(fabs(t)>=eps)。

printf("%f\n",s)。

}

(6)运行时若输入a、n分别为3、6,则输出下列表达式地值:

3+33+333+3333+33333+333333.

#include

voidmain()

{inti,a,n。

longt=0。

/*********1*******/

s=0。

//longs=0。

scanf("%d%d",&a,&n)。

for(i=1。

i<=n。

i++){

/*******2******/

t=t*10+i。

//t=t*10+1。

s=s+t。

}

s=s*a。

printf("%ld\n",s)。

}

(7)用递归法将一个六位整数n转换称字符串.例如:

输入123456,应输出字符串"123456".

#include

voiditoa(longi,char*s)

{if(i==0)

return。

/******1******/

*s='1'+i%10。

//*s=i%10+'0'。

itoa(i/10,s-1)。

}

voidmain()

{longn。

charstr[7]=""。

scanf("%ld",&n)。

/******2******/

itoa(n,str+6)。

//itoa(n,str+5)。

printf("%s",str)。

}

(8)输入n,再输入n个点地平面坐标,然后输出那些距离坐标原点不超过5地点地坐标值.

#include

#include

#include

voidmain()

{inti,n。

/*****1*****/

structaxy{floatx,y。

}a。

//structaxy{floatx,y。

}*a。

scanf("%d",&n)。

a=(float*)malloc(n*2*sizeof(float))。

for(i=0。

i

i++)

/*****2*****/

scanf("%f%f",a[i].x,a[i].y)。

//scanf("%f%f",&a[i].x,&a[i].y)。

for(i=0。

i

i++)

if(sqrt(a[i].x*a[i].x+a[i].y*a[i].y)<=5)

printf("%f,%f\n",a[i].x,a[i].y)。

}

(9)运行时输入n,则输出n地所有质数因子.例如:

n=13860,则输出2、2、3、3、5、7、11.

#include

voidmain()

{intn,i。

scanf("%d",&n)。

/******1******/

i=1。

//i=2。

while(n>1)

if(n%i==0){

printf("%d\t",i)。

n/=i。

}

else

/********2*******/

n++。

//i++。

}

三、编

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

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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