C语言学习笔记

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100

typedef struct
{
    int data[MAXSIZE];
    int length;
}SqList;

SqList *InitList(SqList *L);            // 初始化
void DestroyList(SqList *L);            // 销毁
void ClearList(SqList *L);              // 清空列表
int ListEmpty(SqList *L);               // 判断是否为空
int ListLength(SqList *L);              // 返回线性表的长度

int GetElem(SqList *L,int i,int *c);    // 销毁获取第i个元素
int LocateElem(SqList *L,int e);        // 定位值为e的位置
int PrioElem(SqList *L,int e);          // 查找前项
int NextElem(SqList *L,int e);          // 查找后项
int ListInsert(SqList *L,int i,int e);  // 插入元素
int ListDelete(SqList *L,int i);        // 删除剩余第i个元素
int TraverseList(SqList *L);            // 遍历线性表



int main()
{
    //int idx,len;
    SqList *L = NULL;
    
    printf("\n请输入数字x初始化线性表:\n");
    L = InitList(L);
    
    printf("\n线性表的长度为%d \n",ListLength(L));
    
    if (ListEmpty(L))
    {
        printf("\n线性表为空\n\n");
    }
    else
    {
        printf("\n线性表不为空\n\n");
    }
    return 0;
}


SqList *InitList(SqList *L)            // 初始化
{
    int x, index =0;
    L = (SqList*)malloc(sizeof(SqList));
    if(L)
    {
        printf("\n输入-1时,程序停止操作。\n");
        while(1)
        {
            scanf("%d",&x);     // 获取s输入数据放入x;
            if(x==-1)
            {
                printf("\n线性表初始化成功!\n");
                break;
            }
            L->data[index++]=x;   // 把书记放在线性表中;
            
        }
        L->length = index;
    }
    else
    {
        printf("\n线性表初始化失败,请重新操作!\n");
    }
    return L;
}

void DestroyList(SqList *L)            // 销毁
{
    free(L);
    printf("\n线性表销毁成功!\n");
}

void ClearList(SqList *L)            // 清空列表
{
    int len = L->length;
    int i;
    for (i=0; i<len; i++)
        L->data[i]=0;
    printf("\n线性表清除成功!\n");
}

int ListEmpty(SqList *L)               // 判断是否为空
{
    return (L->length == 0);
}

int ListLength(SqList *L)              // 返回线性表的长度
{
    return (L->length);
}



// 1 输入一个数字n,求1到n的和
/*/ while
 
 #include <stdio.h>

 int main()
 {
     int i=1,num,sum=0;
     printf("Please input a integer:");
     scanf("%d",&num);

     while(i<=num)
     {
         sum += i;
         ++i;
     }
   
     printf("sum:%d\n",sum);
     return 0;
 }
*/


/*/ 递归
 #include <stdio.h>

 int acumunum(int num); // 声明函数;

 int main()
 {
     int num,sum=0;
     printf("Please input a integer:");
     scanf("%d",&num);
     sum=acumunum(num);
     printf("sum:%d.\n",sum);
     return 0;
 }

 int acumunum(int num)
 {
     if (num==0)
     {
         return 0;
     }
     else
     {
         return num + acumunum(num-1);
     }
 }
*/

/*/ for
 #include <stdio.h>
int main()
{
 int i,num,sum=0;
 printf("Please input a integer:");
 scanf("%d",&num);
//    sum=0;
 
 for (i=1; i<= num;++i)
 {
     sum += i;
 }
 printf("sum:%d\n",sum);
 return 0;
}
*/


/*/ 求和公式
 #include <stdio.h>

 int main()
 {
     int num,sum=0;
     printf("Please input a integer:");
     

     if(scanf("%d",&num)==1)
     {
         sum = (1+num)*num/2;
     }
   
     printf("sum:%d\n",sum);
     return 0;
 }
 
*/

/* 2 九九乘法口诀表
 #include <stdio.h>



 int main()
 {
     int i,j;
     for (i=1;i<=9;++i)
     {
         for(j=1;j<=i;++j)
         {
             printf("%d*%d=%d\t",i,j,i*j);
         }
         printf("\n");
     }
     return 0;
 }
 

*/

//3 斐波那契数列 1, 1, 2, 3, 5, 8, 13, 21, 34,...... 这个数列从第3项开始,每一项都等于前两项之和。
/* 3 斐波那契数列--递归
 #include <stdio.h>

 int fibo(int num);

 int main()
 {
     int num,re;
     printf("求第几项的数值:");
     scanf("%d",&num);
     re = fibo(num);
     printf("第%d项的数值:%d\n",num,re);
     return 0;
 }
 int fibo(int num)
 {
     if (num<3)
     {
         return 1;
     }
     else
     {
         return fibo(num-1)+fibo(num-2);
     }
 }
*/


