第十六课 数组的引入 【项目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)(选做)求出全部同学成绩的标准偏差,标准偏差公式为
提示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;
}
执行结果:
浙公网安备 33010602011771号