习题参考答案《C语言程序设计》第七版董汉丽 610页.docx

上传人:b****1 文档编号:1815418 上传时间:2023-05-01 格式:DOCX 页数:18 大小:27.47KB
下载 相关 举报
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第1页
第1页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第2页
第2页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第3页
第3页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第4页
第4页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第5页
第5页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第6页
第6页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第7页
第7页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第8页
第8页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第9页
第9页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第10页
第10页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第11页
第11页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第12页
第12页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第13页
第13页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第14页
第14页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第15页
第15页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第16页
第16页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第17页
第17页 / 共18页
习题参考答案《C语言程序设计》第七版董汉丽 610页.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

习题参考答案《C语言程序设计》第七版董汉丽 610页.docx

《习题参考答案《C语言程序设计》第七版董汉丽 610页.docx》由会员分享,可在线阅读,更多相关《习题参考答案《C语言程序设计》第七版董汉丽 610页.docx(18页珍藏版)》请在冰点文库上搜索。

习题参考答案《C语言程序设计》第七版董汉丽 610页.docx

习题参考答案《C语言程序设计》第七版董汉丽610页

一.简答题

1.什么是数组,为什么要在C语言中引用数组?

【解答】数组是有序的、且具有相同性质类型的数据集合。

引用数组来实现成批地处理数据。

2.在C语言中如何表示一个字符串?

【解答】运用字符型数组来表示字符串。

3.C语言中,指针的含义是什么?

【解答】指针的含义就是变量的地址。

4.若有inta[3][2]={{1,2},{3},{4,5}};则a[1][1]的值是多少?

【解答】0

5.判断两个字符串str1和str2是否相等,应当怎样操作?

【解答】首先加上头文件“string.h”,然后利用strcmp(字符串1,字符串2)函数比较字符串1和字符串2的大小。

说明:

按照ASCII码值大小将两个字符串自左至右逐个字符比较,直到出现不同的字符或遇到‘\0’为止。

如果全部字符相同,则认为相等;如果出现不相同的字符,则以第一个不相同字符的比较结果为准返回函数值。

1字符串1==字符串2,函数值=0;

2字符串1>字符串2,函数值>0;

③字符串1<字符串2,函数值<0。

注意:

对两个字符串比较是否相等,不能用以下形式:

if(str1==str2)printf(“yes”);

而只能用:

if(strcmp(str1,str2)==0)printf(“yes”);

6.有以下定义:

inta[4]={0,1,2,3},*p;

若p=&a[1];则*p++的值是多少?

若p=&a[2];则*--p的值是多少?

【解答】11

二.运行程序写结果

1.以下程序的执行结果是。

main()

{

intk,a[6]={1,2,3,4,5,6};

for(k=5;k>0;--k)

if(a[k]%2==0)

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

}

【分析与提示】从后向前把能被2整除的数组元素输出。

【解答】642

2.以下程序的执行结果是。

#include

main()

{

charstr[]="SSSWLIA",c;

intk;

for(k=2;(c=str[k])!

='\0';k++)

{

switch(c)

{

case'I':

++k;break;

case'L':

continue;

default:

putchar(c);continue;

}

putchar('*');

}

}

【分析与提示】从字符串中第3个字符开始,把符合要求的字符运用输出字符函数putchar()输出;最后在其后输出一个"*"。

【解答】SW*

3.以下程序的执行结果是。

main()

{

charss[10]="12345";

strcat(ss,"6789");

gets(ss);

printf("%s",ss);

}

假设输入"ABC"

【分析与提示】运用字符串连接函数strcat(),把两个串"12345"和"6789"连接,对其重新赋值后,原有数值被刷新输出新值。

【解答】"ABC"

4.以下程序的执行结果是。

#include

main()

{

chara[]="Monday",b[]="day";

strcpy(a,b);

printf("%s\t%s\n",a,b);

printf("%c\t%c\n",a[4],a[5]);

}

【分析与提示】把b字符串的内容拷贝到a字符串中,分别显示a和b串内容;再显示数组元素a[4]和a[5]的内容。

【解答】dayday

ay

5.以下程序的执行结果是。

main()

{

intx[8]={8,7,6,5,0,0},*s;

s=x+3;

printf("%d",s[2]);

}

【分析与提示】运用指针显示数组元素值。

