C语言基础(三)构造类型、语句-创新互联
1.结构体:是由多个成员组成的数据集合,成员可以是不同的数据类型。例如:空间坐标、复数、学生信息等。
创新互联公司是一家专业提供翁源企业网站建设,专注与成都网站制作、做网站、H5高端网站建设、小程序制作等业务。10年已为翁源众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。//创建一个结构体类型:空间坐标Point,包含x、y、z三个坐标信息
struct Point{
double x;
double y;
double z;
};
// 声明一个结构体(Point)类型的变量p1
struct Point p1;
//为这个空间坐标p1赋值
p1.x=3.5;
p1.y=4.5;
p1.z=5.0;
//输出
printf("空间坐标:p1(%2.1f,%2.1f,%2.1f)\n",p1.x,p1.y,p1.z);
结果:
空间坐标:p1(3.5,4.5,5.0)
2.共用体:同一个内存空间中存储不同的数据类型,所有成员共享空间。
//共用体
union Data{
char a; //占用1个字节空间
short b; //占用2个字节空间
double c;//占用8个字节空间
};
union Data d1;
d1.a='a';
d1.b=12345;
d1.c=55555.5666;
printf("d1.a=%c\nd1.b=%d\nd1.c=%lf\n",d1.a,d1.b,d1.c);
结果
d1.a=
d1.b=21181
d1.c=55555.566600
共用体Data中虽然有char short double三种类型的成员,但是在开辟空间时只开辟8个字节(占空间大的成员),给任意一个成员赋值时都会写入这个空间中,后写入的数据会覆盖之前的数据,上面例子中给d1.b赋值后,d1.a的数据被覆盖,给d1.c赋值后d1.b的数据又被覆盖了,所以最后只有d1.c显示正确数据。
3.枚举:声明符号名称来表示整型常量。枚举类型的目的是提高程序的可读性。
enum Gender{
Male,
//Male=2,
Female
};
enum Gender gg;
gg=Male;
printf("gg=%d\n",gg);
gg=Female;
printf("gg=%d\n",gg);
gg=3;//不报错,但是不建议这样用
printf("gg=%d\n",gg);
结果
gg=0
gg=1
gg=3
默认情况下,枚举列表中的常量被赋予0,1,2等。所以Male=0,Female=1,不想使用默认值可以通过给Male=2这样的方式指定初始值,此时Female=3。
typedef:定义别名。
//定义别名:定义Pt用来表示struct Point
typedef struct Point Pt;
//此时Pt的使用和基础类型一样
Pt p2;
//也可以在定义结构体的时候直接指定别名
typedef struct Point2D{
double x;
double y;
} Pt2D;
Pt2D p3;
4.数组
一维数组
//创建
int array[5];
//赋值
array[0]=1;
array[1]=3;
array[2]=5;
array[3]=7;
array[4]=9;
//创建+初始化
int array1[]={2,4,6,8};
//数组长度:函数sizeof()计算占用内存字节数
int len = sizeof(array1)/sizeof(int);
printf("数组长度为%d\n",len);
//输出
printf("array[%d]=%d\n",0,array[0]);
printf("array[%d]=%d\n",1,array[1]);
printf("array[%d]=%d\n",2,array[2]);
printf("array[%d]=%d\n",3,array[3]);
printf("array[%d]=%d\n",4,array[4]);
结果
数组长度为4
array[0]=1
array[1]=3
array[2]=5
array[3]=7
array[4]=9
二维数组
//二维数组
int arr[2][3]={{1,2,3},{4,5,6}};
//修改元素数据
arr[1][0]=100;
//输出
printf("arr[%d][%d]=%d\t",0,0,arr[0][0]);
printf("arr[%d][%d]=%d\t",0,1,arr[0][1]);
printf("arr[%d][%d]=%d\n",0,2,arr[0][2]);
printf("arr[%d][%d]=%d\t",1,0,arr[1][0]);
printf("arr[%d][%d]=%d\t",1,1,arr[1][1]);
printf("arr[%d][%d]=%d\n",1,2,arr[1][2]);
结果
arr[0][0]=1 arr[0][1]=2 arr[0][2]=3
arr[1][0]=100 arr[1][1]=5 arr[1][2]=6
5.指针
指针就是内存地址。
//1.内存地址
int num = 10;
printf("num=%d\n",num);
printf("num=%p\n",&num);//num的内存地址
//2.定义指针
int * ptr_num=#//指针指向num的内存地址
printf("ptr_num=%p\n",ptr_num);//指针存储的是num的地址
//指针前加*代表内存地址中的数据
*ptr_num=20;//这个操作等价于num=20;
printf("指针指向的数据num=%d\n",*ptr_num);
printf("num=%d\n",num);
结果(32位操作系统或32位编译器):
num=10
num=0061FEC8
ptr_num=0061FEC8
指针指向的数据num=20
num=20
结果(64位操作系统或64位编译器):
num=10
num=000000EC71D0F780
ptr_num=000000EC71D0F780
指针指向的数据num=20
num=20
注:64位操作系统可以同时处理64个二进制位(即8个字节),所以内存地址长度是8个字节。
1.内存地址。内存中任何变量都有对应的地址,可以使用&获取内存地址
2.定义指针。定义指针使用符号“*”,访问内存地址中保存的数据也用“*”,要注意区分两个*。
二、语句语句有三种结构:顺序、选择、循环
1.顺序结构:由上至下一条一条的执行。
2.选择结构:根据不同的条件,选择执行不同的语句 。选择结构包括if语句和Switch语句。
if语句简单if语句:
int num;
printf("请输入一个数:");
scanf("%d",&num);
if(num<0){
printf("负数\n");
}else{
printf("非负数\n");
}
结果:
请输入一个数:-5
负数
多重if语句:
int num;
printf("请输入成绩:\n");
scanf("%d",&num);
if(num>90)
printf("优秀");
else if (num>75)
printf("良好");
else if (num>60)
printf("合格");
else
printf("不合格");
结果:
请输入成绩:
80
良好
if语句的嵌套:
//比较两个数的大小
int m,n;
printf("请输入第一个数:\n");
scanf("%d",&m);
printf("请输入第二个数:\n");
scanf("%d",&n);
if(m==n)
printf("相等");
else{
if(m>n)
printf("m大于n");
else
printf("m小于n");
}
结果:
请输入第一个数:
15
请输入第二个数:
20
m小于n
switch语句:printf("今天星期几(输入数字回答)?\n");
int day;
scanf("%d",&day);
switch (day) {
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
case 7:
printf("周末");
break;
default:
printf("输入错误!");
}
结果:
今天星期几(输入数字回答)?
3
星期三
3.循环结构:程序中循环执行一段代码,需要设置循环终止条件。循环结构包括:for语句、while语句、do-while语句。
for、while、do-while的简单例子://例:输出1~10
printf("使用顺序语句输出:\n");
printf("%d ",1);
printf("%d ",2);
printf("%d ",3);
printf("%d ",4);
printf("%d ",5);
printf("%d ",6);
printf("%d ",7);
printf("%d ",8);
printf("%d ",9);
printf("%d ",10);
//while
printf("\nwhile循环:\n");
int i=1;//1
while(i<=10){//3
printf("%d ",i);
i++;//2
}
//do-while
printf("\ndo-while循环:\n");
i=1;
do{
printf("%d ",i);
i++;//2
}while(i<=10);
//for
printf("\nfor循环:\n");
for(int i=1;i<=10;i++){
printf("%d ",i);
}
结果:
使用顺序语句输出:
1 2 3 4 5 6 7 8 9 10
while循环:
1 2 3 4 5 6 7 8 9 10
do-while循环:
1 2 3 4 5 6 7 8 9 10
for循环:
1 2 3 4 5 6 7 8 9 10
循环语句的终止:上面例子中每个循环语句都有一个终止的条件,除了这种方式外还有一些其他的方法终止循环语句。
1.continue:跳过当前循环中continue后面的部分,继续执行下一次循环。
//输出1-10,跳过5
for(int i=1;i<=10;i++){
if(i==5)
continue;//跳过当前循环,继续执行下一次
printf("%d ",i);
}
结果:
1 2 3 4 6 7 8 9 10
2.break:结束循环语句。
for(int i=1;i<=10;i++){
if(i==6)
break;//跳出循环语句
printf("%d ",i);
}
结果:
1 2 3 4 5
3.通过输入数据判断是否终止循环:
猜数游戏:
#include#include#include//循环:猜数游戏
int main(){
//1.随机生成一个10以内数
srand(time(NULL));
int num = rand()%10;
int guess;
//2.输入一个数,与生成的数比较;相等=》3,不等=》2
printf("刚刚系统随机生成了一个10以内的数,猜一下是几(请输入一个10以内的数)?:\n");
do{
scanf("%d",&guess);
if(guess>num){
printf("大了!再猜一次吧(请输入一个10以内的数):");
}else if(guess
结果:
刚刚系统随机生成了一个10以内的数,猜一下是几(请输入一个10以内的数)?:
7
小了!再猜一次吧(请输入一个10以内的数):9
大了!再猜一次吧(请输入一个10以内的数):8
猜对了,数字是8
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前名称:C语言基础(三)构造类型、语句-创新互联
转载来源:http://ybzwz.com/article/doidph.html