C語言程式設計(第二版)第6章程式設計題
阿新 • • 發佈:2019-01-27
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);
}