max=a[i];
elseif(min>a[i])
min=a[i];
}
average=sum/20;
printf("\nsum=%d,max=%d,min=%d,average=%d\n",sum,max,min,average);
puts("\nanykeytoexit!
");
getche();
}
5、编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
#include
#include
voidmain()
{
charstring[80],*p;
inti=0,max=0;
clrscr();
printf("pleaseinputastring:
\n");
gets(string);
//printf("\n%s\n",string);
p=string;
while(*p!
='\0')
{
if(*p=='')
{
if(max<=i)
max=i;
i=0;
}
else
i++;
p++;
}
if(max<=i)
max=i;
printf("\nmax_lengthofthestringis:
%d\n",max);
getche();
}
6、模拟n个人参加选举的过程,并输出选举结果:
假设候选人有四人,分别用A、B、C、D表示,当选某候选人时直接输入其编号(编号由计算机随机产生),若输入的不是A、B、C、D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。
#include
#include
#include
#include
voidmain()
{
inti,n,A,B,C,D,abandon,ran;//abandonstandfortheoneswhoabandon
clrscr();
A=B=C=D=abandon=0;
printf("Enterthenumberofpersons:
");
scanf("%d",&n);//npersonstoselectfromcandidatea,b,candd.
randomize();
for(i=1;i<=n;i++)
{
ran=random(5)+65;//A,B,C,Dandtheoneswhoabandon
switch(ran)
{
case'A':
A++;break;
case'B':
B++;break;
case'C':
C++;break;
case'D':
D++;break;
default:
abandon++;
}
}
printf("\nA=%d,B=%d,C=%d,D=%d,abandon=%d\n\n",A,B,C,D,abandon);
i=4;
while(i--!
=0)
{
if(A>=B&&A>=C&&A>=D&&A!
=-1)
{
printf("A=%d,",A);
A=-1;
}
if(B>=A&&B>=C&&B>=D&&B!
=-1)
{
printf("B=%d,",B);
B=-1;
}
if(C>=A&&C>=B&&C>=D&&C!
=-1)
{
printf("C=%d,",C);
C=-1;
}
if(D>=A&&D>=B&&D>=C&&D!
=-1)
{
printf("D=%d,",D);
D=-1;
}
}
printf("abandon=%d,\n\n",abandon);
getch();
}
7、任何一个自然数m的立方均可写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
编程实现:
输入一自然数n,求组成n3的n个连续奇数。
#include
#include
#include//
voidmain()
{
inti,j,n,sum,count;
clrscr();
printf("\nanintegerhereplease:
");
scanf("%d",&n);
printf("\n");
//i=(int)floor(sqrt((float)n));
//if(i%2==0)
//i++;
i=1;//
for(;i<=n*n*n;i+=2)
{
sum=0;
count=0;
for(j=i;j<=n*n*n;j+=2)
{
sum=sum+j;
count++;
if((n*n*n==sum)&&(count==n))
break;
}
if((sum==n*n*n)&&(count==n))
break;
}
printf("i=%d,j=%d\n\n",i,j);
printf("%d*%d*%d=",n,n,n);
//while(n-->1){printf("%d+",i);i+=2;}
for(;iprintf("%d+",i);//
printf("%d",i);
getch();
}
8、已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。
#include
#include
voidmain()
{
intnum,a,b,c;
clrscr();
printf("Pressanykeytocalculate!
\n\n");
getch();
for(num=101;num<1000;num++)
{
a=num/100;
b=num%100/10;
c=num%10;
if(num+c*100+b*10+a==1333)
printf("\n%d+%d=1333\n",num,c*100+b*10+a);
}
while(!
kbhit())
;
}
9、编制一个完成两个数的四则运算程序。
如:
用户输入34+56则输出结果90.00。
要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。
#include
#include
voidmain()
{
floatnum1,num2;
chars;
clrscr();
printf("Enterastatementplease:
");
scanf("%f%c%f",&num1,&s,&num2);
switch(s)
{
case'+':
printf("%.2f%c%.2f=%.2f",num1,s,num2,num1+num2);break;
case'-':
printf("%.2f%c%.2f=%.2f",num1,s,num2,num1-num2);break;
case'*':
printf("%.2f%c%.2f=%.2f",num1,s,num2,num1*num2);break;
case'/':
printf("%.2f%c%.2f=%.2f",num1,s,num2,num1/num2);break;
default:
printf("InputError!
");
}
getch();
}
10、输入一个五位以内的正整数,
(1)判断它是一个几位数;
(2)请按序输出其各位数字;(3)逆序输出其各位数字。
如输入:
56439,输出:
5位数
5,6,4,3,9
9,3,4,6,5
#include
#include
longpower(intn)
{
inti;
longresult=1;
for(i=1;i<=n;i++)
result=10*result;
returnresult;
}
voidmain()
{
longnum,n,j;
intcount=1,tmpcount;
clrscr();
printf("Pleaseinputanumber(0-99999):
");
scanf("%ld",&num);
n=num;
while((n=n/10)!
=0)
count++;
printf("\n%ldisa%ddigits.\n\n",num,count);
tmpcount=count;//temporarytmpcountforlateruseinstatementA
n=num;
while(count-->1)
{
j=power(count);
printf("%d,",n/j);
n=n%j;
}
printf("%d\n",n);
n=num;
while(tmpcount-->1)//statementA
{
printf("%d,",n%10);
n=n/10;
}
printf("%d\n",n);
getch();
}
11、编写子函数:
(1)用冒泡法将一个数组排成升序的函数---SUB1;
(2)在升序数组中插入一个数,并且保持该数组仍为升序数组的函数---SUB2。
主函数:
①输入任意10个正整数给数组;②调用SUB1对数组进行排序;③从键盘输入一个正整数,调用SUB2将其插入该数组。
#include
#include
voidmain()
{
inti,k,a[12]={0};//a[0]fornouse
voidsub1(intb[]),sub2(intb[],intk);
clrscr();
printf("Pleaseinput10numbers:
");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
getchar();
sub1(a);
for(i=1;i<=10;i++)
printf("\na[%d]=%d\n",i,a[i]);
printf("\n\npleaseinputanumbertobeinsertedintothearray:
");
scanf("%d",&k);
sub2(a,k);
for(i=1;i<=11;i++)
printf("\na[%d]=%d\n",i,a[i]);
puts("\nAnykeytoexit!
");
getch();
}
voidsub1(b)
intb[];
{
inti,j,t;
for(i=1;i<10;i++)//thefirstoneisalwaysthesmallest
for(j=i;j<=10;j++)
if(b[i]>b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
voidsub2(intb[],intk)
{
inti;
for(i=10;i>=1;i--)
{
if(k
b[i+1]=b[i];
else
{
b[i+1]=k;
break;
}
}
}
12、编写函数:
(1)用选择法将数组排成降序的函数----SUB1;
(2)用折半查找法查找某数是否在给定的数组当中的函数----SUB2。
主函数:
输入任意10个正整数给数组,调用SUB1对数组进行排序,从键盘输入一个正整数,调用SUB2在数组中进行查找,找到后输出“OK”,没有找到则输出“NOFOUND!
”。
#include
#include
voidmain()
{
inti,key,a[11]={0},sub1(),sub2();
printf("pleaseinput10number:
");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
getchar();
sub1(a);
for(i=0;i<=10;i++)
printf("a[%d]=%d,",i,a[i]);
printf("\npleaseinputakeynumber:
");
scanf("%d",&key);
sub2(a,key,1,10);
getch();
}
intsub1(intb[])
{
intt,i,j,post;
for(i=1;i<10;i++)
{
post=i;
for(j=i+1;j<=10;j++)
if(b[post]>b[j])
post=j;
if(post!
=i)
{
t=b[i];
b[i]=b[post];
b[post]=t;}
}
return0;
}
intsub2(intc[],intk,intn0,intn1)
{
inti=n0,j=n1,m;
m=(i+j)/2;
while(i<=j)
{
if(kj=m-1;
if(k>c[m])
i=m+1;
if(k==c[m])
break;
m=(i+j)/2;
}
if(k==c[m])
printf("OK!
\n");
else
printf("NOFOUND!
\n");
return0;
}
13、编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排列,然后将这两个数组合并成一个升序数组。
#include
#include
voidmain()
{
inti,j,k,a[6]={0},b[6]={0},c[11]={0},sub1();
clrscr();
printf("\npleaseinput5intnumberstoarray1:
");
for(i=1;i<=5;i++)//a[0]fornouse
scanf("%d",&a[i]);
getchar();
sub1(a,5);
printf("\npleaseinput5intnumberstoarray2:
");
for(i=1;i<=5;i++)//b[0]fornouse
scanf("%d",&b[i]);
getchar();
sub1(b,5);
printf("\nthesortedarrayais:
\n\n");
for(i=1;i<=5;i++)
printf("a[%d]=%d",i,a[i]);
printf("\n");
printf("\nthesortedarraybis:
\n\n");
for(i=1;i<=5;i++)
printf("b[%d]=%d",i,b[i]);
k=i=j=1;
while(i<=5&&j<=5)
if(a[i]
c[k++]=a[i++];//c[0]fornouse
else
c[k++]=b[j++];
if(ifor(;i<=5;i++)
c[k++]=a[i];
else//appendingtherestonesinarrayb
for(;j<=5;j++)
c[k++]=b[j];
printf("\n\n");
printf("\nthemergedarraycis:
\n\n");
for(k=1;k<=10;k++)
{
if(k==6)
printf("\n");
printf("c[%d]=%d",k,c[k]);
}
while(!
kbhit());
}
intsub1(intb[],intn)
{
intt,i,j,post;
for(i=1;i{
post=i;
for(j=i+1;j<=n;j++)
if(b[post]>b[j])
post=j;
if(post!
=i)
{
t=b[i];
b[i]=b[post];
b[post]=t;
}
}
return0;
}
14、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:
13人围坐一圈,从第一个开始报号:
1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。
/*
//approachone
#defineN13
#include
#include
structperson
{
intnumber;//itsorderintheoriginalcircle
intnextp;//recorditsnextperson
};
structpersonlink[N+1];//link[0]fornouse
voidmain()
{
inti,count,next;//countfor12persons,and
//nextforthepersonnotoutofcircleyet
clrscr();
for(i=1;i<=N;i++)
{
link[i].number=i;//numberingeachperson
if(i==N)
link[i].nextp=1;
else
link[i].nextp=i+1;//numberingeachnextperson
}
printf("\nThesequenceoutofthecircleis:
\n");
for(next=1,count=1;count{
i=1;
while(i!
=3)//icounts1,2,3
{
do//skiptheoneswhosenumbersarezero
next=link[next].nextp;
while(link[next].number==0);//endofdo
i++;
}
printf("%3d",link[next].number);
link[next].number=0;//indicateoutofcirclealready
do//startfromtheoneswhosenumbersarenotzeronexttime
next=link[next].nextp;
w