第八周任务.docx
- 文档编号:5919078
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:28
- 大小:21.83KB
第八周任务.docx
《第八周任务.docx》由会员分享,可在线阅读,更多相关《第八周任务.docx(28页珍藏版)》请在冰豆网上搜索。
第八周任务
本周任务
一、阅读并运行下列程序,注意字符数组和字符指针的用法.
#include
intmain()
{char*str=“IloveChina!
”;
charstring[]=“IloveChina!
”;
printf(“%s\n”,string);
printf(“%c\n”,string[7]);
printf(“%s\n”,str);
str=”Iamastudent.”;
printf(“%s\n”,str);
/*
string=”Iamastudent.”;//这样可以吗?
printf(“%s\n”,string);
*/
return0;
}
例8.18将字符串a复制为字符串b,然后输出字符串b。
方法一:
数组元素实现
#include
intmain()
{chara[]=“Iamastudent.”,b[20];inti;
for(i=0;*(a+i)!
='\0';i++)
*(b+i)=*(a+i);
*(b+i)=‘\0’;
printf(“stringais:
%s\n”,a);
printf("stringbis:
");
for(i=0;b[i]!
='\0';i++)
printf(“%c”,b[i]);
printf("\n");
return0;
}
方法二:
用指针变量实现
#include
intmain()
{chara[]="Iamaboy.",b[20],*p1,*p2;
p1=a;p2=b;
for(;*p1!
=‘\0’;p1++,p2++)
*p2=*p1;
*p2=‘\0’;
printf(“stringais:
%s\n”,a);
printf(“stringbis:
%s\n”,b);
return0;
}
例8.20用函数调用实现字符串的复制。
方法一:
用字符数组名作为函数参数
voidcopy_string(charfrom[],charto[])
{inti=0;
while(from[i]!
='\0')
{to[i]=from[i];
i++;
}
to[i]='\0';
}
#include
intmain()
{chara[]="Iamateacher.";
charb[]="youareastudent.";
printf(“a=%s\nb=%s\n",a,b);
printf("copystringatostringb:
\n");
copy_string(a,b);
printf(“a=%s\nb=%s\n",a,b);
return0;
}
方法二:
用字符型指针变量作实参
#include
intmain()
{voidcopy_string(charfrom[],charto[]);
chara[]=“Iamateacher.”;
charb[]=“youareastudent.”;
char*from=a,*to=b;
printf(“a=%s\nb=%s\n",a,b);
printf("\ncopystringatostringb:
\n");
copy_string(from,to);
printf(“a=%s\nb=%s\n",a,b);
return0;
}
方法三:
用字符指针变量作形参和实参
voidcopy_string(char*from,char*to)
{for(;*from!
='\0';from++,to++)
{*to=*from;}
*to='\0';
}
函数体有多种简化写法,请见主教材
字符指针变量和字符数组注意事项
(1)字符数组由若干个元素组成,存放每个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址)。
(2)赋值方式。
可以对字符指针变量赋值,但不能对数组名赋值。
char*a;a=”IloveChina!
”;对
charstr[14];str[0]=’I’;对
charstr[14];str=”IloveChina!
”;错
(3)初始化的含义
char*a=”IloveChina!
”;与char*a;a=”IloveChina!
”;等价
charstr[14]=”IloveChina!
”;与
charstr[14];str[]=”IloveChina!
”;不等价
(4)存储单元的内容
char*a;scnaf(“%s”,a);错
char*a,str[10];
a=str;
scanf(“%s”,a);对
(5)字符数组中各元素的值是可以改变的,但字符指针变量指向的字符串常量中的内容是不可以被取代的。
chara[]=”House”,*b=”House”;
a[2]=’r’;对
chara[]=”House”,*b=”House”;
b[2]=’r’;错
(6)用指针变量指向一个格式字符串
char*format;
format=”a=%d,b=%f\n”;
printf(format,a,b);
相当于
printf(“a=%d,b=%f\n”,a,b);
练习
一、选择
1.有以下定义
chara[10],*b=a;
不能给数组a输入字符串的语句是()
A)gets(a)B)gets(a[0])C)gets(&a[0]);D)gets(b);
2.下面程序段的运行结果是_________.
char*s="abcde";
s+=2;printf("%d",s);
a)cdeb)字符'c'c)字符'c'的地址d)无确定的输出结果
3.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()
A)chars[10]="abcdefg";B)chart[]="abcdefg",*s=t;
C)chars[10];s="abcdefg";D)chars[10];strcpy(s,"abcdefg");
4.设已有定义:
char*st="howareyou";下列程序段中正确的是()
A)chara[11],*p;strcpy(p=a+1,&st[4]);B)chara[11];strcpy(++a,st);
C)chara[11];strcpy(a,st);D)chara[],*p;strcpy(p=&a[1],st+2);
5.有以下程序
main()
{
chara[]="programming",b[]="language";
char*p1,*p2;
inti;
p1=a;p2=b;
for(i=0;i<7;i++)
if(*(p1+i)==*(p2+i))
printf("%c",*(p1+i));
}
输出结果是()
A)gmB)rgC)orD)ga
6.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.
a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);
7.以下正确的程序段是_________.
a)charstr[20];b)char*p;
scanf("%s",&str);scanf("%s",p);
c)charstr[20];d)charstr[20],*p=str;
scanf("%s",&str[2]);scanf("%s",p[2]);
8.若有说明语句
chara[]="Itismine";
char*p="Itismine";
则以下不正确的叙述是________.
a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变d)a中只能存放10个字符
9.下面程序的运行结果是_______.
#include
#include
main()
{char*s1="AbDeG";
char*s2="AbdEg";
s1+=2;s2+=2;
printf("%d\n",strcmp(s1,s2));
}
a)正数b)负数c)零d)不确定的值
10.有以下程序
voidf(int*x,int*y)
{
intt;
t=*x;*x=*y;*y=t;
}
main()
{
inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(*p!
=*q){f(p,q);p++;q--;}
for(i=0;i<8;i++)printf("%d,",a[i]);
}
程序运行后的输出结果是______。
A)8,2,3,4,5,6,7,1,B)5,6,7,8,1,2,3,4,C)1,2,3,4,5,6,7,8,D)8,7,6,5,4,3,2,1,
二、编程
以下是用c++语法写的程序,仔细阅读,并把其转换c语言程序。
cin:
输入cout:
输出
1.编写函数intatoi(chars[]),将字符串s转化为整型数返回。
注意负数处理方法。
解:
用指针处理字符串非常方便。
使用符号位来处理负数。
intatoi(chars[]){
inttemp=0,f=1,i=0;
while(s[i]!
='\0'&&s[i]!
='-'&&(s[i]<'0'||s[i]>'9'))i++;//去除串前部无效字符
if(s[i]=='-'){//读负号
f=-1;
i++;
}
if(s[i]<'0'||s[i]>'9')cout<<"error!
"< while(s[i]>='0'&&s[i]<='9'){//转换数字串 temp=temp*10+s[i]-48; i++; } returnf*temp; } intmain(){ charnum[20]; cin.getline(num,19);//输入一个字符串 cout< return0; } 2.分别编写下列字符串处理函数 (1)char*strcat1(char*s,constchar*ct); 将串ct接到串s的后面,形成一个长串。 【例6.7】以数组为参数,现用指针为参数。 (2)intstrlen1(constchar*s); 求字符串长度的函数,返回串长(不包括串结束符)。 (3)char*reverse(char*); 反置字符串s,即可将“break”成为“kaerb”。 (4)char*strchr(constchar*cs,charc); 查找字符c在串cs中第一次出现的位置,返回指向该字符的指针,若没有出现则返回NULL。 (5)char*strstr(constchar*cs1,constchar*cs2); 返回串cs2作为子串在cs1中第一次出现的位置,若没有出现则返回NULL。 解: 为了函数的通用性,有些可不要返回值的函数,也保留返回值。 反置字符串函数,从串两头的指针同时向中间移动,重合或交错时停止。 查找子串,先找子串的第一个字符,再核对子串其他字符。 #include char*strcat1(char*s,constchar*ct){ char*st=s; while(*s)s++;//*s作为条件,等效*s! =0 while(*s++=*ct++); returnst; } intstrlen1(constchar*s){ inti=0; while(*s++)i++; returni; } char*reverse(char*s){ chartemp,*temp1=s,*temp2=s; while(*temp2)temp2++; temp2--;//指针移回串尾 while(temp2-temp1>0){//注意此处,从串两头的指针同时向中间移动,重合或交错时停止 temp=*temp1; *temp1=*temp2; *temp2=temp; temp1++; temp2--; } returns; } char*strchr(constchar*cs,charc){ while(*cs! =c&&*cs)cs++; if(*cs==0)cs=NULL;//未找到返回NALL return(char*)cs; } char*strstr(constchar*cs1,constchar*cs2){ char*temp; char*temp1=(char*)cs2; while(*cs1){//只要主串还有字符未查,则继续 while(*cs1! =*cs2&&*cs1)cs1++; //找到主串含有子串的第一个字符,或主串查完停止 temp=(char*)cs1; temp1=(char*)cs2; if(*cs1){//核对子串其他字符 while(*cs1++==*temp1++||*temp1); if(*temp1==0)returntemp;//找到子串返回 } } returnNULL;//未找到返回NAL } intmain(){ chara[40]="李明"; charb[20]="是集美大学学生"; charc[40]="JimeiUniversity"; char*cp;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 任务