刘汝佳算法竞赛入门经典 第四单元习题答案自编

第四章小问题集锦
以上是我这一章课后题思考的流程,有错误和不严谨地方请直接指出!

1、解方程组
任务一:使用assert宏,解不唯一时异常退出
#include <stdio.h>
//x=(ce-bf)/(ae-bd), y=(cd-af)/(bd-ae)
int solve(double a, double b, double c, double d, double e, double f){
	assert(a*e != b*d);
	...
}
int main(){
	double a,b,c,d,e,f;//
	scanf("%lf%lf%lf%lf%lf%lf", &a,&b,&c,&d,&e,&f);
    solve(a,b,c,d,e,f);
    return 0;
}
任务二:
#include <stdio.h>
//x=(ce-bf)/(ae-bd), y=(cd-af)/(bd-ae)
int solve(double a, double b, double c, double d, double e, double f){
	//assert(a*e != b*d);
	if(a*e == b*d){
		if(c*d != a*f) return 0;//无解
		return 2;//无数解
	}else return 1;//唯一
}
int main(){
	double a,b,c,d,e,f;//
	scanf("%lf%lf%lf%lf%lf%lf", &a,&b,&c,&d,&e,&f);
    if(solve(a,b,c,d,e,f) == 0) printf("无解\n");
	else if(solve(a,b,c,d,e,f) == 1) printf("唯一解\n");
	else printf("无数解\n");
    return 0;
}
任务三:
函数的参数都是double,代表a,b,c,d,e,f 六个数字

2、编写程序,包含三个函数 f g h 均无参数,返回均为int型
任务一+任务二:定义全局变量即可(在f g h中++与--)

3、编程探索
问题一:局部变量和全局可以重名,不影响程序效果,但是会影响人的感官判断。
问题二:有效,因为地址空间是真枪实弹的,一次改变就变了。
以下是测试过程:
gcc会有warning,执行结果没问题。
C:\Users\tfans\Desktop>gcc test.c -g -O2
test.c: In function ‘f‘:
test.c:6:5: warning: return makes integer from pointer without a cast [enabled b
y default]
test.c:6:5: warning: function returns address of local variable [enabled by defa
ult]
测试程序:
#include <stdio.h>
int f(){
	int n = 4;
	//int*p = &n;
	//printf("%d\n", );
    return &n;
}
int main(){
	int a = 10;
	//f();
//通过如下形式调用f里的n的地址,将n取出打印
	printf("%d\n", *((int *)f()));
    return 0;
}

4、3个size实验
不用-g -O2编译:
实验一:
#include <stdio.h>
int a[1000000];
int main(){
    return 0;
}

C:\Users\tfans\Desktop>gcc test.c
C:\Users\tfans\Desktop>size a.exe
   text    data     bss     dec     hex filename
   4260     940 4000112 4005312  3d1dc0 a.exe

实验二:
#include <stdio.h>
int a[1000000]={1};
int main(){
    return 0;
}

C:\Users\tfans\Desktop>gcc test.c
C:\Users\tfans\Desktop>size a.exe
   text    data     bss     dec     hex filename
   4260 4000940      96 4005296  3d1db0 a.exe

若把{1}改成{0}
#include <stdio.h>
int a[1000000]={0};
int main(){
    return 0;
}

C:\Users\tfans\Desktop>gcc test.c
C:\Users\tfans\Desktop>size a.exe
   text    data     bss     dec     hex filename
   4260     940 4000120 4005320  3d1dc8 a.exe

用-g -O2编译:
实验一:
C:\Users\tfans\Desktop>gcc test.c -g -O2
C:\Users\tfans\Desktop>size a.exe
   text    data     bss     dec     hex filename
   4260     940 4000112 4005312  3d1dc0 a.exe
无变化!

实验二:
C:\Users\tfans\Desktop>gcc test.c -g -O2
C:\Users\tfans\Desktop>size a.exe
   text    data     bss     dec     hex filename
   4260 4000940      96 4005296  3d1db0 a.exe
无变化!

“若把{1}改成{0}”的情况
C:\Users\tfans\Desktop>gcc test.c -g -O2
C:\Users\tfans\Desktop>size a.exe
   text    data     bss     dec     hex filename
   4260     940 4000120 4005320  3d1dc8 a.exe
无变化!

这是为啥?也就是说等于没优化,是表示编译器的算法对存储空间的”优化诱惑”抱有不灵敏的心态吗?

  

时间: 2024-12-27 07:57:36

刘汝佳算法竞赛入门经典 第四单元习题答案自编的相关文章

《刘汝佳算法竞赛入门经典》第五章 高精度

Integer Inquiry 输入几行大整数, 求他们的和吗以0表示输入结束

《刘汝佳算法竞赛入门经典》第五章 数论

Skew Binary 斜二进制 斜二进制的每位为0, 或 1, 最低位可以为2. 第k位的...代表 2k+1 -1,给出一个斜二进制数,把他转换成十进制数.正常模拟就好 1 #include <cstdio> 2 #include <cstring> 3 char A[1000]; 4 5 int main() { 6 while (scanf("%s", A) != EOF) { 7 if (A[0] == '0') break; 8 int len =

《刘汝佳算法竞赛入门经典》第五章 排序检索

Master-MindHints

《刘汝佳算法竞赛入门经典》 第五章 字符串

Palindromes 几个if语句判断一下就好了

《刘汝佳算法竞赛入门经典》第五章 简单几何计算

The Other Two Trees 另两棵树 没看懂题目,搜了下题解,都是直接给出了简化后的题意和解法...自己再读读原题意吧

刘汝佳算法竞赛入门经典 第二单元习题答案自编

欢迎交流讨论! @2-1 #include <fstream> using namespace std; ifstream fin("aplusb.in"); ofstream fout("aplusb.out"); int main(){ int n; while(fin>>n){ int count = 0; //计算位数 while(n){ count++; n /= 10; } fout << count <<

「算法竞赛入门经典 第二版」习题解答 1、2章

1-1 平均数:输入3个整数,输出他们的平均值,保留3位小数 #include <stdio.h> int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); double d=(double)(a+b+c); printf("%.3lf\n",d/3.0); return 0; } 1-2 温度:输入华氏温度 f ,输出对应的摄氏度 c,保留3位小数.提示:c=5(f-32)/9 #inc

算法竞赛入门经典 第四章

[√ ] UVA1339 古老的密码 Ancient Cipher [√ ] UVA489 刽子手的游戏 Hangman Judge [√ ] UVA133 救济金发放 The Dole Queue [√ ] UVA213 信息解码 Message Decoding [√ ] UVA512 追踪电子表格中的单元格 Spreadsheet Tracking [√ ] UVA12412 师兄帮帮忙 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)

《算法竞赛入门经典(第二版)》pdf

下载地址:网盘下载 内容简介  · · · · · · <算法竞赛入门经典(第2版)>是一本算法竞赛的入门与提高教材,把C/C++语言.算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧.全书内容分为12 章,包括程序设计入门.循环结构程序设计.数组和字符串.函数和递归.C++与STL入门.数据结构基础.暴力求解法.高效算法设计.动态规划初步.数学概念与方法.图论模型与算法.高级专题等内容,覆盖了算法竞赛入门和提高所需的主要知识点,并含有大量例题和习题.书中的代码规范.简洁.易懂,不