上机程序调试及程序设计练习
{
________2________ n/=16;i++; } return i-1;
}
void main() {
int i,k,n;
char *str; // 注意:题目有错!str是悬挂指针。应改为: char str[80]; scanf(\k=DtoH(n,str);
for (i=0;i<=k;i++) printf(\}
15) 将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。
#include
int bin[32],j;
for(j=0;m!=0;j++) {
bin[j]= ______1______; m=m/2; }
for( ; j!=0; j-- )
printf(\______2______ ); }
void main() {
int n;
scanf(\ Dec2Bin(n); }
16) 数列的第1、2项均为1,此后各项值均为该项前二项之和。计算数列第30项的值。#include
_______1______ void main()
{ printf(\}
long f(int n)
{ if( ______2______ ) return 1; else
6 of 21 4/1/2013
(
(
上机程序调试及程序设计练习
return f(n-1)+f(n-2); }
(17) 该程序计算四位学生的平均成绩,保存在结构中,然后列表输出这些学生的信息。
#include
void GetAverage(struct STUDENT *pst) /* 计算平均成绩 */ { int sum=0;
sum = ______1______; pst->average = sum/3; }
void main() { int i;
struct STUDENT st[4]={{\ {\ for(i=0;i<4;i++)
{ GetAverage(______2______); }
printf(\ for(i=0;i<4;i++)
{ printf(\ st[i].computer,st[i].average); } }
(18) 输入m、n(要求输入数均大于0)。输出它们的最大公约数。
#include
{ int m, n, k;
while ( scanf(\______1______ ); for (___2___ ; n%k!=0 || m%k!=0 ; k--) ; printf(\}
(19) 求出a中各相邻两个元素的和,并将这些和存放在数组b中,按每行3个元素的形式输出。例如:
b[1]=a[0]+a[1],……,b[9]=a[8]+a[9]。 #include
7 of 21 4/1/2013
上机程序调试及程序设计练习
{ int a[10],b[10],i;
printf(\ \
for (i=0; i<10;i++) /* 数组输入 */ scanf(\ for (i=1; i<10; i++)
b[i]=______1______; /* 计算b数组中的元素 */ for (i=1; i<10; i++) { printf(\
if (______2______) printf(\ /* 每行打印3个数据 */ } }
(20) 输入整数n(n>0),求m使得2的m次方小于或等于n,2的m+1次方大于或等于n。#include
{ int m=0,t=1,n;
while( _____ 1 ________); while(!(t<=n&&t*2>=n)){
_____ 2 _____ m++; }
printf(“%d\\n”,m); }
二、程序改错
(1) 输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
#include
#include
{ char str[256]; int i,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(\} 8 of 21 4/1/2013 上机程序调试及程序设计练习 (2) 输入一个字符串,将组成字符串的所有字符先按顺序存放到字符串t中,再将字符串中的字符按 逆序连接到字符串t后面。例如:输入\,则字符串t为\。 #include void fun(char *s,char *t) { int i,sl; sl=strlen(s); for(i=0;i /********1********/ t[sl+i]=s[sl-i]; /********2********/ t[sl]=\ } void main() { char s[100],t[100]; scanf(\ fun(s,t); printf(\} (3) 运行时输入10个数,然后分别输出其中的最大值、最小值。 #include { float x,max,min; int i; /******** 1 *******/ for(i=0;i<=10;i++) { scanf(\ /******* 2 ********/ if(i=1) { max=x;min=x;} if(x>max) max=x; if(x printf(\} (4) 用选择法对10个整数按升序排序。 #include { int i, j, min, temp ; int a[N]={5, 4, 3, 2, 1, 9, 8, 7, 6, 0 }; 9 of 21 4/1/2013 上机程序调试及程序设计练习 printf(\ /* 输出数组元素 */ for (i=0;i for (i=0;i for (j=i+1; j if (a[min]<=a[j]) min =j; /****** 2 ******/ temp=a[min]; a[min]=a[j]; a[j]=temp; /*数据交换*/ } printf(\ /* 输出排序结果 */ for (i=0;i (5) 输入x和正数eps,计算多项式1-x+x*x/2-x*x*x/3!+……的和直到末项的绝对值小于eps为止。 #include { float x,eps,s=1,t=1,i=1; scanf(\ do { /***** 1 *****/ t=-t*x/++i; s+=t; /***** 2 *****/ } while(fabs(t) (6) 运行时若输入a、n分别为3、6,则输出下列表达式的值:3+33+333+3333+33333+333333。 #include { int i,a,n; long t=0; /********* 1 *******/ s=0; scanf(\ for(i=1;i<=n;i++) { /******* 2 ******/ t=t*10+i; s=s+t; } s=s*a; 10 of 21 4/1/2013