11【C语言 & 趣味算法】个人所得税问题(结构体应用):结构体的声明、定义结构体类型的三种方法等

简介: 11【C语言 & 趣味算法】个人所得税问题(结构体应用):结构体的声明、定义结构体类型的三种方法等

一、Review



10(可回看)【C语言&趣味算法】数制转换(常见,二进制、八进制、十进制、十六进制之间任意转换)

09【C语言&趣味算法】再识:折半查找(二分查找)︰基本思想、程序流程图及完整代码、附:顺序查找

08【C语言&趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)

07【C语言&趣味算法】最佳存款方案(采用从后往前递推解决)

06【c语言&趣味算法】牛顿迭代法求方程根(可回看)

05【C语言&趣味算法】经典:兔子产子问题(即:Fibonacci数列)

04【C语言&趣味算法】“抓交通肇事犯"问题。算法改进:设置"标识变量”,有效减少循环次数。

03【C语言&趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。

02【C语言&趣味算法】借书方案问题:小明有5本新书,要借给A、B、C三位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?

01【C语言&趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计((程序的框架),程序流程图的绘制,算法的优化。


二、New Problem: Personal income tax issues(个人所得税问题)



2.1 Description of the problem

7ef01343652e4db18e30cbcfd8334a41.jpg


2.2Analysis of the problem


2.2.1声明(定义)结构体

96997b6569354959a4d07a8a509a52fc.jpg


2.2.2定义结构体类型的变量:3种方法

6632f920134e485dbd9a7786795fdd04.jpg


2.2.3结构体变量的引用、结构体数组的定义与初始化

8120b74652604851af333b783c17829f.jpg


2.2.4使用typedef来定义类型

36106791876243ea9b32e4909af96615.jpg


2.3 Algorithm design


ae696294edd54692858f197051633975.jpg


2.4 Defining the framework of the process(确定程序框架)

a8516b6438984bdbba28f8bc57af69ad.jpg6d8963fc86b44fa6b1920e62a626d8f2.jpg


2.5 Full code and output


//趣味11:个人所得税问题  
#include <stdio.h>
#define TAXBASE  2000
/*定义结构体*/
typedef struct{ 
  long start; 
  long end; 
  double taxrate;
}TAXTABLE;
TAXTABLE TaxTable[]={{0,1500,0.03},{1500,4500,0.10},{4500,9000,0.20},{9000,35000,0.25},
  {35000,55000,0.30},{55000,80000,0.35},{80000,1e10,0.45}};
double CaculateTax(long profit)
{ 
  int i;  
  double tax=0.0; 
  profit-=TAXBASE;  
  for(i=0;i<sizeof(TaxTable)/sizeof(TAXTABLE); i++) 
  {   
    if(profit>TaxTable[i].start)    
    {     
      if(profit>TaxTable[i].end)      
      {       
        tax+=(TaxTable[i].end-TaxTable[i].start)*TaxTable[i].taxrate;
      }     
      else      
      {       
        tax+=(profit-TaxTable[i].start)*TaxTable[i].taxrate;
      }     
      profit-=TaxTable[i].end;      
    //  printf("start%d:%6ld end%d:%6ld  Tax:%12.2f Leave:%6ld\n",i,TaxTable[i].start,i,TaxTable[i].end,tax,(profit)>0 ? profit:0);
      printf("征税范围:%6ld~%6ld  该范围内缴税金额:%6.2f  超出该范围的金额:%6ld\n",
        TaxTable[i].start,TaxTable[i].end,tax,(profit)>0 ? profit:0);
    } 
} 
  return tax;
}
int main()
{ 
  long profit;  
  double tax; 
  printf("请输入个人收入金额:"); 
  scanf("%ld",&profit); 
  tax = CaculateTax(profit);  
  printf("您的个人所得税为: %12.2f\n",tax);
}

在Dev-C++运行上述程序后:可能会报警告如下,

2d43663c7ed94042b5d774bebb10e631.jpg

翻译一下,其意思是:

简单来讲,这个错误即:常量转换溢出。C语言中char,int,float,double,unsigned char,

unsigned int 等数值有极限范围,当它们之间(隐式)转换时,可能因数值极限而超界溢出。有的编译器会报告这—类型的错误,并不是所有编译器都会报告。


8a8af12b5c5c429eb3ac7e32439d48f1.jpg


这里应该是无伤大雅的叭!

来看几个测试:

9b2540b48475418abb468acc3d72aa94.jpg2e82670c111c47929ad5cc84e740785e.jpg5711944bc43443fb9c48f1df3c5e3cb8.jpgfcfddfcf19714ccd8b68963f97cc4395.jpg


2.6 Question expansion:使用指针指向结构体变量和结构体数组

cbcb841407f647d18160468093e855fb.jpg5615226a8ad7497f935b961b979c8490.jpg

相关文章
|
16天前
|
C语言
C语言结构体内存对齐
C语言结构体内存对齐
|
1月前
|
C语言
在C语言中数组作为函数参数的应用与示例
在C语言中数组作为函数参数的应用与示例
15 0
|
1月前
|
算法 C语言
在C语言中函数的递归调用及应用示例
在C语言中函数的递归调用及应用示例
15 1
|
1月前
|
C语言
在C语言中多维数组名作为函数参数的应用与示例
在C语言中多维数组名作为函数参数的应用与示例
12 0
|
19天前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
|
1天前
|
C语言
if语句的应用(C语言零基础教程)
if语句的应用(C语言零基础教程)
|
2天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
16天前
|
存储 C语言
C语言自定义类型结构体详解
在C语言中,结构体是复合数据类型,能组合不同类型的数据显示。定义结构体用`struct`关键字,如`struct Student {char name[20]; int age; float score;};`。声明结构体变量如`struct Student stu1;`,访问成员用`.`操作符,如`stu1.age = 20;`。初始化可直接赋值`struct Student stu1 = {&quot;李四&quot;, 22, 85.5};`。结构体数组如`struct Student stuArray[3]`,结构体指针如`struct Student *pStu = &stu1;`。
5 0
|
19天前
|
存储 搜索推荐 编译器
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
|
19天前
|
存储 网络协议 编译器
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