/* 3 斐波那契数列--指针
 #include <stdio.h>

 int fibo_(int num);

 int main()
 {
     int num,re;
     printf("求第几项的数值:");
     scanf("%d",&num);
     re = fibo_(num);
     printf("第%d项的数值:%d\n",num,re);
     return 0;
 }
 int fibo_(int num)
 {
     int a=1,b=1,c=0;
   
     printf("1\t1\t");
     if (num<3)
     {
         return 1;
     }
   
     while(num-2>0)
     {
         c = a+b;
         printf("%d\t",c);
         a = b;
         b = c;
         --num;
     }
     return c;
 }
*/

/* 4 求两数的最大公约数
 #include <stdio.h>

 int gcd(int num1,int num2);

 int main()
 {
     int num1,num2,re;
     num1 = 60;
     num2 = 30;
     re = gcd(num1,num2);
     printf("gcd:%d\n",re);
     return 0;
 }
 int gcd(int num1,int num2)
 {
     int i=0,t=0;
     for (i=1;i<=num2 && i<=num1;++i)
     {
         if (num1%i==0 && num2%i==0 )
         {
             t = i;
         }
     }
     return t;
 }
*/

/* 4
 #include <stdio.h>

 int gcd_(int num1,int num2);

 int main()
 {
     int num1,num2,re;
     num1 = 60;
     num2 = 30;
     re = gcd_(num1,num2);
     printf("gcd:%d\n",re);
     return 0;
 }
 int gcd_(int num1,int num2)
 {
     while (num1 != num2)
     {
         if(num1 > num2)
         {
             num1 -= num2;
         }
         else
         {
             num2 -= num1;
         }
     }
     return num1;
 }
*/


/* 5 求两数最小公倍数_遍历
 #include <stdio.h>


 int main()
 {
     int num1,num2,re;
     num1 = 17;
     num2 = 30;
     re = num1>=num2? num1: num2;
     while (1)
     {
         if (re%num1==0 && re%num2==0 )
         {
             printf("%d和%d的最小公倍数:%d\n",num1,num2,re);
             return re;
         }
         ++re;
     }
     return 0;
 }
*/


/* 6 一个正整数的阶乘 n! = 1x2x3x4x...xn
 #include <stdio.h>

 int main()
 {
     int i=1,n,re=1;
     n = 5;
     for(i=1;i<=n;++i)
     {
         re *= i;
     }
     printf("re:%d\n",re);
    
     return 0;
 }
*/


/* 7 判断数字为几位数
 #include <stdio.h>

int main()
{
    int num=123;
    int count=1;
    while(num/10>0)
    {
        count++;
        num /= 10;
        printf("num:%d\n",num);
    }
    printf("count:%d\n",count);
    
    
    return 0;
}
 
*/

/* 8 判断回文数
 #include <stdio.h>

 int main()
 {
     int num = 12343219;
     int org = num;
     int new = 0;
     // 翻转
     while(num>0)
     {
         new = new*10 +num%10;
         num /= 10;
     }
     // 判断
     if (new==org)
     {
         printf("%d是回文数\n",org);
     }
     else
     {
         printf("%d不是回文数\n",org);
     }
     return 0;
 }
*/

/* 9 判断素数
 #include <stdio.h>

 int main()
 {
     int num=21;
     int i = 2;
     if (num>2)
     {
         while(i<num)
            {
                if(num % i==0)
                {
                    printf("num %d is not a prime\n",num);
                    break;
                }
                ++i;
            }
            if (i==num)
                printf("num %d is a prime\n",num);
     }
     else
     {
         printf("2 is not a prime\n");
     }
    
     return 0;
 }
*/


/* 10 计算一个数是否可为两个素数之和
 
*/

/* 11 二进制与十进制相互转换
#include <stdio.h>
#include <math.h>

int two2ten(long long num);
long long ten2two(int  num);

int main()
{
 int num = 1111;  // 1 2 4 8
 int num0 = 15;
 int two2ten_ = two2ten(num);
 long long ten2two_ = ten2two(num0);
 printf("two2ten_ : %d\n",two2ten_);
 printf("ten2two_ : %lld\n",ten2two_);
 return 0;
}
long long ten2two(int  num)
{
 long long result=0;
 int i=1,re=0;
 while(num>0)
 {
     re = num%2;
     num /=2;
     result += i*re;
     i *= 10;
 }
 return result;
}
int two2ten(long long num)
{
 int i=0,re=0,sum=0;
 while (num>0)
 {
     re = num % 10;
     num /= 10;
     sum += re*pow(2,i);
     ++i;
 }
 return sum;
}

*/

