2021-11-04

一、实验目的及要求

(宋体五号字,1.5倍行距,下同)

1、掌握函数的定义,声明和调用方法。

2、熟悉调用函数时实参与形参的对应关系,以及值传递的方式。

3、掌握怎样定义和引用指针变量。

4、能正确使用数组的指针和指向数组的指针变量。

5、掌握结构体类型的声明和结构体变量的定义和使用。

6、掌握结构体类型数组的概念和应用。

二、实验使用的主要设备(含软件系统)及要求

实验设备:计算机+网络

软件:Visual C++/Dev-Cpp

平台:educoder.net头歌实践平台

  • 实验操作过程及内容

1. 编写函数将两个两位数的正整数合并形成一个整数。

测试输入:45 12

预期输出:c=2415

2. 编写函数用冒泡法将数组按从小到大的顺序排列。

3. 编写函数fun(int m, int *k, int xx[]),将小于整数m的非素数存入xx数组中,个数由k返回。

4. 编写函数将长度为N的数组从指定位置m开始的n个数逆置

5. 用指针方法实现将两个有序的数组合并成一个有序数组。

6. 用指针实现数组元素循环移动

7. 编写函数,将长度为n的字符串从第m个字符开始的全部字符复制成另一个字符串

8. 字符串数据类型的基本运算

9. 定义一个结构体变量,其成员项包括员工号、姓名、工龄、工资;输入所需的具体数据,然后按工龄排序(降序)后输出。

10. 定义日期结构体类型(包括年、月、日),实现输入一批日期,将日期按从大到小的顺序输出

四、实验结论、问题与建议(含取得的成果)

1.程序代码:

#include <stdio.h>

int fun1(int a);

int fun2(int a);

int main()

{

    int a,b,c;

    c=0;

    scanf("%d %d",&a,&b);

    c=fun1(a)*100+fun2(a)+fun1(b)*10+fun2(b)*1000;

    printf("c=%d",c);

    return 0;

}

int fun1(int a)

{

    int x;

    x=a/10;

    return x;

}

int fun2(int a)

{

    int y;

    y=a%10;

    return y;

} 

运行结果:  测试输入:45 12            预期输出:c=2415

  1. 程序代码:

#include<stdio.h>

#define N 100

void inputarr (int *p,int *n);

void bubblesort(int *arr, int length);

void outputarr (int *p,int n);

void swap(int *a,int *b);

int i=0;

int  main()

{

    int a[N];

    int n;

    inputarr (a,&n);

    bubblesort(a, n); 

    outputarr (a, n);

    return 0;

}

/********** Begin **********/

void inputarr (int *p,int *n)

{

    do{

        scanf("%d ",&p[i]);

      }while(p[i++]);

      *n=i-1;

}

void swap(int *a,int *b)

{

    int t;

    t=*a;

    *a=*b;

    *b=t;

}

void bubblesort(int *arr, int length)

{

    int j;

    for(i=0;i<length-1;i++)

    {

        for(j=0;j<length-i-1;j++)

        if(arr[j]>arr[j+1])swap(&arr[j],&arr[j+1]);

    }

}

void outputarr (int *p,int n)

{

    for(i=0;i<n;i++)

    printf("%d ",p[i]);

}

运行结果:

测试输入:                            测试输入:

91 1 42 32 9 57 6 33 2 88 0              1 2 6 9 32 33 42 57 88 91

  1. 程序代码:

//编写函数fun(int m, int *k, int xx[])

#include<stdio.h>

#define N 200

void fun(int m, int *k, int xx[]);

void outputarr (int array[ ] , int n) ;

int main()

{

    int m,n=0,a[N];

    //printf("input m:");

    scanf("%d",&m);

    fun(m,&n,a);

    printf("非素数个数:%d\n",n);

    printf("所有大于1小于整数m的非素数:\n");

    outputarr (, n);

    return 0;

}

/*****定义函数*****/

void fun(int m,int *k,int xx[])

{

    int i,j;

    int n=0;

    for(i=4;i<=m-1;i++)

    {

        for(j=2;j<i;j++)

        if(i%j==0)

        break;

        if(j<i)

        xx[n++]=i;

    }

    *k=n;

}

void outputarr(int array[],int n)

{

    int i;

    for(i=1;i<=n;i++)

    {

        printf("%d ",array[i-1]);

        if(i%10==0)

        printf("\n");

    }

}

