C语言第五章习题带答案

合集下载

数据结构(c语言版)第五章答案

数据结构(c语言版)第五章答案

数据结构(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)树的度数是多少?略。

C语言循环结构练习题带答案

C语言循环结构练习题带答案

第5章循环结构程序设计5.1基本知识点✍while语句的使用格式和注意事项✍do-while语句的使用格式和注意事项✍for语句的使用格式和注意事项✍break和continue语句在循环语句中的应用✍循环结构的嵌套✍使用goto语句实现循环结构✍穷举法程序设计方法✍迭代程序设计方法5.2练习题51.单项选择题(1)语句while(!e);中的条件!e等价于A。

A.e==0B.e!=1C.e!=0D.~e(2)下面有关for循环的正确描述是D。

A.for循环只能用于循环次数已经确定的情况B.for循环是先执行循环体语句,后判定表达式C.在for循环中,不能用break语句跳出循环体D.for循环体语句中,可以包含多条语句,但要用花括号括起来(3)C语言中D。

A.不能使用do-while语句构成的循环B.do-while语句构成的循环必须用break语句才能退出C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环(4)C语言中while和do-while循环的主要区别是A。

A.do-while的循环体至少无条件执行一次B.while的循环控制条件比do-while的循环控制条件严格C.do-while允许从外部转到循环体内D.do-while的循环体不能是复合语句(5)以下程序段C。

intx=-1;do{x=x*x;}while(!x);A.是死循环B.循环执行二次C.循环执行一次D.有语法错误(6)下列语句段中不是死循环的是__C__。

A.i=100;while(1){i=i%100+1;if(i==20)break;}B.for(i=1;;i++)sum=sum+1;C.k=0;do{++k;}while(k<=0);D.s=3379;while(s++%2+3%2)s++;(7)与以下程序段等价的是__A__。

C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第五章 课后答案

C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第五章 课后答案
void main()
{
double e,x,cos;
printf("Enter two numbers e and x :"); /*输入两个数e,x */
scanf("%lf%lf",&e,&x);
cos=funcos(e,x); /*调用函数funcos */
printf("The result of cos(%lf) is %lf.\n",x,cos);
printf("sign(%lf)=%d\n",x,y); /*输出x的符号*/
}
int sign(double x) /*定义函数sign */
{
int y;
if(x>0)y=1;
else if(x==0)y=0;
else y=-1;
return y;
}
练习5-2
#include <stdio.h>
#include <stdio.h>
int even(int n); /*声明函数even */
void main()
{
int num,sum=0;
printf("Enter the first number :"); /*输入第一个数*/
scanf("%d",&num);
while(num>0)
{
{
int i,j;
for(i=1;i<=n;i++) /*共n行金字塔*/
{
for(j=1;j<=n-i;j++)printf(" "); /*输出每行左边的空格*/

C语言程序设计教程 第五章 课后习题参考答案

C语言程序设计教程 第五章 课后习题参考答案
printf("%d\t",f);
k++;
if(k%5==0)
printf("\n");
f1=f2;
f2=f;
}
printf("\n");
return 0;
}
P124 3统计一个整数的位数
#include<stdio.h>
int main()
{
int n,k=0;
printf("请输入n的值:");
int main()
{
int x,y,z,i=0;
for(x=1;x<=20;x++)
{
for(y=1;y<=33;y++)
{
for(z=3;z<=99;z=z+3)
{
if((5*x+3*y+z/3==100)&&(x+y+z==100))
i++;
}
}
}
printf("共有%d种买法:\n",i);
c语言程序设计教程第五章课后习题参考答案
P1242古典问题:兔子总数(斐波那契数列)
#include<stdio.h>
int main()
{
int f1=1,f2=1,f,i,k=0;
printf("%d\t %d\t",f1,f2);
k=k+2;
for(i=3;i<=20;i++)
{
f=f1+f2;
do
{
printf("请输入第%d个整数x=",i);

《C语言程序设计教程》(第三版)李凤霞 主编——第五章习题答案

《C语言程序设计教程》(第三版)李凤霞 主编——第五章习题答案
else printf(“%d\n”,(w>x?w:z>y?z:x));
}
A)1 B)2 C)3D)4
7、下面的程序段所表示的数学函数关系是( )。
y=-1;
if(x!=0){if(x>0)y=1;}
else y=0;
A) -1 (x<0)B) 1(x<0)
y= 0 (x=0)y= -1(x=0)
1 (x>0)0(x>0)
else printf(“$$$ a=%d\n”,a);
}
9.下列程序的输出结果是__________。(a=2,b=1)
#include“stdio.h”
main()
{int x=1,y=0,a=0,b=0;
switch(x)
{case 1:switch(y)
{case 0:a++;break;
case 1:b++;br
=1
6.下列程序段的输出是__________。(k=1)
int i=0,k=100,j=4;
if(i+j)k=(i=j)?(i=1):(i=i+j);
printf(“k=%d\n”,k);
7.下列程序段当a的值为014和0x14时的执行结果分别是________。
if(n>10){printf("%d",n%10);n=n/10;}printf("s=%ld\n",s);
printf("%d\n",n); }
}
3、有一个函数:
分别用:(1)简单if语句,(2)嵌套的if语句,(3)if…else语句,(4)switch语句编写程序,要求输入x的值,输出y的值。

C语言第五章习题带答案

C语言第五章习题带答案

练习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 )。

