实验课程

THIS NAME

实验课程

当前位置: 首页 >> 实验课程 >> 正文

计算机程序设计(C)-C语言指针实验

发布日期:2023-09-08    作者:胡向丽     来源:     点击:

C语言指针实验

一、实验目的

1、掌握C语言指针相关知识

2、运用指针操作数组,操作字符串匹配序列。

二、实验设备与器件

PC机、头歌实践教学平台

三、实验内容

使用头歌平台编程:

(一)设计题目

1编写一个函数,输入一个整型数组和数组长度,将数组中的元素倒序存放。要求不能使用另外的数组,只能通过指针操作来实现。

C程序1

#include   <stdio.h>

void   reverse(int arr[], int len){

/***********begin********/

     int *p1 = arr;

     int *p2 = arr+len-1;

     while(p1<p2){

         int temp = *p1;

         *p1 = *p2;

         *p2 = temp;

         p1++;

         p2--;

     }

/**********end***********/

}

int   main(){

     int arr[5] = {1, 2, 3, 4, 5};

     int len = 5;

     reverse(arr, len);

     int i;

     for(i=0;i<len;i++){

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

     }

     return 0;

}

2、编写一个函数,输入一个字符串和一个模式串,判断字符串中是否包含模式串。其中,模式串中可以包含通配符“*”,表示可以匹配任意字符序列。要求不能使用字符串相关的库函数,只能通过指针操作来实现。

C程序2

#include <stdio.h>

int match(char *pstr, char *ppat){

/***********begin********/

   char *p1 = pstr;

   char *p2 = ppat;

   char *last_p1 = NULL;

   char *last_p2 = NULL;

   while(*p1!='\0'){

         if(*p1==*p2 || *p2=='*'){

             p1++;

             p2++;

             if(*p2=='*'){

               last_p1   = p1;

                 last_p2 = p2;

             }

         }

         else{

             if(last_p1==NULL){

                 return 0;

             }

             else{

                 p1 = last_p1+1;

                 p2 = last_p2+1;

                 last_p1 = p1;

             }

         }

}

3、编写一个函数,找出一个整型数组中的最大值和最小值,并将其存储在指定的变量中。

C程序3

#include <stdio.h>

void find_max_min(int *arr, int n, int   *max, int *min) {

/***********begin********/

   *max = *min = arr[0];

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

         if (arr[i] > *max) {

             *max = arr[i];

         }

         if (arr[i] < *min) {

             *min = arr[i];

         }

   }

 

 

/**********end***********/

}

int main() {

   int arr[] = {1, 2, 3,   4, 5};

   int n = sizeof(arr) /   sizeof(arr[0]);

   int max, min;

   find_max_min(arr, n,   &max, &min);

   printf("Max   value: %d\n", max);

   printf("Min   value: %d\n", min);

   return 0;

}

4、编写一个函数,判断一个字符串是否为回文字符串。

C程序4

#include <stdio.h>

#include <string.h>

int is_palindrome(char *str) {

/***********begin********/

   int len = strlen(str);

   for (int i = 0; i <   len / 2; i++) {

         if (str[i] != str[len-1-i]) {

             return 0;

         }

   }

   return 1;

 

/**********end***********/

 

}

int main() {

   char str[100];

     scanf("%s",&str);

   if   (is_palindrome(str)) {

         printf("The string is a palindrome.\n");

   } else {

         printf("The string is not a palindrome.\n");

   }

   return 0;

}        

5、指针与数组

编写一个函数,接受一个整型数组和它的长度作为参数,返回数组中最大值的指针。

C程序5

#include <stdio.h>

int *max(int arr[], int len) {

/***********begin********/

   int *p = &arr[0];

   for (int i = 1; i <   len; i++) {

         if (arr[i] > *p) {

             p = &arr[i];

         }

   }

   return p;

 

 

/**********end***********/

}

int main() {

   int n;

     scanf("%d",&n);

   int a[n];

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

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

       }

       int   *p = max(a, n);

       printf("%d",*p);

   return 0;

}

6、逆序排序

编程一个程序,它可以输出一条“Hello World”的消息

C程序6

#include <stdio.h>

void reverse(int *arr[], int len) {

/***********begin********/

   int *p;

   for (int i = 0, j =   len - 1; i < j; i++, j--) {

         p = arr[i];

         arr[i] = arr[j];

         arr[j] = p;

   }

 

 

/**********end***********/

}

int main() {

   int arr[] = {4, 5, 2,   8, 1, 3};

   int len = sizeof(arr)   / sizeof(arr[0]);

   int *pArr[len];

   for (int i = 0; i <   len; i++) {

         pArr[i] = &arr[i];

   }

   printf("逆序前的数组为:");

   for (int i = 0; i <   len; i++) {

         printf("%d ", *pArr[i]);

   }

     printf("\n");

   reverse(pArr, len);

   printf("逆序后的数组为:");

   for (int i = 0; i <   len; i++) {

         printf("%d ", *pArr[i]);

   }

     printf("\n");

   return 0;

}

7、数组合并

编写一个函数,接受两个整型数组和它们的长度作为参数,将这两个数组合并成一个新的数组,并返回新数组的指针。

C程序7

#include <stdio.h>

#include <stdlib.h>

int *merge(int arr1[], int arr2[], int   len1, int len2) {

/***********begin********/

   int *p = (int   *)malloc(sizeof(int) * (len1 + len2));

   if (p == NULL) {

         return NULL;

   }

   int i, j, k;

   for (i = 0; i <   len1; i++) {

         p[i] = arr1[i];

   }

   for (j = 0, k = i; j   < len2; j++, k++) {

         p[k] = arr2[j];

   }

   return p;

 

 

/**********end***********/

}

int main() {

   int arr1[] = {1, 3, 5,   7};

   int arr2[] = {2, 4, 6,   8};

   int len1 =   sizeof(arr1) / sizeof(arr1[0]);

   int len2 =   sizeof(arr2) / sizeof(arr2[0]);

   int *p = merge(arr1,   arr2, len1, len2);

   printf("合并后的数组为:");

   for (int i = 0; i <   len1 + len2; i++) {

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

   }

     printf("\n");

   free(p);

   return 0;

}

8、指针的使用

编写一个函数,接受两个整型指针作为参数,交换它们所指向的变量的值。

C程序8

#include <stdio.h>

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

/***********begin********/

   int temp = *a;

   *a = *b;

   *b = temp;

 

 

/**********end***********/

}

int main() {

       int   a,b;

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

       swap(&a,&b);

       printf("%d,%d",a,b);

   return 0;

}

 

上一条:Harmony程序设计-访问后台服务获取电量信息 下一条:计算机程序设计(C)-C语言数组实验

关闭