1、上机程序调试及程序设计练习
上机程序调试及程序设计练习
一、程序填空
(1) 找Armstrong(水仙花)数:371=3*3*3+7*7*7+1*1*1
#include
2、is a Armstrong number!\n",i);
}
}
(2) 输入1个整数后,输出该数的位数。(例:输入3214则输出4,输入-23156则输出5)。
#include
3、的整数各位数字之和,如输入234则输出9,输入-312则输出6。
#include
4、则输出54321;若程序输入-34567,则输出-76543。
#include
5、ntf("%ld\t",f(12345)); printf("%ld\n",f(-34567));
}
(5) 调用函数f,从字符串中删除所有的数字字符。
#include
6、}
void main()
{ char str[80];
gets(str); f(str); puts(str);
}
(6) 调用find函数在输入的字符串中查找是否出现"the"这个单词。如果查到返回出现的次数,如果未找到返回0。
#include
7、
if (str[j+i]!=fstr[j]) break;
if (______2______) n++; // j>=3
i++;
}
return n;
}
void main()
{ char a[80];
gets(a);
printf("%d",find(a));
}
(7) 输入的一个小写字母,将字母循环后移5个位置后输出。例如:"a"变成"f","w"变成"b"。
#include
8、getchar();
if(______1______) // c>='a'&&c<='u'
c=c+5;
else
if (c>='v' && c<='z')
______2______ // c=(c-'a'+5)%26+'a';
putchar(c);
}
(8) 将字符串s中所有的字符'c'删除。
#include
9、ts(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
10、 x*x-5*x+sin(x)
void main()
{ int x; float max;
______1______ // max=f(1);
for(x=2;x<=10;x++)
______2______ // if (f(x)>max) max=f(x);
printf("%f\n",max);
}
(10) 输入三个整数,按由小到大的顺序输出这三个数。
#include
11、int *pb { /*交换两个数的位置*/ int temp; temp = *pa; *pa = *pb; *pb = temp; } void main() { int a,b,c,temp; scanf("%d%d%d",&a,&b,&c); if(a>b) swap(&a,&b); if(b>c) swap(&b,&c); if(______2______) // if ( a>b ) swap(&a,&b);
12、 printf("%d,%d,%d",a,b,c);
}
(11) 调用函数f,去除数组中的负数,输入数组x[7],输出结果为:1 3 4 6
#include
13、main()
{ int i,n=7,x[7]={1,-2,3,4,-5,6,-7};
_______2_______; // f (x, &n) ;
for(i=0;i
14、[5]={1.1, 2.2, 3.3, 4.4, 5.5 };
printf("%f\n", f(1.7,b,5) );
}
float f( _______1________ ) // float x, float *a, int n
{ float y=a[0], t=1; int i;
for(i=1; i 15、数字、和其他字符出现的次数。
#include 16、字个数*/ // 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 17、1________ // return 'a'+x-10;
}
int DtoH(int n,char *str)
{
int i=0;
while(n!=0)
{
________2________ // str[i]=trans(n%16);
n/=16;i++; }
return i-1;
}
void main()
{
int i,k,n;
char *str; // 注意:题目有错!str是悬挂指针。应改为: char str[80];
scanf("%d",&n);
k=DtoH(n, 18、str);
for (i=0;i<=k;i++) printf("%c",str[k-i]);
}
(15) 将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。
#include 19、 printf("%d", ______2______ ); // bin[j-1]
}
void main()
{
int n;
scanf("%d",&n);
Dec2Bin(n);
}
(16) 数列的第1、2项均为1,此后各项值均为该项前二项之和。计算数列第30项的值。
#include 20、)) ;
}
long f(int n)
{ if( ______2______ ) // n==1 || n==2
return 1;
else
return f(n-1)+f(n-2);
}
(17) 该程序计算四位学生的平均成绩,保存在结构中,然后列表输出这些学生的信息。
#include 21、age;
};
void GetAverage(struct STUDENT *pst) /* 计算平均成绩 */
{ int sum=0;
sum = ______1______; // pst->math+pst->english+pst->computer
pst->average = sum/3;
}
void main()
{ int i;
struct STUDENT st[4]={{"Jessica",98,95,90},{"Mike",80,80,90},
22、 {"Linda",87,76,70},{"Peter",90,100,99}};
for(i=0;i<4;i++)
{ GetAverage(______2______); // 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,
23、 st[i].computer,st[i].average);
}
}
(18) 输入m、n(要求输入数均大于0)。输出它们的最大公约数。
#include 24、k);
}
(19) 求出a中各相邻两个元素的和,并将这些和存放在数组b中,按每行3个元素的形式输出。例如:b[1]=a[0]+a[1],……,b[9]=a[8]+a[9]。
#include 25、]=______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 26、 1 ________); // scanf(“%d”,&n), n<=0 // 逗号表达式
while(!(t<=n&&t*2>=n)){
_____ 2 _____ // t=t*2;
m++;
}
printf(“%d\n”,m);
}
二、程序改错
(1) 输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
#include 27、ude 28、 // str[k]=str[i]; k++;
}
str[k]='\0';
printf("%s\n",str);
}
(2) 输入一个字符串,将组成字符串的所有字符先按顺序存放到字符串t中,再将字符串中的字符按逆序连接到字符串t后面。例如:输入"ABCD",则字符串t为"ABCDDCBA"。
#include 29、
t[i]=s[i];
for(i=0;i 30、
(3) 运行时输入10个数,然后分别输出其中的最大值、最小值。
#include 31、i==1) { max=x;min=x;}
if(x>max) max=x;
if(x 32、数组元素 */
for (i=0;i 33、a[j]=temp; /*数据交换*/
// 改成 temp=a[min]; a[min]=a[i]; a[i]=temp;
}
printf("\nThe sorted numbers: \n"); /* 输出排序结果 */
for (i=0;i 34、d main()
{ float x,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) 35、33。
#include 36、ld\n",s);
}
(7) 用递归法将一个六位整数n转换称字符串。例如:输入123456,应输出字符串"123456"。
#include 37、"%ld",&n);
/****** 2 ******/
itoa(n,str+6); // itoa(n,str+5);
printf("%s",str);
}
(8) 输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。
#include 38、 // struct axy { float x,y; } *a;
scanf("%d",&n);
a=(float*) malloc(n*2*sizeof(float));
for(i=0;i 39、 printf("%f,%f\n",a[i].x,a[i].y);
}
(9) 运行时输入n,则输出n的所有质数因子。例如:n=13860,则输出2、2、3、3、5、7、11。
#include 40、
}
else
/******** 2 *******/
n++; // i++;
}
三、编写程序
(1) 在正整数中找出1个最小的、被3、5、7、9除余数分别为1、3、5、7的数,将该数以格式"%d"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat中。
#include 41、n1.dat","w");
for( i=1; ;i++)
if (i%3==1 && i%5==3 && i%7==5 && i%9==7) break;
fprintf(p,"%d",i);
fclose(p);
}
(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。
#in 42、clude 43、fclose(p);
}
(3) 设计程序:计算字符串s中每个字符的权重值,所谓权重值就是字符在字符串中的位置值与该字符的ASCII码值的乘积。位置值从1开始依此递增。将每个字符的权重值,以格式"%d "写入到源程序目录中Paper子目录下的新建文件design.dat中。
#include 44、i=0;s[i]!='\0';i++)
{ w=(i+1)*s[i];
fprintf( p,"%d ",w);
}
fclose(p);
}
(4) 将数组a的每一行均除以该行上绝对值最大的元素,然后将a数组写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。
#include 45、x; int i,j;
/*考生在这里添加代码*/
for (i=0;i<3;i++)
{ x=a[i][0];
for (j=1;j<3;j++)
if (a[i][j]>x) x=a[i][j];
for (j=0;j<3;j++) a[i][j]/=x;
}
/***添加代码结束***/
p=fopen("design.dat","w");
for(i=0;i<3;i++) {
for(j=0;j<3;j++) fprintf(p,"%10.6f",a[i][j]);
f 46、printf(p,"\n");
}
fclose(p);
}
(5) z=f(x,y)=(3.14*x-y)/(x+y),若x、y取值为区间[1,6]的整数,找出使z取最小值的x1、y1,并将x1、y1以格式"%d,%d"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。
#include 47、1;x<=6;x++)
for (y=1;y<=6;y++)
if (f(x,y) 48、]的整数,找出使z取最小值的x1、y1,并将x1、y1以格式"%d,%d"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。
#include 49、2);
if (z 50、x2)*(x1-x2)+(y1-y2)*(y1-y2))
void main()
{ FILE *p; int i,j; float c,minc;
float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
float y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33};
minc=len(x[0],y[0],x[1],y[1]);
/*考生在这里添加代码*/
for (i=0;i<10;i++)
for (j=i+1;j<10;j++)






