C语言程序设计习题5.docx

上传人:b****6 文档编号:5822332 上传时间:2023-01-01 格式:DOCX 页数:18 大小:23.08KB
下载 相关 举报
C语言程序设计习题5.docx_第1页
第1页 / 共18页
C语言程序设计习题5.docx_第2页
第2页 / 共18页
C语言程序设计习题5.docx_第3页
第3页 / 共18页
C语言程序设计习题5.docx_第4页
第4页 / 共18页
C语言程序设计习题5.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C语言程序设计习题5.docx

《C语言程序设计习题5.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题5.docx(18页珍藏版)》请在冰豆网上搜索。

C语言程序设计习题5.docx

C语言程序设计习题5

习题5参考解答

1.数组是相同数据类型的集合,分为一维数组、二维数组及多维数组。

在什么情况下使用数组?

在什么情况下使用一维数组?

解:

当需要处理的数据为相同类型的数据的集合时,可以使用数组。

如果这些数据的描述用一个量就可以,这时就用一维数组。

例如,一组学生的学号,就可以使用一维数组。

2.数组元素又称为下标变量,数组元素的下标有何意义?

解:

下标的意义是对数组的各个数组元素进行标识和区分。

由数组名和下标结合起来形成数组元素的名字。

3.使用字符数组来存储字符串应注意什么问题?

解:

需要注意的问题是字符数组在存储字符串时是以'\0'作为结束标记的。

这个'\0'是系统自动加上的。

所以字符数组的长度需要比它要存储的字符串的长度至少多1。

例如,要存储字符串"abcd",因为它的长度为4,所以存储它的字符数组的长度至少为5。

4.常用的字符处理函数有哪些?

解:

常用的字符处理函数有以下8个。

(1)puts(字符串):

作用为将一个字符串输出到终端。

(2)gets(字符数组):

作用为从终端输入一个字符串到字符数组,并且得一个函数值。

(3)strcat(字符串1,字符串2):

作用为进行字符串的连接。

(4)strcpy(字符串1,字符串2):

作用为进行字符串的复制。

(5)strcmp(字符串1,字符串2):

作用为进行字符串的比较。

(6)strlen(字符串):

作用为求字符串的长度。

(7)strlwr(字符串):

作用为将字符串中的大写字母转换成小写字母。

(8)strupr(字符串):

作用为将字符串中的小写字母转换成大写字母。

5.随机产生10个两位整数存储到一个一维数组中,找出其中的最大数。

解:

#include

#include

#definerandom(x)(rand()%x)

intmain()

{

inta[10],max;

intx;

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

a[x]=random(100);

max=a[0];

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

{

if(a[x]>max)

max=a[x];

printf("%4d",a[x]);

}

printf("\nmax=%d\n",max);

return0;

}

程序运行结果如下:

4167340692478586264

max=78

6.输入10个整数,要求按照从小到大的顺序输出。

解:

#include

voidmain()

