今天学习了指针函数,函数指针,真的是费脑子,转啊转啊转,山路十八弯,得花点时间复习总结一下。
今天上课讲了两条例题,看着难,但是理清思路了写起来还是比较简单的。
1.输入一个字符串,输出它的最长数字字串,和数字子串的长度
#include <stdio.h>
int main()
{
char str[100];
char *p;
int i = 0;
int len = 0,max = 0;
char *p_max = NULL;
int flag = 0;
printf("输入一个字符串:");
fgets(str,100,stdin);
while(str[i] != '\0')
{
if(str[i] < '0' || str[i] > '9')
{
if(flag == 1)
{
flag = 0;
if(len > max)
{
max = len;
p_max = &str[i] - max;
}
len = 0;
}
i++;
}
else
{
if(flag == 0)
{
flag = 1;
}
i++;
len++;
}
}
if(len > max)
{
len = max;
p_max = &str[i] - max;
}
printf("最大数字字串长度为:%d",max);
printf("最大的数字字串为:");
for(i = 0;i < max;i++)
{
printf("%c",*(p_max + i));
}
return 0;
}
2.随机输入5*5的25个数字,找出每行中的最小值,按最小值顺序重新排列每行的顺序如:
1 2 3 4 5
50 24 19 32 41
12 36 42 65 99
18 52 43 29 15
22 14 8 9 10
排列之后为
1 2 3 4 5
22 14 8 9 10
12 36 42 65 99
18 52 43 29 15
50 24 19 32 41
#include <stdio.h>
#include<time.h>
int main()
{
int i,j,k,m;
int a[5][5];
int b[5];
int tmp;
int min;
srand((unsigned)time(NULL));
for(i = 0;i < 5;i++)
{
for(j = 0;j < 5;j++)
{
a[i][j] = rand()%100;
printf("%4d",a[i][j]);
}
putchar('\n');
}
for(i=0;i<5;i++)
{
min = a[i][0];
for(j = 0;j < 5;j++)
{
if(min>a[i][j])
{
min = a[i][j];
}
b[i]=min;
}
}
for(i=1;i<5;i++)
{
for(j=4;j>=i;j--)
{
if(b[j]<b[j-1])
{
tmp=b[j-1];
b[j-1]=b[j];
b[j]=tmp;
for(k=0;k<5;k++)
{
tmp=a[j][k];
a[j][k]= a[j-1][k];
a[j-1][k]=tmp;
}
}
}
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%4d",a[i][j]);
}
putchar('\n');
}
return 0;
}