二《C程序设计》上机考试练习.docx
- 文档编号:24762388
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:42
- 大小:28.81KB
二《C程序设计》上机考试练习.docx
《二《C程序设计》上机考试练习.docx》由会员分享,可在线阅读,更多相关《二《C程序设计》上机考试练习.docx(42页珍藏版)》请在冰豆网上搜索。
二《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++。 } 三、编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计 程序设计 上机 考试 练习