• 《算法竞赛入门经典》刘汝佳 C语言部分(前四章)“注解与习题” 之思索 -<1>


    • 此书我购于去年的十一月份,也是经前人推荐购买的一本比较有用的书籍,在寒假自学此书,其简洁清晰高效的示例代码令我印象深刻,于是我打算把这本书的前四章后面的注解与习题(未给出标准解答)认真的去思索和研究,谭书亦是如此。于是有了此篇不是特别工整的博客。
    • 1-1 average
      输入三个整数,输出他们的平均值,保留三位小数。
    #include<stdlib.h>
    #include<iostream>
    #include<iomanip>
    using namespace std;
    int main()
    {
    	int a,b,c;
    	float d;
    	cin>>a>>b>>c;
    	d=(a+b+c)*1.0/3;
    	cout<<setprecision(4)<<d<<endl;
    	return 0;
    }
    
    
    
    /* 关于setprecision。
    #include <iostream.h>
    #include <iomanip.h> //用到格式控制符
    
    void main()
    {
    double amount = 22.0/7;
    cout <<amount <<endl;
    cout <<setprecision(0) <<amount <<endl
    <<setprecision(1) <<amount <<endl
    <<setprecision(2) <<amount <<endl
    <<setprecision(3) <<amount <<endl
    <<setprecision(4) <<amount <<endl;
    
    }
    
    运行结果为:
    3.14286
    3
    3
    3.1
    3.14
    3.143
    */
    

    代码注释参考:
    http://zhidao.baidu.com/link?url=rqa1ImTZOlOyWRsWRTpWak614RGHj577Q1I7lVwttTuTkXPkx9SpevgUVVr_ichS-FPDemUkUIc2sKaW2EeeEK
    作者:汪雷

    注:由于setprecision()会将小数自动四舍五入,个人认为最简单的解决方法还是调用cstdio库使用printf函数,利用%.3f控制输出格式。

    这里我从此例了解到iomanip库中setprecision的用法,在用浮点表示的输出中,setprecision(n)表示有效位数。

    • 输入三个整数按从大到小的顺序输出(指针)
    /*输入三个整数按从大到小的顺序输出*/
    #include<stdio.h>
    void swap(int *p1,int *p2,int *p3)
    {
    	int *p;
    	if(*p1<*p2)
    	{
    		*p=*p1;
    		*p1=*p2;
    		*p2=*p;
    	}
    	if(*p1<*p3)
    	{
    		*p=*p1;
    		*p1=*p3;
    		*p3=*p;
    	}
    	if(*p2<*p3)
    	{
    		*p=*p2;
    		*p2=*p3;
    		*p3=*p;
    	}
    }
    int main()
    {
    	int a,b,c;
    	scanf("%d %d %d",&a,&b,&c);
    	printf("%d %d %d
    ",a,b,c);
    	
    	int *point_1=&a,*point_2=&b,*point_3=&c;
    	
    	swap(point_1,point_2,point_3);
    	printf("%d %d %d
    ",a,b,c);
    	return 0;
    }
    
    /*
    #include<stdio.h>
    void swap(int *p1,int *p2,int *p3)
    {
    	int *p;
    	if(*p1<*p2)
    	{
    		p=p1;
    		p1=p2;
    		p2=p;
    	}
    	if(*p1<*p3)
    	{
    		p=p1;
    		p1=p3;
    		p3=p;
    	}
    	if(*p2<*p3)
    	{
    		p=p2;
    		p2=p3;
    		p3=p;
    	}
    }
    int main()
    {
    	int a,b,c;
    	scanf("%d %d %d",&a,&b,&c);
    	printf("%d %d %d
    ",a,b,c);
    	
    	int *point_1=&a,*point_2=&b,*point_3=&c;
    	
    	swap(point_1,point_2,point_3);
    	printf("%d %d %d
    ",a,b,c);
    	return 0;
    }
    输入:
    7 8 9. 
    输出结果:
    7 8 9.
    
    原因:函数值是单向传递,函数中交换地址以后,并不会传递回原函数。
    原函数中的point_1/2/3地址并没有改变。
    使用指针来处理:能够改变多个值。而普通的函数只能有一个返回值。
    */ 
    
  • 相关阅读:
    Metabase研究 开源的数据报表
    Redis配置不当致使root被提权漏洞
    一个程序员被骗去养猪
    调度器简介,以及Linux的调度策略
    Linux的内存分页管理
    在地铁11号线上写书
    为什么说“概率”带来一场现代革命?
    快速学习Bash
    用树莓派玩转蓝牙
    树莓派的GPIO编程
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5166640.html
Copyright © 2020-2023  润新知