1. 程式人生 > >C語言程式設計(第二版)第6章程式設計題

C語言程式設計(第二版)第6章程式設計題

1:找出與平均值相差最小的元素

#include"stdio.h"
#include"math.h"
#define N 10
void main()
{
   int i;
   double a[N],v=0,min;
   printf("Please input :\n");
   for(i=0;i<N;i++){                     //輸入N個數 
     scanf("%lf",&a[i]);
     v=v+a[i]/N;
   }
   printf("\n");
   min=a[0];
   for(i=1;i<N;i++)                      //判斷最小MIN 
   {
      if((abs(min-v)>abs(a[i]-v)))
         min=a[i];
   }
   for(i=0;i<N;i++)                    //判斷是否存在一樣小差值卻不同值 
   {
       if(abs(min-v)==abs(a[i]-v))
          if(min!=a[i]){
             printf("min=%.2lf\n",a[i]);
             break;
          }
   }
   printf("min=%.2lf\n",min);
} 

2.找到n個數中的最小數,並且與第一個數交換後輸出陣列
#include"stdio.h"
#define N 20
void main()
{
   double a[N];
   int i=0,n,min;
   printf("Please input n:\n");
   scanf("%d",&n);
   for(i=0;i<n;i++)
      scanf("%lf",&a[i]);
   min=0;
   for(i=1;i<n;i++)
     if(a[min]>a[i])
        min=i;
   a[min]+=a[0];
   a[0]=a[min]-a[0];
   a[min]=a[min]-a[0];
   for(i=0;i<n;i++)
    {
	printf("%lf ",a[i]);
    if((i+1)%5==0)
      printf("\n");
	}
} 

3.輸入一個字串,統計其中數字字元出現的次數

#include<stdio.h>
void main()
{
   char str[100];
   int i,n=0;
   gets(str);
   for(i=0;str[i]!='\0';i++)
      if(str[i]>=48&&str[i]<=57)
         n++;
   printf("%d",n);
}

4.設有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。問在第20年時,共有多少頭牛?分別輸出從第1年至第20年每年的母牛數。
#include<stdio.h>
int muniu(int year)
{
   if(year==1)
      return 2;
   else if(year==2)
      return 3;
   else if(year==3)
      return 4;
   else
      return muniu(year-1)+muniu(year-3); 
}
void main()
{
   int i;
   for(i=1;i<=20;i++)
     printf("第%d年母牛數:	%d\n",i,muniu(i));
}

5.有n(n≤20)個數,已按從小到大順序排列好,要求輸入一個數,把它插在數列中,使數列仍有序,並輸出新的數列

#include<stdio.h>
#define N 21
void main()
{
   int i,n,flag;
   double a[N],t;
   printf("Please input n:\n");
   scanf("%d",&n);
   printf("Please input array:\n");
   for(i=0;i<n;i++)
      scanf("%lf",&a[i]);
   printf("Please input the value:\n");
   scanf("%lf",&t);
   for(i=0;i<n;i++)
     if(t<=a[i]){ 
        flag=i;
        break; 
		} 
   for(i=n;i>=flag;i--)
     a[i+1]=a[i];
   a[flag]=t;
   n++;
   for(i=0;i<n;i++)
     {
	 printf("%.2lf ",a[i]);
     if((i+1)%5==0)
       printf("\n");
	 }
}

6.求解約瑟夫問題。M個人圍成一圈,分別為1到M號。從第一個人開始報數,數到n的人出圈。再由下一個人開始報數,數到n的人出圈……直到最後一個人為止。輸出依次除權人的編號,M值預先選定,n值由鍵盤輸入。例如,M=10,n=5,依次出圈的是:5,10,6,2,9, 8, 1 ,4 ,7 ,3.

#include<stdio.h>
#define M 10
void main()
{
    int n,t=0,k=0,x,a[M],i;
	printf("Please input n:\n");
	scanf("%d",&n);
	for(i=0;i<M;i++)
		a[i]=i+1;
	x=M;
	while(x!=0)
	{
	   k++;
	   if(k>M)
		   k=1;
	   if(a[k-1]!=0)
	   {
		t++;
		if(t>n)
		   t=1;
        a[k-1]=t;
		if(t==n)
		{
			printf("%d ",k);
			a[k-1]=0;
			x--;
		}
	   }
	}

}

12.從鍵盤輸入一個字串,查詢其中的最大元素,在該元素後面插入字串“(max)”.

#include<stdio.h>
int main()
{
  char str[100],m[5]="(max)";
  int i,max,j,flag=0,k;
  printf("輸入字串:\n");
  gets(str);
  max=0;
  for(i=0;str[i]!='\0';i++)
    if(str[max]<str[i])
      max=i;
    k=max;
  while(1){
  for(j=i;j>max;j--)
    str[j+5]=str[j];
  for(j=0;j<5;j++)
    str[j+max+1]=m[j];
    k=max;
  for(j=max+6;str[j]!='\0';j++)
     if(str[j]==str[max])
       if(max!=j)
       {
		 max=j;
       }
   if(max==k)
	  break; 
  }
  puts(str);
}

13.輸入一個英文句子,要求將每個單詞的第一個字母改寫成大寫字母

