第十六课 数组的引入 【项目1-5】
(1)创建一个有20个元素的整型数组。通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入后10个元素的值,从前往后(从第0个到第19个)输出数组中元素的值,每5个元素换一行。
(3)创建一个长度为16的整型数组a并初始化。先输出数组中元素值为3的倍数的数,再输出全部下标为3的倍数的元素值。输出如图示。
(4)创建一个长度为16的整型数组a并初始化,删除数组中全部能被3整除的元素(数组中实际有效使用的元素将不足16)。输出删除后数组中的全部元素。
(5)创建一个长度为16的整型数组a并初始化前15个元素,输入一个整数b。将b插入到a[0]位置(原有的数据往后“移动”)。
#include<stdio.h> #define NUM 20 int main() { int a[NUM]={1,2,3,4,5,6,7,8,9,10}; int i=1; for(i=NUM-10;i<NUM;i++) scanf("%d",&a[i]); for(i=0;i<20;i++) { printf("%d ",a[i]); if((i+1)%5==0) printf("\n"); } return 0; }
执行结果:
#include<stdio.h> int main() { int a[10]={0,1,2,3,4,5,6,7,8,9}; int i; printf("变化之前\n"); for(i=9;i>=0;i--) printf("%d ",a[i]); printf("\n"); printf("数据变化两倍\n"); for(i=9;i>=0;i--) { a[i]*=2; printf("%d ",a[i]); } printf("\n"); return 0; }
执行结果:
#include<stdio.h> int main() { int a[16]={15,64,67,19,35,42,6,25,39,48,67,51,62,35,33,59}; int i; printf("元素值为3的倍数的数:\n"); for(i=0;i<16;++i) { if((a[i]%3)==0) printf("a[%d] %d\n",i,a[i]); } printf("以下为3的倍数元素值:\n"); for(i=0;i<16;++i) { if(i%3==0) printf("a[%d] %d\n",i,a[i]); } return 0; }
执行结果:
#include<stdio.h> int main() { int a[16]={36,39,13,46,24,45,34,16,34,84,33,18,99,14,36,24}; int b[16]; int i,j=0,k; printf("原数列:"); for(i=0;i<16;++i) { printf("%d ",a[i]); if((a[i]%3)==0) { b[j]=a[i]; j++; } } k=j; j=0; printf("\n以下数是3的倍数:"); for(i=0;i<k;++i) { a[i]=b[j]; j++; printf("%d ",a[i]); } printf("\n"); return 0; }
执行结果:
#include<stdio.h> int main() { int a[16]={12,35,64,36,46,3,57,24,7,53,35,94,91,76,64}; int i,b; printf("请输入整数b:"); scanf("%d",&b); for(i=14;i>=0;--i) { a[i+1]= a[i]; } a[0]=b; printf("\n增加b数值后为:"); for(i=0;i<16;i++) { printf("%d ",a[i]); } return 0; }
执行结果:
(1)输入小组人数及成绩。要保证成绩在0-100之间。
(2)输出该小组的最高成绩、最低成绩、平均成绩;
(3)输出考得最高成绩和最低成绩的同学的人数;
(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有同样的成绩)。
(5)(选做)求出全部同学成绩的标准偏差,标准偏差公式为。当中为样本(即某同学成绩)。为均值(前面已经求出)。N为样本数目。
提示1:能够採用“渐进式”策略。实现一个功能后调试通过,再实现下一个功能。
提示2:界面參考见图
提示3:请思考,假设这里的同学人数非常多。比如500、10000名,这个程序中通过键盘输入的方式,已经显得无能为力!怎样解决?
#include <stdio.h> #include<math.h> int main() { int a[50]; int i,s=0,max=0,min=100; int minnum,maxnum,num,ave; printf("请输入学生人数:"); scanf("%d",&num); printf("请输入成绩:\n"); for(i=0;i<num;i++) { printf("输入第%d位同学成绩:",i+1); scanf("%d",&a[i]); if(a[i]>100||a[i]<0) { printf("输入错误!请又一次"); i--; continue; } if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i]; s=s+a[i]; } ave=s/num; printf("\n最高成绩为:%d, 最低成绩为:%d, ",max,min); printf("平均成绩为:%d\n",ave); maxnum=0; minnum=0; for(i=0;i<num;i++) { if(a[i]==max) maxnum++; if(a[i]==min) minnum++; } printf(" %d位同学考了最高分%d分, 学号为:",maxnum,max); for(i=0;i<num;i++) { if(a[i]==max) printf("%d ",i+1); } printf("\n %d位同学考了最低分%d分, 学号为:",minnum,min); for(i=0;i<num;i++) { if(a[i]==min) printf("%d ",i+1); } int x=0,sum=0; for(i=0;i<num;i++) { x=a[i]-ave; sum+=x*x; } printf("\n4全部同学的标准偏差为:%.4f\n",sqrt((double)(sum)/(num-1))); return 0; }执行结果:
当年第几天中定义一个函数。其參数为年、月、日的值,返回这一天为该年的第几天。
要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。
#include <stdio.h> int days(int y,int m,int d); int main() { int year,month,day; printf("请输入年 月 日:"); scanf("%d %d %d",&year,&month,&day); printf("今天是当年第%d天\n",days(year,month,day)); return 0; } int days(int y,int m,int d) { int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int sum=d,i; for(i=1;i<=(m-1);i++) sum=sum+a[i]; if(m>2&&((y%4==0&&y%100!=0)||y%400==0)) sum++; return sum; }执行结果:
以下的程序,输出了52张扑克牌(如图),请补充完整程序。
#include <stdio.h> int main() { char c[4]={6,3,5,4}; int v[13]={1,2,3,4,5,6,7,8,9,10,11,12,13}; int i,j; for(i=0;i<4;i++) { for(j=0;j<13;j++) { printf("%c",c[i]); if(v[j]==1) printf("A"); else if(v[j]==11) printf("J"); else if(v[j]==12) printf("Q"); else if(v[j]==13) printf("K"); else printf("%d",v[j]); printf(" "); } printf("\n"); } return 0; }执行结果:
(1)过春节了,村里要庆祝一下。
村长对村里的128个村民说:做一个游戏,让每一个人把出生年+月+日得到一个数。比如:1995年11月8日=1995+11+8=2014。然后把这个数报上来。村里有一笔钱要作为游戏的奖金,数额为M元(在程序中能够用常量固定为一个数)。假设有人报上来的数字与M同样。就把这笔钱发给这些人。假设仅仅 有一个人得奖,奖金都归这个人。如 果有多于一个人得奖,则他们平分这 笔钱。如今让我们来写一段程序算算 都有哪些人得到了奖金?得到多少?请写出这个程序。
(2)有村民提出村长在幸运数字上做手脚。不公平。改动后的规则是:每人写一个1000以内的数字。谁写的数字与平均值最接近,M元的奖金就由谁拿。有多人与平均值差值同样。则均分。比如。參加的村民有5个人。报的数字分别为98、7、50、980、1,平均值为227(平均值也取成整数即可了),与98最接近,编号为0的村民得奖。这个游戏实际上有非常强的政治学背景,一种策略是串通,大家都报一样的数。平分奖金;在每一个人都想争取最大利益的前提下。各人报的数字又对结果都有影响。这里面包括一系列非常有意思的研究课题。
提示:输入数据后。用一次循环求和,进而求出平均值;再一次循环。求出最小的差值;再一次循环,将差值最小的村民的编号放入幸运数组(由于可能不止一位。所以须要这个数组)。#include<stdio.h> #define M 2014 #define num 128 int main() { int people[num]; int luckypeople[num]; int i,luckynum=0; for(i=0;i<num;i++) { printf("第%d位村民请输入数字:",i); scanf("%d",&people[i]); if(people[i]==M) { luckypeople[luckynum]=i; luckynum++; } } if(luckynum>0) { printf("\n获奖者编号为:\n"); for(i=0;i<luckynum;i++) { printf("%d ",luckypeople[i]); } } else printf("\n非常可惜。没有人获奖\n"); return 0; }
#include<stdio.h> #define N 8 int main() { int peoplenum[N]; //每一个人的报数 int avenum[N]; //每人报的数与平均数的差值 int luckypeople[N]; //中奖人的编号 int i,sum=0,ave,min=1000; int luckynum=0,m,money; for(i=0;i<N;i++) // 录入每人的数字 { scanf("%d",&peoplenum[i]); sum+=peoplenum[i]; // 求和 } ave=sum/N; // 求平均数 for(i=0;i<N;i++) // 录入每人报的数与平均数的差值 { avenum[i]=ave-peoplenum[i]; if(avenum[i]<0) // 绝对值 avenum[i]=-avenum[i]; if(avenum[i]<min) // 求最小的差值min min=avenum[i]; } for(i=0;i<N;i++) // 差值最小即中奖人,并录入其编号 if(avenum[i]<=min) { luckypeople[luckynum]=i; luckynum++; // 中奖人共luckymun人 } money=2014/luckynum; // 奖金平分 printf("\n平均数:%d, ",ave); printf("最小差值:%d\n",min); printf("共%d人中奖\n",luckynum); for(i=0;i<luckynum;i++) // 输出中奖人 { m=luckypeople[i]; printf("幸运者编号:%d 数字为:%d 获得奖金:%d\n",m,peoplenum[m],money); } return 0; }
执行结果:
posted on 2018-01-30 08:24 yjbjingcha 阅读(529) 评论(0) 编辑 收藏 举报