C基础作业(总结)

一、最值

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

int Max(int n,int *p);

int main(int argc, const char *argv[])
{
    int n;
    printf("请输入数组的个数:");
    scanf("%d",&n);
    int a[n];
    int *p=a;

    for(int i=0;i<n;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",p+i);
    }

    int max=Max(n,a);
    printf("最大值是:%d\n",max);
    return 0;
}

int Max(int n,int *p)
{
    int max=0;
    for(int i=0;i<n;i++)
    {
        if(i==0)
        {
            max=*(p+i);
        }

        if(max<*(p+i))
        {
            max=*(p+i);
        }
    }

    return max;
}

结果:

二、冒泡

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

void Int(int n,int *p);
void Put(int n,int *p);

int main(int argc, const char *argv[])
{
    int n;
    printf("请输入数组的个数:");
    scanf("%d",&n);
    int a[n];
    int *p=a;


    Int(n,a);
    Put(n,a);

    for(int i=0;i<n;i++)
    {
        printf("%d\n",*(p+i));
    }
    return 0;
}

void Int(int n,int *p)
{
    for(int i=0;i<n;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",p+i);
    }

}

void Put(int n,int *p)
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-i;j++)
        {
            if(*(p+j)>*(p+j+1))
            {
                int t;
                t=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=t;
            }
        }
    }
}

结果:

三、简单选择

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

void Jd(int n,int *p);

int main(int argc, const char *argv[])
{
    int n;
    printf("请输入数组的个数:");
    scanf("%d",&n);
    int a[n];
    int *p=a;

    for(int i=0;i<n;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",p+i);
    }

    Jd(n,a);
    for(int i=0;i<n;i++)
    {
        printf("%d\n",*(p+i));
    }
    return 0;
}

void Jd(int n,int *p)
{
    int min=0;

    for(int i=0;i<n-1;i++)
    {
        min=i;
        for(int j=i+1;j<n;j++)
        {
            if(*(p+min)>*(p+j))
            {
                min=j;
            }
        }

        if(min!=i)
        {
            int t;
            t=*(p+min);
            *(p+min)=*(p+i);
            *(p+i)=t;
        }

    }
}

结果:

四、交换最大值和最小值

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

void Jh(int n,int a[]);
void In(int n,int a[]);
void Out(int n,int a[]);

int main(int argc, const char *argv[])
{
    int n;
    printf("请输入数组的个数:");
    scanf("%d",&n);
    int a[n];


    In(n,a);
    Jh(n,a);
    printf("\n");
    Out(n,a);

    return 0;
}

void In(int n,int a[])
{
    for(int i=0;i<n;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);
    }

}

void Jh(int n,int a[])
{
    int max=0,min=0,i;
    int maxl,minl;
    for(i=0;i<n;i++)
    {
        if(i==0)
        {
            max=a[i];
            min=a[i];
            maxl=i;
            minl=i;
        }

        if(max<a[i])
        {
            max=a[i];
            maxl=i;
        }

        if(min>a[i])
        {
            min=a[i];
            minl=i;
        }
    }

    int t;
    t=a[maxl];a[maxl]=a[minl];a[minl]=t;
}

void Out(int n,int a[])
{
    for(int i=0;i<n;i++)
    {
        printf("a[%d]=%d\n",i,a[i]);
    }

}

结果:

五、最值 、最值的下标

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

void In(int line,int row,int (*p)[row]);
void ZhuiZhi(int line,int row,int (*p)[4]);

int main(int argc, const char *argv[])
{
    int line,row;
    printf("请输入数组的行和列:");
    scanf("%d,%d",&line,&row);
    int a[line][row];

    In(line,row,a);
    ZhuiZhi(line,row,a);
    return 0;
}

void In(int line,int row,int (*p)[row])
{
    for(int i=0;i<line;i++)
    {
        for(int j=0;j<row;j++)
        {
            printf("a[%d][%d]=",i,j);
            scanf("%d",*(p+i)+j);
        }
    }
}

void ZhuiZhi(int line,int row,int (*p)[row])
{
    int max,maxh,maxl;
    for(int i=0;i<line;i++)
    {
        for(int j=0;j<row;j++)
        {
            if(i==0 && j==0)
            {
                max=*(*(p+i)+j);
                maxh=i;
                maxl=j;
            }

            if(max<*(*(p+i)+j))
            {
                max=*(*(p+i)+j);
                maxh=i;
                maxl=j;
    
            }
        }
    }

    printf("最大值是:%d\n所在下标是:a[%d][%d]\n",max,maxh,maxl);
}

结果:

六、杨慧三角

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

void YangHui(int n,int (*p)[n]);

int main(int argc, const char *argv[])
{
    int n;
    printf("请输入数组的行数:");
    scanf("%d",&n);
    int a[n][n];

    YangHui(n,a);
    return 0;
}