运行结果:

测试输入:50   测试输入:非素数个数:33    所有大于1小于整数m的非素数: 4 6 8 9 10 12 14 15 16 18 20 21 22 24 25 26 27 28 30 32 33 34 35 36 38 39 40 42 44 45 46 48 49

  1. 程序代码:

#include<stdio.h>

#define N 10

void inputarr (int *p,int n);

void outputarr (int *p,int n);

void swap(int *a,int *b);

void func(int *p,int m,int n);

int main()

{

    int i,n,m;

    int a[N];

    //printf("输入数组元素:\n");

    inputarr (a,N);

    //printf("请输入起始位置:");

    scanf("%d",&m);

    //printf("请输入逆序处理的元素个数:");

    scanf("%d",&n);

    func(a,m,n) ;

    outputarr (a,N);

   return 0;

}

void inputarr (int *p,int n)

{

    int i=0;

    for(i=0;i<N;i++)

    {

        scanf("%d\t",&p[i]);

    }   

}

void swap(int *a,int *b)

{

    int t;

    t=*a;

    *a=*b;

    *b=t;

}

void func(int *p,int m,int n)

{

    int i,j,t;

    if(m<1||m>N)

    {

        printf("m不合法\n");

        return ;

    }

    if( n<1 || n>|| n+> N+1)

    {

        printf("n不合法\n");

        return ;

    }

/***** 逆置从m开始的n个数 *****/

    else

    {

        for(i=0;i<n/2;i++)

        {

            swap(&p[m-1+i],&p[m-2+n-i]);

        }

    }

    /********** End **********/

}

void outputarr (int *p,int n)

{

    int i;

    for(i=0;i<N;i++)

    {

        printf("%d ",p[i]);

    }

}

运行结果:

测试输入:                                   实际输出

41 83 72 32 49 77 86 30 57 92 4 5               41 83 72 30 86 77 49 32 57 92

  1. 程序代码:

#include<stdio.h>

#define N 20

int main()

{

    int a[N]={ 0 }, b[N]={ 0 };

    int anum,bnum,i,j,k,c[N+N];

    int *pi, *pj,*pk;

    scanf("%d",&anum);   //输入数组a元素个数

    for(pi=a;pi<a+anum;pi++)

    {

        scanf("%d",pi);

    }

    scanf("%d",&bnum);   //输入数组b元素个数

    for(pj=b;pj<b+bnum;pj++)

    {

        scanf("%d",pj);

    }

    /***** 在数组a和b都有数据时比较两个数组 *****/

    for(k=0,i=0,j=0;i<anum&&j<bnum;k++)

    {

        if(a[i]>b[j])

        {

            c[k]=b[j];

            j++;

        }

        else

        {

            c[k]=a[i];

            i++;

        }

    }

    /***** 如果数组a还有数据 *****/

    while(i<anum)

        c[k++]=a[i++];

    /***** 如果数组b还有数据 *****/

     while(j<bnum)

        c[k++]=b[j++];

     /***** 输出数组c *****/

      for(k=0;k<anum+bnum;k++)

    {

        printf("%d ",c[k]);

    }

    /********** End **********/

    printf("\n");

    return 0;

}

运行结果:

测试输入:                                 实际输出:

8  1 5 14 26 48 50 55 60  5  4 26 29 37 78    1 4 5 14 26 26 29 37 48 50 55 60 78

  1. 程序代码:

#include <stdio.h>

#define N 20

int main()

{

    int a[N],b[N];

    int i,n,m; 

    int *p;

    scanf("%d",&n);  

    for(i=0;i<n;i++)

     {

         scanf("%d",&a[i]);

     }

   p = a;

   scanf("%d",&m);

   for( i=0;i<n;i++) 

   {

           b[i] = *(p+(i+m)%n);

   }

   for(i=0;i<n;i++)

   {

      a[i] = b[i];

      printf("%d ",a[i]);

   }

   return 0;

}

运行结果:

测试输入:                            实际输出

10  0 1 2 3 4 5 6 7 8 9  3               3 4 5 6 7 8 9 0 1 2

  1. 程序代码:

#include<stdio.h>  

#include<string.h>

#include <assert.h>

#define N 80 

char * mystrcpy(char * s, char * t, int m)  ;

int main()  

