实验9 数组(2)
一、实验目的:
1、理解字符数组的作用、特点;
2、掌握字符数组、字符串的使用;
3、熟悉打擂台等典型算法。
二、实验内容
1、(基础题)输入一个字符串(长度不超过100个字符),请编程统计其中的字母、数字、空格(含制表符)、标点符号的个数并输出。如下图所示:
(提示:(1)用字符数组存储字符串,数组长度定义100.(2)在教材的p385-386中有字符和字符串函数,可以直接引用。如isalpha()判断字母函数、isdigit()判断数字函数、isspace()判断空格函数、ispunct()判断标点函数等)
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main()
{
char str[101];
int i;
int a[4]={0};
printf("请输入一个长度不超过200的字符串: ");
gets(str);
for(i=0;i<strlen(str);i++)
{
if (isalpha(str[i])!=0)a[0]++;
if (isdigit(str[i]))a[1]++;
if (isspace(str[i]))a[2]++;
if (ispunct(str[i]))a[3]++;
}
printf("该字符串的字母个数、数字个数、 空格个数、标点个数分别为:");
for(i=0;i<4;i++)
printf("%d\t",a[i]);
return 0;
}
2、参考课件ppt,完成如下程序:由用户输入10个字符串,每个字符串长度不超过20个字符,要求找出其中的最小者。
#include<stdio.h>
#include<string.h>
int main()
{
char str[10][20];
char max[20];
int i;
printf("请输入10个字符串:\n");
for(i=0;i<10;i++)
gets(str[i]);
strcpy(max,str[0]);
for(i=1;i<10;i++)
{
if(strcmp(str[i],max)>0)
strcpy(max,str[i]);
}
printf("\n最大字符串为:%s\n",max);
return 0;
}
3(基础题)、迷宫游戏开发。查阅实验文件里面提供的迷宫游戏初级开发思路.ppt文档,并观看迷宫初级版无声音.mp4视频文件,补充代码,完成迷宫游戏初级版本开发。
#include <stdio.h> //printf()
#include <conio.h> //getch()
#include <stdlib.h> //system()
#define M 10
#define N 30
int main(){
int i,j,x=1,y=1;//玩家初始位置
//构建迷宫
char c, maze[M][N]={"# ############################",
"#0 ###########################",
"# ## #### #############",
"### #####################",
"#### # ##################",
"##### ## ###############",
"###### ### ############",
"######## ###### ##",
"######### #### ",
"##############################"};
//绘制迷宫
for(i=0;i<M;i++)
{
for (j=0;j<N;j++)
printf("%c",________(1)______);
printf("\n");
}
//走迷宫
while(x != M-2 || y!=N-1)
{
c = getch();//接收玩家输入的方向指令
switch(c)
{
case 'd':case 'D': //向上走一步
if (_____(2)______ )
{
________(3)________ //此处3条语句
}
break;
case 'u':case 'U'://向下走一步
if (maze[x+1][y] != '#' )
{
maze[x][y] = ' ';
x++;
maze[x][y] = '0';
}
break;
case 'l':case 'L': //向左走一步
if (____(4)______ )
{
________(5)________ //此处3条语句
}
break;
case 'r':case 'R': //向右走一步
if (____(6)______ )
{
________(7)________ //此处3条语句
}
break;
default:
;//其他字符,则空操作
}
system("cls"); //清屏
for(i=0;i<M;i++) //绘制新迷宫
{
for (j=0;j<N;j++)
printf("%c",maze[i][j]);
printf("\n");
}
}
printf("win!"); //结束
return 0;
}
由于语言不同 开始时如有乱码请随意按一个键激活
上 下 左 右
d/D u/U l/L r/R
#include <stdio.h> //printf()
#include <conio.h> //getch()
#include <stdlib.h> //system()
#define M 10
#define N 30
int main(){
int i,j,x=1,y=1;//玩家初始位置
//构建迷宫
char c, maze[M][N]={"# ############################",
"#0 ###########################",
"# ## #### #############",
"### #####################",
"#### # ##################",
"##### ## ###############",
"###### ### ############",
"######## ###### ##",
"######### #### ",
"##############################"};
//绘制迷宫
for(i=0;i<M;i++)
{
for (j=0;j<N;j++)
printf("%c",maze[M][N]);//
printf("\n");
}
//走迷宫
while(x != M-2 || y!=N-1)
{
c = getch();//接收玩家输入的方向指令
switch(c)
{
case 'd':case 'D': //向上走一步
if (maze[x-1][y] != '#' )
{
maze[x][y] = ' ';
x--;
maze[x][y] = '0';//此处3条语句
}
break;
case 'u':case 'U'://向下走一步
if (maze[x+1][y] != '#' )
{
maze[x][y] = ' ';
x++;
maze[x][y] = '0';
}
break;
case 'l':case 'L': //向左走一步
if (maze[x][y-1] != '#' )
{
maze[x][y] = ' ';
y--;
maze[x][y] = '0';//此处3条语句
}
break;
case 'r':case 'R': //向右走一步
if (maze[x][y+1] != '#' )
{
maze[x][y] = ' ';
y++;
maze[x][y] = '0'; //此处3条语句
}
break;
default:
;//其他字符,则空操作
}
system("cls"); //清屏
for(i=0;i<M;i++) //绘制新迷宫
{
for (j=0;j<N;j++)
printf("%c",maze[i][j]);
printf("\n");
}
}
printf("win!"); //结束
return 0;
}
4、(提高题)输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
解题思路:通过空格统计单词:由空格出现的次数(连续的空格作为一次空格;一行开头的空格不统计在内)决定单词数目,从第一个字符开始逐个检查是否为空格.
(1)如测出某字符为非空格,而它前面的字符是空格,则表示“新的单词开始”。设变量num,用来累计单词数,初值为0。当发现“新的单词开始”,使num累加1,表示增加一个单词
(2)如果当前字符为非空格而其前面的字符也是非空格,则意味着仍然是原来那个单词的继续,num不应再累加1
(3)设变量word,用来表示前一个字符是否空格,以0代表前一个字符是空格; word等于1,意味着前一个字符为非空格,word的初值置为0.
#include<stdio.h>
#include<string.h>
int main ()
{
char str[100];
int i,num=0;
printf("请输入一行字符串:\n");
gets(str);
if(str[0]=='\0'||str[0]==' ')
printf("There are 0 word in this line.");
else
num=1;
for(i=0;i<100;i++)
{
if(str[i]==' ')num++;
else if(str[i]=='\0')
{
printf("There are %d words in this line.",num);break;
}
}
return 0;
}