1.请用指针实现程序:n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来的第几号的那位。
思路:将数组初始化都为零,报数为三的(在程序中显示的是三的倍数)将其值赋予为1
重点,若围成一圈,需要将i>n的数重新返回1即:i=1
易错哇!!!m=0要在for循环里面a
#include <stdio.h>
int main()
{
int n,a[100]={0},i,j,m,t=0,*p=a+1;
scanf("%d",&n);
for(i=1;;i++)
{
m=0;
if(i>n)
i=1;
if(a[i]==0)
{
t++;
if(t%3==0)
a[i]=1;
}
for(j=1;j<=n;j++)
m=m+a[j];
if(m==n-1)
break;
}
for(;p<=n+a;p++) //强行指针
if(*p==0)
printf("最后留下来的是第%d号\n",p-a);
}
2.用指针实现:输入10个整数,将其中最小的数与第1个数对换,把最大的数与最后一个数对换。
#include <stdio.h>
int main()
{
int a[10],i,max,min,*p=a;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=*p;
min=*p;
for(i=0;i<10;i++)
{
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
for(i=0;i<10;i++)
{
if(a[i]==max)
a[i]=a[9];
if(a[i]==min)
a[i]=a[0];
}
a[0]=min;
a[9]=max;
for(p=a;p<a+10;p++)
printf("%d ",*p);
}
3.输入多行字符串(有可能有空格),最后一行为#号作为结束,按照由小到大的顺序将字符串分行输出(不输出"#")。
例如输入:
I study very hard.
C language is very interesting
He is a professfor.
#
输出:
C language is very interesting
He is a professfor.
I study very hard.
#include <stdio.h>
#include <string.h>
int main()
{ char a[100][100],p[1][100];
int n,m,i;
for(n=0;n<100;n++)
{
gets(a[n]);
if(!strcmp(a[n],"#"))
break;
}
m=n;
for(i=0;i<m-1;i++)
for(n=0;n<m-1-i;n++)
{
if(strcmp(a[n],a[n+1])>0)
{
strcpy(p[0],a[n]);
strcpy(a[n],a[n+1]);
strcpy(a[n+1],p[0]);
}
}
for(n=0;n<m;n++)
printf("%s\n",a[n]);
}
4.用指针实现:输入3个整数,按由小到大的顺序输出。
one
#include <stdio.h>
int main()
{
int a[3],*p=a,*t,n;
scanf("%d,%d,%d",p,p+1,p+2);
for(;p<a+3;p++)
for(t=p;t<a+3;t++)
if(*p>*t)
{
n=*p;
*p=*t;
*t=n;
}
printf("%d,%d,%d",a[0],a[1],a[2]);
}
two
#include <stdio.h>
int main ()
{ int a[3],*p=a;
scanf("%d,%d,%d",p,p+1,p+2);
p=a;
if(*p<*(p+1))
{ if(*p<*(p+2))
if(*(p+1)<*(p+2))
printf("%d,%d,%d",*p,*(p+1),*(p+2));
else
printf("%d,%d,%d",*p,*(p+2),*(p+1));
else
printf("%d,%d,%d",*(p+2),*p,*(p+1));
}
else
{
if(*p+2>*p)
printf("%d,%d,%d",*(p+1),*p,*(p+2));
else if(*(p+2)<*(p+1))
printf("%d,%d,%d",*(p+2),*(p+1),*p);
else
printf("%d,%d,%d",*p,*(p+2),*(p+1));
}
}
#include<stdio.h>
int main()
{
char* p,a[80];
int flag=0,words=0,i=0;
while (true)
{
p=gets(a);
flag = 0;
while (*p)
{
if (((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) && !flag)
{
flag = 1;
p++;
continue;
}
if ((!((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))) && flag)
{
flag = 0;
p++;
words++;
continue;
}
if (((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) && *(p + 1) == '\0')
words++;
if (*p == '#')
for (i = 0; i < 3; i++)
if (*p != '#')
break;
if (i == 3)
{
flag = -1;
break;
}
p++;
}
if (flag == -1)
break;
}
printf("%d", words);
}
#include<stdio.h>
#include<string.h>
int main()
{
char ch[80][80],c;
int i,j,t=1,word=0;
gets(ch[0]);
for(i=1;strcmp(ch[i-1],"###")!=0;i++)
gets(ch[i]);
for(i=0;strcmp(ch[i],"###")!=0;i++)
{
t=1;
for(j=0;ch[i][j]!='\0';j++)
{
if(ch[i][j]>='A'&&ch[i][j]<='Z'||ch[i][j]>='a'&&ch[i][j]<='z'&&t)
{
t=0;
word++;
}
else if(!(ch[i][j]>='A'&&ch[i][j]<='Z'||ch[i][j]>='a'&&ch[i][j]<='z')&&!t)
{
t=1;
}
}
}
printf("%d",word);
}