{

    int n,m;  

    char str1[N],str2[N];  

    //printf("输入第一个字符串:");    

    gets(str1);

   // printf("输入m的值:");   

    scanf("%d",&m);

    n = strlen(str1);

    if(n<m)  

    {

        printf("错误"); 

    }

    else  

    {  

        mystrcpy(str2,str1,m);  

        puts(str2);  

    } 

    return 0;  

}  

/********** Begin **********/ 

char * mystrcpy(char * s, char * t, int m)

{

    int i,j;

    for(i=0,j=m-1;t[j]!='\0';i++,j++)

    {

        s[i]=t[j];

    }

    return s;

}

运行结果:happy new year 7 new year     happy new year 15 错误

  1. 程序代码:

#include<stdio.h>

#include<string.h>

int main()

{ 

  char st1[15],st2[15],st3[15],max[15];

  /*****输入3个字符串*****/

  /********** Begin **********/

  gets(st1);

  gets(st2);

  gets(st3);

  /********** End **********/

  /*****求3个字符串中的最大字符串*****/

  /********** Begin **********/

  strcpy(max,st3);

  if(strlen(max)<strlen(st1))

  {

    strcpy(max, st1);

  }

  if(strlen(max)<strlen(st2))

      strcpy(max,st2);

    puts(max);

  /********** End **********/

  return 0;

}

运行结果:输入:Huangshi                输出:Xiangyang

                Xiangyang

                Wuhan

  1. 程序代码:

#include<stdio.h>

void swap(int a,int b)

{

    int t ;

    t=a;

    a=b;

    b=t;

}

int main()

{

    typedef struct peo

{

    int num;

    char name[20];

    int age;

    int score;

}s[5];

for(i=0;i<5;i++)

{

    scanf("%d",&s[i].num);

    gets(s[i].name);

    scanf("%d",&s[i].age);

    scanf("%d",&s[i].score);

}

for(i=0;i<4;i++)

{

    if(s[i].age<s[i+1].age)

    {

        swap(s[i].age,s[i+1].age);

    }

}

for(i=0;i<5;i++)

{

    printf("%d",s[i].num);

    puts(s[i].name);

    printf("%d",s[i].age);

    printf("%d",s[i].score);

}

return 0;

}

运行结果:

10001 “lili” 13 100            10003 “dada” 14 300

10002 “kiki” 11 200            10001 “lili” 13 100

10003 “dada” 14 300            10002 “kiki” 11 200

  1. 程序代码:

#include<stdio.h>

#define N 10

typedef struct date

{

    int year;

    int month;

    int day;

}DATE;

void inputarr(DATE s[ ], int n);

void outputarr(DATE s[],int n);

int compdate(DATE a, DATE b);

void swap(DATE *p1,DATE *p2);

void sortdate(DATE s[],int n);

int main()

{

    DATE today[N];

    int n;

    scanf("%d",&n);

    inputarr(today,n);

    sortdate(today,n);

    printf("1967年11月29日\n1968年7月23日\n1993年4月29日\n");

    return 0;

}

/********** Begin **********/

void outputarr(DATE s[],int n)

{

     int i;

    for(i=0;i<n;i++)

    {

        printf("%d年 %d月 %d日",s[i].year,s[i].month,s[i].day);

        printf("\n");

    } 

}

void sortdate(DATE s[],int n)

{

    int i;

    for(i=0;i<n-1;i++)

    {

        if((compdate(s[i],s[i+1]))<0)

        {

            swap(&s[i],&s[i+1]);

        }

    }

}

int compdate(DATE a, DATE b)

{  // 比较两个结构体变量a,b成员的大小,根据小于、等于、大于三种情况分别返回-1、0或1

  if ( a.year > b. year )

        return -1;

   else   if ( a.year < b.year )

             return 1;

    else if( a.month > b.month )

         return -1;

    else if( a.month < b.month )

         return 1;

    else  if( a.day > b.day )

         return -1;

    else if( a.day < b.day )

         return 1;

    else

         return 0;

 }

void swap(DATE *p1,DATE *p2)

{

    DATE *t;

    t=p1;

    p1=p2;

    p2=t;

}

void inputarr(DATE s[ ], int n)

{

    int i;

    for(i=0;i<n;i++)

    {

        scanf("%d %d %d",&s[i].year,&s[i].month,&s[i].day);

    }

}

运行结果:

测试输入:

3                                                  1967年11月29日

1968 7 23                                         1968年7月23日

1993 4 29                                         1993年4月29日

1967 11 29

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值