2023.3.9练习

作业一:素数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun(int a)
{
    int count=0;
    for(int i=1;i<=a;i++)
    {
        if(a%i==0)
        {
            count++;
        }
    }
    return count;
}
int main(int argc,const char *argv[])
{    
    int a;
    printf("请输入一个数:");
    scanf("%d",&a);
    int t=fun(a);
    if(t==2)
        printf("%d是素数\n",a);
    else if(t!=2)
        printf("%d不是素数\n",a);
    return 0;
}

作业二:完美数 (返回和)

6=1+2+3 28=1+2+4+7+14

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun(int a,int sum)
{
    for(int i=1;i<a;i++)
    {
        if(a%i==0)
        {
            sum+=i;
        }
    }
    return sum;
}
int main(int argc, const char *argv[])
{    
    int a;
    printf("请输入一个数:");
    scanf("%d",&a);
    int t=fun(a,0);
    if(t==a)
        printf("%d是完美数\n",a);
    else 
        printf("%d不是完美数\n",a);
    return 0;
}

作业三:图形打印

F F

_FE _ FE

__FED = __ + FED

___FEDC ___ FEDC

____FEDCB ____ FEDCB

_____FEDCBA _____ FEDCBA

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(int i,int j)
{
    printf("F");
    for(i=0;i<7;i++)
    {
        for(j=0;j<i;j++)
        {
            printf("_");
        }
        for(j=0;j<i;j++)
        {
            printf("%c",'F'-j);
        }
        printf("\n");
    }
}
int main(int argc, const char *argv[])
{    
    int i,j;
    fun(i,j);
    return 0;
}

作业四(一维数组):

  1. 最值 指针

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Max(int n,int *p)
{
    int max=*p;
    for(int i=0;i<n;i++)
    {
        if(max<*(p+i))
            max=*(p+i);
    }
    return max;
}
int main(int argc, const char *argv[])
{    
    int n;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    int arr[n];
    int *p=arr;
    for(int i=0;i<n;i++)
    {
        printf("arr[%d]=",i);
        scanf("%d",p+i);
    }
    int max=Max(n,arr);
    printf("最大值为:%d\n",max);

    return 0;
}

  1. 冒泡 指针

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Max(int n,int *p)
{
    for(int i=1;i<n;i++)
    {
        int count=0;
        for(int j=0;j<n-i;j++)
        {
            if(*(p+j)<*(p+j+1))
            {
                int t=*(p+j+1);
                *(p+j+1)=*(p+j);
                *(p+j)=t;
                count++;
            }
        }
        if(count==0)
            break;
    }
    printf("冒泡排序后的顺序为:\n");
    for(int i=0;i<n;i++)
    {
        printf("%d\t",*(p+i));
    }
    printf("\n");
}
int main(int argc, const char *argv[])
{    
    int n;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    int arr[n];    
    for(int i=0;i<n;i++)
    {
        printf("arr[%d]=",i);
        scanf("%d",&arr[i]);
    }

    Max(n,arr);

    return 0;
}

  1. 简单选择 指针

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Min(int n,int *p)
{
    int min;
    for(int i=0;i<n-1;i++)
    {
        min=i;
        int count=0;
        for(int j=i+1;j<n;j++)
        {
            if(*(p+min)>*(p+j))
            {
                min=j;
                count++;
            }
        }
        if(min!=i)
        {
            int t=*(p+min);
            *(p+min)=*(p+i);
            *(p+i)=t;
        }
        if(count==0)
            break;
    }
    printf("简单排序后的顺序为:\n");
    for(int i=0;i<n;i++)
    {
        printf("%d\t",*(p+i));
    }
    printf("\n");
}
int main(int argc, const char *argv[])
{    
    int n;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    int arr[n];    
    for(int i=0;i<n;i++)
    {
        printf("arr[%d]=",i);
        scanf("%d",&arr[i]);
    }
    Min(n,arr);

    return 0;
}

  1. 交换最大值和最小值

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Fun(int n,int *p)
{
    int min,mini=0,max,maxi=0;
    min=max=*p;
    for(int i=0;i<n;i++)
    {
        if(min>*(p+i))
        {
            mini=i;    
        }
        if(max<*(p+i))
        {
            maxi=i;
        }
    }
    int a=*(p+mini);
    *(p+mini)=*(p+maxi);
    *(p+maxi)=a;
}

int main(int argc, const char *argv[])
{    
    int n;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    int arr[n];    
    for(int i=0;i<n;i++)
    {
        printf("arr[%d]=",i);
        scanf("%d",&arr[i]);
    }
    printf("交换前的数组为:");
    for(int i=0;i<n;i++)
    {
        printf("%d\t",arr[i]);
    }
    printf("\n");
    Fun(n,arr);
        printf("交换后的数组为:");
    for(int i=0;i<n;i++)
    {
        printf("%d\t",arr[i]);
    }
    printf("\n");
    return 0;
}

