数组函数指针作业答案.docx
《数组函数指针作业答案.docx》由会员分享,可在线阅读,更多相关《数组函数指针作业答案.docx(16页珍藏版)》请在冰点文库上搜索。
数组函数指针作业答案
“数组”课外作业:
一、输入一组数,输出这组数中的最大值和最小值。
#include
voidmain()
{floata[20],max,min;
inti,n;
printf("输入数据个数(不超过20):
");
scanf("%d",&n);
printf("输入数字:
");
for(i=0;iscanf("%f",&a[i]);
max=min=a[0];
for(i=0;i{
if(a[i]>max)max=a[i];
if(a[i]}
printf("最大值为:
%.2f\n最小值为:
%.2f\n",max,min);
}
二、输入一组学生的语文成绩和数学成绩,求每个学生的平均成绩。
要求按下面运行结果所示的格式输出数据。
运行结果:
输入学生人数(不超过40):
4↙
输入第1个学生的语文成绩和数学成绩:
8683↙
输入第2个学生的语文成绩和数学成绩:
7581↙
输入第3个学生的语文成绩和数学成绩:
9087↙
输入第4个学生的语文成绩和数学成绩:
6574↙
编号语文成绩数学成绩总成绩平均成绩
1868316984.5
2758115678.0
3908717788.5
4657413969.5
//方法一:
#include
voidmain()
{
intscore[40][3],i,j,num;
floatav[40];
printf("输入学生人数(不超过40人):
");
scanf("%d",&num);
for(i=0;i{
printf("输入第%d个学生的语文成绩和数学成绩:
",i+1);
for(j=0;j<2;j++)
scanf("%d",&score[i][j]);
}
for(i=0;i{
score[i][2]=0;//score[i][2]存放总成绩
for(j=0;j<2;j++)
score[i][2]=score[i][2]+score[i][j];//求总成绩
av[i]=score[i][2]/2.0;//求平均成绩
}
printf("%8s%10s%10s%10s%10s\n","编号","语文成绩","数学成绩","总成绩","平均成绩");
for(i=0;i{
printf("%8d",i+1);//输出编号
for(j=0;j<3;j++)
printf("%10d",score[i][j]);//输出语文、数学和总成绩
printf("%10.1f\n",av[i]);//输出平均成绩
}
}
//方法二:
#include
voidmain()
{
intscore[40][4],i,j,num;
printf("输入学生人数(不超过40人):
");
scanf("%d",&num);
for(i=0;i{
printf("输入第%d个学生的语文成绩和数学成绩:
",i+1);
for(j=0;j<2;j++)
scanf("%d",&score[i][j]);
}
for(i=0;i{
score[i][2]=0;//score[i][2]存放总成绩
for(j=0;j<2;j++)
score[i][2]=score[i][2]+score[i][j];//求总成绩
score[i][3]=score[i][2]/2;
}
printf("%8s%10s%10s%10s%10s\n","编号","语文成绩","数学成绩","总成绩","平均成绩");
for(i=0;i{
printf("%8d",i+1);//输出编号
for(j=0;j<4;j++)
printf("%10d",score[i][j]);//输出语文、数学、总成绩和平均成绩
printf("\n");
}
}
三、下面程序的功能是,输入一组学生的姓名和成绩,根据成绩排名次,要求按后面运行结果所示的格式输出数据。
(可用二维数组完成)
运行结果:
输入学生人数:
5↙
输入第1位学生的姓名和成绩:
张小二65↙
输入第2位学生的姓名和成绩:
王丁丁86↙
输入第3位学生的姓名和成绩:
赵四98↙
输入第4位学生的姓名和成绩:
李李100↙
输入第5位学生的姓名和成绩:
陈冬冬70↙
排了名次的成绩单如下:
名次姓名成绩
1李李100
2赵四98
3王丁丁86
4陈冬冬70
5张小二65
#include
#include
voidmain()
{charname[40][10],str[10];
intscore[40],num,i,j,t;
printf("输入学生人数:
");
scanf("%d",&num);
for(i=0;i{
printf("输入第%d学生的姓名和成绩:
",i+1);
scanf("%s%d",name[i],&score[i]);
}
for(i=0;ifor(j=i+1;jif(score[j]>score[i])
{
t=score[i];
score[i]=score[j];
score[j]=t;
strcpy(str,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],str);
}
printf("排了名次的成绩如下:
\n");
printf("%8s%12s%8s\n","名次","姓名","成绩");
for(i=0;iprintf("%8d%12s%8d\n",i+1,name[i],score[i]);
}
“数组、函数”课外作业:
要求用函数完成。
一、定义一个数组,对其进行排序,然后输入一个数,并将这个数按数组排序的位置插入到数组中。
如:
数组中有:
3,6,9,10,15,18;输入的数为11,则:
应输出3,6,9,10,11,15,18。
#include
voidmain()
{voidsort(inta[]);
voidinsert(inta[],intx);
inta[11]={12,11,36,2,4,58,65,25,45,14},i,x;
sort(a);
printf("排序后的数组是:
\n");
for(i=0;i<10;i++)
{printf("%3d",a[i]);}
printf("\n");
printf("插入一个数:
");
scanf("%d",&x);
insert(a,x);
printf("\n");
printf("插入后的数组是:
\n");
for(i=0;i<11;i++)
{printf("%3d",a[i]);}
printf("\n");
}
voidsort(inta[])//排序
{inti,j,temp;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
voidinsert(inta[],intx)//插入数值
{inti=0,j;
while(x>a[i])i++;
{for(j=10;j>i;j--)//那么其他的数相继住后移
{a[j]=a[j-1];}
a[j]=x;//并把x加到空出来的位置
}
}
二、(函数,数组)输入一个3*3的矩阵,求对角线元素之和,并输出。
例:
123
456
789
对角线元素和为:
1+5+9=15,3+5+7=15。
#include
#defineN3
voidmain()
{voidinput(inta[N][N]);
intsum1(inta[N][N]);
intsum2(inta[N][N]);
inta[N][N];
input(a);
printf("\n第一个对角线的和为:
%d\n",sum1(a));
printf("\n第二个对角线的和为:
%d\n",sum2(a));
}
voidinput(inta[N][N])
{
inti,j;
for(i=0;i{
printf("输入第%d行的值:
\n",i+1);
for(j=0;jscanf("%d",&a[i][j]);
}
}
intsum1(inta[N][N])
{
inti,j,x=0;
for(i=0;ifor(j=0;jif(i==j)//当i=0j=0,i=1j=1,i=2j=2时相加
x=x+a[i][j];
returnx;
}
intsum2(inta[N][N])
{
inti,j,x=0;
i=0;j=N-1;
while(i{x=x+a[i][j];
i++;
j--;
}
returnx;
}
三、下面程序的功能是,输入一个ASCII码值,输出从该ASCII码开始的连续10个字符。
在横线处填写正确的语句或表达式,使程序完整.上机调试程序,使程序的运行结果与给出的结果一致。
#include
voidmain()
{
voidput(intn);
intascii;/*变量ascii存放输入的ASCII码值*/
printf("输入ASCii码值:
");
scanf("%d",&ascii);
put(ascii);
}
voidput(intn)
{
inti,a;
for(i=1;i<=10;i++)
{
a=n+i-1;
putchar(a);
}
}
运行结果一:
输入ASCii码值:
97↙
abcdefghij
运行结果二:
输入ASCii码值:
33↙
!
”#$%&’()*
四、下面各题,如有错误请写明错在哪,改正后再写出程序的运行结果。
如果是正确的,直接写出程序的运行结果。
(1)
#include
voidmain()
{voidf();
inta;
a=10;
f();
printf(“a=%d\n”,a);
}
voidf()
{
inta;
a=20;
printf(“a=%d\n”,a);
}
a=20
a=10
(2)intx,y;//全局变量的例子
#include
voidmain()
{ints();
intn;
x=1;
y=2;
n=x+y;
printf(“x=%d,y=%d,n=%d\n”,x,y,n);
n=s();
printf(“x=%d,y=%d,n=%d\n”,x,y,n);
}
ints(){
intz;
x=3;
y=4;
z=x+y;
return(z);
}
x=1,y=2,n=3
x=3,y=4,n=7
(3)inta=10;//全局变量与局部变量同名的例子
#include
voidmain()
{voidf();
a++;
f();
printf(“a=%d\n”,a);
}
voidf()
{
inta;
a=20;
}
a=11
“指针”课外作业:
一、分析下列程序,如有错误或警告,请修改,并写出程序结果。
(1)
#include
voidmain()
{
int*p,a;
scanf(“%d”,&a);
p=&a;
printf(“%d”,*p);
}
(输入什么数就得到什么数,不能输入字符)。
(2)
#include
voidf(int*t)
{*t=10;}
voidmain()
{
int*p,a;
a=2;
p=&a;
f(p);
printf("a=%d\n",a);
}
a=10
(3)
#include
voidmain()
{
int*p;
intn[10],i;
for(i=0;i<10;i++)
n[i]=i;
p=n;
printf(“n[0]=%d\n”,*p);
printf(“n[6]=%d\n”,*(p+6));
}
n[0]=0
n[6]=6
(4)
#include
#include//少了这个文件包含,因为strcat等函数是包含在string.h中的
voidmain()
{
char*str1,*str2,*str3;
chara[10],b[10],c[10];
//要定义数组,分别给str1str2str3指针来指向,长度10可自己定
printf("str1=");
gets(str1);
printf("str2=");
gets(str2);
strcat(str1,str2);
printf("str1=%s\n",str1);
strcpy(str3,str1);
printf("str3=%s\n",str3);
}
另外还有str1str2str3没有初始化
运行结果一:
str1=123
str2=444
str1=123444
str3=123444
(5)
#include
voidmain(){
staticinta[]={1,2,3,4,5};
int*p=a;
printf(“%d”,*++p);//2
printf(“%d”,*p++);//2
printf(“%d”,(*p)++);//3
printf(“%d\n”,++*p);//5
}
二、完善程序
1、下面程序的功能是,输入一个阿拉伯数字序列,输出其对应的汉字大写形式.在程序的横线处填写正确的语句或表达式,使程序完整.上机调试程序,使程序的运行结果与给出的结果一致.
#include
#include
voidmain()
{
char*n,n1[10];
char*s[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
inti,x,len;
printf("输入一串阿拉伯数字:
\n");
n=n1;
gets(n);
len=strlen(n);
for(i=0;i{
x=*(n+i)-48;/*48为字符"0"的ASCII码*/
printf("%s",s[x]);
//printf("%s",*(s+x));或者用这个语句
}
printf("\n");
}
运行结果:
输入一串阿拉伯数字:
135302↙
壹叁伍叁零贰