需要注意的是把数组x第3个元素的地址,赋给了指针变量s,所以s[2]里面存储的是x[5],即0。

【解答】0

6.以下程序的执行结果是。

main()

{

inta=7,b=8,*p,*q,*r;

p=&a;q=&b;

r=p;p=q;q=r;

printf("%d,%d,%d,%d",*p,*q,a,b);

}

【分析与提示】指针变量存储地址,而不是数值。

【解答】8,7,7,8

7.以下程序的执行结果是。

main()

{

chara[]="language",b[]="programe";

char*p,*q;

p=a;q=b;

while(*p&&*q)

{

if((*p)==(*q))printf("%c",*p);

p++;q++;

}

}

【分析与提示】程序功能是,输出两个字符串中相同的字符。

【解答】gae

8.以下程序的执行结果是。

#include

#include

main()

{

chara[80]="AB",b[80]="LMNP";

inti=0;

strcat(a,b);

while(a[i++]!

='\0')

b[i]=a[i];

puts(b);

}

【分析与提示】把b串内容连接到a串上,再通过循环对b串重新赋值。

【解答】LBLMNP

三.编程题

1.用一维数组求10个数中的最大值。

【分析与提示】运用一维数组保存10个数,依次比较保存最大值。

参考代码:

main()

{

inti,a;

intn[10]={8,2,4,6,7,1,0,85,32,54};

a=n[0];

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

if(n[i]>a)a=n[i];

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

}

2.用数组输入5个学生成绩,求出这些成绩的平均值,并输出所有高出平均值的分数。

【解答】参考代码:

#include"stdio.h"

voidmain()

