C和指针第七章第五题

实现一个简化的printf函数,能够处理%d,%f,%s,%c等格式。

/*************************************************************************
    > File Name: permutation.c
    > Created Time: 2014年06月17日 星期二 23时22分34秒
 ************************************************************************/

#include<stdio.h>
#include<stdarg.h>
#include<stdlib.h>

//输出普通的字符串
int printStr(char const *str)
{
    int len = 0;
    while(*str != ‘\0‘)
    {
        putchar(*str++);
        len++;
    }
    return len;
}

//说明,一个简化的printf函数,这个函数是能够%d,%c,%f,%s等格式。其他格式均是未定义的。
int MyPrintf(char const *format,...)
{
    int len = 0;
    int sublen;
    va_list vlist;
    va_start(vlist,format);//获取第一个参数首地址

    while(*format != ‘\0‘)
    {
        char data[50];
        int sublen = 1;
        if(*format++ == ‘%‘)
        {
            if(*format == ‘d‘)
            {
                int d = va_arg(vlist,int);
                char dd[10];
                itoa(d,dd,10);
                sublen = printStr(dd);
            }else if(*format == ‘c‘)
            {
                char c = va_arg(vlist,char);
                putchar(c);
                sublen = 1;
            }else if(*format == ‘s‘)
            {
                char *str = va_arg(vlist,char *);
                sublen = printStr(str);

            }else if(*format == ‘f‘)
            {
                double d = va_arg(vlist,double);
                char dd[20];
                gcvt(d,10,dd);
                sublen = printStr(dd);
            }
            format++;
            printf("\n");
        }

        len += sublen;
    }
    va_end(vlist);
    return len;
}

int main()
{
    int num = MyPrintf("%d %c %s %f",4,‘A‘,"1213",3.14);
    printf("输出字符的长度(空格,回车符除外):%d\n",num);
    return 0;
}

C和指针第七章第五题,布布扣,bubuko.com

时间: 2024-10-01 08:08:36

C和指针第七章第五题的相关文章

C和指针第13章第4题

题目:编写一个函数,它用于对一个任何类型的数组进行排序. 算法核心代码sort函数实现 /** 功能说明:sort函数可以对不同类型的数据进行排序 参数: 1.一个指向需要排序的数组的第一个值的指针. 2.数组中元素的个数. 3.每个数组元素的长度. 4.一个指向比较回调函数的指针 **/ void sort(void *array,int size,int element_size,int (*cmp)(void const *a,void const *b)) { char *pc = (c

C和指针 第七章 习题

7.1 hermite递归函数 int hermite(int n, int x) { if (n <= 0) { return 1; } if (n == 1) { return 2 * x; } return 2 * x * hermite(n - 1, x) - 2 * (n - 1) * hermite(n - 2, x); } 7.2两个整型值M和N(m.n均大于0)的最大公约数计算公式: gcd(M,N) 当M % N = 0;  N 当M % N =R, R > 0; gcd(N

C和指针 第七章 可变参数

可变参数列表是通过stdarg.h内的宏来实现的: 类型 va_list 三个宏: va_start va_arg va_end 我们可以声明一个va_list变量,与这三个宏配合使用. 可变参数必须要有一个命名参数,因为可变参数是通过栈来实现的,函数中的最右边的参数最先入栈. void function(int a, int b, int c) { int d; ... } 其栈结构为 0x1ffc-->d 0x2000-->a 0x2004-->b 0x2008-->c 栈的空

C和指针 第七章 函数递归与迭代

C语言通过运行时堆栈支持递归函数的实现,递归函数时直接或者间接调用自身的函数,经常有人拿斐波那契实现当做递归的实现,然后这样做效率并不高. n < 1;  Fib(1) =1 n = 2;  Fib(2) = 1 n > 2; Fib(n) = Fib(n - 1) + Fib(n - 2); 由于每个递归调用都会触发另外两个递归调用,而这两个调用还将继续触发下去,这样会有大量的冗余计算.例如:计算Fib(10)过程,Fib(3)被计算了21次: #include <stdio.h>

第七章习题G题

题意 给出如图案例,要你从某一点开始走,一直走到极限(即无法再进行扩展),这时你走过的点会连成一个数,不同的走法当然会有不同的数,要求是输出最大的数(注意每个方块走过一次就不能再走) 思路 •1.枚举所有的点作为起点,然后求从这个点所能得到的最大数 •2.然后是使用DFS求从某一点可以到达的最大数 可是仅仅使用DFS是会超时的, 所以,需要优化剪枝 Dfs的过程就是构建和遍历解答树的过程,在进行深度优先搜索时有一些分叉是可以判断出无需遍历的,这时就可以把这一部分跳过,continue掉 剪枝:

阅读《大型网站技术架构:核心原理与案例分析》第五、六、七章

题目:阅读<大型网站技术架构:核心原理与案例分析>第五.六.七章,结合<XXX需求征集系统>,分析如何增加相应的功能,提高系统的可用性和易用性,撰写一篇1500字左右的博客阐述你的观点 在这一节课上,我们学习了系统质量属性其中的可用性和易用性.那么质量属性是什么呢,质量属性是高于对系统功能(即对系统能力.服务和行为)的基本的要求的.系统质量属性讲重点放在了可用性.可修改性.性能.安全性.可测试性和易用性.从设计师方面,系统质量属性一般存在三个问题:(1)为属性提供的定义并不是可操作

C和指针 (pointers on C)——第七章:函数(下)习题

这次的题目很经典. 1.Hermite Polynomials 2.求两个整数最大公约数 3.ATOI 4.可变参数列表的使用 具体的题目在这里: 题目请见 http://download.csdn.net/download/wangpegasus/5701765 1. int hermite(int n, int x) { if (n < 1) { return 1; } else if (n == 1) { return 2 * x; } else { return 2 * x * herm

C和指针 (pointers on C)——第七章:函数(上)

第七章 函数 这一章对于有一定C的基础的人有一定优秀代码风格的人来说,并不是很虐.关于stdarg宏可能有些陌生,它负责可变参数列表的定义. 总结: 新式风格和旧式风格就不要提了.八百年前的事情. 函数常见的是把原型放在一个单独的文件里,当其他文件需要这个原型时,就用#include指令把这个文件包含进来,这个技巧可以使原型必需的拷贝份数降低到最低,有助于提高程序的可维护性. return语句用于指定从一个函数返回的值,如果没有返回值,为void. 函数的参数是通过传值的方式进行转换,实际传递的

第四次作业:读软件工程课本五点五、六、七章感想与疑问

第五点五章 这一部分,本来在上一次就已经有过一次浏览,不过也真的只是浏览而已,哈哈,因为介绍了很多模型,看完后,又忘了,现在说要记住这些东西,对于我来时真的不是件容易的事,也可能觉得现在还没有用到这些东西吧,我曾几何时也在课堂上听老师杜给我们说过一些关于软件过程模型的东西,当时隐约记得介绍了八种模型,而重点要掌握的是瀑布模型,快速原型模型,Rational统一过程rup,微软模型.其实我是想知道我们在以后做一个软件时,是不是用期中的一个模型就可以了啊?还是说可以多个模型一起用?但是多个模型一起用