习题参考答案《C语言程序设计》第七版董汉丽 610页.docx
《习题参考答案《C语言程序设计》第七版董汉丽 610页.docx》由会员分享,可在线阅读,更多相关《习题参考答案《C语言程序设计》第七版董汉丽 610页.docx(18页珍藏版)》请在冰豆网上搜索。
习题参考答案《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);
}