函數(shù):strcpy(t,s);
把s中的字符串拷貝到t中。s可以是一個數(shù)組名,也可以是有個字符串常量。成功,返回第一個參數(shù)的值。
例:
include <stdio.h>
include <string.h>
void main()
{
char t[50];
//char s[]="i love beijing";
//strcpy(t,s);
strcpy(t,"i love beijing");
puts(t);
// puts(s);
}
練習(xí):mystrcpy();
include <stdio.h>
//#include <string.h>
void mystrcpy(char *a,char *b)
{
int i=0;
while(b[i]!='\0')
{
a[i]=b[i];
i++;
}
a[i]='\0';
}
void main()
{
char a[50];
char b[]="abcdefg";
mystrcpy(a,b);
puts(a);
}
include <stdio.h>
include <string.h>
void main()
{
char a[50]="abcdefg";
char b[]="hijklmn";
char *p=strcpy(a+2,b);
//strcpy成功,返回第一個參數(shù)的值。
puts(a);
puts(p);
}
strncpy(a,b,n):把b中的n個字符拷貝到a中。
include <stdio.h>
include <string.h>
void main()
{
char a[10]="abcdefg";
char b[20]="bbbbbbbbnmnmnmnm";
char *p=strncpy(a+3,b,5);
//成功,返回第一個參數(shù)的值。
puts(a);
puts(p);
}
strcat(a,b);把b中的字符串接在a中的最后。作為一個整體的字符串存在a中。所以a數(shù)組的大小應(yīng)足夠容納得下最終的字符串。
有返回值,返回的是第一個參數(shù)的值。
例:
include <stdio.h>
include <string.h>
void main()
{
char a[50]="abcd";
char b[]="efgh";
char *p=strcat(a,b);
puts(a);
puts(b);
puts(p);
}
strncat(a,b,n):把b中的n個字符接在a的后面,并把最終的字符串存在a中。有返回值,返回第一個參數(shù)的值。
include <stdio.h>
include <string.h>
void main()
{
char a[50]="abcd";
char b[]="efgh";
char *p=strncat(a,b,3);
puts(a);
puts(b);
puts(p);
}
strcmp(str1,str2); 比較字符串str1和str2是否相等(一致),相等,返回0;否則,str1大于str2,返回整數(shù);str1小于str2,返回負(fù)數(shù)。
例:
include <stdio.h>
include <string.h>
void main()
{
char a[50]="abdd";
char b[]="abcd";
int n=strcmp(a,b);
printf("%d\n",n);
}
2個字符串比大小:一個字符一個字符的比,比較第一個不相同字符,哪一個ascii值大,則這個字符串大。
abcde
abcfe => d<f 所以下面的字符串大。
strncmp(str1,str2,n):比較str1和str2前n個字符是否一致。一致返回0,
include <stdio.h>
include <string.h>
void main()
{
char *list[]={"wtl is nb","wtl is tall","wtl is smart","wtl is beautiful","wtl is wise"};
int i;
for(i=0;i<=4;i++)
{
if(strncmp(list[i],"wtl is a good boy",6)==0)
printf("%s\n",list[i]);
}
}
int a=1;
char c='a';
printf("this is %d %c",a,c);
sprintf(b,"this is %d %c",a,c);
sprintf():把printf本該輸出到屏幕上的字符串輸出到一個字符數(shù)組中去了。
例:
include <stdio.h>
include <string.h>
void main()
{
int a=1;
char b='b';
char c[30];
sprintf(c,"this is %d %c",a,b);
printf("%s\n",c);
}
//strchr() strrchr()
學(xué)生:
年齡:int
性別:char
姓名:char []
分?jǐn)?shù):float
自定義一個數(shù)據(jù)類型,用來接受學(xué)生的個人信息
struct student
{
int age;
char sex;
char name[30];
flaot score;
};
//用該自定義的數(shù)據(jù)類型定義一個變量stu,用來接受學(xué)生的個人信息。
struct student stu; //int a;
例:
include <stdio.h>
//定義一個變量,來接受一個學(xué)生的個人信息。
//自定義一個相應(yīng)的數(shù)據(jù)類型
struct student
{
int num;
char name[30];
char sex;
float score;
};//分號不能漏
void main()
{//用該數(shù)據(jù)類型定義的變量就可以接受學(xué)生信息 類型名+變量名
struct student stu1={13,"xxx",'m',78.9};
//數(shù)據(jù)類型本身不占內(nèi)存,但是用類型定義的變量會給變量分配空間。
printf("num:%d name:%s sex:%c score:%.1f\n",stu1.num,stu1.name,stu1.sex,stu1.score);
}
/*
1.結(jié)構(gòu)體類型定義通常會放在頭文件中,如果不放在頭文件中,通常會放在程序#include的后面
2.定義好結(jié)構(gòu)體類型后,當(dāng)要用該類型定義變量時,結(jié)構(gòu)體類型名為:struct +結(jié)構(gòu)體名 +變量名。如:struct student stu1; struct關(guān)鍵字不能省略
3.結(jié)構(gòu)體名可以和成員變量名同名:
例:
struct test
{
int a;
int test;
};
二者互不影響
4.一個結(jié)構(gòu)體中的成員可以是另一個結(jié)構(gòu)體類型定義的變量
例:
struct data
{
int year;
int month;
int day;
};
struct student
{
int num;
char name[20];
struct data bithday;
float score;
};
訪問結(jié)構(gòu)體成員: 結(jié)構(gòu)體變量名.成員名
定義一個學(xué)生: struct student a;
訪問它的學(xué)號: a.num;
訪問他的出生year: a.birthday.year;
5.結(jié)構(gòu)體中的成員名,可以和其他變量名同名,也互不影響
6.定義結(jié)構(gòu)體類型的時候,它的數(shù)據(jù)成員不能是自己的結(jié)構(gòu)體類型定義的變量。
例:
struct test
{
int a;
struct test b; 錯
};
7.結(jié)構(gòu)體變量除了在初始化的時候可以整體賦值外,其他時候不能整體訪問,只能通過訪問它的成員變量來訪問它。
8.用一個結(jié)構(gòu)體類型定義一個變量,必須在定義變量之前得存在這個結(jié)構(gòu)體類型的定義,否則出錯。
*/
定義一個結(jié)構(gòu)體變量:
1.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量
例:
struct student
{
int num;
char sex;
};
struct student stu1;
2.在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量
struct student
{
int num;
char sex;
}stu1,stu2; 定義了2個結(jié)構(gòu)體變量stu1,stu2.
struct student stu3;
3.定義無名結(jié)構(gòu)體
struct
{
int num;
char sex;
}stu1,stu2;
這總無名結(jié)構(gòu)體類型只能用一次,所以只能在它定義類型的同時定義變量。后面用不了了。
include <stdio.h>
struct student
{
int num;
char sex;
};
void main()
{
struct student stu1={1,'w'},stu2;
stu2=stu1;//對的
// if(stu2==stu1)錯的
// printf("xxx\n");
printf("%d %c\n",stu2.num,stu2.sex);
}
/*
注:不能整體操作一個結(jié)構(gòu)體變量,但是在同種類型定義的結(jié)構(gòu)體變量之間可以相互賦值。只有這個意外。
*/
例:
include <stdio.h>
struct student
{
int num;
char sex;
};
void main()
{
struct student a={1,'m'};
struct student p=&a;
printf("%d %c\n",a.num,a.sex);
printf("%d %c\n",(p).num,(*p).sex);
printf("%d %c\n",p->num,p->sex);
}
定義一個結(jié)構(gòu)體類型數(shù)組:
struct student
{
int num;
char sex;
}stu[30];
struct student
{
int num;
char sex;
};
struct student stu[30];
3
struct
{
int num;
char sex;
}stu[30];
結(jié)構(gòu)體數(shù)組的賦值:
1.初始化賦值
a.
struct student
{
int num;
char sex;
}stu[2]={1,'m',2,'w'};
例:
include <stdio.h>
struct student
{
int num;
char sex;
}stu[2]={{1,'m'},{2,'w'}};
//={1,'m',2,'w'};
void main()
{
printf("%d %c\n",stu[0].num,stu[0].sex);
printf("%d %c\n",stu[1].num,stu[1].sex);
}
b.
struct student
{
int num;
char sex;
};
struct student stu[2]={1,'m',2,'w'};
c.
struct
{
int num;
char sex;
}stu[2]={1,'m',2,'w'};
2.先定義再賦值。一個一個賦值
struct student
{
int num;
char sex;
};
struct student stu[2];
stu[0].num=1;
stu[0].sex='m';
stu[1].num=2;
stu[1].sex='w';
練習(xí):定義一個結(jié)構(gòu)體數(shù)組,輸入3個學(xué)生的個人信息并輸出。
include <stdio.h>
struct student
{
int num;
char name[30];
char sex;
};
void main()
{
struct student stu[3];
int i;
for(i=0;i<3;i++)
{
printf("please input data:");
scanf("%d %s %c",&stu[i].num,stu[i].name,&stu[i].sex);
}
for(i=0;i<3;i++)
{
printf("%d %s %c\n",stu[i].num,stu[i].name,stu[i].sex);
}
}
include <stdio.h>
struct student
{
int num;
char name[30];
char sex;
};
void main()
{
struct student stu[3];
struct student *p=stu;
for(;p<=stu+2;p++)
{
printf("please input data:");
scanf("%d %s %c",&p->num,p->name,&p->sex);
}
for(p=stu;p<=stu+2;p++)
{
printf("%d %s %c\n",p->num,p->name,p->sex);
}
}
練習(xí):定義一個表示平面上的點(diǎn)的數(shù)據(jù)類型,然后定義函數(shù),給定一個點(diǎn)和半徑,在這個函數(shù)中判斷,該點(diǎn)是不是在以原點(diǎn)為中心,給定的半徑的圓內(nèi)。sqrt(xx+yy) math.h
gcc 1.c -lm
include <stdio.h>
include <math.h>
//定義一個描述點(diǎn)(x,y)的數(shù)據(jù)類型
struct point
{
double x;
double y;
};
int Cycle(struct point p,double l)
{
if(sqrt(p.xp.x+p.yp.y)<=l)
return 1;
else
return 0;
}
void main()
{
//定義一個點(diǎn)
struct point p;
printf("輸入點(diǎn)的位置:");
scanf("%lf %lf",&p.x,&p.y);
printf("輸入半徑的長度:");
double l;
scanf("%lf",&l);
if(Cycle(p,l))
printf("在圓內(nèi)!\n");
else
printf("在圓外!\n");
}
include <stdio.h>
typedef struct student
{
int num;
char sex;
}Stu;
typedef float X;
void main()
{
Stu stu1;
Stu stu2;
X a=1.2;
printf("%.1f\n",a);
}/*
typedef:類型重命名
格式:typedef 類型名 新類型名;
例: typedef float X; 以后X就表示float.
*/
共用體/聯(lián)合體
include <stdio.h>
//定義了一個共用體類型,關(guān)鍵字union
union data
{
int a;
int b;
char c;
};
void main()
{
//用共用體類型定義變量
union data p;
p.a=356;
printf("%d\n",p.b);
printf("%d\n",p.c);
}
/*
注:共用體的所有成員公用一塊存儲區(qū)域,它的大小是成員最大的那個成員的大小。
*/
include <stdio.h>
//自定義一個枚舉類型
enum weekday{sunday=5,monday,tursday};
void main()
{ enum weekday day;
day=sunday;
printf("%d\n",day);
printf("%d %d %d\n",sunday,monday,tursday);
}/*
1.枚舉類型,把用枚舉類型定義的變量的所有可能的取值都放在定義它的大括號中
2.枚舉類型中列出的項都是一個常量,不能給它賦值,它本身對應(yīng)有一個標(biāo)號值。默認(rèn)第一項從0開始,后面的項依次遞加。
3.可以在定義枚舉類型的同時給第一項賦值,改變對應(yīng)標(biāo)號的初始值。
*/