数组和循环程序设计
一、实验目的
1.熟悉数组的定义、初始化、元素引用方法。
2.熟悉while、do-while、for语句的格式与功能,掌握循环程序设计的一般方法。
3.掌握使用单重循环处理一维数组元素的程序设计方法。
4.掌握使用循环结构处理数组中存放字符串的程序设计方法。
5.掌握使用二重循环处理二维数组元素的程序设计方法。
6.熟悉系统提供的字符串处理函数。
二、预习要求
1.复习while、do-while、for、break、continue语句的格式和功能。
2.复习一维数组和二维数组的定义与初始化方法。
3.复习字符型数组的定义和初始化方法。
4.复习字符串处理函数的调用格式和功能。
三、实验准备
【问题一】循环结构的程序设计
编一个C程序,计算并输出数列:1、3.5…、2n-1、…的前n项之和,其中的n由键盘输入。(要求分别用for、while、do-while语句来完成)
【待填充的源程序参考清单】
方法一(用for语句实现)
main()
{long s,n,k, i;
scanf("____________________",&n);
k=2*n-1;
_____________________;
for(i=1;i<=k;i++,_________________) s+=i;
printf("1+3+…+%1d=%1d\n",k,s)
}
方法二(用while语句实现)
main()
{ long s________________________,n,i=1;
scanf("%1d",&n);
while(_______________________)
{ s+=i;
_____________________;
}
printf("1+3+…+%1d=%1d\n", 2*n-l,s);
}
方法三(用do语句实现)
main()
{ long s=0,n,i=___________________;
scanf("%1d",&n);
do
{ s+=i_____________________;
i++;
} while(____________________);
printf("1+3+…+%1d=%1d\n",2*n-1,s);
}
【问题二】一维数组及单重和二重循环的应用
编一个C程序,从键盘上输入n(n≤10)和 n个整数,存入数组a中。先依次输出各个数组元素的值(a[0]、a[1]、...);然后对数组a的所有元素值按从小到大的顺序重新排序;再依次输出各个数组元素的值(a[0]、a[1]…)。
【待填充的源程序参考清单】
main()
{ int a[10],n,i,j,_________________;
printf("input n=");
scanf("%d",&n);
printf("input array a[0]a[l]… a[%d]:\n",n-1);
for(i=0;i<n;i++)
scanf("%d",______________________);
printf("before sort:array\n");
for(i=0;i<n;i--)
printf("%d",a[i]);
printf("\n");
for(i=0;i<_______________________;i++)
{ min=i;
for(j=___________________;j<n;j++)
if(a[j]<a[min])_________________;
ax=____________________;
a[i]=a[min];
____________________=ax;
}
printf("after sort:array\n");
for(i=0;i<n;i++)
printf("%d", a[i]);
printf("\n");
}
【问题三】二维字符型数组及二重循环的应用
编一个C程序,从键盘上输入4个字符串,要求每个字符串的长度都要大于5、小于81。将这4个字符串按下列要求存入数组a[4][81]中。
a[0][0],a[0][l],…a[0][80]中存放第1个字符串
a[1][0],a[1][1],…a[1][80]中存放第2个字符串
a[2][0],a[2][1],…a[2][80]中存放第3个字符率
a[3][0],a[3][1],…a[3][80]中存放第4个字符串
先输出这四个字符串;然后按照下列要求输出新的五串字符:
a[0][0],a[1][0],a[2][0],a[3][0]中存放的字符组成的第1串字符
a[0][l],a[1][l],a[2][l],a[3][l]中存放的字符组成的第2串字符
a[0][2],a[1][2],a[2][2],a[3][2]中存放的字符组成的第3串字符
a[0][3],a[1][3],a[2][3],a[3][3]中存放的字符组成的第4串字符
a[0][4],a[1][4],a[2][4],a[3][4]中存放的字符组成的第5串字符
【待调试的源程序参考清单】
main()
{ char a[4][81];
int i,j;
for(i=0;i<4;i++)
{ printf("input NO.%d string:",i+1);
scanf("%s",&a[ i]);
}
printf("\nold string:\n");/*输出原字符串*/
for(i=0;i<4;i++)
printf("NO.%d:%c\n",i+1,a[i]);
printf("\nnew string:\n");/*输出新字符串*/
for(i=0;i<4;i++)
{ printf("NO.%d:",i);
for(j=0;j<5;j++)
printf(”%c”,a[ i][ j]);
printf("\n");
}
}
【问题四】一维数组及单重循环的应用
编一个C程序,从键盘上输入一个由10位二进制正整数组成的字符串,将其转换成一个+进制正整数输出。
提示:设一个10位的二进制正整数s=a9a8a7a6a5a4a3a2a1a0 ,则s对应的+进制数可以使用下列两种公式来计算。
公式一:
s=a9*a9+a8*a8+a7*a7+a6*a6+a5*a5+a4*a4+a3*a3+a2*a2+a1*a1*a0*20
注:其中的2i称为第i位的权。
公式二:
s=((((((((a9*2+a8)*2+a7)*2+a6)*2+a5)*2+a4)*2+a3)*2+a2)*2+a1)*2+a0
【自己编写的原程序清单】
【方法一】利用公式一。
输入二进制正整数存入一个字符型数组,然后按照从前向后的顺序取出每位上的数字字符,处理成对应的二进制数字,按照下列公式将其加到+进制整数中:
+进制整数=+进制整数+当前位的二进制数字*该位数字的权
提示1:存放+进制整数的变量事先要清0。
提示2:各位的权可以存放在某个数组中,需要时从该数组中获得某位上的权。
【方法二】利用公式二。
输入二进制正整数存人一个字符型数组,然后按照从前向后的顺序取出每位上的数字字符,处理成对应的二进制数字,按照下列公式将其加到+进制整数中:
+进制整数一+进制整数*2+当前位的二进制数字
(责任编辑:城市网)