C和指针 第八章 代码答案

#include<float.h>
#include<stdio.h>
static double income_limits[] = { 0,23350,56550,117950,256500,DBL_MAX };
static float base_tax[] = { 0,3502.5,12798.5,31832.5,81710.5 };
static float percentage[] = { .15,.28,.31,.36,.396 };

double single_tax(double income) {
	int category;
	//DBL_MAX限制循环
	for (category = 1; income > income_limits[category]; category++) {
		;
	}
	category--;
	return base_tax[category] + percentage[category] * (income - income_limits[category]);
}

int main() {
	int tax = 0;
	tax = single_tax(1000.0);
	printf("%d",tax);
	return 0;
}

2.

  • #include<stdio.h>
    int indentity_matrix(int matrix[10][10]) {
    	int row=0;
    	int column = 0;
    	//遍历每个元素
    	for (row = 0; row < 10; row += 1) {
    		for (column = 0; column < 10; column += 1) {
    			
    			if (matrix[row][column] != (row == column))
    				return false;
    		}
    	}
    	
    	return true;
    }
    int main() {
    	int test1[][10] = { {1,1},{0,1},{0,0,1},{0,0,0,1},
    	{0,0,0,0,1},{0,0,0,0,0,1},{0,0,0,0,0,0,1},
    	{0,0,0,0,0,0,0,1},{0,0,0,0,0,0,0,0,1},{0,0,0,0,0,0,0,0,0,1} };
    	int test2[][10] = { {1,},{0,1},{0,0,1},{0,0,0,1},
    	{0,0,0,0,1},{0,0,0,0,0,1},{0,0,0,0,0,0,1},
    	{0,0,0,0,0,0,0,1},{0,0,0,0,0,0,0,0,1},{0,0,0,0,0,0,0,0,0,1} };
    	int result;
    	result = indentity_matrix(test1);
    	printf("%d", result);
    	result = indentity_matrix(test2);
    	printf("%d", result);
    	return 0;
    }

    3.

  • #include<stdio.h>
    int indentity_matrix(int matrix[][],int size) {
    	int row=0;
    	int column = 0;
    	//遍历每个元素
    	for (row = 0; row < size; row += 1) {
    		for (column = 0; column < size; column += 1) {
    			
    			if (matrix[row][column] != (row == column))
    				return false;
    		}
    	}
    	
    	return true;
    }

  • #include<stdio.h>
    void matrix_multiply(int *m1, int *m2,  int r, int x, int y, int z) {
    	int *m1p;
    	int *m2p;
    	int k;
    	int row;
    	int column;
    
    	for (row = 0; row < x; row++) {
    		for (column = 0; column < z; column++) {
    			m1p = m1 + row * y;//选择第一个矩阵的第几个元素的地址
    			m2p = m2 + column;//选择第二个矩阵的第几个元素的地址
    			r = 0;
    			for (k = 0; k < y; k++) {
    				r += *m1p * *m2p;//*解析地址,取出该地址的值
    				m1p+=1;//取下一个地址值
    				m2p+=z;
    			}
    			
    			printf("%d\n", r);
    		}
    	}
    }
    
    int main() {
    	
    	int A[][2] = { {2,-6},{3,5},{1,-1} };
    	int B[][4] = { {4,-2,-4,-5},{-7,-3,6,7} };
    	
    	int r = 0;
    	matrix_multiply(*A,*B, r, 3, 2, 4);
    	return 0;
    }
    #define X 3
    #define Y 2
    #define Z 4
    void matrix_multiply2(int matrix_a[X][Y], int matrix_b[Y][Z]) {
    	int matrix_result[X][Z];
    	for (int m = 0; m < X; m++) {
    		for (int s = 0; s < Z; s++) {
    			matrix_result[m][s] = 0;//变量使用前记得初始化,否则结果具有不确定性
    			for (int n = 0; n < Y; n++) {
    				matrix_result[m][s] += matrix_a[m][n] * matrix_b[n][s];
    			}
    		}
    	}
    	for (int m = 0; m < X; m++) {
    		for (int s = 0; s < Z; s++) {
    			printf("%d\t", matrix_result[m][s]);
    		}
    		printf("\n");
    	}
    }
    
    int main() {
    	
    	int A[][2] = { {2,-6},{3,5},{1,-1} };
    	int B[][4] = { {4,-2,-4,-5},{-7,-3,6,7} };
    	
    	int r = 0;
    	//matrix_multiply(*A,*B, r, 3, 2, 4);
    	matrix_multiply2(A, B);
    	return 0;
    }
    

     

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值