void YangHui(int n,int (*p)[n])
{
    for(int i=0;i<n;i++)
    {
        for(int k=0;k<n-i;k++)
        {
            printf("  ");
        }

        for(int j=0;j<=i;j++)
        {
            if(j==0 || i==j)
            {
                *(*(p+i)+j)=1;
            }
            else
            {
                *(*(p+i)+j)=*(*(p+i-1)+j)+*(*(p+i-1)+j-1);
            }

            printf("%4d",*(*(p+i)+j));
        }

        printf("\n");
    }
}

结果:

七、对角线求和

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

void In(int n,int (*p)[n]);
int ZhuDui(int n,int (*p)[n]);
int FuDui(int n,int (*p)[n]);

int main(int argc, const char *argv[])
{
    int n;
    printf("请输入数组的个数:");
    scanf("%d",&n);
    int a[n][n];
    
    In(n,a);
    int sum=ZhuDui(n,a);
    printf("主对角线相加:%d\n",sum);
    int sum1=FuDui(n,a);
    printf("副对角线相加:%d\n",sum1);
    return 0;
}

void In(int n,int (*p)[n])
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("a[%d][%d]=",i,j);
            scanf("%d",*(p+i)+j);
        }

    }
}

int ZhuDui(int n,int (*p)[n])
{
    int sum=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(i==j)
            {
                sum+=*(*(p+i)+j);
            }

        }
    }

    return sum;
}

int FuDui(int n,int (*p)[n])
{
    int sum=0;
    int i=0;

    for(int j=n-1;j>=0;j--)
    {
        sum+=*(*(p+i)+j);
        i++;
    }

    return sum;
}

结果:

八、4个字符串函数【非函数实现】

strlen

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

int My_strlen(char *p);

int main(int argc, const char *argv[])
{
    char s[20]="";
    printf("请输入一个字符串:");
    gets(s);

    int n=My_strlen(s);
    printf("'s'字符串有%d个字符\n",n);
    return 0;
}

int My_strlen(char *p)
{
    int i=0;
    int count=0;
    while(*(p+i))
    {
        i++;
        count++;
    }

    return count;
    
}

结果:

strcpy

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

void Out(char *p);
void My_strcpy(char *p,char *q);

int main(int argc, const char *argv[])
{
    char s1[50]="";
    char s2[50]="";

    printf("请输入第一个字符串:");
    gets(s1);
    printf("请输入第二个字符串:");
    gets(s2);

    My_strcpy(s1,s2);
    Out(s1);
    return 0;
}

void My_strcpy(char *p,char *q)
{
    int i=0;

    while(*(q+i))
    {
        *(p+i)=*(q+i);
        i++;
    }

    *(p+i)='\0';
}

void Out(char *p)
{
    puts(p);
}

结果:

strcat

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

void In(char *p,char *q);
void My_strcat(char *p,char *q);
void Out(char *p);

int main(int argc, const char *argv[])
{
    char s1[50]="";
    char s2[50]="";

    In(s1,s2);
    My_strcat(s1,s2);
    Out(s1);

    return 0;
}

void In(char *p,char *q)
{
    printf("请输入第一个字符串:");
    gets(p);
    printf("请输入第二个字符串:");
    gets(q);

}

void My_strcat(char *p,char *q)
{
    int i=0,j=0;

    while(*(p+i))
    {
        i++;
    }

    while(*(q+j))
    {
        *(p+i)=*(q+j);
        j++;
        i++;
    }
    *(p+i)='\0';
}

void Out(char *p)
{
    puts(p);
}

结果:

strcmp

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
    
void In(char *p,char *q);
int  My_strcamp(char *p,char *q);
void Out(int n);

int main(int argc, const char *argv[])
{
    char s1[50]="";
    char s2[50]="";

    In(s1,s2);
    int n=My_strcamp(s1,s2);
    Out(n);

    return 0;
}

void In(char *p,char *q)
{
    printf("请输入第一个字符串:");
    gets(p);
    printf("请输入第二个字符串:");
    gets(q);
}

int  My_strcamp(char *p,char *q)
{
    int i=0,sub=0;

    while(*(p+i)==*(q+i))
    {
        if(*(p+i))
        {
            break;
        }

        i++;
    }

    sub=*(p+i)-*(q+i);

    return sub;
}

void Out(int n)
{
    if(n>0)
    {
        printf("s1>s1\n");
    }
    else if(n<0)
    {
        printf("s1<s1\n");
    }
    else
    {
        printf("s1=s2\n");
    }
}

结果:

九、字符串单词逆置

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

void In(char *p);
void Nz(char *p);
void Out(char *p);


int main(int argc, const char *argv[])
{
    char s[50]="";

    In(s);
    Nz(s);
    Out(s);

    return 0;
}

void In(char *p)
{
    printf("请输入一串字符串:");
    gets(p);
}

