C语言 关于结构体和指针

结构 体数组及指针的定义与使用

采用结构体数组编写程序,定义- -个含职工姓名、工作年限、工资总额的结构体类型,从键盘输入5名职工的信息,最后再对工作年限超过30年的职工加1000元工资,并输出工资变化后的所有职工的信息

解题思路:

(1) 定义职工结构体类型及结构体数组

(2) 从键盘输入职工的初始化信息

(3)循环判断每一名职工的年限是否大于等于30, 若符合条件,就将工资总额加1000(4)循环控制输出每名职工的信息

代码如下:

#include <stdio.h>

struct worker {
    char name[20];
    int years;
    int total_salary;
};

int main() {
    struct worker staff[5];

    // 从键盘输入职工的初始化信息
    for (int i = 0; i < 5; i++) {
        printf("请输入第%d名职工的姓名、工作年限和工资总额:\n", i + 1);
        scanf("%s %d %d", staff[i].name, staff[i].years, staff[i].total_salary);
    }

    // 循环判断每一名职工的年限是否大于等于30
    for (int i = 0; i < 5; i++) {
        if (staff[i].years >= 30) {
            staff[i].total_salary += 1000;
        }
    }

    // 输出工资变化后的所有职工的信息
    for (int i = 0; i < 5; i++) {
        printf("%s\t%d\t%d\n", staff[i].name, staff[i].years, staff[i].total_salary);
    }

    return 0;
}

该程序首先定义了一个名为worker的结构体类型,其中包含职工的姓名、工作年限和工资总额三个字段。然后在main函数中定义了一个名为staff的职工结构体数组,并通过循环从键盘输入了5名职工的初始化信息。接着,程序又使用循环遍历了每一个职工的工作年限,并对工作年限超过30年的职工加了1000元工资。最后,程序输出了工资变化后的所有职工的信息。
 
需要注意的是,输入职工姓名时可能出现带有空格的情况,因此需要使用scanf函数的%s格式化字符串来读取姓名。另外,需要使用\t制表符来格式化输出职工信息。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/192537
  • 除此之外, 这篇博客: 编写程序,实现用户输入15个数据后进行排序,要求排序后按由大到小存放在一个数组中。重新输入一个数,编写查找算法找到该数是数组中的第几个元素的值,如果该数不在数组中,则输出“无此数”。中的 C语言实现:编写程序,实现用户输入15个数据后进行排序,要求排序后按由大到小存放在一个数组中。重新输入一个数,编写查找算法找到该数是数组中的第几个元素的值,如果该数不在数组中,则输出“无此数”。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 编程基础第六版 课后题

    代码如下

    #include <stdio.h>
    #include <math.h>
    int main()
    {
    int i,j,t;
    int a[15];
    int x,l,h,mid,n;
    n=15;
    l=0;
    h=n-1;
    printf("请输入15个不同数字,按一次输入一个,依次输入15次的方法输入数字:\n");
    for(i=0;i<15;i++)
    scanf("%d",&a[i]);
    for(j=0;j<14;j++)
    {
    for(i=0;i<14-j;i++)   //这里我第一次写也忽略了j要不断的去替换i,所以对于i来说它的循环条件应该是14-j,有好多人可能和我一样写成i<15啦
    if( a[i]<a[i+1])
    {
    t=a[i];
    a[i]=a[i+1];
    a[i+1]=t;
    }
    }
    printf("按从大到小的排序结果:");
    for( i=0;i<15;i++)
    printf("%d\t",a[i]);
    printf("\n");
    
    for (l=0, h=14, printf("请输入一个数:"), scanf("%d", &x); l<=h;)//while也可以但是我很奇怪用while会提前退出循环哈哈哈
    {
    mid=(l+h)%2;
    if (x>a[mid])h=mid-1;
    else if (x<a[mid])l=mid+1;
    else
    {
    printf("%d是第%d位数",x,mid+1);
    break;
    }
    }
    if(x!=a[mid])
    printf("查无此数!");
    return 0;
    }
    

    这个是我用手机c compiler码的效果~顺便一提这个软件真的好用(✪▽✪)