C语言第五章习题带答案

C语言第五章习题带答案

练习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 )。

C语言第五章习题及答案

C语言第五章习题及答案

第五章习题答案一、选择题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时结束循环。

c语言第五章 答案

c语言第五章 答案

5.3输入两个正整数m和n,求其最大公共约数和最小公倍数。

解:用"辗转相除取余"法求之。

参考程序如下:#include <stdio.h>int main(){ int p,r,n,m,temp;printf("请输入两个正整数n,m:");scanf("%d%d,",&n,&m);p=n*m;r=m%n;while(r!=0) //转辗求余法,直到余数为0时结束{ m=n;n=r;r=m%n;} //跳出while循环后n即为最大公约数printf("它们的最大公约数为:%d\n",n);printf("它们的最小公倍数为:%d\n",p/n);return 0;}运行结果如下:5.4 输入一行字符,分别统计出其中英文字符、空格、数字和其他字符的个数。

解:“一行字符”以回车符'\n'为结束标记,其中用if~else构成多分支选择对输入字符进行归类。

参考程序如下:#include <stdio.h>int 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++;else other++;}printf("字母数:%d\n空格数:%d\n数字数:%d\n其它字符数:%d\n",letters,space,digit,other);}运行结果如下:5.5 求sn=a+aa+aaa+...+aa...a之值,其中a是一个数字。

C语言第五章课后答案

C语言第五章课后答案

#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);}。

c语言第五章习题答案

c语言第五章习题答案

第一题: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语言第五章课后答案

C语言第五章课后答案
return 0;
}
xt5-5
#include <stdio.h>
int 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项之和*/
if (n>8) printf(",%d",k9);
if (n>9) printf(",%d",k10);
printf("\n");
}
}
return 0;
}
xt5-9-2
#include <stdio.h>
int main()
{int m,s,i;
for (m=2;m<1000;m++)
{s=0;
for (i=1;i<m;i++)
count++; // count累加1
}
pi=pi*4; //多项式的和pi乘以4,才是π的近似值
printf("pi=%10.8f\n",pi); //输出π的近似值
printf("count=%d\n",count); //输出循环次数
return 0;
}
xt5-3
#include <stdio.h>
{x0=x1;
x1=(x0+a/x0)/2;

《C语言程序设计》教材习题答案第5章

《C语言程序设计》教材习题答案第5章

《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语言选择程序设计(第五章)习题答案

c语言选择程序设计(第五章)习题答案
printf("the final bonu is:%f\n",bonus);
}*/

