C语言程序设计实验报告(七)

C程序设计实验报告

实验项目:

8.31.指针基础及指针运算

8.3.2.数据交换

8.3.3.字符串反转及字符串连接

8.3.4.数组元素奇偶排列

姓名:涂宇昌  实验地点:教室  实验时间:2020/7/7

一、实验目的与要求

8.31.指针基础及指针运算

8.3.2.数据交换

8.3.3.字符串反转及字符串连接

8.3.4.数组元素奇偶排列

二、实验内容

1、实验练习:8.3.1.指针基础及指针运算

1.问题的简单描述:

(1)掌握指针的概念和定义的方法;
(2)掌握指针的操作符和指针的运算;
(3)掌握指针和数组的关系;
(4)掌握指针和字符串的关系;
(5)熟悉指针为函数的参数及返回指针的函数;
(6)了解函数指针。

2.实验代码:

#include<stdio.h>
int main()
{
    int *p,a,c=3;
    float *q,b;
    p=&a;
    q=&b;
    printf("Please Input the Value of a,b:");
    scanf("%d%f",p,q);
    printf("Result:\n");
    printf("%d,%f\n",a,b);
    printf("%d,%f\n",*p,*q);
    printf("The Address of a,b:%p,%p\n",&a,&b);
    printf("The Address of a,b:%p,%p\n",p,q);
    p=&c;
    printf("c=%d\n",*p);
    printf("The Address of c:%x,%x\n",p,&c);
    return 0;
}

3.问题分析:

2、实验练习:

1.问题的简单描述:

(1)定义两个函数,分别为void swap1(int a, int b)和void swap2(int *a, int *b),用于交换a、b的值。
(2)从主函数中分别输人两个整型变量a、b。
(3)从主函数中分别调用上述两个交换函数,并打印输出交换后a、b的结果。

2.实验代码

#include<stdio.h>
int swap1(int x,int y);
int swap2(int *x,int *y);
int main()
{
    int a,b;
    printf("Please Input a=:");
    scanf("%d",&a);
    printf("\nb=:");
    scanf("%d",&b);
    swap1(a,b);
    printf("\nAfter Call swap1:a=%d b=%d\n",a,b);
    swap2(&a,&b);
    printf("\nAfter Call swap2:a=%d b=%d\n",a,b);
    return 0;
}
int swap1(int x,int y)
{
    int temp;
    temp=x;
    x=y;
    y=temp;
}
int swap2(int *x,int *y)
{
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;
}

3.问题分析

3、实验练习:

1.问题的简单描述:

(1)定义两个字符指针,通过gets()函数输入两个字符串。
(2)定义一个函数char *reverse(char *str), 通过指针移动方式将字符串反转。
(3)定义一个函数char *Iink(char *strl, char *str2),通过指针移动方式将两个字符串连接起来。
(4)从主函数中分别调用上述函数,输人字符串并打印输出结果。

2.实验代码

#include<stdio.h>
char *reverse(char *str);
char *link(char *str1,char *str2);
int main()
{
    char str[30],str1[30],*str2;
    printf("Input Reversing Character String:");
    gets(str);
    str2=reverse(str);
    printf("\nOutput Reversed Character String:");
    puts(str2);
    printf("Input String1:");
    gets(str);
    printf("Input String2:");
    gets(str1);
    printf("Link String1 and String2:");
    str2=link(str,str1);
    puts(str2);
    return 0;
}
char *reverse(char *str)
{
    char *p,*q,temp;
    p=str,q=str;
    while(*p!='\0')
        p++;
    p--;
    while(q<p)
    {
        temp=*q;
        *q=*p;
        *p=temp;
        q++;
        p--;
    }
    return str;
}
char *link(char *str1,char *str2)
{
    char *p=str1,*q=str2;
    while(*p!='\0')
        p++;
    while(*q!='\0')
    {
        *p=*q;
        p++;
        q++;
    }
    *p='\0'; 
    return str1;
}

3.问题分析

这个代码很多,几次打错,不会的还好可以问同学,细心一些就好

4、实验练习:

1.问题的简单描述:

(1)定义一个整型一 维数组,任意输人数组的元素,其中包含奇数和偶数。
(2)定义一个函数,实现数组元素奇数在左、 偶数在右的排列。
(3)在上述定义的函数中,不允许再增加新的数组。
(4)从主函数中分别调用上述函数,打印输出结果。

2.实验代码

#include<stdio.h>
#define N 10
int arrsort(int a[],int n);
int main()
{
    int a[N],i;
    for(i=0;i<N;i++)
        scanf("%d",&a[i]);
    arrsort(a,N);
    for(i=0;i<N;i++)
    printf("%d ",a[i]);
}
int arrsort(int a[],int n)
{
    int *p,*q,temp;
    p=a;
    q=a+n-1;
    while(p<q)
    {
        while(*p%2!=0)
            p++;
        while(*q%2==0)
            q--;
        if(p>q)
            break;
        temp=*p;
        *p=*q;
        *q=temp;
        p++;
        q--;
    }
}

3.问题分析

 一个指向一维数组的指针加1或减1运算将指向数组的下一个元素或前一个元素,其余的按照书上的指示来写就好

三、实验小结:

对比当前所学,我感觉并没有达到我所期望的目标,虽然学的多,但是操作少,给我一种,你不会,还写不出的感觉。
自己能力还是存在很大的去缺陷,能力还是不足。
平时又好吃懒做,耽误作业进度,精度。我感觉我并没有学会C语言程序设计,我只是了解了,还有很多地方要继续学习,个个方面还不太成熟,还需要继续完善。很庆幸当初胡乱选专业,选到了一个前景不错的专业,也同样很失望自己没有学到很多东西,害,日后加油吧!

posted @ 2020-07-07 11:43  113120190325  阅读(151)  评论(0编辑  收藏  举报