{

inti,j,min,t,a[10];

printf("请输入10个数:

\n");

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

{

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

}

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

{

min=i;

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

if(a[min]>a[j])min=j;

t=a[i];

a[i]=a[min];

a[min]=t;

}

printf("\n排序结果如下:

\n");

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

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

}

程序运行情况如下:

请输入10个数:

6904556115447858101

排序结果如下:

1615444556587890101

7.输入10个字符,并将它们的顺序颠倒后输出。

解:

#include

#defineN10

voidmain()

{

chara[N],t;

inti;

/*输入10个字符并输出*/

printf("请输入10个字符:

\n");

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

{

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

}

/*顺序颠倒*/

for(i=0;i

{

t=a[i];

a[i]=a[N-i-1];

a[N-i-1]=t;

}

printf("顺序颠倒后的字符:

\n");

for(i=0;i

printf("%c",a[i]);

}

程序运行情况如下:

请输入10个字符:

0123456789↙

顺序颠倒后的字符:

9876543210

8.写出下列程序的运行结果。

(1)#include

voidfun(intb[])

{

inti=0;

while(b[i]<=10)

{

b[i]+=2;

i++;

}

}

intmain()

{

inti,a[]={1,5,7,9,11,13,15};

fun(a+2);

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

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

return0;

}

解:

15911111315

(2)#include

intmain()

{

inta[3][3],i,j;

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

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

a[i][j]=i;

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

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

return0;

}

解:

111

(3)#include

intmain()

{

intk;

inta[3][3]={1,2,3,4,5,6,7,8,9};

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

printf("%d",a[k][2-k]);

return0;

}

解:

357

(4)#include

#include

intmain()

{

charp[20]={'a','b','c','d'},q[]="abc",r[]="abcde";

strcpy(p+strlen(q),r);strcat(p,q);

printf("%d\n%d\n",sizeof(p),strlen(p));

return0;

}

解:

20

11

(5)#include

#include

voidf(charp[][10],intn)/*字符串从小到大排序*/

{

chart[10];

inti,j;

for(i=0;i

for(j=i+1;j

if(strcmp(p[i],p[j])>0)

{strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[i],t);}

}

intmain()

{

charp[5][10]={"abc","aabdfg","abbd","dcdbe","cd"};

f(p,5);

printf("%d\n",strlen(p[0]));

return0;

}

解:

3

9.求一个3×3矩阵对角线元素之和。

解:

#include

main()

{

floata[3][3],sum=0;

inti,j;

printf("请输入矩阵元素:

\n");

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

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

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

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

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

printf("对角线元素之和=%.2f\n",sum);

}

程序运行情况如下:

请输入矩阵元素:

123456789↙

对角线元素之和=15.00

10.找出一个二维数组中的鞍点,所谓鞍点是指该位置上的数在该行最大,在该列最小。

需要注意的是,并不是所有的二维数组都有鞍点。

解:

#defineN10

#defineM10

#include

voidmain()

{

inti,j,k,m,n,flag1,flag2,a[N][M],max,maxj;

printf("\n输入行数n:

");

scanf("%d",&n);

printf("\n输入列数m:

");

scanf("%d",&m);

for(i=0;i

{

printf("第%d行?

\n",i);

for(j=0;j

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

}

for(i=0;i

{

for(j=0;j

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

printf("\n");

}

flag2=0;

for(i=0;i

{

max=a[i][0];

maxj=0;

for(j=0;j

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

{

max=a[i][j];

maxj=j;

}

for(k=0,flag1=1;k

if(max>a[k][maxj])

flag1=0;

if(flag1)

{

printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max);

flag2=1;

}

}

if(!

flag2)

printf("\n矩阵中无鞍点!

\n");

}

矩阵中有鞍点,运行情况如下:

输入行数n:

2↙

输入列数m:

2↙

第0行?

4↙

5↙

第1行?

4↙

6↙

45

46

第0行,第1列的5是鞍点

矩阵中无鞍点,运行情况如下:

输入行数n:

2↙

输入列数m:

2↙

第0行?

90↙

7↙

第1行?

5↙

8↙

907

58

矩阵中无鞍点!

11.某班有30个学生,每个学生参加了5门课程的考试,请编程显示该班的期末成绩单,并求出每个学生的所有课程的总分。

解:

#include

voidmain()

{

intscore[31][7];

inti,j;

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

score[i][0]=i;

printf("请依次输入30个学生的五门课的成绩\n");

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

{

printf("请依次输入第%d个学生的五门课的成绩\n",i);

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

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

}

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

{

score[i][6]=0;

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

score[i][6]+=score[i][j];

}

printf("期末成绩单\n");

printf("%10s%10s%10s%10s%10s%10s%10s\n","学号","课程1","课程2","课程3","课程4","课程5","总分");

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

{

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

printf("%10d",score[i][j]);

printf("\n");

}

}

程序运行情况如下:

请依次输入30个学生的五门课的成绩

请依次输入第1个学生的五门课的成绩

7889989698↙

请依次输入第2个学生的五门课的成绩

8995989796↙

请依次输入第3个学生的五门课的成绩

7879747875↙

按照上面示例自行输入27个学生的五门课的成绩。

期末成绩单

学号课程1课程2课程3课程4课程5总分

17889989698459

28995989796475

37879747875384

程序将在此处依次打印出另外27个学生的成绩。

12.打印出如下方阵:

13141516

9101112

5678

1234

解:

#include

voidmain()

{

intarray[4][4];

inti,j;

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

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

array[i][j]=(3-i)*4+(j+1);

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

{

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

printf("%10d",array[i][j]);

printf("\n");

}

}

13.打印出以下的杨辉三角形(要求打印出10行):

解:

#include

#defineN11

voidmain()

{

inti,j,a[N][N];

for(i=1;i

{

a[i][i]=1;

a[i][1]=1;

}

for(i=3;i

for(j=2;j<=i-1;j++)

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

for(i=1;i

{

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

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

printf("\n");

}

printf("\n");

}

程序运行结果如下:

1

11

121

1331

14641

15101051

1615201561

172135352171

18285670562881

193684126126843691

14.输入5个字符串,按照ASCII码值由小到大顺序输出。

解:

#include

#include

voidmain()

{

inti,j,min;

chart[20],str[5][20];

printf("请输入5个字符串:

\n");

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

{

gets(str[i]);

}

for(i=0;i<5-1;i++)

{

min=i;

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

if(strcmp(str[min],str[j])>0)min=j;

strcpy(t,str[i]);

strcpy(str[i],str[min]);

strcpy(str[min],t);

}

printf("\n排序结果如下:

\n");

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

puts(str[i]);

}

程序运行情况如下:

请输入5个字符串:

flash↙

action↙

photo↙

dream↙

weaver↙

排序结果如下:

action

dream

flash

photo

weaver

15.有一篇文章,共有5行文字,每行有80个字符。

要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。

解:

#include

voidmain()

{

inti,j,uppn,lown,dign,span,othn;

chartext[5][80];

uppn=lown=dign=span=othn=0;

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

{

printf("\n请输入第%d行:

\n",i);

gets(text[i]);

for(j=0;j<80&&text[i][j]!

='\0';j++)

{

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

uppn+=1;

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

lown+=1;

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

dign+=1;

elseif(text[i][j]=='')

span+=1;

else

othn+=1;

}

}

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

printf("%s\n",text[i]);

printf("大写字母的个数:

%d\n",uppn);

printf("小写字母的个数:

%d\n",lown);

printf("数字的个数:

%d\n",dign);

printf("空格的个数:

%d\n",span);

printf("其他字符的个数:

%d\n",othn);

}

程序运行情况如下:

请输入第0行:

abc

请输入第1行:

+++

请输入第2行:

ABC

请输入第3行:

123

请输入第4行:

***

大写字母的个数:

3

小写字母的个数:

3

数字的个数:

3

空格的个数:

0

其他字符的个数:

6

16.有一行电文,已按下面规律译成密码:

A→Za→z

B→Yb→y

C→Xc→x

……

即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。

非字母字符不变。

要求编写程序将密码译回原文,并打印出密码和原文。

解:

#include

main()

{

inti,n;

charch[80],tran[80];

printf("请输入字符:

");

gets(ch);

printf("\n密码是:

%s",ch);

i=0;

while(ch[i]!

='\0')

{

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

tran[i]=26+64-ch[i]+1+64;

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

tran[i]=26+96-ch[i]+1+96;

else

tran[i]=ch[i];

i++;

}

n=i;

printf("\n原文是:

");

for(i=0;i

putchar(tran[i]);

}

程序运行情况如下:

请输入字符:

ZYXzyx↙

密码是:

ZYXzyx

原文是:

ABCabc

17.编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。

要求不使用strcpy函数。

复制时,'\0'也要复制过去。

'\0'后面的字符不复制。

解:

#include

#include

intmain()

{

charfrom[80],to[80];

inti;

printf("请输入字符串:

");

scanf("%s",from);

for(i=0;i<=strlen(from);i++)

to[i]=from[i];

printf("复制字符串为:

%s\n",to);

return0;

}

程序运行情况如下:

请输入字符串:

hello↙

复制字符串为:

hello

 

(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持)

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

当前位置:首页 > 经管营销

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

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