C语言实验专栏 (代码可免登录复制)
45 98 10 3 88
输出
1,3
⭐ 找最值的数组下标
#include
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
#include
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;
}
#include
#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;
}
插入在第一个大于 x 的元素的位置,该元素以及后边的元素全部后移一位
#include
#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;
}
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;
}
找不到返回 负数
#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;
}
指针与数组
#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;
}