C语言学习笔记—P5(结构体<提要>+分支语句<提要>+图解+题例)

简介: C语言学习笔记(结构体<提要>+分支语句<提要>+图解+题例)

 1. 结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。

这里只能使用结构体来描述了。

例如:

struct Stu
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //学号
};
image.gif

image.gif编辑

结构体的初始化:

//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);
image.gif

例题:

#include <stdio.h>
#include <string.h>
//代码3
//结构体类型的定义
struct Stu
{
  //结构体的成员
  char name[20];
  int age;
  char sex[10];
};
int main()
{
  //创建结构体变量,并且初始化
  struct Stu zhangsan = {"张三", 30, "男"};
  struct Stu lisi = {"李四", 24, "保密"};
  //->这个操作符
  struct Stu * pl = &lisi;
  printf("%s %d %s\n", (*pl).name, (*pl).age, (*pl).sex);
  printf("%s %d %s\n", pl->name, pl->age, pl->sex);
  //打印结构体的数据
  printf("%s %d %s\n", zhangsan.name, zhangsan.age, zhangsan.sex);
  printf("%s %d %s\n", lisi.name, lisi.age, lisi.sex);
  return 0;
}
image.gif

image.gif编辑

image.gif编辑

结构体也有全局变量和局部变量

#include <stdio.h>
#include <string.h>
//结构体类型的定义
struct Stu
{
  //结构体的成员
  char name[20];
  int age;
  char sex[10];
};
int main()
{
  //创建结构体变量,并且初始化
  struct Stu zhangsan = {"张三", 30, "男"};
  struct Stu lisi = {"李四", 24, "保密"};
  //->这个操作符
  struct Stu * pl = &lisi;
  printf("%s %d %s\n", (*pl).name, (*pl).age, (*pl).sex);
  printf("%s %d %s\n", pl->name, pl->age, pl->sex);
  //打印结构体的数据
  printf("%s %d %s\n", zhangsan.name, zhangsan.age, zhangsan.sex);
  printf("%s %d %s\n", lisi.name, lisi.age, lisi.sex);
  return 0;
}
//.
//结构体成员访问的操作符
//结构体变量.结构体成员
//
//-> 
//结构体成员访问的操作符
//结构体指针->结构体成员
//
image.gif

2.分支语句

2.1. 什么是语句?

C语句可分为以下五类:

1. 表达式语句

2. 函数调用语句

3. 控制语句

4. 复合语句

5. 空语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。

可分成以下三类:

1. 条件判断语句也叫分支语句:if语句、switch语句;

2. 循环执行语句:do while语句、while语句、for语句;

3. 转向语句:break语句、goto语句、continue语句、return语句。

2.2. 分支语句(选择结构)

如果你好好学习,校招时拿一个好offer,走上人生巅峰。

如果你不学习,毕业等于失业,回家卖红薯。

这就是选择!

2.2.1 if语句

那if语句的语法结构是怎么样的呢?

语法结构:
if(表达式)
    语句;
if(表达式)
    语句1;
else
    语句2;
//多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

image.gif

#include <stdio.h>
int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age < 18)
    printf("少年\n");
  else if (age >= 18 && age < 40)
    printf("青年\n");
  else if (age >= 40 && age < 60)
    printf("壮年\n");
  else if (age >= 60 && age < 90)
    printf("老年\n");
  else
    printf("老寿星\n");
  //代码块1
    /*if (age >= 18)
  printf("成年\n");
  else
    printf("未成年\n");*/
    //代码块2
    /*if (age >= 18)
    printf("成年\n");*/
  return 0;
}
image.gif
#include <stdio.h>
int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age < 18)
    printf("少年\n");
  else if ( age < 40)
    printf("青年\n");
  else if ( age < 60)
    printf("壮年\n");
  else if (age < 90)
    printf("老年\n");
  else
    printf("老寿星\n");
  /*if (age >= 18)
  printf("成年\n");
  else
    printf("未成年\n");*/
    /*if (age >= 18)
      printf("成年\n");*/
  return 0;
}
//可读性不好
image.gif
#include <stdio.h>
int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age >= 18 && age < 40)
  {
    printf("1:呵呵\n");
  }
  //2 - 语法可以编译,但逻辑上是不满足要求的
  if (18 <= age < 40) //——运算是先和age左边比较真为1,假为0,得到的0或1再和age右边比较
  {
    printf("2: 哈哈\n");
  }
}
image.gif

image.gif编辑

else不知和谁匹配,原因在于if后有两条语句,但默认if后只跟一条语句 ,但加上大括号就不会报错

image.gif编辑

如果条件成立,要执行多条语句,怎应该使用代码块,这里的一对 { } 就是一个代码块。

image.gif编辑未打印任何字符

image.gif编辑

代码优化:

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }      
    return 0;
}
image.gif

1. 判断一个数是否为奇数

代码9
#include <stdio.h>
int main()
{
  int a = 0;
  scanf("%d", &a);
  //if (a % 2 == 1)
  if (a % 2 != 0)
  {
    printf("奇数\n");
  }
  return 0;
}
image.gif

2. 输出1-100之间的奇数

代码10
 方法1
#include <stdio.h>
int main()
{
  int i = 1;
  while (i <= 100)
  {
    printf("%d ", i);
    i += 2;
  }
  return 0;
}
方法2
#include <stdio.h>
int main()
{
  int i = 1;
  while (i <= 100)
  {
    if (i % 2 == 1)
      printf("%d ", i);
    i++;
  }
  return 0;
}
方法3
#include<stdio.h>
int main()
{
  int i = 0;
  for (i = 0; i <=100;i++)
  {
    if (i % 2 == 1)
      printf("%d  \t", i);
  }
  return 0;
}
image.gif

3.输入1-7的整数,输入几就打印星期几

方案一
#include<stdio.h> //1. 输入1-5,输出的是“weekday”;
          //2. 输入6 - 7,输出“weekend”
int main()
{
  int day = 0;
  scanf("%d", &day);//9
  switch (day)
  {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    printf("weekday\n");
    break;
  case 6:
  case 7:
    printf("weekend\n");
    break;
  default:
    printf("输入错误,请输入1~7的数字\n");
    break;
  }
}
方案二
#include <stdio.h>
int main()      //输入1-7的整数,输入几就打印星期几
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");
            break;
    }
    return 0;
}
image.gif

switch(整型表达式)

switch语句也是一种分支语句。 常常用于多分支的情况。

break语句 的实际效果是把语句列表划分为不同的分支部分。

image.gif编辑

总结:

break在while循环中的作用:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。

continue在while循环中的作用:

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

后记:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!


                                            ——By 作者:新晓·故知

相关文章
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
175 14
【C语言】结构体详解 -《探索C语言的 “小宇宙” 》
结构体通过`struct`关键字定义。定义结构体时,需要指定结构体的名称以及结构体内部的成员变量。
204 10
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
235 13
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
96 11
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
74 4
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
108 10
|
3月前
|
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
52 8
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等