GDPU C语言 天码行空10 指针与函数

🍑 C语言实验专栏 (代码可免登录复制)


填空题

在这里插入图片描述
输入

45 98 10 3 88

输出

1,3

⭐ 找最值的数组下标

#include <stdio.h>

void find(int *p, int n, int *max, int *min)
{
	int i;
	*max = *min = 0;
	for(i = 1; i<n; i++)
	{
		if(p[i]>p[*max])
			*max = i;
		if(p[i]<p[*min])
			*min = i;
	}
}

int main()
{
	int a[5], i, max, min;
	for(i = 0; i<5; i++)
		scanf("%d", &a[i]);

	find(a, 5, &max, &min);
	printf("%d,%d", max, min);
}

编程题

在这里插入图片描述


🍑 关于字符串的存储方式
在这里插入图片描述

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

void sort(char* ss[50], int n)
{
	int i, j = 0;
	//冒泡排序
	for(i = 0; i < n; i++)
		for(j = 0; j < n - i - 1; j++)
		if(strlen(ss[j]) > strlen(ss[j + 1]))//大的全部丢后边去
		{
			char *tmp = ss[j];
			ss[j] = ss[j + 1];
			ss[j + 1] = tmp;
		}
}

int main()
{
	char a[100][100];
	int i, n;
	scanf("%d", &n);
	for(i = 0; i < n; i++)
		scanf("%s", a[i]);

	char* strings[1000];//字符串指针 数组
	for(i = 0; i < n; i++)
		strings[i] = a[i];

	sort(strings, n);

	printf("Sorted result:\n");
	for(i = 0; i < n; i++)
		printf("%s\n", strings[i]);//printf()函数中格式符标明要转换的类型,后面不用加解引用符'*';

	return 0;
}

程序片段编程题

1. 数组元素查找问题(指针传参)

在这里插入图片描述


#include <stdio.h>
#define N 10
int search(int *p,int x,int n)
{    
   int i;
   int res = -1;
   for(i = 0; i < n; i++)
   {
   		if(*(p+i) == x)//找到第一个等于 x 的元素的下标
   		{
   			res = i;
   			break;
   		}	
   }
 
	return res;
}
int main()
{    int indx,m,a[N]={10,20,35,40,43,44,45,50,51,60};
     scanf("%d",&m);
     
//	indx = search(a,m,sizeof(a)/sizeof(a[0]));
	indx = search(a,m,N);
 
     if(indx>=0)
        printf("index=%d\n",indx);
     else
        printf("NOEXIST\n");
     return 0;
}
 

2. 有序数组的插入

在这里插入图片描述


🍑 插入在第一个大于 x 的元素的位置,该元素以及后边的元素全部后移一位

#include <stdio.h>
#define N 10
void insert(int *p,int x,int n)//x表示待插入的数值,n表示数组中已有的数值的个数。
{    
    int i,j;   //不允许再定义其它变量和数组
    for(i = 0; i < n; i++)//i 找到第一个大于 x 的数,那就是x的位置
	{
		if(*(p+i) >= x)
		{
			for(j = n; j > i; j--)//当前位置后边的元素都后移一位 
			{
				*(p+j) = *(p+j-1);
			}
			*(p+j) = x;
			break;
		}
	} 
	if(i == n){
		*(p+i) = x;	
	}

}
int main()
{
    int i,m,a[N]={10,12,14,17,20,25,28,31,40};
    scanf("%d",&m);
   
//	insert(a,m,sizeof(a)/sizeof(a[0]));//sizeof(a)/sizeof(a[0])传的是数组的长度,不是数组已有数值的个数 
	insert(a,m,N-1);
    for(i=0;i<N;i++)
        printf("%4d",a[i]);
    printf("\n");
    return 0;
} 

3. 插入排序问题

在这里插入图片描述


🍑 insertsort:从前往后给每一个元素执行有序插入(该元素前边的是有序序列)
🍑 insert:有序插入,保证数组 0~n 的元素单调递增

#include "stdio.h"
#define N 10

//x表示待插入的数值,n-1 表示已排序数组的元素个数。a[n] = x 是新加入待排序的元素 
void insert(int s[],int x,int n)
{    int i;
     if(x>s[n-1])//特判 
        s[n]=x;
     else
     {     for(i=n;i>0&&s[i-1]>x;i--)//找到第一个小于 x 的值,此位置后边所有数后移一位2  
                s[i]=s[i-1];
           s[i]=x;//s[i] 的元素已后移,直接赋值即可 
      }
}
void insertsort(int s[],int n)
{
	int i;
	for(i=1;i<n;i++)//枚举数组的每一个数,一个一个执行有序插入 
		insert(s,s[i],i);// i表示当前的数的数组下标,此数待排序
}

int main()
{     int i,n,a[N];
      scanf("%d",&n);
      for(i=0;i<n;i++)
         scanf("%d",&a[i]);
        
      insertsort(a,n);

      for(i=0;i<n;i++)
          printf("%4d",a[i]);
      printf("\n");
      return 0;
} 

4. 数组元素查找问题(数组传参版)

在这里插入图片描述


🍑 找不到返回 负数

#include "stdio.h"
#define N 10
int search(int s[], int x, int n)
{
	int res = -1,i;
	for(i = 0; i < n; i++)
	{
		if(s[i] == x)
		{
			return res = i;
			break;
		}
	}
	return res;
}
int main()
{
	int indx, m, a[N] = { 10, 20, 35, 40, 43, 44, 45, 50, 51, 60 };
	scanf("%d", &m);

	indx = search(a, m, N);
	if(indx >= 0)
		printf("index=%d\n", indx);
	else
		printf("NOEXIST\n");
	return 0;
}

5. 字符子串查找问题

在这里插入图片描述


🍑 指针与数组

#include "stdio.h"
#include "string.h"
int findsubstring(char *s, char *sub)
{
	int res = -1,i,j;
	//提前把字符串长度取出来减少重复计算
	int len1 = strlen(s);
	int len2 = strlen(sub);
	for(i = 0; i < len1; i++)// i 枚举 父串 s 的所有起点
	{
		for(j = 0; j < len2; j++)// 枚举 子串sub
		{
			//if(*(s + i + j) != *(sub + j))//同下
			if(s[i+j] != sub[j])
				break;
		}
		if(j == len2)
		{
			res = i;
			break;
		}
	}
	return res;
}
int main()
{
	char line[80], substr[10];
	int index;
	gets(line);
	gets(substr);
	index = findsubstring(line, substr);
	if(index >= 0)
		printf("index=%d\n", index);
	else
		printf("NOEXIST\n");
	return 0;
}

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值