void Nz(char *p)
{
    int i=0;

    while(*(p+i))
    {
        i++;
    }
    int k=i-1;
    int z=i;
    
    i=0;
    while(i<k)
    {
        char t;
        t=*(p+i);
        *(p+i)=*(p+k);
        *(p+k)=t;
        i++;
        k--;
    }
    
    int m=0;
    for(int n=0;n<z;)
    {
        while(*(p+m)!=' ' && *(p+m)!='\0')
        {
            m++;
        }

        int l=m-1;

        while(n<l)
         {
            char t;
            t=*(p+n);
            *(p+n)=*(p+l);
            *(p+l)=t;
            n++;
            l--;
        }

        while(*(p+m)==' ')
        {
            m++;
        }

        n=m;

    }

}

void Out(char *p)
{
    puts(p);
}

结果:

十、二维字符数组的排序

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


void Px(int line,int row,char (*p)[row]);
void In(int line,int row,char (*p)[row]);

int main(int argc, const char *argv[])
{
    int line,row;
    printf("请输入行:");
    scanf("%d",&line);
    getchar();
    printf("请输入列:");
    scanf("%d",&row);
    getchar();
    char s[line][row];

    In(line,row,s);
    Px(line,row,s);
    printf("\n");
    for(int i=0;i<line;i++)
    {
        puts(s[i]);
    }

    return 0;
}

void Px(int line,int row,char (*p)[row])
{

    for(int i=0;i<line;i++)
    {
        for(int j=0;j<line-1;j++)
        {
            if(strcmp(*(p+j),*(p+j+1))>0)
            {
                char t[20]="";
                strcpy(t,*(p+j));
                strcpy(*(p+j),*(p+j+1));
                strcpy(*(p+j+1),t);
            }
        }

    }
}

void In(int line,int row,char (*p)[row])
{
    for(int i=0;i<line;i++)
    {
            gets(p+i);
    }
}

结果:

十一、二维字符数组的查找

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

void In(int line,int row,char (*p)[row]);
void Key(int line,int row,char (*p)[row]);

int main(int argc, const char *argv[])
{
    int line,row;
    printf("请输入行数:");
    scanf("%d",&line);
    printf("请输入列数:");
    scanf("%d",&row);
    char s[line][row];

    In(line,row,s);
    Key(line,row,s);
    return 0;
}

void In(int line,int row,char (*p)[row])
{
    for(int i=0;i<=line;i++)
    {
        gets(p+i);
    }
}

void Key(int line,int row,char (*p)[row])
{
    char key[20]="";
    printf("请输入要查找的值:");
    gets(key);

    int count=0;
    for(int i=0;i<line;i++)
    {
        if(strcmp(key,*(p+i))==0)
        {
            count++;
        }
    }

    if(count>0)
    {
        printf("存在该字符\n");
    }
    else
    {
        printf("不存在\n");
    }
}

结果:

十二、打印三角

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int In(int n);
void Out(int n);

int main(int argc, const char *argv[])
{
    int n=0;
    int len=In(n);    
    Out(len);
    return 0;
}

int In(int n)
{
    printf("请输入要打印的行数:");
    scanf("%d",&n);
    return n;
}

void Out(int n)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<=i;j++)
        {
            printf("*");
        }
        printf("\n");
    }

    printf("\n");

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-i;j++)
        {
            printf("*");
        }

        printf("\n");
    }

    printf("\n");

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-i;j++)
        {
            printf(" ");
        }

        for(int k=0;k<=i;k++)
        {
            printf("*");
        }

        printf("\n");
    }

    printf("\n");

    for(int i=0;i<n;i++)
    {
        for(int k=0;k<=i;k++)
        {
            printf(" ");
        }

        for(int j=0;j<n-i;j++)
        {
            printf("*");
        }

    
        printf("\n");
    }
}

结果:

十三、素数

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

void Out(int n);
int In(int n);

int main(int argc, const char *argv[])
{
    int n;
    int num=In(n);
    Out(num);
    return 0;
}

int In(int n)
{
    printf("请输入一个数:");
    scanf("%d",&n);
    return n;
}

void Out(int n)
{
    int count=0;
    for(int i=1;i<=n;i++)
    {
        if(n%i==0)
        {
            count++;
        }
    }

    if(count==2)
    {
        printf("%d是素数\n",n);
    }
    else
    {
        printf("%d不是素数\n",n);
    }
}

结果:

十四、完数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
    
int In(int n);
void Out(int n);

int main(int argc, const char *argv[])
{
    int n;
    int num=In(n);
    Out(num);
    return 0;
}

int In(int n)
{
    printf("请输入一个数:");
    scanf("%d",&n);
    return n;
}

void Out(int n)
{
    int sum=0;

    for(int i=1;i<n;i++)
    {
        if(n%i==0)
        {
            sum+=i;
        }
    }

    if(sum==n)
    {
        printf("%d是完数\n",n);
    }
    else
    {
        printf("%d不是完数\n",n);
    }
}

结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值