Hace unos días en una carpeta de la facultad encontré una serie de ejercicios de programación para realizar y los voy a ir haciendo en el tiempo libre que disponga, si alguien quiere ir agregando cosas o aportar ideas para mejorarlo me lo dicen:
El primero era hacer la función atoi propia para convertir una cadena de texto a un numero entero..les pongo lo que hice..
Un saludo   
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
 
#define longMaxInt 10
 
int strToInt(char* cad, int next, int multip);
int convertir(char* cad, int inf, int next, int multip);
int toInt(char caracter);
 
int main(int argc, char* argv[]) {
    char cadena[longMaxInt];
    int cadToNum=0;
    
    // Leer la cadena
    printf("Ingresa la cadena: ");     
    // Convertir a entero
    cadToNum 
= strToInt
(cadena
, strlen(cadena
)-1, 1);    
    // Imprimir resultado
    if (cadToNum <= INT_MAX) {
        printf("Numero Convertido : %d\n", cadToNum
);     } else {
        printf("El numero esta fuera del rango de enteros\n");     }
}
 
/* Recibe una cadena y retorna el entero correspondiente */
int strToInt(char* cad, int next, int multip) {
    if(cad[0] == '-') {
        return 0 - convertir(cad, 1, next, multip);
    }
    return convertir(cad, 0, next, multip);
}
 
int convertir(char* cad, int inf, int next, int multip) {
    if(next < inf) {
        return 0;
    }
    return convertir(cad, inf, next-1, multip*10) + toInt(cad[next])*multip;
}
 
/* Recibe un caracter y retorna el numero */
int toInt(char caracter) {
    switch(caracter) {
        case '0':
            return 0;
        case '1':
            return 1;
        case '2':
            return 2;
        case '3':
            return 3;
        case '4':
            return 4;
        case '5':
            return 5;
        case '6':
            return 6;
        case '7':
            return 7;
        case '8':
            return 8;
        case '9':
            return 9;
    }
}