习题六 解答.docx

上传人:b****6 文档编号:4330121 上传时间:2022-11-29 格式:DOCX 页数:16 大小:20.69KB
下载 相关 举报
习题六 解答.docx_第1页
第1页 / 共16页
习题六 解答.docx_第2页
第2页 / 共16页
习题六 解答.docx_第3页
第3页 / 共16页
习题六 解答.docx_第4页
第4页 / 共16页
习题六 解答.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

习题六 解答.docx

《习题六 解答.docx》由会员分享,可在线阅读,更多相关《习题六 解答.docx(16页珍藏版)》请在冰豆网上搜索。

习题六 解答.docx

习题六解答

习题六

一选择题

1C2B3A4D5D6B7都正确8A9D10A

11A12B13D14A15B

二填空题

1按行排序22,43字符数组4数组第一个元素地址50

6159

2610

3711

4812

7*****

*

*

*

*

8*****

*

*

*

*

9

1

21

331

4641

10a

b

c

d

e

11i=1x[i-1]

12intflag,iscanf(”%s”,str1)str[i]!

=str1[i]

13i<=10-ja[i]

三编程题

1

#include

voidmain()

{

inti,n=0;

inta[10];/*定义一个数组,用来存放10个数*/

floatavg=0;/*定义一个变量,用来存放这10个数的平均值*/

intmax,min;

printf("请输入10个数:

\n");/*提示输入10个数*/

/*读入10个数,并求这些数的和*/

for(i=0;i<10;i++)

{

scanf("%d",&a[i]);

}

max=min=a[0];

for(i=1;i<10;i++)

{

if(a[i]>max)

{

max=a[i];

}

if(a[i]

{

min=a[i];

}

avg+=a[i];

}

avg/=10;

printf("最大值为:

%d,最小值为:

%d平均值为:

%f",max,min,avg);

}

2

#include

voidmain()

{

inti,temp,n=0,k=0;

inta[10];/*定义一个数组,用来存放10个数*/

intmin;

printf("请输入10个数:

\n");/*提示输入10个数*/

/*读入10个数,并求这些数的和*/

for(i=0;i<10;i++)

{

scanf("%d",&a[i]);

}

min=a[0];

for(i=1;i<10;i++)

{

if(a[i]

{

min=a[i];

k=i;

}

}

if(k!

=0)

{

temp=a[0];

a[0]=a[k];

a[k]=temp;

}

printf(“最终的数组为:

\n”);

for(i=0;i<10;i++)

printf(“%d”,a[i]);

printf("\n最小值为:

%d,下标为:

%d",min,k);

}

3

#include

#defineN6

main()

{inta[N][N]={0},i=0,j=0;

for(i=0;i

a[i][0]=a[i][i]=1;/*给第一列和对角线上的元素赋1*/

for(i=2;i

for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];/*给其他元素赋值*/

for(i=0;i

{for(j=0;j<=i;j++)printf(“%5d”,a[i][j]);

printf(“\n”);

}

}

4

【解】程序如下:

#include

main()

{floata[4][6]={0},sum=0;inti=0,j=0;

for(i=0;i<4;i++)

for(j=0;j<5;j++)

a[i][j]=i*j+1;/*给数组a的前五列赋值*/

for(i=0;i<4;i++)/*计算各行平均值,并存放在a[i][5]上*/

{sum=0;

for(j=0;j<5;j++)

sum=sum+a[i][j];

a[i][5]=sum/5;

}

for(i=0;i<4;i++)

{for(j=0;j<6;j++)printf(“%5.1f”,a[i][j]);

printf(“\n”);

}

}

运行结果:

1.01.01.01.01.01.0

1.02.03.04.05.03.0

1.03.05.07.09.05.0

1.04.07.010.013.07.0

5

【解】程序如下:

#include

main()

{inti=0,j=0,k=0,p=0a[3][5]={{3,1,10,4,7},{22,32,5,15,6},{11,21,8,9,16}};

printf(“Before:

\n”);

for(i=0;i<3;i++)/*找最大值所在元素的下标*/

{for(j=0;j<5;j++)printf(“%5d”,a[i][j]);

printf(“\n”);

}

for(i=0;i<3;i++)

for(j=0;j<5;j++)

if(a[k][p]

i=a[k][p];a[k][p]=a[0][0];a[0][0]=i;/*对调*/

printf(“After:

\n”);

for(i=0;i<3;i++)

{for(j=0;j<5;j++)printf(“%5d”,a[i][j]);

printf(“\n”);

}

}

运行结果:

Before:

311047

22325156

11218916

After:

3211047

2235156

11218916

6

【解】编程点拨:

用count统计单词数。

统计单词的个数可按一下步骤进行:

(1)在字符串中找出第一个非空格字符。

(2)如果第一个非空格字符为有效字符(即不等于”\0”),count增1,即处理第一个单词。

(3)在字符串中,只要一个空格和一个非空格字符(不能为”\0”)连续存在,说明找到了新的单词,因此count增1。

程序如下:

#include

main()

{chara[80]=””;inti=0;count=0;

gets(a);

while(a[i]==’’)

i++;/*找第一个非空格字符*/

if(a[i]!

=’\0’)

count++;/*非空格字符为有效字符时*/

while(a[i]!

=’\0’)

{if(a[i]==’’&&a[i+1]!

=’’&&a[i+1]!

=’\0’)

count++;/*一个空格和一个非空格字符连续存在时*/

i++;

}

printf(“%s:

%dWords\n”,a,count);

}

运行结果:

|_||_|I|_|am|_|OK<回车>

|_||_|I|_|am|_|OK:

3Words

7

【解】编程点拨:

找鞍点的操作可以通过嵌套的for循环来实现。

外层for循环用来控制二维数组的行数。

在外层循环体中需要处理三件事情:

(1)找每行中最大值所在的列下标;

(2)判断该元素在本列上是否为最小;(3)判断是否找到了鞍点,若找到,输出后退出循环。

程序如下:

#include

#defineN3

#defineM4

main()

{inta[N][M]={0},i=0,j=0,k=0,flag=0;

printf(“Input%ddata:

”,N*M);

for(i=0;i

{for(j=0;j

{scanf(“%d”,&a[i][j]);printf(“%4d”,a[i][j]);}

printf(“\n”);

}

for(i=0;i

{k=0;

for(j=0;j

if(a[i][k]

flag=1;/*不是鞍点时用0做标记*/

for(j=0;j

if(a[i][k]>a[j][k])

flag=0;

if(flag==1)/*若是鞍点,则输出后提前退出循环*/

{printf(“i=%d,k=%d,saddlepoint:

%d\n”,i,k,a[i][k]);

break;

}

}

if(i==N)

printf(“Notexistsaddlepoint.\n”);/*如果正常退出循环,说明无鞍点*/

}

第1次运行结果:

Input12data:

123456789101112<回车>

1234

5678

9101112

i=0,k=3,saddlepoint:

4

第2次运行结果:

Input12data:

1230456789101112<回车>

12304

5678

9101112

Notexistsaddlepoint.

8

#include

#defineM5

#defineN3

voidmain()

{

intsum;

intmax,i,j,s[M][N];/*用数组s存学生的每门课程的成绩*/

doubleavg[M]={0},mean[N]={0};/*avg每个学生的平均分,mean每门课程的平均分*/

/*获取每个学生的每门课程的成绩,并计算学生平均成绩*/

for(i=0;i

{

printf("No.%d",i+1);

for(sum=0,j=0;j

{

scanf("%d",&s[i][j]);

sum+=s[i][j];

}

avg[i]=1.0*sum/N;

}

max=s[0][0];

/*计算每门课程的平均分*/

for(j=0;j

{

for(i=0;i

mean[j]+=s[i][j];

mean[j]=mean[j]/M;

}

for(i=0;i

{

for(j=0;j

{

if(max

{

max=s[i][j];

}

}

}

/*输出考试情况*/

printf("学生");

for(i=0;i

printf("课程%d",i+1);

printf("平均分\n");

for(i=0;i

{

printf("No.%d",i+1);

for(j=0;j

printf("%5d",s[i][j]);

printf("%6.1f\n",avg[i]);

}

for(i=0;i

{

printf("平均:

%5.1f\n",mean[i]);

}

printf("最高分为:

%d\n",max);

}

9

#include

#include

voidmain()

{

charstr[80];

charc;

printf("请输入字符串:

\n");

gets(str);

printf("请输入要删除的开始字符:

");

scanf("%c",&c);

inti,j=0;

for(i=0;str[i]!

='\0';i++)

if(str[i]==c)

{

str[i]='\0';

break;

}

printf("%s\n",str);

}

10

【分析】字符串存入字符数组中,要逆序存放,就要将下标为0的字符串与下标最大的字符交换,下标为1的字符与下标次最大的字符交换......,最大下标应为字符串长度-1.

#include

#include

voidmain()

{

charstr[20],t;

inti,j;

gets(str);

j=strlen(str)-1;

for(i=0;i

{

t=str[i];

str[i]=str[j];

str[j]=t}

puts(str);

}

运行结果:

ABCDEFGHIJK

KJIHGFEDCBA

11

voidmain()

{

charstr[254];

charname[4][10]={"Upper","Lower","Digit","Other"};

inti,a[4]={0};

printf("输入一个字符串:

");

gets(str);

for(i=0;str[i]!

='\0';i++)

{

if(str[i]>='A'&&str[i]<='Z')

a[0]++;

elseif(str[i]>='a'&&str[i]<='z')

a[1]++;

elseif(str[i]>='0'&&str[i]<='9')

a[2]++;

else

a[3]++;

}

for(i=0;i<4;i++)

printf("%s:

%d\n",name[i],a[i]);

}

运行结果:

输入一个字符串:

ahjYTBJ^%655@#21

Upper:

4;

Lower:

3;

Digit:

5;

Other:

4;

12

【分析】本题有两个关键:

一是要找到插入的位置,二是要将插入的位置及以后的元素向后平移一个元素,最后才能在插入的位置插入概述,程序如下。

voidmain()

{

inta[11]={3,5,8,11,15,19,23,26,33},i,j,x;/*定义数组预留一个插入位置*/

printf("输入一个数:

");

scanf("%d",&x);

for(i=0;i<10;i++)

if(a[i]>x)

break;

for(j=9;j>=i;j--)

a[j+1]=a[j];

a[i]=x;

for(i=0;i<11,i++)

printf("%3d",a[i]);

printf("\n");

}

运行结果:

输入一个数:

18

3581115161819232633

13

【分析】两个矩阵的乘积必须满足条件:

第一个矩阵的列数要等于第二个矩阵的行数,乘积矩阵元计算公式为

程序如下。

#include

#definem3;

#definen4;

#definep5;

voidmain()

{

inta[m][n]={1,2,3,4,5,6,7,8,9,10,11,12};

intb[n][p]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};

intc[m][p],i,j,k;

printf("C=\n");

for(i=0;i

{

for(j=0;j

{

c[i][j]=0;

for(k=0;k

c[i][j]+=a[i][k]*b[k][j];

printf("%-7d",c[i][j]);

}

printf("\n");

}

}

运行结果:

C=

110120130140150

246272298324350

382424466508550

 

14

#include

voidmain()

{

charstr1[20],str2[20];

inti=0;

printf("输入第二个字符串:

\n");

gets(str2);

while((str1[i]=str2[i])!

='\0')

i++;

printf("第一个字符串是:

\n");

puts(str1);

}

运行结果:

输入第二个字符串:

ABCDEFG

第一个字符串是:

ABCDEFG

15

源程序:

/*计算字符串的有效长度*/

#include

intmain(void)

{

inti=0,len;

charstr[80]="Happy";//用字符串常量个初始化字符数组

/*计算字符串的有效长度*/

for(i=0;str[i]!

='\0';i++)//循环条件:

str[i]!

='\0'

;//for的循环体语句为空

len=i;

printf("len=%d\n",len);

for(i=0;str[i]!

='\0';i++)

putchar(str[i]);

return0;

}

运行结果:

Len=5

Happy

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1