printf("%d",b[i]);
}
程序调试
①调试程序时通常先将N定义为一个小数值,当程序调试成功后再将N定义为常数10,这样可以提高程序的调试效率。
②在设计调试用数据时,应考虑各种数据情况,以便提高程序的可靠性。
程序运行结果:
3.字母统计问题。
输入一个长度小于80的字符串,统计其中字母的个数。
/*字母统计问题程序*/
#include"stdio.h"
voidmain()
{
chars[20];
inti=0,counter=0;
printf("请输入字符串:
\n");
gets(s);
while(s[i]!
='\0')
{
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
counter++;
i++;
}
printf("Total:
%d\n",counter);
}
程序调试
运行程序,输入一个长度不足20的字符串,察看并分析程序运行结果。
②运行程序,输入一个长度恰好是20的字符串,察看并分析程序运行结果。
③运行程序,输入一个长度超过20的字符串,察看并分析程序运行结果。
④运行程序,输入一个全是字母的字符串,察看并分析程序运行结果。
⑤运行程序,输入一个没有字母的字符串,察看并分析程序运行结果。
⑥运行程序,只输入一个回车符,察看并分析程序运行结果。
⑦运行程序,输入你认为最有特点的一个字符串,察看并分析程序运行结果。
4.奇偶数问题。
设有一维整型数组共有20个元素,且偶数与奇数各占一半,将该数组变换为2×10的二维数组且偶数和奇数各成一行。
/*二维数组问题程序*/
include"stdio.h"
voidmain()
{
inta[20],b[2][10];
inti,j,col1=0,col2=0;
printf("请输入数据:
\n");
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
if(a[i]%2==0)
b[0][col1++]=a[i];/*偶数存储在b[0]数组*/
else
b[1][col2++]=a[i];/*奇数存储在b[1]数组*/
}
for(i=0;i<2;i++)
{
for(j=0;j<10;j++)
printf("%6d",b[i][j]);
printf("\n");
}
}
程序调试
输入一组数据,其中偶数个数与奇数个数相等,察看并分析程序的运行结果。
②输入一组数据,其中偶数个数与奇数个数不相等,看程序能否正常运行,并对运行结果进行分析。
分析:
当连续的奇数输入时,他将把数组的空间挤占,使得其他数组元素无法进入。
③调试完善程序,使得对任何输入数据,程序都能正常运行:
或者给出一个正确的执行结果,或者给出一个恰当的提示信息。
(二)编制下列程序
1.只使用一个一维数组,实现本实验的数据分类问题。
2.分别使用scanf()函数的“%c”格式和“%s”格式输入字符串,实现本实验的字母统计问题。
3.修改奇偶数问题程序,使得一维整型数组的20个元素保存在10×2的二维数组中,且偶数与奇数分别存储在两列上。
4.写一个函数,使给定的一个二维整型数组(3×3)转置,即行列互换。
5.写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
四、思考题
1.为什么要引入数组?
引入数组的意义是什么?
要从数组的定义和数组元素的引用去分析。
用数组去完成一个多数据的任务,对多数据的引用处理更方便。
2.如何理解一维数组的维数和二维数组的维数。
维数就是几个变量,一维就是一串数,二维就是一个面的数。
3.字符数组和字符串的联系和区别是什么?
从他们的定义和输入输出来分析。
字符数组是没有结束标志的,而字符串是有长度的。
例如定义数组长度为15,因此输入的字符串长度必须小于15,以留出一个字节用于存放字符串结束标志`\0`。
应该说明的是,对一个字符数组,如果不作初始化赋值,则必须说明数组长度。
还应该特别注意的是,当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。
.用字符数组存放字符串
例如:
charstr[10]
表示str是一个字符型数组,可以存放10个字符。
为了表示一个字符串的结束位置,可以用'\0'作标志。
说明一个字符数组时,有不同的初始化方式:
①逐个字符对数组元素赋初始值:
charstr1[10]={'S','t','u','d','e','n','t'};
②用串常量初始化
charstr2[10]={"Student"};
charstr3[]={"Student"};
或者省略{}:
charstr3[]="Student";
字符串用scanf(“%s”,~~~~~);
数组用for循环依此输出。