1.请用指针实现程序:n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来的第几号的那位。
#include<stdio.h>
void main(void)
{
int n,a[1000]={0},number=0,*p,bs=1,i=1;
p=&a[1];
scanf("%d",&n);
while(number!=n-1)
{
p++;if(p>&a[n])
{
p=&a[1];
}
if(*p==0)
{
bs++;
if(bs==3)
{
bs=0;
*p=1;
number++;
}
}
}for(i=1;i<=n;i++)
{
if(a[i]==0)
printf("最后留下来的是第%d号",i);
}
}
2.任意读入10个整数存放到数组a中,统计数组中出现频率最高的数,输出该数及其出现次数。
如果数组中没有重复出现的数,则输出"没有重复出现的数"。
#include<stdio.h>
void main (void){
int a[10],b[10]={0},c[10]={0};
int i,j,k,max=0,maxshu=0;
printf("a数组元素为:");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
printf("%d ",a[i]);
}
for(j=0;j<10;j++)
{
for(k=j;k<10;k++)
{
if(a[j]==a[k])
b[j]++;
}
}
for(i=0;i<10;i++)
{
if(b[i]>max)
{
max=b[i];
}
}
printf("\n");
if(max==1)
{
printf("没有重复出现的数");}
else
for(i=0;i<10;i++)
{
if(b[i]==max)
printf("数组a中出现频率最高的数是%d,出现次数为%d\n",a[i],max);
}
}
3.输入多行字符串(有可能有空格),最后一行为#号作为结束,按照由小到大的顺序将字符串分行输出(不输出"#")。
#include <stdio.h>
#include <string.h>
void main()
{
char *name[100]={0};
char str[100][100];
int n,i,j,k;
char *temp;
for(n=0;n<100;n++)
{
gets(str[n]);
name[n]=str[n];
if (str[n][0] == '#')
break;
}
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(strcmp(name[k],name[j])>0)
k=j;
}
if(k!=i)
{
temp=name[i];
name[i]=name[k];
name[k]=temp;
}
}for(i=0;i<n;i++)
{
printf("%s\n",name[i]);
}
}
4. 用指针实现:输入3个整数,按由小到大的顺序输出。
#include<stdio.h>
void main (void)
{
int a[4]={0},temp;
int *p;
p=a;
scanf("%d,%d,%d",&a[0],&a[1],&a[2]);
if(*p>a[1])
{
temp=a[1];
a[1]=*p;
*p=temp;
}
if(*p>a[2])
{
temp=a[2];
a[2]=*p;
*p=temp;
}
p++;
if(*p>a[2])
{
temp=a[2];
a[2]=*p;
*p=temp;
}
printf("%d,%d,%d",a[0],a[1],a[2]);
}