C语言程序设计(第二版)第6章编程题

本文深入探讨了编程领域的核心概念,包括数据结构、算法、版本控制等,通过具体实例展示了如何应用这些技术解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值