/* 12 八进制与十进制相互转换
//   八进制与十进制相互转换

#include <stdio.h>
#include <math.h>

int eight2ten(long long num);
long long ten2eight(int  num);

int main()
{
 int num8 = 7635;  // 1 2 4 8
 int num10 = 3997;
 int eight2ten_ = eight2ten(num8);
 long long ten2eight_ = ten2eight(num10);
 printf("eight2ten_ : %d\n",eight2ten_);
 printf("ten2eight_ : %lld\n",ten2eight_);
 return 0;
}
long long ten2eight(int  num)
{
 long long result=0;
 int i=1,re=0;
 while(num>0)
 {
     re = num % 8;
     num /= 8;
     result += i*re;
     i *= 10;
 }
 return result;
}
int eight2ten(long long num)
{
 int i=0,re=0,sum=0;
 while (num>0)
 {
     re = num % 10;
     num /= 10;
     sum += re*pow(8,i);
     ++i;
 }
 return sum;
}
*/

/* 13 八进制与二进制相互转换
 
*/


/* 14 字符串翻转
#include <stdio.h>

void reverseChar(void);

int main()
{
 printf("输入一个字符串: ");
 reverseChar();
 return 0;
}

void reverseChar()
{
 char c ;
 scanf("%c", &c);
 if (c != '\n')
 {
     reverseChar();
     printf("%c",c);
 }
}
*/


/* 15 计算数组元素平均值
#include <stdio.h>

int main()
{
 int a[10]={1,2,3,4,5,6,7,8,9};
 int i;
 for (i=0;i<10;++i)
 {
     printf("%d ",a[i]);
 }
 printf("\n");
 return 0;
}
*/


/* 16 输出数组
 
*/

/* 17  计算数组元素之和
 
*/

/* 18 查找数组中最大的元素值
 #include <stdio.h>

 int main()
 {
     int a[11]={1,2,3,4,5,6,7,8,9,100};
     int i,largest=0;
     for (i=0;i<10;++i)
     {
         if (largest<a[i])
         {
             largest=a[i];
         }
     }
     printf("largest: %d \n",largest);
     return 0;
 }
*/


/* 19 查找数组中最小的元素
 
*/

/* 20
 
*/

/* 21 数组拆分与合并
 
*/

/* 22 数组拷贝
 
*/


/* 23 计算标准偏差
 
*/


/* 24 两个矩阵相乘
 //  矩阵乘法 A(m,n),B(n,o)
 #include <stdio.h>
 #include <string.h>

 int main()
 {
     
     int i,j,k;
     int arr1[2][3] = { {1,2,3},{4,5,6} };
     int arr2[3][4]= { {1,1,1,1},{2,2,2,2},{3,3,3,3}};
     int re[2][4];
     
     for (i=0;i<2;++i)
     {
         for(j=0;j<4;++j)
         {
             re[i][j]=0;
             for(k=0;k<3;++k)
             {
                 re[i][j] += arr1[i][k]*arr2[k][j];
             }
              printf("%d  ",re[i][j]);
         }
     printf("\n");
     }

     return 0;
 }
*/


/* 25 矩阵转换
 t[j][i]= a[i][j]
*/

/* 26 使用指针访问数组元素
 
*/

/* 27 使用引用循环替换数值
 #include <stdio.h>

 void cicleSwap(int *a,int *b,int *c);

 int main()
 {
     int a,b,c;
     printf("Please input three integer:");
     scanf("%d %d %d",&a,&b,&c);
     printf("Before:%d,%d,%d\n",a,b,c);
     cicleSwap(&a,&b,&c);
     printf("After:%d,%d,%d\n",a,b,c);
     return 0;
 }

 void cicleSwap(int *a,int *b,int *c)
 {
     int t = *c;
     *c = *b;
     *b = *a;
     *a = t;
 }

*/


/* 28 判断最大值
 //  判断最大值: 1.给指针分配内存;在分配的内存中存储数据;找出最大值;

 #include <stdio.h>

 void cicleSwap(int *a,int *b,int *c);

 int main()
 {
     int i,n;
     float *data;
     
     printf("please input a interger:");
     scanf("%d",&n);
    data = (float*) calloc(n, sizeof(float));
     
     if (data==NULL)
     {
         printf("Error!!!");
         //exit(0);
         
     }
     
     for (i=0;i<n;++i)
     {
         printf("please input : %dnum: ",i+1);
         scanf("%f",data+i);
     }
     
     for (i=0;i<n;++i)
     {
         if(*data<*(data+i))
         {
             *data = *(data+i);
         }
         
     }
     
     printf("Max num :%.2f\n",*data);

     return 0;
 }
*/