//*****采用switch语句编写*****//
void main()
{
long i;
float bonus;
scanf("%ld",&i);
int g=i/100000;
switch(g)
else if(i<=1000000)
bonus=(i-600000)*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1; //bonus=(i-600000)*0.015+bonus6;
else
bonus=(i-1000000)*0.01+400000*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1; //bonus=(i-1000000)*0.01+bonus10;
bonus=(i-200000)*0.05+100000*0.075+100000*0.1; //bonus=(i-200000)*0.05+bonus2;
else if(i<=600000)
bonus=(i-400000)*0.03+200000*0.05+100000*0.075+100000*0.1; //bonus=(i-400000)*0.03+bonus4;
case 9:
bonus=(i-600000)*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1;//bonus=(i-600000)*0.015+bonus6;

C语言第五章 选择结构程序设计(习题册答案)

C语言第五章 选择结构程序设计(习题册答案)

6、设 x、y 和 z 是 int 型变量,且 x=3,y=4,z=5,则下面表达式中值为 0 的是( D
A)‘x’&&‘y’
B) x<=y C) x||y+z&&y-z
D) !((x<y)&&!z||1)
7、已知 x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<‘B’&&!y)的值是( C )。
达式是( C )。
A) (x>=1)&&(x<=100)&&(x>=200)&&(x<=300) B) (x>=1)||(x<=100)||(x>=200)||(x<=300) C) (x>=1)&&(x<=100)||(x>=200)&&(x<=300)
D) (x>=1)||(x<=100)&&(x>=200)||(x<=300)
A)有语法错不能通过编译
B)可以通过编译但不能通过连接
C)输出***
D)输出$$$
三、写出下列程序的运行结果
1、若运行时输入:2<回车>,则以下程序的运行结果是 2nd class postage is 14p
#include <stdio.h>
void main(void) {
char Class; printf(“Enter 1 for 1st class post or 2 for 2nd post”); scanf(“%c”,&Class);

C语言程序设计教程 第五章 课后习题参考答案

C语言程序设计教程 第五章 课后习题参考答案

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)。

c语言 大学 第5章课后答案

c语言 大学 第5章课后答案

第5章数组大家在前面的章节中已经碰到过这样的例子:求两个整数中的较小的那个,或者求三个整数中的最小数。

那么大家想一下,如果题目中要求大家找出10个整数中的最小数呢,甚至100个整数中的最小数呢?在计算机应用领域中,也常常遇到这类处理大量数据的问题,其特点也是:数据量很大,数据之间存在一定的内在关系。

那么,对于这样的一组数据,计算机如果用前面讲过的简单变量来处理就很不方便,甚至不能处理。

考虑上面的求出10个整数中的最小数,先要设10个变量a1,a2,a3……a10,然后这10个变量之间又要相互比较,求出最小数。

显然是非常麻烦,要是成千上万个数据,是不是还要设一万个变量呢?为了解决这一问题,C语言引入了一个重要的数据结构——数组,它是具有相同数据类型的变量集合,这些变量具有相同的名字,但用不同的下标表明数据的位置,我们称这些变量为数组元素。

将数组与循环结合起来,可以有效地处理大批量的数据,大大提高了工作效率,十分方便。

本章介绍在C语言中怎样定义和使用数组,包括一维数组,二维数组和字符串。

5.1一维数组5.1.1一维数组的定义和引用例5-1要求从键盘中输入10个互不相同的整数,求其中的最小数并输出。

10 #include "stdio.h"20 main()30 {40 int a[10]; /*定义数组a*/50 int i,min; /*定义变量i和min*/60 for(i=0;i<=9;i++) /*循环10次*/70 scanf("%d",&a[i]); /*从键盘输入数给数组元素赋值*/80 for(i=0;i<=9;i++) /*循环10次*/90 printf("%d\t",a[i]); /*输出数组元素的值*/100 min=a[0]; /*给min变量赋初值*/110 for(i=1;i<=9;i++) /*循环9次*/120 if(min>a[i])130 min=a[i]; /*比较min与数组中的每个数的大小,将较小的赋给min */140 printf("The min is %d\n",min); /*输出最小值*/ 150 }该程序的流程图如图5-1所示。

c语言程序设计第四版第五章答案谭浩强

c语言程序设计第四版第五章答案谭浩强

第五章循环控制5.3输入两个正整数m和n,求其最大公约数和最小公倍数。