作业五(二维数组):

  1. 最值 、最值的下标 指针

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(int m,int n,int (*p)[n])
{
    int max=*(*p);
    int maxi=0,maxj=0;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(max<*(*(p+i)+j))
            {
                max=*(*(p+i)+j);
                maxi=i;
                maxj=j;
            }
        }
    }
    printf("最大值max=arr[%d][%d]=%d\n",maxi,maxj,max);
}
int main(int argc, const char *argv[])
{    
    int m,n;
    printf("请输入行列:");
    scanf("%d%d",&m,&n);
    int arr[m][n];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("arr[%d][%d]=",i,j);
            scanf("%d",&arr[i][j]);
        }
    }
    fun(m,n,arr);

    return 0;
}

  1. 杨辉三角

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Yanghui(int m,int (*p)[m])
{
    for(int i=0;i<m;i++)
    {
        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);
        }
    }
    for(int i=0;i<m;i++)
    {
        for(int k=0;k<m-i;k++)
        {
            printf(" ");
        }
        for(int j=0;j<=i;j++)
        {
            printf("%d ",*(*(p+i)+j));
        }
        printf("\n");
    }
    printf("\n");
}
int main(int argc, const char *argv[])
{    
    int m;
    printf("请输入杨辉三角的阶数:");
    scanf("%d",&m);
    int arr[m][m];
    Yanghui(m,arr);
    return 0;
}

  1. 正对角线求和

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Dui(int m,int (*p)[m])
{
    int sum=0;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(i==j)
            {
                //正对角线和
                sum+=*(*(p+i)+j);
            }
        }
    }
    return sum;
}
int main(int argc, const char *argv[])
{    
    int m;
    printf("请输入数组的行数/列数:");
    scanf("%d",&m);
    int arr[m][m];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            printf("arr[%d][%d]=",i,j);    
            scanf("%d",&arr[i][j]);
        }
    }
    printf("对角线元素和=%d",Dui(m,arr));
    return 0;
}

作业六(字符串):

  1. 4个字符串函数【非函数实现】 重点

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//字符串比较大小
int my_strcmp(char *p,char *q)
{
    int i=0,j=0;
    while(*(p+i)==*(q+j))
    {
        if(*(p+i)='\0')
            break;
        i++;
        j++;
    }
    int dev=*(p+i)-*(q+j);
    return dev;
}
//字符串连接
void my_strcat(char *p,char *q)
{
    int i;
    for(i=0;*(p+i)!=0;i++);
    int j;
    for(j=0;*(q+j)!=0;j++)
    {
        *(p+i)=*(q+j);
        i++;
    }
    *(p+i)='\0';
}
//字符串拷贝
void my_strcpy(char *p,char *q)
{
    int i;
    for(i=0;*(q+i)!=0;i++)
    {
        *(p+i)=*(q+i);
    }
    *(p+i)='\0';
}
//字符串计算长度
int my_strlen(char *p)
{
    int count=0;
    for(int i=0;*(p+i)!='\0';i++)
    {
        count++;
    }
    return count;
}
int main(int argc, const char *argv[])
{    
    char str1[30]="wwww";
    char str2[]="hello world";
    char str3[]="yyyy";
    printf("字符串长度为:%d\n",my_strlen(str1));
    my_strcpy(str1,str2);
    printf("拷贝后的字符串为:%s\n",str1);
    my_strcat(str2,str3);
    printf("连接后的字符串为:%s\n",str2);
    //字符串比较大小
    char a[20]="wwy";
    char b[20]="wwyc";
    int d=my_strcmp(a,b);
    if(d>0)
        printf("a>b\n");
    else if(d<0)
        printf("a<b\n");
    else if(d==0)
        printf("a=b\n");
    return 0;
}

  1. 字符串单词逆置 指针

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Danci(char *p)
{
    int i=0,j=strlen(p)-1;
    while(i<j)
    {
        char t=*(p+i);
        *(p+i)=*(p+j);
        *(p+j)=t;
        i++;
        j--;
    }
    j=0;
    for(i=0;i<strlen(p);)
    {
        while(*(p+j)!=' '&&*(p+j)!='\0')
        {
            j++;
        }
        int k=j-1;
        while(i<k)
        {
            char t=*(p+k);
            *(p+k)=*(p+i);
            *(p+i)=t;
            i++;
            k--;
        }
        while(*(p+j)==' ')
        {
            j++;
        }
        i=j;
    }
    printf("单词逆置后为:");
    puts(p);
}
int main(int argc, const char *argv[])
{    
    char str[30]="";
    printf("请输入字符串:");
    gets(str);
    Danci(str);
    return 0;
}

作业七(二维字符数组):

  1. 二维字符数组的排序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Paixu(int m,char (*p)[50])
{
    for(int i=1;i<m;i++)
    {
        for(int j=0;j<m-i;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);
            }
        }
    }
}
int main(int argc, const char *argv[])
{    
    int m;
    printf("请输入数组行数:");
    scanf("%d",&m);
    char str[m][50];
    for(int i=0;i<m;i++)
    {
        scanf("%s",str[i]);
    }
    Paixu(m,str);
    for(int i=0;i<m;i++)
    {
        printf("%s\t",str[i]);
    }
    printf("\n");
    return 0;
}

  1. 二维字符数组的查找

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Paixu(int m,char (*p)[50],char *key)
{
    int count=0;
    for(int i=0;i<m;i++)
    {
        if(strcmp(key,*(p+i))==0)
            count++;
    }
    return count;
}
int main(int argc, const char *argv[])
{    
    int m;
    printf("请输入数组行数:");
    scanf("%d",&m);
    char str[m][50],key[20]="";
    for(int i=0;i<m;i++)
    {
        printf("请输入第%d个字符串:",i+1);
        scanf("%s",str[i]);
    }
    printf("请输入需要查找的字符串:");
    scanf("%s",key);
    int t=Paixu(m,str,key);
    if(t!=0)
    {
        printf("存在字符串%s\n",key);
    }
    else
        printf("不存在字符串%s\n",key);
    return 0;
}

作业八:递归

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun(int n)
{
    if(n==1)
    {
        return 1;
    }
    else
    {
        return n*fun(n-1);
    }

}
int main(int argc, const char *argv[])
{    
    int n;
    printf("请输入n的值:");
    scanf("%d",&n);
    int mul=fun(n);
    printf("n的阶乘为: %d\n",mul);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值