结构体

自己创造出来的一种类型

创造一个结构体类型

struct Book

{

char name[20];                                               //C语言程序设计

short price;                                                    //55

};

int main()

{

struct Book b1={"C语言程序设计",55};      //利用结构体类型创建一个该类型的结构体变量

printf("书名:%s\n",b1.name);                    //.相当于的

printf("价格:%d元\n",b1.price);

b1.price=15;

printf("修改后的价格:%d元\n",b1.price);

return 0;

}

 

struct Book

{

char name[20];                                                     //C语言程序设计

short price;                                                          //55

};

int main()

{

struct Book b1={"C语言程序设计",55};

struct Book* pb=&b1;                                       //利用pb打印出来我的书名和价格

printf("%s\n",pb->name);

printf("%d\n",pb->price);

return 0;

}

.      结构体变量.成员

->     结构体指针->成员

 

修改数组名(数组名本质是地址)

#include<stdio.h>

#include<string.h>                                          //strcpy的头文件

struct Book

{

char name[20];                                                //C语言程序设计

short price;                                                      //55

};

int main()

{

struct Book b1={"C语言程序设计",55};

strcpy(b1.name,"C++");                                  //strcpy是库函数指字符串拷贝,此处指把后面那个拷贝放到前面里

printf("%s\n",b1.name);                                 //结果为C++

return 0;

}

 

 

 

顺序结构,选择结构,循环结构

分支和循环语句

在C语言中由分号;隔开的就是一条语句(空语句也是语句)

if分支语句的语法结构:

if(表达式1)

   语句1

 

if(表达式1)

   语句1

else

   语句2

 

if(表达式1)

   语句1

else if(表达式2)

   语句2

else

   语句3

谁真谁执行,且各个条件互异

int main()

{

int age=10

if(age<18)

printf("未成年\n");

else if(age>=18&&age<28)

printf("青年\n");

else(age>=28)

printf("老年\n");

return 0;

}

要执行多条语句,需要使用代码块即花括号{}括起来

if套if是可以的,但要加花括号{}用以区分,因为要注意else的就近匹配原则

常量与变量判断时,将常量放前面可预防错误为赋值

switch语句

往往用于多分支情况

int main()

{

int day=0;

scanf("%d",&day);

switch(day)                            //day是要判断的东西且要是整形表达式

{

case 1:                                  //1是判断的条件且要是整型常量表达式

      printf("星期一\n");

      break;                           //break用于跳出循环

case 1:

      printf("星期二\n");

      break;

 

case 1:

      printf("星期三\n");

      break;

case 1:

      printf("星期四\n");

      break;

case 1:

      printf("星期五\n");

      break;

case 1:

      printf("星期六\n");

      break;

case 1:

      printf("星期日\n");

      break;

}

return 0;

}

 

int main()

{

int day=0;

scanf("%d",&day);

switch(day)     

{

case 1:

case 2:

case 3:

case 4:

case 5:

      printf("工作日\n");

      break;

case 6:

case 7:

      printf("休息日\n");

      break;

default:                              //用于输入不属于上述情况时的反应

      printf("输入错误\n");

      break;                  

}

while循环语句

 

(1)break循环分路

只要遇到break,就停止后期的所有的循环,直接永久终止循环

int main()

{

int i=1

while(i<=10)                 //i<=10是循环的条件

{

if(i==5)

break;                         //跳出while循环

printf("%d\t",i);

i++;

}

return 0;

}

最后结果为1  2  3  4  5  6  7  8  9  10

(2)continue循环分路

用于终止本次循环的,也就是本次循环中continue后面的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断

int main()

{

int i=1

while(i<=10)                 //i<=10是循环的条件

{

if(i==5)

continue;                    //continue指继续,是跳过了后续程序的返回,此时的程序是到i=5时前半部分无限循环了

printf("%d\t",i);

i++;

}

return 0;

}

最后只显示1  2  3  4  _

 

int main()

{

int ch=0;

while ((ch=getchar())!=EOF)        //getchar指输入字符,EOF指文件结束标志,本质为-1

putchar(ch);                                //putchar指输出字符与printf输出字符的效果一样

return 0;

}

结果是只要不输入Ctrl+Z(getchar会输入EOF)输入任何值输出的还是本身

 

int main()

{

int ret=0;

char password[20]={0};

printf("请输入密码:");            

scanf("%s",password);                 //scanf只会读取空格之前的东西,密码会存放在password数组中,进入输入缓冲

                                                      区被读走,但是留下了空格之后的东西和\n

while((ch=getchar())!=’\n’);        //用于读走空格之后的东西和\n

{

;                                               //空代码,只要循环的那部分功能

}

printf("请确认(Y/N):");        //所以此处直接读取了空格之后的东西和\n

ret=getchar();

if(ret==’Y’)

{

printf("确认成功\n");

}

else

{

printff("放弃确认\n");

}

return 0;

}

 

for循环

for(表达式1;表达式2,;表达式3)

    循环语句;

表达式1为初始化部分,用于初始化循环变量;表达式2为条件判断部分,用于判断循环时候终止;表达式3为调整部分,用于循环条件的调整

int main()

{

int i=0;

for(i=1;i<=10;i++)

printf("%d",i);

return 0;

}

for中breeak循环分路

int main()

{

int i=0;

for(i=1;i<=10;i++)

{

if(i==5)

break;

printf("%d",i);

}

return 0;

}

结果为1234

for中contiune循环分路

int main()

{

int i=0;

for(i=1;i<=10;i++)

{

if(i==5)

continue;                  //跳到调整表达式了

printf("%d",i);

}

return 0;

}

结果为1234678910

注意:1.不可以在for循环体内修改循环变量,防止for循环失去控制。

2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法

                                        i=0;i<10;i++

3,for循环可以省略初始化,判断,调整

for(;;)

判断条件省略会死循环

4.for中表达式可以用多个式子

int x,y;

for(x=0,y=0;x<2&&y<5;x++,y++)

printf("hello\n");

return 0;

 

例题:

int main()

{

int i=0,k=0;

for(i=0,k=0;k=0;i++,k++)     //因为k直接赋值为0,0为假,所以直接结束循环,结果为循环0次

    k++;

return 0;

}

do...while()循环

do

  循环语句;

while(表达式);

 

int main()

{

int i=1;

do

{

printf("%d",i);

i++

}

while(i<=10);

return 0;

}

 

do...while()循环语句中continue分路

int main()

{

int i=1;

do

{

if(i==5)

continue;

printf("%d",i);

}

while(i<=10);

return 0;

}

结果为1234_      死循环了