main(){long m,n,i=1,j,s;scanf("%ld,%ld",&m,&n);for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0) s=i;}if(m>=n) j=m;else j=n;for(;!(j%m==0&&j%n==0);j++);printf("s=%ld,j=%ld\n",s,j);}5.4输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include"stdio.h"main(){char c;int i=0,j=0,k=0,l=0;while((c=getchar())!=’\n’){if(c>=65&&c<=90||c>=97&&c<=122) i++;else if(c>=48&&c<=57) j++;else if(c==32) k++;else l++;}printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);}5.5求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。

例如:2+22+222+2222+22222(n=5),n由键盘输入。

#include"math.h"main(){int n,sum=0,i=1,s=2;scanf("%d",&n);while(i<=n){sum=sum+s;s=s+2*pow(10,i);i++;}printf("sum=%d\n",sum);}5.6求,(即求1!+2!+3!+4!+5!+…+20!)main(){int n,i=1;long sum=0,s=1;scanf("%d",&n);while(i<=n) {s=s*i;sum=sum+s;i++;}printf("sum=%ld\n",sum);}5.7求main(){double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum;for(;i<=100;i++) s1=s1+i;for(;j<=50;j++) s2=s2+j*j;for(;k<=10;k++) s3=s3+1/k;sum=s1+s2+s3;printf("sum=%f\n",sum);}5.8打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。

C语言第五章课后答案(1).docx

C语言第五章课后答案(1).docx

〃5.4有3个整数a,b,c,有键盘输入,输出其中最大的数。

#ifO;#include<stdio.h>void main(){int a,b9c9max;printf「输出三个数:”);scanf(H%d%d%d n,&a,&b,&c); printf(M输出最大的一个数:”);max=a;if(max<b)max=b;if(max<c)max=c;printf(H %d\n n,max);}#endif;#ifO;〃方法二#include<stdio.h> void main(){int max(int x,int y,int z);int a9b9c9d; scanfC'%d,%d,%(T,&a,&b,&c); d=max(a,b^c);printf(H%d\n,\d);}int max(int x9int y,int z){int n;if(x>y)if(x>z) n=x;else n=z;elseif (y>z) n=y;else n=z;return(n);#endif;#ifO;//5.5有一个函数,写一段程序,输入x,输出y。

#include<stdio.h>void main(){int x,y;printf(n输入x:n);scanf(n%d n,&x);if(x<l)y二x;if(x>=l&&x<10)y=2*x-l;if(x>=10)y=3*x-ll;prmtf(H%d n,y);#endif;#ifO;〃5・6给出一百分制成绩,要求输出成绩等级A,B,C,D,E。