/* 29 删除字符串中的特殊字符
 #include <stdio.h>
 #include <string.h>

 int main()
 {
   char line[100];
   int i,j;
   long len;
   printf("输入一个字符串: ");
   scanf("%s",line);
   len = strlen(line);
   for(i=0;i<len+1;i++)
   {
     if((line[i]>='a'&&line[i]<='z') || (line[i]>='A'&&line[i]<='Z'))
       continue;
     for(j=i;j<len;j++)
     {
       line[j] = line[j+1];
     }
     len--;
     i--;
   }
*/

/* 30 连接字符串
 //  连接字符串
 #include <stdio.h>
 #include <string.h>

 int main()
 {
     char s1[100],s2[100];
     unsigned long  n1,n2;
     int i;

     printf("输入第一个字符串: ");
     scanf("%s", s1);
     

     printf("输入第二个字符串: ");
     scanf("%s", s2);

     n1 = strlen(s1);
     n2 = strlen(s1);

     for (i=0;i<=n2;++i)
     {
       s1[i+n2]=s2[i];
     }
     printf("%s\n", s1);
     return 0;
 }
*/

/* 31 计算字符串长度
 
*/


/* 32 查找字符在字符串中出现的次数
 //  查找字符在字符串中出现的次数
 #include <stdio.h>
 #include <string.h>

 int main()
 {
     char str[100],ch;
     int i,fre=0;
     
     printf("输入字符串: ");
     fgets(str, (sizeof(str)/sizeof(str[0])),  stdin);
     
     printf("输入要查找的字符: ");
     scanf("%c",&ch);
     
     for (i=0;str[i] != '\0';++i)
     {
         if (ch==str[i])
         {
             ++fre;
         }
     }
     printf("字符 %c 在字符串中出现的次数为 %d\n", ch, fre);
     return 0;
 }
*/


/* 33 字符串中各种字符计算
 
*/


/* 34 字符串复制
 
*/

/* 35 字符串排序
 
*/

/* 36 使用结构体(struct)
 
*/


/* 37 复数相加
 
*/

/* 38 计算两个时间段的差值
 
*/

/* 39 将字符串写入文件
 
*/

/* 40 从文件中读取一行
 
*/


/* 41 输出当前文件执行代码
 
*/


/* 42 约瑟夫生者死者小游戏
 
*/


/* 43 五人分鱼
 
*/

/* 数据结构--线性表
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100

typedef struct
{
    int data[MAXSIZE];
    int length;
}SqList;

SqList *InitList(SqList *L);            // 初始化
void DestroyList(SqList *L);            // 销毁
void ClearList(SqList *L);              // 清空列表
int ListEmpty(SqList *L);               // 判断是否为空
int ListLength(SqList *L);              // 返回线性表的长度

int GetElem(SqList *L,int i,int *c);    // 销毁获取第i个元素
int LocateElem(SqList *L,int e);        // 定位值为e的位置
int PrioElem(SqList *L,int e);          // 查找前项
int NextElem(SqList *L,int e);          // 查找后项
int ListInsert(SqList *L,int i,int e);  // 插入元素
int ListDelete(SqList *L,int i);        // 删除剩余第i个元素
int TraverseList(SqList *L);            // 遍历线性表



int main()
{
    //int idx,len;
    SqList *L = NULL;
    
    printf("\n请输入数字x初始化线性表:\n");
    L = InitList(L);
    
    printf("\n线性表的长度为%d \n",ListLength(L));
    
    if (ListEmpty(L))
    {
        printf("\n线性表为空\n\n");
    }
    else
    {
        printf("\n线性表不为空\n\n");
    }
    return 0;
}


SqList *InitList(SqList *L)            // 初始化
{
    int x, index =0;
    L = (SqList*)malloc(sizeof(SqList));
    if(L)
    {
        printf("\n输入-1时,程序停止操作。\n");
        while(1)
        {
            scanf("%d",&x);     // 获取s输入数据放入x;
            if(x==-1)
            {
                printf("\n线性表初始化成功!\n");
                break;
            }
            L->data[index++]=x;   // 把书记放在线性表中;
            
        }
        L->length = index;
    }
    else
    {
        printf("\n线性表初始化失败,请重新操作!\n");
    }
    return L;
}

void DestroyList(SqList *L)            // 销毁
{
    free(L);
    printf("\n线性表销毁成功!\n");
}

void ClearList(SqList *L)            // 清空列表
{
    int len = L->length;
    int i;
    for (i=0; i<len; i++)
        L->data[i]=0;
    printf("\n线性表清除成功!\n");
}

int ListEmpty(SqList *L)               // 判断是否为空
{
    return (L->length == 0);
}

int ListLength(SqList *L)              // 返回线性表的长度
{
    return (L->length);
}

 
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值