重新实现库函数

练习1:只用getchar函数读入一个整数。假设它占据单独的一行,读到行末为止,包括换行符。输入保证读入的整数可以保存在int中。

代码:

//改进方案  3.4.4-1 只用getchar函数读入一个整数。

#include <stdio.h>

int main()
{
    int c;
    int n=0;
    while ((c=getchar())!=‘\n‘)
    {
        n=n*10+c-‘0‘;
    }
    printf("%d",n);
    return 0;
}
#include<stdio.h>
int main()
{
    int sum,a[100],i;
    i=0;
    sum=0;
    while((a[i]=getchar())&&a[i]!=‘\n‘)
    {
        sum=sum*10+a[i]-‘0‘;
        i++;
    }
    printf("%d\n",sum);
    return 0;
}

练习2:只用fgets函数读入一个整数。假设它占据单独的一行,读到行末为止,包括换行符。输入保证读入的整数可以保存在int中。

代码:

//读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。
//读入结束后,系统将自动在最后加‘\0‘,并以str作为函数值返回。
//函数原型是:char *fgets(char *s, int n, FILE *stream);
//stdin(Standardinput)标准输入
#include<stdio.h>
#include<string.h>
int main()
{
    int i,num=0;
    char s[100];
    fgets(s,strlen(s),stdin);//stdin表示用的不是指定文件的内容 而是自己输入的内容
    for(i=0;i<strlen(s)-1;i++)
    {
        num=num*10+s[i]-‘0‘;
    }
    printf("%d\n",num);
    return 0;
}

练习3:只用getchar实现fgets的功能,即用每次一个字符的方式读取整行。

代码:

#include<stdio.h>
int main()
{
    int i;
    char s[100];
    i=0;
    while((s[i]=getchar())&&s[i]!=‘\n‘)
    {
        i++;
    }
    s[i]=‘\0‘;
    printf("%s\n",s);
    return 0;
}
//另一种方法,练习3只用getchar实现fgets的功能,即用每次一个字符的方式读取整行。
#include<stdio.h>
int main()
{
    char c;
    while((c=getchar())!=‘\n‘)
    {
        printf("%c",c);
    }
    return 0;
}

练习4:实现strchr的功能,即在一个字符串中查找一个字符。(注:不一定要用到strchr 只是需要得到相同的结果而已 )

char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
头文件:#include <string.h>
功能:查找字符串s中首次出现字符c的位置
说明:返回首次出现c的位置的指针,返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置,
如果s中不存在c则返回NULL。
返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL

代码:

#include<stdio.h>
#include<string.h>

int main()
{
    char str[]="This is a sample string.";
    int i;
    for(i=0;i<strlen(str);i++)
    {
        if(str[i]==‘s‘)
        {
            printf("found at %d\n",i+1);
        }
    }
    return 0;
}

练习5 实现isalpha和isdigit的功能,即判断字符是否为字母/数字

代码:

#include<stdio.h>

int main()
{
    char c;
    while((c=getchar())!=NULL)
    {
        if( (c>=‘a‘ && c<=‘z‘) || (c>=‘A‘ && c<=‘Z‘))
        {
            printf("Character %c is alphabetic.\n",c);
        }
        if(c>=‘0‘ && c<=‘9‘)
        {
            printf("Character %c is digit.\n",c);
        }
    }
    return 0;
}

重新实现库函数,布布扣,bubuko.com

时间: 2024-10-18 01:09:12

重新实现库函数的相关文章

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 选择调用的进程为 24 i386 getuid sys_getuid1647 i386 getgid sys_getgid16 使用库函数API方式 使用C代码中嵌入汇编代码方式

C语言标准库函数qsort详解

1 函数简介 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 2 基本用法 使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷. qsort 的函数原型是

第二篇:库函数和系统调用的区别

前言 这是一对非常容易混淆的概念.对于用户( 应用程序开发者 )来说,并不一定要严格区分其意义.因为在用户看来,它们都是以C函数的形式出现的.但了解二者的区别对我们掌握整个计算机系统有很大帮助. 区别 1. 一部分库函数实现需要使用系统调用( 如 printf 库函数需要调用 write 系统调用 ) 2. 另一部分库函数实现不需要使用系统调用( 如strcpy 库函数不需要使用系统调用因为它不需要使用CPU特权指令 ) 3. 系统调用一定在内核空间执行,而库函数只有其中的系统调用部分执行时才会

系统调用和标准库函数的关联

1. 首先,现在的OS内核主要采用两种模式,整体的单内核模式(linux)和分层的微内核模式(Windows).单内核 模式的特点就是代码紧凑,执行速度快,各个模块之间是直接的调用关系,可以说最后一点既是优点,也是缺 点...有点就是执行速度快,缺点是内核看起来很乱,维护起来困难. 2. 无论是单内核,还是微内核,立体的体系结构从下到上大概都是分成这样几层:物理硬件,OS内核,OS服务, 应用程序.这四层结构中,OS内核起到一个“承上启下”的作用,向下管理物理硬件:向上为OS服务和应用程序 提供

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 攥写人:杨光  学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验要求: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/sys

Linux系统调用和库函数调用的区别

Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思.面向的是硬件.而库函数调用则面向的是应用开发的,相当于应用程序的api,采用这样的方式有很多种原因,第一:双缓冲技术的实现.第二,可移植性.第三,底层调用本身的一些性能方面的缺陷.第四:让api也可以有了级别和专门的工作面向. 1.系统调用 系统调用提供的函数如open, close, read,

LINUX下c语言调用math.h库函数的注意事项

在Ubuntu上做C语言程序练习时,用到了sqrt函数,尽管在源文件中已包含了math.h头文件,但在编译的时候总是提示sqrt未定义.后来在网上查阅了相关资料,得知:在Linux系统下,C源文件若调用了math库里的函数,则编译时要加上-lm(是字母l,不是数字1),表示链接到math库.例如编译调用了math库函数的C源文件foo.c,可以用如下命令对其进行编译: $gcc -o foo -g -W foo.c -lm

卡尔曼滤波融合库函数+Arduino实例

-------这篇文章就作为放弃ACM比赛转行到电子设计大赛的开始吧,ACM比赛真的太需要时间了,准确的说对于我这样的菜鸟而言太浪费时间了,但是话说回来两年时间从中真心收获了很多 我是不理解卡尔曼滤波的原理啊,但是用这个库函数做个平衡车是绝对没问题 ,所以不理解没太大问题,只要知道它是用来融合加速度计 和 陀螺仪测定角度的.这个角度相对单纯求得的角度会更加精确,既然我弄不明白滤波的原理,下面我会特别详细的说明一下此库函数用到的变量,毕竟有很多人还是想弄明白的. Q_angle:相对于加速度计的噪

JNI java 调c++动态库函数,多值回传及乱码问题

一,JNI java 调c++动态库函数的问题 1.多参数回传 2.参数传递出现乱码 二,解决 1.使用byte[]数组传入c++,在生成的头文件里就会变成jbyteArray 类型 例如,java 中参数:byte[]account,头文件里参数变成jbyteArray account, 通过c++修改完account的值后,java要获取该值,直接使用 jbyte* jbAccount = (env)->GetByteArrayElements(env, account, 0); char*

sockets: DNS库函数的名字与地址转换

########################################################### DNS库函数的名字与地址转换 ###################################################### 通常给出的是数值地址(也就是IP地址),不方便记忆: 域名系统(DNS):用于在主机名字和IP地址之间的映射. /etc/resolv.conf包含本地名字服务器主机的IP地址. 获取名字和地址信息的方法: 1.使用DNS 2.静态主机文件