90分以上A,80~89 分为B, 70~79分为C,60~69分为D, 60分以下为E./*#include<stdio.h>void main(){int grade;scanf(n %d M,&grade);if(grade>90)printf(n A\n n);if(grade>80 && grade<89)printf(M B\n u);if(grade>70 && grade<79)printf(n C\n n);if(grade>60 && grade<69)printf(n D\n M);if(grade<60)#endif;#ifO;〃5・7给一个不多于5位数的正整数,要求:1,求出它是几位数;2,分别输出 每一位数字;3,按逆序输出各位数字,例如原数位321,应输出123。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

练习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 )。

7.设数组a包括10个整型元素。

下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。

则①是( i=1 )、②是( b[i]=a[i-1]+a[i]; )、③是( i%3 )。

main(){int a[10], b[10], i;for (i=0; i<10; i++)scanf("%d", &a[i]);for ( ①; i<10; i++) ②for (i=1; i<10; i++){ printf("%3d", b[i]);if ( ③==0) printf("\n");}}8.下面程序用“顺序查找法”查找数组a中是否存在某一关键字。

则①是( break;)、②是( i==8 )。

main(){int a[8]={25, 57, 48, 37, 12, 92, 86, 33};int i, x;scanf("%d", &x);for (i=0; i<8; i++)if (x==a[i]){ printf("Found! The index is:%d\n", i+1);①;}if ( ② ) printf("Can't found!");}三、读程序,写结果9.若有以下输入(<CR>代表回车),则下面程序的运行结果是( Search Successful!The index is:5 )。

52<CR>main(){int a[8]={6, 12, 18, 42, 44, 52, 67, 94};int low=0, mid, high=7, found, x;found=0;scanf("%d", &x);while ((low<=high)&&(found==0)){ mid=(low+high)/2;if (x>a[mid]) low=mid+1;else if (x<a[mid]) high=mid-1;else { found=1; break; }}if (found==1) printf("Search Successful! The index is:%d\n", mid); else printf("Can't search!\n");}练习5-2答案一、选择题1.已知:int i, x[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};,则下面语句的输出结果是( C )。

for (i=0; i<3; i++) printf("%d", x[i][2-i]);A.1 5 9 B.1 4 7 C.3 5 7 D.3 6 92.以下对二维数组a的正确说明是( C )。

A.int a[3][]; B.float a(3,4); C.double a[1][4]; D.float a(3)(4);3.已知:int a[3][4];,则对数组元素引用正确的是( C )。

A.a[2][4] B.a[1, 3] C.a[1+1][0] D.a(2)(1)4.已知:int a[3][4];,则对数组元素的非法引用是( D )。

A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4] 5.以下能对二维数组a进行正确赋初值的语句是( B )。

A.int a[2][]={{1, 0, 1}, {5, 2, 3}}; B.int a[][3]={{1, 2, 3}, {4, 5, 6}};C.int a[2][4]={{1, 2, 3}, {4, 5}, {6}}; D.int a[][3]={{1, 0, 1}, {}, {1, 1}};6.以下不能对二维数组a进行正确赋初值的语句是( C )。

A.int a[2][3]={0}; B.int a[][3]={{1, 2}, {0}};C.int a[2][3]={{1, 2}, {3, 4}, {5, 6}}; D.int a[][3]={1, 2, 3, 4, 5, 6};7.已知:int a[3][4]={0};,则下面正确的叙述是( D )。

A.只有元素a[0][0]可得到初值0B.此说明语句是错误的C.数组a中每个元素都可得到初值,但其值不一定为0D.数组a中每个元素均可得到初值08.若有说明:int a[][3]={1, 2, 3, 4, 5, 6, 7};,则a数组第一维的大小是( B)。

A.2 B.3 C.4 D.无确定值9.若二维数组a有m列,则在a[i][j]前的元素个数为( B )。

A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1二、填空题10.下面的程序是求出数组a矩阵的两条对角线上的元素之和,则①是( j=2 )、②是( j>=0或j>-1 )。

#include <stdio.h>main(){ int a[3][3]={1, 3, 6, 7, 9, 11, 14, 15, 17}, sum1=0, sum2=0, i, j;for (i=0; i<3; i++)for (j=0; j<3; j++)if (i==j) sum1=sum1+a[i][j];for (i=0; i<3; i++)for( ①; ②; j--)if (i+j==2) sum2=sum2+a[i][j];printf("sum1=%d,sum2=%d\n", sum1, sum2);}11.从键盘上输入若干(不超过1000个)学生的成绩,计算出平均成绩,并输出低于平均分的学生的成绩,用输入负数结束输入。

则①是( a )、②是( a )、③是( sum/n )、④是( x[i]<ave )。

#include <stdio.h>main(){ float x[1000], sum=0, ave, a;int n=0, i;printf("Enter mark: ");scanf("%f", &a);while (a>0&&n<1000){ sum+=①;x[n]=②;n++;scanf("%f", &a);}ave=③;printf("Output:\n");printf("ave=%f\n", ave);for (i=0; i<n; i++)if ( ④ ) printf("%f\n", x[i]);}12.下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中,请填空,①是( j<=2或j<3 )、②是( b[j][i]=a[i][j]; )、③是( i<=2或i<3 )。

main(){ int a[2][3]={{1, 2, 3}, {4, 5, 6}};int b[3][2], i, j;printf("array a:\n");for (i=0; <i<=1; i++){ for (j=0; ①; j++){ printf("%5d", a[i][j]);②;}printf("\n");}printf("array b:\n");for (i=0; ③; i++){ for (j=0; j<=1; j++) printf("%5d", b[i][j]);printf("\n");}}13.下面程序的功能是检查二维数组是否对称(即:对所有i和j都有a[i][j]=a[j][i])。

相关文档
最新文档