{

inti;

floata[5],sum=0,ave;

printf("输入5个学生的成绩:

");

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

{

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

sum=sum+a[i];

}

ave=sum/5;

printf("5个学生的平均成绩是%5.2f。

\n",ave);

printf("高出平均值的成绩有:

\n");

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

if(a[i]>ave)

printf("%5.2f\n",a[i]);

}

3.输入10个整数用一维数组保存,统计其中正数、负数和零的个数,并在屏幕上输出。

【解答】参考代码:

#include"stdio.h"

voidmain()

{

inta[10],i,n1=0,n2=0,n3=0;

printf("请输入10个整数:

\n");

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

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

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

{

if(a[i]>0)

n1++;

elseif(a[i]==0)

n2++;

else

n3++;

}

printf("正数:

%d个\n零:

%d个\n负数:

%d个\n",n1,n2,n3);

}

4.键盘任意输入10个整数,求偶数的个数。

【解答】参考代码:

#include"stdio.h"

voidmain()

{

inta[10],i,n=0;

printf("请输入10个整数:

\n");

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

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

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

{

if(a[i]%2==0)

n++;

}

printf("偶数:

%d个\n",n);

}

5.有任意10个数(如:

12,46,68,80,10,12,4,16,100,0),请输入一个数,判断该数是否在该数组中。

【分析】该问题是一个线性查找问题。

输入一个数,然后从数组的第一个元素开始,依次与数组中元素比较,直到找遍整个数组为止,最后显示找到与否。

参考代码:

main()

{

inttable[10]={12,46,68,80,10,12,4,16,100,0};

intfind=0,i,x;

printf("请输入要找的数:

");

scanf("%d",&x);

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

if(x==table[i])

{find=1;break;}

if(find==1)

printf("%d在table数组中\n",x);

else

printf("没有找到数%d\n",x);

}

6.输入10个数,用一维数组按逆序重新存放并输出。

例原数:

1,2,3,4,5--->5,4,3,2,1

【解答】参考代码:

#include"stdio.h"

voidmain()

{

inta[10],i,n=0;

printf("请输入10个整数:

\n");

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

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

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

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

printf("\n");

}

7.将两个二维数组对应元素加起来,存到另一个二维数组中。

1020

3040

5060

a=

14

25

36

b=

 

【分析与提示】运用双重循环,把行列下标均相同的元素值相加。

参考代码:

main()

{

inta[3][2]={10,20,30,40,50,60};

intb[3][2]={1,4,2,5,3,6};

intc[3][2];

inti,j;

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

{

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

{

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

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

}

printf("\n");

}

}

8.从键盘为一个3×3整型数组输入数据,并找出主对角线上元素的最大值及其所在的行号。

【解答】参考代码:

#include"stdio.h"

voidmain()

{

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

printf("请为3*3整型数组输入数据:

\n");

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

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

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

max=a[0][0];

row=0;

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

if(max

{

max=a[i][i];

row=i;

}

printf("主对角线上的最大值是%d,其所在的行号是%d\n",max,row);

}

9.实现字符串原样复制。

【提示】原样复制字符串,两个指针变化相同。

即将指针t所指字符串复制到指针s所指内存空间中,形成一个新字符串str1。

【解答】参考代码:

#include"stdio.h"

#include"string.h"

voidmain()

{

charstr[80],str1[80],*t,*s;

printf("请输入一个字符串,以回车作为结束标志:

");

gets(str);

t=str;

s=str1;

strcpy(s,t);

puts(str1);

}

10.统计一个字符串中的单词个数。

【提示】单词是指处在空格之间的字符序列。

注意,只有从空格变为非空格时,才统计一个单词。

【解答】参考代码:

#include"stdio.h"

voidmain()

{

charstr[80],*p;

intn=0,flag=0;

printf("请输入一个字符串,以回车作为结束标志:

");

gets(str);

p=str;

while(*p!

='\0')

{

if(*p=='')

flag=0;

elseif(flag==0)

{

flag=1;

n++;

}

p++;

}

printf("单词个数为:

%d\n",n);

}

11.用指针实现合并两个字符串。

【分析与提示】把第二个字符串中字符逐个赋值给第一个字符串,需要注意的是两个字符数组下标变量的初值不同。

参考代码:

#include

#include

main()

{

chars1[40],s2[20],*p1,*p2;

inti,j,n;

p1=s1;p2=s2;

printf("输入第一个字串:

");

gets(p1);

printf("\n输入第二个字串:

");

gets(p2);

n=strlen(p1);

for(i=n,j=0;*(p2+j)!

='\0';i++,j++)

*(p1+i)=*(p2+j);

*(p1+i)='\0';

printf("\n输出合并后字串为:

");

puts(p1);

}

12.打印杨辉三角形。

(打印10行)

杨辉三角形具有以下特点,第1列和对角元素的位置都是1,其它元素值要根据前1行同1列元素与前1行前1列元素之和计算出来的,

 

【解答】参考代码:

#include"stdio.h"

voidmain()

{

inta[10][10],i,j;

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

{

a[i][i]=1;

a[i][0]=1;

}

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

for(j=1;j

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

printf("杨辉三角形:

\n");

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

{

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

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

printf("\n");

}

}

13.从输入的三个字符串中找出最长的一个字符串输出。

【分析与提示】运用测试字符串长度函数strlen,进行串比较。

参考代码:

#include

#include

main()

{

chara[3][80],*sp=””;

inti;

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

gets(a[i]);

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

if(strlen(sp)

printf("thelongeststringis:

%s\n",sp);

}

14.有三个字符串s1,s2,s3,其中:

s1=“abcdef”;s2=“123456”。

要求用字符数组实现将s1的内容复制到s3中,并将s2的内容添加在s3后面,最后输出字符串s3。

【解答】参考代码:

#include"stdio.h"

voidmain()

{

chars1[]="abcdef",s2[]="123456",s3[80];

inti,j;

for(i=0;s1[i]!

='\0';i++)

s3[i]=s1[i];

for(j=0;s2[j]!

='\0';j++)

s3[i++]=s2[j];

s3[i]='\0';

puts(s3);

}

15.一个学习小组有5个人,每个人有三门课的考试成绩。

求全组分科的平均成绩和各科总平均成绩。

提示:

可设一个二维数组a[3][5]存放五个人三门课的成绩。

再设一个一维数组v[3]存放所求的各分科平均成绩。

设变量average为全组各科总平均成绩。

数据如下:

张山

王辉

李宇辉

赵刚

周伟

数学

80

61

59

85

76

C语言

75

65

63

87

77

英语

92

71

70

90

85

【解答】参考代码:

#include"stdio.h"

voidmain()

{

inta[3][5]={{80,61,59,85,76},{75,65,63,87,77},{92,71,70,90,85}},i,j,v[3]={0},average=0,s=0;

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

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

{

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

s+=a[i][j];

}

average=s/15;

printf("数学,C语言,英语的平均成绩分别为:

");

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

printf("%6d",v[i]/5);

printf("\n全组各科总平均成绩为:

%d\n",average);

}

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2