C语言程序设计(第二版)第6章编程题
2015-07-29 13:23
267 查看
1:找出与平均值相差最小的元素
2.找到n个数中的最小数,并且与第一个数交换后输出数组
3.输入一个字符串,统计其中数字字符出现的次数
4.设有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。问在第20年时,共有多少头牛?分别输出从第1年至第20年每年的母牛数。
5.有n(n≤20)个数,已按从小到大顺序排列好,要求输入一个数,把它插在数列中,使数列仍有序,并输出新的数列
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)”.
13.输入一个英文句子,要求将每个单词的第一个字母改写成大写字母
14.判别一字符串是否是另一字符串的子串,如是则输出第一次出现的位置。
15.输入三行文字,找出每个元音字母在其中出现的次数。
16.输入10个数,要求编写一个排序函数,能够实现按绝对值从大到小排序。在主函数中输入10个数,输出排序后的10个数。
17.统计学生成绩:某班有30人,每人学4门课,求每个人的总分和平均分。要求编三个函数:①输入成绩函数input().②计算每人总分及各科平均分函数process()③输出该班同学每人各课成绩,总成绩和各课平均分函数output()
18.在主函数中输入一个字符串,再输入一个字符,编写函数count(),统计该字符在字符串中出现的次数。要求在主函数中输出统计结果及字符串。
19.在主函数中输入一个字符串,再输入一个字符,编写函数delete(),讲字符串中该字符删除
#include"stdio.h" #include"math.h" #define N 10 void main() { int i; double a ,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 ; 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 ,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 ; 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 [M],all ={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); }