上机程序调试及程序设计练习.docx
《上机程序调试及程序设计练习.docx》由会员分享,可在线阅读,更多相关《上机程序调试及程序设计练习.docx(33页珍藏版)》请在冰豆网上搜索。
上机程序调试及程序设计练习
上机程序调试及程序设计练习
一、程序填空
(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-a*100)/10
c=i%10;
if(________2________)//
printf("%disaArmstrongnumber!
\n",i);
}
}
答案:
1:
b=(i-a*100)/10;2i==(a*a*a+b*b*b+c*c*c)
(2)输入1个整数后,输出该数的位数。
(例:
输入3214则输出4,输入-23156则输出5)。
#include
voidmain()
{intn,k=0;
scanf("%d",&n);
while(_____1_____){//
k++;
_____2_____;//
}
printf("%d\n",k);
}
答案:
1n!
=02n=n/10;
(3)求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。
#include
#include
voidmain()
{
intn,s=0;
scanf("%d",&n);
______1______
while(n!
=0){
______2______
n=n/10;
}
printf("%d\n",s);
}
答案:
1.n=fabs(n);2.s+=n%10;
(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____
}
if(n>=0)returny;
else_____2_____
}
voidmain()
{
printf("%ld\t",f(12345));printf("%ld\n",f(-34567));
}
答案:
1.m=m/10;2.return–y;
(5)调用函数f,从字符串中删除所有的数字字符。
#include
#include
#include
voidf(char*s)
{inti=0;
while(s[i]!
='\0'){
if(isdigit(s[i]))____1____(s+i,s+i+1);
___2___i++;}
}
voidmain()
{charstr[80];
gets(str);f(str);puts(str);
}
答案:
1.strcpy2.else
(6)调用find函数在输入的字符串中查找是否出现"the"这个单词。
如果查到返回出现的次数,如果未找到返回0。
#include
intfind(char*str)
{char*fstr="the";
inti=0,j,n=0;
while(str[i]!
='\0')
{
for(______1______)
if(str[j+i]!
=fstr[j])break;
if(______2______)n++;
i++;
}
returnn;
}
voidmain()
{chara[80];
gets(a);
printf("%d",find(a));
}
答案:
1.j=0j<=2;j++2.j==3
(7)输入的一个小写字母,将字母循环后移5个位置后输出。
例如:
"a"变成"f","w"变成"b"。
#include
voidmain()
{charc;
c=getchar();
if(______1______)
c=c+5;
else
if(c>='v'&&c<='z')
______2______
putchar(c);
}
答案:
1.c>=’a’&&c<’v’2.c=c-21;
(8)将字符串s中所有的字符'c'删除。
#include
voidmain()
{chars[80];
inti,j;
gets(s);
for(i=j=0;______1______;i++)
if(s[i]!
='c')
{s[j]=s[i];
______2______
}
s[j]='\0';
puts(s);
}
答案:
1.i<=strlen(s)2.j++;
(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______
for(x=2;x<=10;x++)
______2______
printf("%f\n",max);
}
答案:
1.max=f
(1)2.if(f
(2)>max)max=f
(2);
(10)输入三个整数,按由小到大的顺序输出这三个数。
#include
voidswap(______1______)
{/*交换两个数的位置*/
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______)
swap(&a,&b);
printf("%d,%d,%d",a,b,c);
}
(11)调用函数f,去除数组中的负数,输入数组x[7]={1,-2,3,4,-5,6,-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_____;
}
}
voidmain()
{inti,n=7,x[7]={1,-2,3,4,-5,6,-7};
_______2_______;
for(i=0;iprintf("\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________)
{floaty=a[0],t=1;inti;
for(i=1;i_____2_____
}
(13)分别统计字符串中英文字母、数字、和其他字符出现的次数。
#include
#include
voidmain()
{chara[80];intn[3]={0},i;gets(a);
________1________
{if(tolower(a[i])>='a'&&tolower(a[i])<='z')/*统计字母个数*/
n[0]++;
elseif(________2________)/*统计数字个数*/
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________
}
intDtoH(intn,char*str)
{
inti=0;
while(n!
=0)
{
________2________
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=m/2;
}
for(;j!
=0;j--)
printf("%d",______2______);
}
voidmain()
{
intn;
scanf("%d",&n);
Dec2Bin(n);
}
(16)数列的第1、2项均为1,此后各项值均为该项前二项之和。
计算数列第30项的值。
#include
_______1______
voidmain()
{printf("%ld\n",f(30));
}
longf(intn)
{if(______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->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______);
}
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______);
for(___2___;n%k!
=0||m%k!
=0;k--);
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数组中的元素*/
for(i=1;i<10;i++)
{printf("%3d",b[i]);
if(______2______)printf("\n");/*每行打印3个数据*/
}
}
(20)输入整数n(n>0),求m使得2的m次方小于或等于n,2的m+1次方大于或等于n。
#include
voidmain()
{intm=0,t=1,n;
while(_____1________);
while(!
(t<=n&&t*2>=n)){
_____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/********1********/
if(tolower(str[i])<'a'||tolower(str[i])>'z')
{
/********2********/
str[n]=str[i];n++;
}
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;it[i]=s[i];
for(i=0;i/********1********/
t[sl+i]=s[sl-i];
/********2********/
t[sl]="\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++){
scanf("%f",&x);
/*******2********/
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;ifor(i=0;i{min=i;
for(j=i+1;j/******1******/
if(a[min]<=a[j])min=j;
/******2******/
temp=a[min];a[min]=a[j];a[j]=temp;/*数据交换*/
}
printf("\nThesortednumbers:
\n");/*输出排序结果*/
for(i=0;iprintf("\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;
s+=t;
/*****2*****/
}while(fabs(t)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;
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++){
/*******2******/
t=t*10+i;
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;
itoa(i/10,s-1);
}
voidmain()
{longn;
charstr[7]="";
scanf("%ld",&n);
/******2******/
itoa(n,str+6);
printf("%s",str);
}
(8)输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。
#include
#include
#include
voidmain()
{inti,n;
/*****1*****/
structaxy{floatx,y;}a;
scanf("%d",&n);
a=(float*)malloc(n*2*sizeof(float));
for(i=0;i/*****2*****/
scanf("%f%f",a[i].x,a[i].y);
for(i=0;iif(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;
while(n>1)
if(n%i==0){
printf("%d\t",i);
n/=i;
}
else
/********2*******/
n++;
}
三、编写程序
(1)在正整数中找出1个最小的、被3、5、7、9除余数分别为1、3、5、7的数,将该数以格式"%d"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat中。
#include
#include
voidmain()
{
/*考生在这里添加代码*/
}
(2)若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。
如:
220、284是1对亲密数,284、220也是1对亲密数。
在6~5000内找出所有的亲密数对,并将每对亲密数用语句fprintf(p,"%6d,%6d\n",a,b)写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。
#include
voidmain()
{FILE*p;inta,b,c,k;
p=fopen("design.dat","w");
/*考生在这里添加代码*/
}
(3)设计程序:
计算字符串s中每个字符的权重值,所谓权重值就是字符在字符串中的位置值与该字符的ASCII码值的乘积。
位置值从1开始依此递增。
将每个字符的权重值,以格式"%d"写入到源程序目录中Paper子目录下的新建文件design.dat中。
#include
#