实验8 指针与数组习题及参考答案

上机实验8 指针与数组

一.实验目的

1. 掌握用下标、数组名或指针等不同方式引用数组元素; 2. 掌握数组名作函数参数的方法;

3.掌握常用的字符串处理函数和字符处理函数; 4.掌握用指针处理字符串的方法;

二.实验内容

【实验题1】程序填空:自定义函数del(s), 功能是删除字符串s中的数字字符, 要求使用字符处理函数isdigit()和字

符串处理函数strcpy()。 在主函数中输入1个字符串,然后调用函数del(), 用于删除其中的数字字符,并输出处理后的字符串。

提示:从字符串s的首字符开始, 到结束符’\\0’之前为止,逐个检查第i个字符是否是数字字符,是则删除该字符——使用字符判别函数 isdigit(s[i]), 如果s[i]是数字字符,该函数返回1,否则返回0. 难点: 如何删除s的第i个字符?——使用字符串复制函数strcpy(), 将子串s+i+1(从字符s[i+1]开始的子串)复制到给s+i (从字符s[i]开始的子串),即strcpy(s+i, s+i+1)。

#include #include < ctype.h > #include < string.h > void main() {

char str[80];

gets( str); //输入字符串str

del( str ); //调用函数del(),删除str中的数字 puts(str); //输出字符串str }

void del(char *s) //line 12 函数定义 { int i=0; while(s[i]!='\\0')

if( isdigit(s[i]) ) strcpy( s+i, s+i+1) ; // 如果字符s[i]是数字,用函数strcpy删除它 else i++; // 否则,继续查看下一个字符 }

运行程序,输入字符串\,输出结果是: ab

语句行line 4和line 12分别是函数声明和函数定义首部,其中的参数采用了指针的形式,此外,还可采用数组名的形式,即亦可写为 void del( char s[] )

void del( char *s); //line 4 函数声明

【实验题2】分析程序运行结果,源程序如下

#include #include

void main()

{ char *s1=\ while (*s2!='\\0') {

puts(s1+strlen(s2)-1 ); s2++; }

}

运行程序运行时,共循环4次,每次输出一行字符串,其中

1)第1行输出:* ,此时,字符串s2= \ , strlen(s2)= 4 , s1+strlen(s2)-1= s1+ 3 ; 2) 第2行输出:** ,此时,字符串s2= \ , strlen(s2)= 3 , s1+strlen(s2)-1= s1+ 2 ; 3) 第3行输出:*** ,此时,字符串s2= \ , strlen(s2)= 2 , s1+strlen(s2)-1= s1+ 1 ; 4) 第4行输出:**** ,此时,字符串s2= \ , strlen(s2)= 1 , s1+strlen(s2)-1= s1+ 0 .

【实验题3】程序填空:用选择法将5个字符串“Zhao”、“Qian”、“Sun”,“Li”,“Wang”按降序排序,并输出(要

求:使用字符型指针数组) #include

#include //Line 2 void main() { char *name[5]={\ //1个指针对应1个字符串,共5个字符型指针 int i,j,k; for(i=0; i< 4 ; i++) { k= i; for(j= i+1 ; j< 5 ; j++) if( strcmp(name[j], name[k]) >0 ) k= j; //注意:是降序 s= name[i] ; name[i]= name[k] ; name[k]= s ; //交换name[i]与name[k] } for(i=0; i<5; i++) puts( name[i] ); //输出排序后的字符串 }

运行程序,结果显示为: ——如果删除语句行Line2,程序是否能正常编译?为什么?--不能,因为要使用字符串比较函数strcmp,必须要包含string.h

【实验题4】程序设计:在主函数中输入一段你或者你们组最想说的话(英文),以这句

话作为字符串,编写函数1:输出本字符串并,计算字符串长度;函数2:找出期中大写字母、小写字母、空格、数字,以及其他字符各有多少。

#include int main() {

void length(char *p); void check(char *p);

char *str=\length(str);//输出长度

check(str);//检测字符串字符类型个数 return 0; }

void length(char *p) //输出长度函数

{int n=0;

printf(\ while (*p!='\\0') {n++; p++; }

printf(\}

void check(char *p)//检测字符串字符个数函数 {

int upper=0,lower=0,digit=0,space=0,other=0,i=0; while (*p!='\\0')

{if (('A'<=*p) && (*p<='Z')) ++upper;

else if (('a'<=*p) && (*p<='z')) ++lower; else if (*p==' ') ++space;

else if ((*p<='9') && (*p>='0')) ++digit; else

++other; p++; }

printf(\printf(\}

【实验题5】程序设计:编写一个程序,输入组号,输出该组的组名。例如,输入“9”,

则输出“开心小团体”,要求用指针处理。

#include int main()

{char *group_name[11]={\六只老虎\第三组\ \铠甲勇士\农夫山泉\学霸6+1\开心小团体\小霸王\int n;

printf(\scanf(\

if ((n<=10) && (n>=1))

printf(\else

printf(\return 0; }

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4