#include<stdio.h>
int main()
{
   char  a[100];
   int i;
   printf("輸入一個英文句子:\n");
   gets(a);
   if(a[0]>='a'&&a[0]<='z')
         a[0]=a[0]-32;
   for(i=1;a[i]!='\0';i++){
     if(a[i-1]==' ')
       if(a[i]>='a'&&a[i]<='z')
          a[i]=a[i]-32;
   }
   puts(a);
   return 0;
}

14.判別一字串是否是另一字串的子串,如是則輸出第一次出現的位置。

#include<stdio.h>
int main()
{
  char a[100],b[100];
  int i,j,flag;
  printf("輸入母串:\n");
  gets(a);
  printf("輸入子串:\n");
  gets(b);
  for(i=0;a[i]!='\0';i++)
     {
	   if(a[i]==b[0])
	   {
 	     flag=i;
         for(j=0;b[j]!='\0';j++)
         {
		    if(a[flag]!=b[j])
			  break;
			else 
			   flag++; 
		 }
		 if(b[j]=='\0')
		   if(b[--j]==a[--flag])
		  {
		   printf("是其子串\n");
		   puts(b);
		   return 1;
		  }
		 }
	 }
	 printf("不是其子串\n");
	 return 1;
}

15.輸入三行文字,找出每個母音字母在其中出現的次數。

#include<stdio.h>
int main()
{  
	char  a[3][100],yuan[5]={'a','e','i','o','u'};
	int k,i,j,flag[5]={0};
   printf("輸入三行文字:\n");
   for(i=0;i<3;i++)
	   gets(a[i]);
   for(k=0;k<5;k++)
    for(i=0;i<3;i++)
	   for(j=0;a[i][j]!='\0';j++)
		 if(a[i][j]==yuan[k])
		    flag[k]++;
   for(i=0;i<5;i++)
	   printf("母音%c出現的次數為:%d\n",yuan[i],flag[i]);
}

16.輸入10個數,要求編寫一個排序函式,能夠實現按絕對值從大到小排序。在主函式中輸入10個數,輸出排序後的10個數。

#include<stdio.h>
#include<math.h>
#define N 10
void paixu(double a[])
{
   int i,j;
   for(i=0;i<N;i++)
	   for(j=i;j<N;j++)
		   if(fabs(a[i])>fabs(a[j]))
		   {
		      a[i]+=a[j];
			  a[j]=a[i]-a[j];
			  a[i]=a[i]-a[j];
		   }
}
void main()
{  
	int i;
   double a[N];
   printf("Please input array:\n");
   for(i=0;i<N;i++)
      scanf("%lf",(a+i));
   paixu(a);
   for(i=0;i<N;i++)
	   printf("%.2lf	",a[i]);
   printf("\n");
}

17.統計學生成績:某班有30人,每人學4門課,求每個人的總分和平均分。要求編三個函式:①輸入成績函式input().②計算每人總分及各科平均分函式process()③輸出該班同學每人各課成績,總成績和各課平均分函式output()

#include<stdio.h>
#define N 30
#define M 4
void input(double a[][M])
{
   int i,j;
   for(i=0;i<N;i++)
	   for(j=0;j<M;j++)
		   scanf("%lf",&a[i][j]);
}
void process(double a[][M],double all[],double ave[])
{ 
  int i,j;
  for(i=0;i<N;i++)
	  for(j=0;j<M;j++)
         all[i]+=a[i][j];
  for(j=0;j<M;j++)
	  for(i=0;i<N;i++)
	     ave[j]+=a[i][j]/N;
}
void output(double stu[][M],double all[],double ave[])
{   
	int i,j;
    printf("每人各科成績 總成績:\n");
		for(i=0;i<N;i++){
			for(j=0;j<M;j++)
				printf("%.2lf	",stu[i][j]);
		   	printf("%.2lf	",all[i]);
			printf("\n");
		}
		printf("各科平均成績:\n");
		for(j=0;j<M;j++)
			printf("%.2lf	",ave[j]);
}
void main()
{
	double stu[N][M],all[N]={0},ave[M]={0};
   printf("Please input everyone score\n");
   input(stu);
  process(stu,all,ave);
  output(stu,all,ave);
   
}


18.在主函式中輸入一個字串,再輸入一個字元,編寫函式count(),統計該字元在字串中出現的次數。要求在主函式中輸出統計結果及字串。

#include<stdio.h>
int count(char str[],char n)
{
  int i,flag=0;
  for(i=0;str[i]!='\0';i++)
	  if(str[i]==n)
		  flag++;
	return flag;
}
void main()
{   
	int number;
    char str[100],n;
	printf("Please input str[]:\n");
	gets(str);
	printf("Please input n:\n");
	scanf("%c",&n);
	number=count(str,n);
	printf("%c出現了次數是%d:\n",n,number);
	puts(str);
}


19.在主函式中輸入一個字串,再輸入一個字元,編寫函式delete(),講字串中該字元刪除

#include<stdio.h>
void delet(char str[],char n)
{
  int i,flag;
  for(i=0;str[i]!='\0';i++){
	  if(str[i]==n)
	     {
		  flag=i;
	     while(str[i+1]!='\0')
		 {
		    str[i]=str[i+1];
			i++;
		 }
		 str[i]='\0';
         if(str[flag]==n)
			 i=flag;
		 else
			 i=flag++;
	  }
  }
}
void main()
{
   char  str[100],n;
   printf("Please input :\n");
   gets(str);
   printf("Please input :\n");
   scanf("%c",&n);
   delet(str,n);
   puts(str);
}