c语言第五章习题答案
- 格式:doc
- 大小:24.00 KB
- 文档页数:8
数据结构(c语言版)第五章答案第五章1、设二维数组A【8】【10】是一个按行优先顺序存储在内存中的数组,已知A【0】【0】的起始存储位置为1000,每个数组元素占用4个存储单元,求:(1)A【4】【5】的起始存储位置。
A【4】【5】的起始存储位置为1000+(10*4+5)*4=1180;(2)起始存储位置为1184的数组元素的下标。
起始存储位置为1184的数组元素的下标为4(行下标)、6(列下标)。
2、画出下列广义表D=((c),(e),(a,(b,c,d)))的图形表示和它们的存储表示。
略,参考第5·2节应用题第5题分析与解答。
3、已知A为稀疏矩阵,试从时间和空间角度比较采用两种不同的存储结构(二维数组和三元组表)实现求∑a(i,j)运算的优缺点。
稀疏矩阵A采用二维数组存储时,需要n*n个存储单元,完成求∑ii a(1≤i≤n)时,由于a【i】【i】随机存取,速度快。
但采用三元组表时,若非零元素个数为t,需3t+3个存储单元(t个分量存各非零元素的行值、列值、元素值),同时还需要三个存储单元存储存稀疏矩阵A的行数、列数和非零元素个数,比二维数组节省存储单元;但在求∑ii a(1≤i≤n)时,要扫描整个三元组表,以便找到行列值相等的非零元素求和,其时间性能比采用二维数组时差。
4、利用三元组存储任意稀疏数组时,在什么条件下才能节省存储空间?当m行n列稀疏矩阵中非零元素个数为t,当满足关系3*t<m*n 时,利用三元组存储稀疏数组时,才能节省存储空间。
< bdsfid="74" p=""></m*n时,利用三元组存储稀疏数组时,才能节省存储空间。
<>5、求下列各广义表的操作结果。
(1)GetHead((a,(b,c),d))GetHead((a,(b,c),d))=a(2)GetTail((a,(b,c),d))GetTail((a,(b,c),d))=((b,c),d)(3)GetHead(GetTail((a,(b,c),d)))GetHead(GetTail((a,(b,c),d)))=(b,c)(4)GetTail(GetHead((a,(b,c),d)))GetTail(GetHead((a,(b,c),d)))=()第六章1、已知一棵树边的集合为{(i,m),(i,n),(e,i),(b,e),(b,d),(a,b),(g,j),(g,k),(c,g),(c,f),(h,l),(c,h),(a,c)}用树形表示法画出此树,并回答下列问题:(1)哪个是根结点?(2)哪些是叶结点?(3)哪个是g的双亲?(4)哪些是g的祖先?(5)哪些是g的孩子?(6)哪些是e的子孙?(7)哪些是e的兄弟?哪些是f的兄弟?(8)结点b和n的层次号分别是什么?(9)树的深度是多少?(10)以结点c为根的子树的深度是多少?(11)树的度数是多少?略。
练习5-1答案一、选择题1.合法的数组说明语句是( B )。
A.int a[]="string"; B.int a[]={0,1,2,3,4,5};C.char a="string"; D.char a[5]={'0', '1', '2', '3', '4', '5'};2.以下对一维整型数组a的说明正确的选项是( D )。
A.int a(10); B.int n=10, a[n]; C.int n; D.#define SIZE 10scanf("%d", &n); int a[SIZE];int a[n];3.:int a[10];,那么对a数组元素的正确引用是( D )。
A.a[10] B.a[3.5] C.a(5) D.a[10-10] 4.以下对一维数组a进行正确初始化的语句是( C )。
A.int a[10]=(0, 0, 0, 0, 0); B.int a[10]={};C.int a[]={0}; D.int a[2]={10, 9, 8};5.对以下说明语句的正确理解是( B )。
int a[10]={6, 7, 8, 9, 10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值的个数不相同,所以此语句不正确二、填空题6.求所有不超过200的N值,N的平方是具有对称性质的回文数。
所谓回文数就是将一个数从左到右与从右到左读都是一样的,例如:34543和1234321都是回文数。
例如:满足题意要求的数有:N=1,11*11=121;N=111,111*111=12321。
#include <stdio.h>main(){int m[16], n, i, t, count=0;long a, k;printf("Result is:\n");for (n=10; n<200; n++){ k=0;t=1;a=n*n;for (i=1; a!=0; i++){ ①;a/=10;}for (; i>1; i--){ k+=m[i-1]*t;②;}if ( ③ ) printf("%2d:%10d %10d\n", ++count, n, n*n);}}那么①为( m[i]=a%10; )、②为( t*=10; )、③为( k==n*n )。
标题:1、结构体的定义与引用时限:1000 ms内存限制:10000 K总时限:3000 ms描述:定义一个职工结构体数据类型,并定义职工结构体变量。
输入:从键盘输入一个职工的信息。
(4个数据,每个占一行,工资有两位小数)输出:输出职工信息。
(4个数据,每个占一行)zhangping土、皿* 610103************输入样例:212183. 55zhangping土 ,皿* 610103************输出样例:2]2183. 55标题:2、结构体数组的定义与引用时限:1000 ms内存限制:10000 K总时限:3000 ms描述:定义一个职工结构体数组,从键盘输入5位职工的信息,打印出最高的工资。
输入:从键盘输入5位职工的信息(4个数据,每个占一行,工资有两位小数)。
输出:打印出最高的工资。
liuxin91736527976271265111234. 23liyixin9173652797627126511输入样例:5234. 24liuxin91736527943271265 111244. 25liuxin 91736527976271265 11手机电话薄含有姓名、宅电、手机3项内容,建立含有上述信息的电描述:(2)(3)(4)(5输入姓名,查找此人的号码。
插入某人的号码。
输入姓名,删除某人的号码。
可以根据用户的需要, (1)1284. 26 liuxin 91736527976271265111232. 27输出样例:5234. 24标题:3、电话薄时限:1000 ms内存限制:10000 K总时3000 ms1.编写手机电话薄管理程序,用结构体实现下列功能:话簿。
调用相应的子函数。
建议用结构体完成,可参考P204【例7-2] o输入:输出:输入样例:输出样例:1、程序主函数如下所示,请认真理解,不要更改代码。
int main(void) /*主函数*/{int k;do {printf (/z 0 exit\n,z) ; /*打印菜单项*/printf (/z 1 creat\n〃);提示:printf (/z 2 search\n〃);printf (/z 3 insert\n〃);printf (/z 4 delete\n〃);printf (/z 5 output\n〃);printf("please select::scanf(〃%d〃,&k); /*输入选择项*/switch(k)2、3、标题: 时限:内存限制: 总时限:描述:输入:case 0:exit(0) ; /*退出函数*/case 1:creat();break;case 2:search();break;case 3:insert();break;case 4:delete ();break;case 5:output ();break; /*调用子函数*/default:exit (0);}}while (1);return 0;根据主函数,设计相应函数完成指定功能。
《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。
它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。
1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。
其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。
1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。
每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。
1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。
通过运算符和表达式可以进行各种数值计算和逻辑判断。
第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。
整型数据类型可以表示整数值,并具有不同的取值范围。
2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。
浮点型数据可以表示较大或较小的数值,并具有一定的精度。
2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。
字符型数据可以用于表示各种字符(包括字母、数字、符号等)。
2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。
第五章数组一、单项选择1.若要定义一个具有5个元素的整型数组,以下错误的定义语句是( C)2.下列选项中,能正确定义数组的语句是( D)3.下面是有关C语言字符数组的描述,其中错误的是( D)4.有以下程序,程序运行时若输入:how are you? I am fine<回车>则输出结果是( C)#include<stdio.h>int main(){ char a[30],b[30];scanf("%s",a);gets(b);printf("%s\n %s\n",a,b);return 0;}5.以下选项中正确的语句组是( D)6.若有定义语句:int m[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是( A )7.以下数组定义中错误的是( A)8.下列选项中,能够满足"若字符串s1等于字符串s2,则执行ST"要求的是 ( A )9.有以下程序,程序运行后的输出结果是( C)#include <stdio.h>#include <string.h>int main(){char x[]="STRING";x[0]='0';x[1]='\0';x[2]=0;printf("%d %d\n",sizeof(x),strlen(x));return 0;10.有以下程序,程序运行后的输出结果是( B )#include <stdio.h>#include <string.h>int main(){char a[20]=”ABCD\0EFG\0”,b[]=”IJK”;strcat(a,b); printf(“%s\n”,a);return 0;二、程序设计1./* 编写程序,实现矩阵(3行3列)的转置(即行列互换)。
练习5-1答案一、选择题1.合法得数组说明语句就是( B )。
A.int a[]="string";B.int a[]={0,1,2,3,4,5};C.char a="string";D.char a[5]={'0', '1', '2', '3', '4', '5'};2.以下对一维整型数组a得说明正确得就是( D )。
A.int a(10);B.int n=10, a[n];C.int n;D.#define SIZE 10scanf("%d", &n); int a[SIZE];int a[n];3.已知:int a[10];,则对a数组元素得正确引用就是( D )。
A.a[10]B.a[3、5]C.a(5)D.a[10-10]4.以下对一维数组a进行正确初始化得语句就是( C )。
A.int a[10]=(0, 0, 0, 0, 0);B.int a[10]={};C.int a[]={0};D.int a[2]={10, 9, 8};5.对以下说明语句得正确理解就是( B )。
int a[10]={6, 7, 8, 9, 10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值得个数不相同,所以此语句不正确二、填空题6.求所有不超过200得N值,N得平方就是具有对称性质得回文数。
所谓回文数就就是将一个数从左到右与从右到左读都就是一样得,例如:34543与1234321都就是回文数。
例如:满足题意要求得数有:N=1,11*11=121;N=111,111*111=12321。
#include <stdio、h>main(){int m[16], n, i, t, count=0;long a, k;printf("Result is:\n");for (n=10; n<200; n++){ k=0;t=1;a=n*n;for (i=1; a!=0; i++){ ①;a/=10;}for (; i>1; i--){ k+=m[i-1]*t;②;}if ( ③) printf("%2d:%10d %10d\n", ++count, n, n*n);}}则①为( m[i]=a%10; )、②为( t*=10; )、③为( k==n*n )。
第五章习题答案一、选择题1) 有以下程序#include <stdio.h>main(){ int n=2,k=0;while(k++&&n++>2);printf("%d %d\n",k,n);}程序运行后的输出结果是A)0 2 B)1 3 C)5 7 D)1 22)有以下程序:main(){ int k=5;while(--k) printf("%d",k-=3);printf("\n");}执行后的输出结果是()。
A)1 B)2 C)4 D)死循环3)有以下程序#include<stdio.h>main(){int y=10;while(y--);printf(”y=%d\n”,y);}程序执行后的输出结果是A)y=0 B)y= -1 C)y=1 D)while构成无限循环4) 若变量已正确定义,有以下程序段i=0;do printf("%d,",i);while(i++);printf("%d\n",i)其输出结果是A)0,0 B)0,1 C)1,1 D)程序进入无限循环5)有以下程序:main(){ int i;for(i=1;i<=40;i++){ if(i++%5==0)if(++i%8==0) printf("%d",i); }printf("\n");}执行后的输出结果是()。
A)5 B)24 C)32 D)406) 有以下程序#includes <stdio.h>main(){ int a=1,b=2;for(;a<8;a++) {b+=a; a+=2;}printf ("%d,%d\n",a,b);}程序运行后的输出结果是(A)9,18 (B)8,11 (C)7,11 (D)10,147) 有以下程序#include<stdio.h>main(){int y=9;for( ; y>0;y--)if(y%3= =0) printf("%d",--y);}程序的运行结果是A)741 B)963 C)852 D)8754218) 一下程序段中的变量已正确定义for(i=0;i<4;i++,j++)for(k=1;k<3;k++); printf("*");程序段的输出结果是A)******** B)**** C)** D)*9) 有以下程序#iinclude <stdio.h>main(){ int i,j;for(i=3; i>=1; i--){ for (j=1;j<=2;j++) printf(“%d”,i+j);printf(“\n”);}}程序的运行结果是()A) 2 3 4 B) 4 3 2 C) 2 3 D) 4 53 4 5 5 4 3 3 4 3 44 5 2 3 答案:D 10)有以下程序main(){int i,j;for(i=1;i<4;i++){for(j=i;j<4;j++) printf(“%d*%d=%d “,i,j,i*j);printf(“\n”);}}程序运行后的输出结果是A) 1*1=1 1*2=2 1*3=3 B) 1*1=1 1*2=2 1*3=32*1=2 2*2=4 2*2=4 2*3=63*1=3 3*3=9C) 1*1=1 D) 1*1=11*2=2 2*2=4 2*1=2 2*2=41*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=911) 有以下程序#include<stdio.h>main(){int i,j,m=55;for(i=1;i<=3;i++)for(j=3;j<=i;j++) m=m%j;printf("%d\n",m);}程序的运行结果是A)0 B)1 C)2 D)312) 有以下程序#include <stdio.h>main(){ int i=5;do{ if (i%3= =1)if (i%5= =2){printf(“*%d”,i); break; }i++;}while(i!=0);printf(“\n”);}程序的运行结果是A)*7 B)*3*5 C) *5 D)*2*6 答案:A13) 有以下程序#include <stdio.h>main(){ int c=0,k;for(k=1;k<3;k++)switch(k){ default:c+=k;case 2:c++;break;case 4:c+=2;break;}printf("%d\n",c);}程序运行后的输出结果是A)3 B)5 C)7 D)914) 设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是A)n=0;while((ch=getchar())!='\n')n++;B)n=0;while(getchar()!='\n')n++;C)for(n=0;getchar()!='\n';n++);D)n=0;for(ch=getchar();ch!='\n';n++);15)有以下程序#includemain(){int a=1,b=2;while(a<6){b+=a;a+=2;b%二10;}printf(”%d,%d\n”,a,b);}程序运行后的输出结果是A)5,11 B)7,1 C)7,11 D)6,116) 要求通过while循环不断读入字符,当读入字母N时结束循环。
#include <stdio.h>void main(){int p,r,n,m,temp;printf("请输入两个正整数n,m:");scanf("%d,%d,",&n,&m);if (n<m){temp=n;n=m;m=temp;}p=n*m;while(m!=0){r=n%m;n=m;m=r;}printf("它们的最大公约数为:%d\n",n);printf("它们的最小公约数为:%d\n",p/n);}#include <stdio.h>void main(){char c;int letters=0,space=0,digit=0,other=0;printf("请输入一行字符:\n");while((c=getchar())!='\n'){if (c>='a' && c<='z' || c>='A' && c<='Z')letters++;else if (c==' ')space++;else if (c>='0' && c<='9')digit++;elseother++;}printf("字母数:%d\n空格数:%d\n数字数:%d\n其它字符数:%d\n",letters,space,digit,other); }#include <stdio.h>void main(){int a,n,i=1,sn=0,tn=0;printf("a,n=:");scanf("%d,%d",&a,&n);while (i<=n){tn=tn+a; /*赋值后的tn为i个a组成数的值*/sn=sn+tn; /*赋值后的sn为多项式前i项之和*/a=a*10;++i;}printf("a+aa+aaa+...=%d\n",sn);}#include <stdio.h>void main(){double s=0,t=1;int n;for (n=1;n<=20;n++){t=t*n;s=s+t;}printf("1!+2!+...+20!=%22.15e\n",s);}#include <stdio.h>void main(){int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for (k=1;k<=n1;k++) /*计算1到100的和*/{s1=s1+k;}for (k=1;k<=n2;k++) /*计算1到50各数的平方和*/ {s2=s2+k*k;}for (k=1;k<=n3;k++) /*计算1到10的各倒数和*/{s3=s3+1/k;}printf("sum=%15.6f\n",s1+s2+s3);}#include <stdio.h>void main(){int i,j,k,n;printf("parcissus numbers are ");for (n=100;n<1000;n++){j=n/10-i*10;k=n%10;if (n==i*i*i + j*j*j + k*k*k)printf("%d ",n);}printf("\n");}#define M 1000 /*定义寻找范围*/#include <stdio.h>void main(){int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for (a=2;a<=M;a++) /* a是2-1000之间的整数,检查它是否完数*/{n=0; /* n用来累计a的因子的个数*/s=a; /* s用来存放尚未求出的因子之和,开始时等于a */for (i=1;i<a;i++) /* 检查i是否a的因子*/if (a%i==0) /* 如果i是a的因子*/{n++; /* n加1,表示新找到一个因子*/s=s-i; /* s减去已找到的因子,s的新值是尚未求出的因子之和*/ switch(n) /* 将找到的因子赋给k1...k9,或k10 */{case 1:k1=i; break; /* 找出的笫1个因子赋给k1 */case 2:k2=i; break; /* 找出的笫2个因子赋给k2 */case 3:k3=i; break; /* 找出的笫3个因子赋给k3 */case 4:k4=i; break; /* 找出的笫4个因子赋给k4 */case 5:k5=i; break; /* 找出的笫5个因子赋给k5 */case 6:k6=i; break; /* 找出的笫6个因子赋给k6 */case 7:k7=i; break; /* 找出的笫7个因子赋给k7 */case 8:k8=i; break; /* 找出的笫8个因子赋给k8 */case 9:k9=i; break; /*找出的笫9个因子赋给k9 */case 10:k10=i; break; /* 找出的笫10个因子赋给k10 */}}{printf("%d ,Its factors are ",a);if (n>1) printf("%d,%d",k1,k2); /* n>1表示a至少有2个因子*/if (n>2) printf(",%d",k3); /* n>2表示至少有3个因子,故应再输出一个因子*/if (n>3) printf(",%d",k4); /* n>3表示至少有4个因子,故应再输出一个因子*/if (n>4) printf(",%d",k5); /* 以下类似*/if (n>5) printf(",%d",k6);if (n>6) printf(",%d",k7);if (n>7) printf(",%d",k8);if (n>8) printf(",%d",k9);if (n>9) printf(",%d",k10);printf("\n");}}}#include <stdio.h>void main(){int m,s,i;for (m=2;m<1000;m++){s=0;for (i=1;i<m;i++)if ((m%i)==0) s=s+i;if(s==m){printf("%d,its factors are ",m);for (i=1;i<m;i++)if (m%i==0) printf("%d ",i);printf("\n");}}}#include <stdio.h>void main(){int i,n=20;double a=2,b=1,s=0,t;for (i=1;i<=n;i++){s=s+a/b;t=a,a=a+b,b=t;}printf("sum=%16.10f\n",s);}#include <stdio.h>void main(){double sn=100,hn=sn/2;int n;for (n=2;n<=10;n++){sn=sn+2*hn; /*第n次落地时共经过的米数*/hn=hn/2; /*第n次反跳高度*/}printf("第10次落地时共经过%f米\n",sn);printf("第10次反弹%f米\n",hn);}#include <stdio.h>void main(){int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/ x2=x1;day--;}printf("total=%d\n",x1);}#include <stdio.h>#include <math.h>void main(){float a,x0,x1;printf("enter a positive number:");scanf("%f",&a);x0=a/2;x1=(x0+a/x0)/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=1e-5);printf("The square root of %5.2f is %8.5f\n",a,x1);}#include <stdio.h>#include <math.h>void main(){double x1,x0,f,f1;x1=1.5;do{x0=x1;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x1=x0-f/f1;}while(fabs(x1-x0)>=1e-5);printf("The root of equation is %5.2f\n",x1); }#include <stdio.h>#include <math.h>void main(){float x0,x1,x2,fx0,fx1,fx2;do{printf("enter x1 & x2:");scanf("%f,%f",&x1,&x2);fx1=x1*((2*x1-4)*x1+3)-6;fx2=x2*((2*x2-4)*x2+3)-6;}while(fx1*fx2>0);do{x0=(x1+x2)/2;fx0=x0*((2*x0-4)*x0+3)-6;if ((fx0*fx1)<0){x2=x0;fx2=fx0;}else{x1=x0;fx1=fx0;}}while(fabs (fx0)>=1e-5);printf("x=%6.2f\n",x0);}#include <stdio.h>void main(){int i,j,k;for (i=0;i<=3;i++){for (j=0;j<=2-i;j++)printf(" ");for (k=0;k<=2*i;k++)printf("*");printf("\n");}for (i=0;i<=2;i++){for (j=0;j<=i;j++)printf(" ");for (k=0;k<=4-2*i;k++)printf("*");printf("\n");}}#include <stdio.h>void main(){char i,j,k; /*是a的对手;j是b的对手;k是c的对手*/ for (i='x';i<='z';i++)for (j='x';j<='z';j++)if (i!=j)for (k='x';k<='z';k++)if (i!=k && j!=k)if (i!='x' && k!='x' && k!='z')printf("A--%c\nB--%c\nC--%c\n",i,j,k);}。
第一题:1. 从键盘输入10个数,求和。
#include "stdio.h"void main( ){int x,s=0;int i;for(i=0;i<10;i++){scanf("%d",&x);s+=x;}printf("s=%d\n",s );}2. 从键盘输入10个数,求平均值。
#include "stdio.h"void main( ){int x,s=0,ave;int i;for(i=0;i<10;i++){scanf("%d",&x);s+=x;}ave=s/10;printf("s=%d,ave=%d\n",s ,ave );}3. 从键盘输入10个数,求偶数的和。
#include "stdio.h"void main( ){int x,s=0;int i;for(i=0;i<10;i++){scanf("%d",&x);if(x%2==0) s+=x;}printf("s=%d\n",s );}4. 从键盘输入10个数,求偶数的平均值。
#include "stdio.h"void main( ){int x,s=0,ave;int i;int k=0;for(i=0;i<10;i++){scanf("%d",&x);if(x%2==0) {s+=x;k++;}}ave=s/k;printf("s=%d,ave=%d\n",s,ave );}5. 从键盘输入n个数,求偶数的平均值。
#include "stdio.h"void main( ){int x,s=0,ave;int i;int k=0;int n;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&x);if(x%2==0) {s+=x;k++;}}ave=s/k;printf("s=%d,ave=%d\n",s,ave );}第二题:#include "stdio.h"void main( ){char c;int zm=0,sz=0;do{c=getchar();if(c>='A'&&c<='Z' || c>='a'&&c<='z')zm++; else if(c>='0'&&c<='9')sz++;}while(c!='*');printf("zm=%d,sz=%d\n",zm,sz );}第三题:#include "stdio.h"void main( ){int n,s=0,d,x;scanf("%d",&n);x=n;while(n!=0){d=n%10;s+=d;n=n/10;}printf("n=%d,s=%d\n",x,s );}第四题:#include "stdio.h"void main( ){char c;do{c=getchar();if(c >= 'A' && c <= 'Z') putchar(c+32); else if(c >= 'a' && c < 'z' )putchar(c-32); }while(c!='\n');}第五题:#include "stdio.h"void main( ){int k=0; float t=200;while(t<500){ t=t*(1+0.045);k++;//if(t>=500)break; }printf("after %d years: t=%f",k,t);}第六题:#include "stdio.h"void main( ){int m,d,x;for(m=1;m<=999;m++){ x=m;if(x%3==0){while(x!=0){ d=x%10;if(d==5) {printf("%4d",m);break;}x=x/10;}}}}第七题:#include "stdio.h"void main( ){int m,k=0;for(m=7; 1 ;m++){if(m%2==1&&m%3==2&&m%5==4&&m%6==5&&m %7==0){printf("m=%d\n",m);k++;}if(k==5)break;}}。
《C语言程序设计》教材习题答案第5章一、选择题1.设有程序段”int k=10;while(k=0)k=k-1;”,则下面叙述正确的是D 循环体语句一次也不执行2.设有程序段”int x=0,s=0;while(!x!=0)s+=++x;printf(“%d”,s);”则A 运行程序段后输出13.若有语句”int x=3;do{printf(“%d\n”,x-=2);}while(!(--x));”,则该程序段C 输出的是1和-24.下面循环语句中,错误的是D int a=1,b=2;do b--while(b= =0);5.已知”int i=5;”,下列do…while循环语句的循环次数为C 5do{printf(“%d\n”,i--);}while(i!=0);6.循环语句”for(int i=0,j=10;i=j=10;i++,j--)”的循环次数是D 无限7.循环语句”while(int i=0;)i--;”的循环次数是A 08.下述有关break语句的描述中,不正确的是C break语句用于if 语句的内嵌语句内,它结束该if语句9.下面关于循环语句的描述中,错误的是B 循环体内必须同时出现break语句和continue语句10.以下不是死循环的是 D for(;(c=getchar()!=’\n’);)printf(“%c”,c);11.执行语句”for(i=0;i++<3;);”后,变量i的值为C 412.语句”for(x=0,y=0;y!=1&&x<4;x++);”是C 循环4次13.与语句”while(!x);”等价的语句是A while(x= =0);14.执行下列程序段后a的值为B 2int a=1,b=10;do{b-=a;a++;}while(b--<0)二、编程题1.读入用户输入的6个整数并显示其平均值。
#includemain(){float sum=0;int tmp;int i;for(i=0;i<6;i++){printf("输入第%d个数:",i+1);scanf("%d",&tmp);sum=sum+tmp;}printf("平均值是:%f",sum/6);}2.先读入一个正整数n,然后计算并显示前n个偶数的和。
程序设计基础,(科学出版社)。
c语言第五章指针,教材答案解析.1.0#include<stdio.h>#include<string.h>void main(){ char str[101]; //存放字符串int i;//字符串数组的下标int num_large=0,num_small=0,num_digit=0,num_blank=0,num_other=0;printf("输入一个字符串(最多100个字符),按Enter键结束:");gets(str);//此处不能用scanf("%s",str);,scanf在接受字符串时,在空格处会结束字符串输入,这样空格后的字符就不会进入程序i=0;while(str[i]!='\0') //'\0'是字符串的结束标志,在字符串输入时,按Enter键回自动转换,按其它键是不会的{ //比较判断当前数组元素(即当前字符)是什么if('A'<=str[i] && str[i]<='Z'){ num_large++;}else{ if('a'<=str[i] && str[i]<='z'){ num_small++;}else{ if('0'<=str[i] && str[i]<='9'){ num_digit++;}else{ if(' '==str[i]){ num_blank++;}else{ num_other++;}}}}//当前字符比较判断完成i++;}printf("大写字母共%d 个\n",num_large);printf("小写字母共%d 个\n",num_small);printf("数字字符共%d 个\n",num_digit);printf("空格字符共%d 个\n",num_blank);printf("其他字符共%d 个\n",num_other);}/*5-1,5-1_for方式1,5-1_for方式2解决的固定数组方式,这样定义一个数组char str[101]存放字符串,这样我们只有输入100个字符的时候,才能充分有效的使用char str[101]使用的空间,但实际情况是有许多情况下我们输入的字符串不正好是100个字符,当输入的字符个数小于100个时,则字符数组有多余的空间,浪费!当输入的字符个数大于100个时,则字符数组空间又不够存放,不行!所以数组大小只有在运行时才能定义,也就是动态定义*///此处注意我的程序说明的两种方式#include<stdio.h>#include<string.h>#include<stdlib.h>void main(){ char *str; //定义char型指针int i;//字符串数组的下标int charnum;//字符的个数int num_large=0,num_small=0,num_digit=0,num_blank=0,num_other=0;printf("请输入你将输入的字符串的字符个数:");scanf("%d",&charnum);str=(char *)malloc(sizeof(char)*(charnum+1));//思索sizeof(char)*(charnum+1)为什么是这样的if(str==NULL){ printf("申请内存识别,程序无法执行,只好退出!");}else{ printf("输入一个字符串,按Enter键结束:");//注意此处没有(最多100个字符)提示了gets(str);//如果此处只用一个gets(str)会是怎样效果,我们可讨论gets(str);for(i=0;*(str+i)!='\0';i++) //'\0'是字符串的结束标志,在字符串输入时,按Enter键回自动转换,按其它键是不会的{ //比较判断当前数组元素(即当前字符)是什么if('A'<=*(str+i) && *(str+i)<='Z'){ num_large++;}else{ if('a'<=*(str+i) && *(str+i)<='z'){ num_small++;}else{ if('0'<=*(str+i) && *(str+i)<='9'){ num_digit++;}else{ if(' '==*(str+i)){ num_blank++;}else{ num_other++;}}}}//当前字符比较判断完成}printf("大写字母共%d 个\n",num_large);printf("小写字母共%d 个\n",num_small);printf("数字字符共%d 个\n",num_digit);printf("空格字符共%d 个\n",num_blank);printf("其他字符共%d 个\n",num_other);}if(str!=NULL){ free(str);}}2题#include<stdio.h>void main(){ int i,j,k,*p1,*p2,*p3;int temp;printf("输入三个数据(用逗号分隔):");scanf("%d,%d,%d",&i,&j,&k);p1=&i;p2=&j;p3=&k;temp=*p1;*p1=*p2;*p2=*p3;*p3=temp;printf("i=%d,j=%d,k=%d\n",i,j,k);printf("\n");}3题#include<stdio.h>#include<string.h>#define N 10#define M 3void main(){ char str[M][N]={"abcdef","123456789","123456"};char *ss;int i,maxrow,maxlen,curlen;maxlen=-1;maxrow=-1;for(i=0;i<M;i++){ ss=str[i];curlen=strlen(ss);if(maxlen<curlen){ maxlen=curlen;maxrow=i;}}ss=str[maxrow];printf("最大字符串是:%s,行号是:%d",ss,maxrow);printf("\n");}4题#include<stdio.h>#include<string.h>void main(){ char str[]={"asd asasdfg asd as zx67 asd mklo"};char substr1[]={"as"};//根据题目定义的长度为2,即2个字符的字符数组char substr2[]={"as"};//准备存放从str字符串数组中取2个字符int i,j,num=0,slen;int subchars; //定义子字符串的字符个数slen=strlen(str);//计算字符串的长度,即字符个数subchars=strlen(substr1);//计算子字符串的长度,本题目明知是2,但这样写是为了便于程序的通用,for(i=0;i<=slen-subchars;i++) //逐个字符开始,但直到倒数第slen-subchars开始{ for(j=0;j<subchars;j++){ substr2[j]=str[i+j];//从第i个字符开始,取subchars个字符}substr2[subchars]='\0'; //最后增加'\0'是为形成字符串数组if(strcmp(substr1,substr2)==0){ num++;}}printf("%s字符串中共有%d个%s子字符串。
C语言程序设计教程第五章课后习题参考答案一、选择题1. B2. A3. C4. B5. D二、填空题1. while2. binary3. 164. 35. continue6. global三、判断题1. 错误2. 正确3. 错误4. 错误5. 正确四、编程题1.```c#include<stdio.h>int main() {int num;printf("请输入一个整数:"); scanf("%d", &num);if (num % 2 == 0) {printf("%d是偶数\n", num); } else {printf("%d是奇数\n", num); }return 0;}```2.```c#include<stdio.h>int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("%d与%d的和为%d\n", num1, num2, num1 + num2); return 0;}```3.```c#include<stdio.h>int isPrime(int num) {int i;if (num <= 1)return 0;for (i = 2; i <= num / 2; i++) {if (num % i == 0) {return 0;}}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数\n", num); } else {printf("%d不是素数\n", num); }return 0;}```4.```c#include<stdio.h>int factorial(int num) {int i, result = 1;for (i = 1; i <= num; i++) {result *= i;}return result;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d的阶乘为%d\n", num, factorial(num)); return 0;}```五、简答题1. C语言逻辑与运算符(&&)短路特性是什么?答:C语言逻辑与运算符(&&)具有短路特性,即在进行逻辑与运算时,如果前一个表达式的值为假(0),则后面的表达式将不会被计算,整个逻辑与表达式的值直接为假(0)。
第一题:
1. 从键盘输入10个数,求和。
#include ""
void main( )
{
int x,s=0;
int i;
for(i=0;i<10;i++)
{scanf("%d",&x);
s+=x;}
^
printf("s=%d\n",s );
}
2. 从键盘输入10个数,求平均值。
#include ""
void main( )
{
int x,s=0,ave;
int i;
for(i=0;i<10;i++)
;
{scanf("%d",&x);
s+=x;}
ave=s/10;
printf("s=%d,ave=%d\n",s ,ave );
}
3. 从键盘输入10个数,求偶数的和。
#include ""
void main( )
{
int x,s=0;
!
int i;
for(i=0;i<10;i++)
{scanf("%d",&x);
if(x%2==0) s+=x;}
printf("s=%d\n",s );
}
4. 从键盘输入10个数,求偶数的平均值。
#include ""
void main( )
"
{
int x,s=0,ave;
int i;
for(i=0;i<10;i++)
{scanf("%d",&x);
if(x%2==0) {s+=x;k++;}
}
ave=s/k;
printf("s=%d,ave=%d\n",s,ave );
、
}
5. 从键盘输入n个数,求偶数的平均值。
#include ""
void main( )
{
int x,s=0,ave;
int i;
int k=0;
int n;
scanf("%d",&n);
《
for(i=0;i<n;i++)
{scanf("%d",&x);
if(x%2==0) {s+=x;k++;}
}
printf("s=%d,ave=%d\n",s,ave );
}
第二题:
#include ""
void main( )
:
{
char c;
int zm=0,sz=0;
do
{c=getchar();
if(c>='A'&&c<='Z' || c>='a'&&c<='z')zm++; else if(c>='0'&&c<='9')sz++;}while(c!='*');
printf("zm=%d,sz=%d\n",zm,sz );
<
}
第三题:
#include ""
void main( )
{
int n,s=0,d,x;
|
scanf("%d",&n);
x=n;
while(n!=0)
{d=n%10;
s+=d;
n=n/10;}
printf("n=%d,s=%d\n",x,s ); }
第四题:
#include ""
¥
void main( )
{char c;
do
{c=getchar();
if(c >= 'A' && c <= 'Z') putchar(c+32); else if(c >= 'a' && c < 'z' )putchar(c-32); }while(c!='\n');
}
第五题:
#include ""
|
void main( )
{int k=0; float t=200;
while(t<500)
{ t=t*(1+;
k++;
//if(t>=500)break; }
printf("after %d years: t=%f",k,t);
}
第六题:
#include ""。
void main( )
{int m,d,x;
for(m=1;m<=999;m++)
{ x=m;
if(x%3==0)
{
while(x!=0)
{ d=x%10;
if(d==5) {printf("%4d",m);break;}
x=x/10;
,
}
}
}
}
第七题:
#include ""
void main( )
{int m,k=0;
for(m=7; 1 ;m++)
{
if(m%2==1&&m%3==2&&m%5==4&&m%6==5&&m%7==0) {printf("m=%d\n",m);k++;}
if(k==5)break;
}
}。