C语言 第七章课后答案
《C语言程序设计教程》第三版课后习题参考答案
![《C语言程序设计教程》第三版课后习题参考答案](https://img.taocdn.com/s3/m/d26c4b9077a20029bd64783e0912a21615797f7e.png)
《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表示假、非零表示真)。
C语言程序设计第四版第七章答案谭浩强
![C语言程序设计第四版第七章答案谭浩强](https://img.taocdn.com/s3/m/6447b6e04bfe04a1b0717fd5360cba1aa8118c49.png)
C语言程序设计第四版第七章答案谭浩强第七章用函数实现模块化程序设计第七章函数7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
ma某yuehu(m,n)intm,n;{inti=1,t;for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)t=i;}return(t);}minbeihu(m,n)intm,n;{intj;if(m>=n)j=m;elej=n;for(;!(j%m==0&&j%n==0);j++);returnj;}main(){inta,b,ma某,min;printf("entertwonumberi:");canf("%d,%d",&a,&b);ma某=ma某yuehu(a,b);min=minbeihu(a,b);printf("ma某=%d,min=%d\n",ma某,min);}7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。
从主函数输入a、b、c的值。
#include"math.h"floatyihigen(m,n,k)floatm,n,k;{float某1,某2;某1=(-n+qrt(k))/(2某m);某2=(-n-qrt(k))/(2某m);printf("twohigeni某1=%.3fand某2=%.3f\n",某1,某2);}floatdenggen(m,n)floatm,n;{float某;某=-n/(2某m);printf("denggeni某=%.3f\n",某);}第七章用函数实现模块化程序设计float某ugen(m,n,k)floatm,n,k;{float某,y;某=-n/(2某m);y=qrt(-k)/(2某m);printf("two某ugeni某1=%.3f+%.3fiand某2=%.3f-%.3fi\n",某,y,某,y);}main(){floata,b,c,q;printf("inputabci");canf("%f,%f,%f",&a,&b,&c);printf("\n");q=b某b-4某a某c;if(q>0)yihigen(a,b,q);eleif(q==0)denggen(a,b);ele某ugen(a,b,q);}7.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
C语言第七章习题答案
![C语言第七章习题答案](https://img.taocdn.com/s3/m/487df64fa26925c52cc5bff1.png)
7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
hcf(u,v)int u,v;{ int a,b,t,r;if(u>v){ t=u;u=v;v=t; }a=u;b=v;while((r=b%a)!=0){ b=a;a=r; }return(a);}lcd(u,v,h)int u,v,h;{ int u,v,h,l;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("H.C.F=%dn",h);l=lcd(u,v,h);printf("L.C.d=%dn",l);return(u*v/h);}#include <stdio.h>void main(){ int u,v,h,l;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("H.C.F=%dn",h);l=lcd(u,v,h);printf("L.C.D=%dn",l);}7.2 求方程根float x1,x2,disc,p,q; greater_than_zero(a,b)float a,b;{x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); }equal_to_zero(a,b)float a,b;{ x1=x2=(-b)/(2*a);}smaller_than_zero(a,b)float a,b;{ p=-b/(2*a);q=sqrt(disc)/(2*a);}main(){float a,b,c;printf("n输入方程的系数a,b,c:n");scanf("%f,%f,%f",&a,&b,&c);printf("n 方程是:% 5.2f*x*x+%5.2f*x+%5.2f=0n",a,b,c);disc=b*b-4*a*c;printf("方程的解是:n");if(disc>0){ great_than_zero(a,b);printf("X1=%5.2ftX2=%5.2fnn",x1,x2);}else if(disc==0){zero(a,b);printf("X1=%5.2ftX2=%5.2fnn",x1,x2);}else{small_than_zero(a,b,c);printf("X1=%5.2f+%5.2fitX2=%5.2f-%2.2fin",p,q,p,q);}}7.3 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。
c语言程序设计课后习题答案第7章
![c语言程序设计课后习题答案第7章](https://img.taocdn.com/s3/m/3af0e92730126edb6f1aff00bed5b9f3f80f725c.png)
#include<stdio.h>main(){int a[10],n,sum=0,i;float ave;printf("enter n:\n");scanf("%d",&n);printf("enter %d ge zheng shu:\n",n);for(i=0;i<n;i++){scanf("%d",&a[i]);sum=sum+a[i];}ave=1.0*sum/n;printf("ave=%.2f\n",ave);}/*练习7-2*/#include<stdio.h>main(){int a[10],n,i;printf("enter n:\n");scanf("%d",&n);printf("enter %d ge zheng shu:\n",n);for(i=0;i<n;i++){printf("第%d个:\n",i+1);scanf("%d",&a[i]);printf("倒序:\n");while(a[i]!=0){printf("%d",a[i]%10);a[i]=a[i]/10;}printf("\n");}}#include<stdio.h>main(){int a[5],x,i,k=0;printf("enter 5 ge zheng shu:\n");for(i=0;i<5;i++)scanf("%d",&a[i]);printf("enter x:\n");scanf("%d",&x);for(i=0;i<5;i++)if(a[i]==x){printf("xia biao wei : %d\n",i);k=1;}if(k==0)printf("Not Found\n");}/*练习7-4*/#include<stdio.h>main(){int a[10],n,i,k=0,x,max;printf("enter n:\n");scanf("%d",&n);printf("enter %d ge zheng shu:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);max=a[0];for(i=1;i<=n-1;i++)if(max<a[i]){max=a[i];k=i;}printf("max=%d xia biao=%d",max,k);x=a[n-1];a[n-1]=a[k];a[k]=x;printf("\n");for(i=0;i<n;i++)printf(" %d ",a[i]);printf("\n");}/*练习7-11*/#include<stdio.h>main(){char str[80];int i,j,count=0;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;str[i]='\0';printf("再输入一个字符:\n");str[80]=getchar();for(j=0;j<=i-1;j++)if(str[80]==str[j])count++;printf("%c字符在字符串中出现的次数为:%d\n",str[80],count);for(j=0;j<=i-1;j++)putchar(str[j]);printf("\n");}/*习题七1*/#include<stdio.h>main(){int x,y,n,a[10],i,min,max;printf("输入n:\n");scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);min=0;for(i=1;i<n;i++)if(a[min]>a[i])min=i;max=0;for(i=1;i<n;i++)if(a[max]<a[i])max=i;x=a[min];a[min]=a[0];a[0]=x;y=a[max];a[max]=a[n-1];a[n-1]=y;for(i=0;i<n;i++)printf("%4d",a[i]);printf("\n");}/*习题七2*/#include<stdio.h>main(){int x,n,a[10],i,j,max;printf("输入n:\n");scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=1;i<n;i++){ max=i-1;for(j=i;j<n;j++)if(a[max]<a[j])max=j;x=a[max];a[max]=a[i-1];a[i-1]=x;}for(i=0;i<n;i++)printf("%4d",a[i]);printf("\n");}/*习题七4*/#include<stdio.h>main(){int m,n,a[6][6],i,j,b[6]={0};printf("输入m:\n");scanf("%d",&m);printf("输入n:\n");scanf("%d",&n);printf("输入%d和%d的矩阵:\n",m,n);for(i=0;i<m;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);b[i]=b[i]+a[i][j];}}printf("shu chu:\n");for(i=0;i<m;i++){for(j=0;j<n;j++)printf(" %d",a[i][j]);printf("\n");}printf("shu chu hang he :\n");for(i=0;i<m;i++)printf("%4d",b[i]);printf("\n");}/*习题7.6*/#include<stdio.h>main(){char str[80];int i,j;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;printf("倒序输出:\n");for(j=i-1;j>=0;j--)putchar(str[j]);printf("\n");}/*新7.6*/#include<stdio.h>main(){int a[10],i,n;printf("输入整数n:\n");scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++){scanf("%d",&a[i]);}printf("倒序输出:\n");for(i=0;i<n;i++){printf("%5d",a[n-1-i]);}printf("\n");}/*习题7.7*/#include<stdio.h>main(){char str[80];int i,j,count=0;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;printf("输出其中的大写辅音字母:\n");for(j=0;j<=i-1;j++)if(str[j]>='B'&&str[j]<='Z'&&str[j]!='E'&&str[j]!='I'&&str[j]!='O'&&str[j]!='U'){putchar(str[j]);count++;}printf("\n");printf("大写辅音字母数量为:%d\n",count);}/*习题7.8*/#include<stdio.h>main(){char str[80];int i,j,count=0;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;printf("输出相应交换后的字符串:\n");for(j=0;j<=i-1;j++)if(str[j]>='A'&&str[j]<='Z')str[j]=155-str[j];for(j=0;j<=i-1;j++)putchar(str[j]);printf("\n");}上文已完。
第七章C语言谭浩强答案
![第七章C语言谭浩强答案](https://img.taocdn.com/s3/m/85afa56825c52cc58bd6bed6.png)
7.1用筛法求100之内的素数。
解:所谓“筛法”指的是“Eratosthenes筛法”。
Eratosthenes是古希腊的著名数学家。
他采用的方法是:在一张纸上写下1~1000之间的全部整数,然后逐个判断它们是否素数,找出一个非素数就把它挖掉,最后剩下的就是素数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2728 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 …具体做法如下:先将1挖掉(因为1不是素数)。
用2去除它后面的各个数,把能被2整除的数(如4,6,8…)挖掉,即把2的倍数挖掉。
用3去除它后面各数,把3的倍数挖掉。
分别用4,5…各数作为除数去除这些数以后的各数。
这个过程一直进行到在除数后面的数已全被挖掉为止。
例如在上表中1~50范围内的素数,要一直进行到除数为47为止。
事实上,这一过程可以简化。
如果需要找1~n数)即可。
例如对1~50,只需进行到将7上面的算法可表示为:挖去1;用刚才被挖去的数的下一个数p去除p后面的各数,把p的倍数挖掉;检查p n=1000,则检查p<31否),如果是,则返回(2)继续执行,否则就结束;纸上剩下的就是素数。
解题的基本思路有了,但要变成计算机的操作,还要作进一步的分析。
如怎样判断一个数是否已被“挖掉”,怎样找出某一个数p的倍数,怎样打印出未被挖掉的数。
可以设一个数组a,a[1]到a[100]的值分别是1,2,3,…100。
然后用上述方法将非素数“挖去”。
如果一个数被认为是非素数,就将它的值变为零,最后将不为零的数组元素输出,就是所求的素数表。
程序如下:#include <math.h>main ( ){int i,j,n,a[101];for (i=1;i<=100;i++)a[i] =i;for (i=2;i<sqrt(100);i++)for (j=i+1;j<=100;j++){if (a[i]!=0 && a[j]!=0)if (a[j]%a[i]==0)a[j]=0; } /*非素数,赋值为0,“挖掉”*/printf(“\n”);for (i=2,n=0;i<=100;i++){ if (a[i]!=0){printf(“%5d”,a[i]);n++; }if (n==10) /*此处if 语句的作用是在输出10个数后换行*/{ printf (“\n”);n=0; }}}运行结果:2 3 5 7 11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 89 977.2用选择法对10个整数排序(从小到大)。
C语言程序设计教程 第七章 课后习题参考答案
![C语言程序设计教程 第七章 课后习题参考答案](https://img.taocdn.com/s3/m/9028ae5cf7ec4afe04a1dff9.png)
for(i=0;i<N;i++)
{
printf("%4d",a[i]);
}
bubble_sort(a,N);
printf("\n");
}
void bubble_sort(int a[],int n)
{
int i,j,tmp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
for(i=0;i<n;i++)
{
printf("%-4d",a[i]);
}
}
P1985对称矩阵
#include<stdio.h>
void print(int a[][3],int rows,int cols);
int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int i,j,m=0,n=0;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<M;i++)
m++;
C语言课后练习题答案第七章
![C语言课后练习题答案第七章](https://img.taocdn.com/s3/m/67a94b5868eae009581b6bd97f1922791688be94.png)
C语言课后练习题答案第七章作业六:循环结构程序设计(一)(一)选择题(50分)1.设有程序段int k=10;while(k=0)k=k-1;这下面描述中正确的是_c_。
a)while循环执行10次 b)循环是无限循环c)循环体语句一次也不执行 d)循环体语句执行一次(重要) 2.语句while(!E);中的表达式!E等价于_a_。
a)E==0 b)E!=1 c)E!=0 d)E==1while(!e)表明!e==true,因此e==false,也就是e==03.下面程序段的运行结果是_c_。
int n=0;while(n++<=2);printf("%d",n);a)2 b)3 c)4 d)有语法错n=0,n++是先用0去和2比,然后再加1,n变成1。
n=1,n++<=2,1<=2成立,n+1变成2n=2,n++<=2,2<=2成立,n+1变成3n=3,n++<=2,3<=2不成立,n+1变成4,循环结束4.下面程序的运行结果是_c_。
#includemain(){int num=0;while(num<=2){num++;printf("%d\n",num);}}a)1 b)1 c)1 d)12 2 23 345.以下程序段_c_。
x=-1;do{x=x*x;}while(!x);a)是死循环 b)循环执行二次c)循环执行一次 d)有语法错误(二)填空题(30分)1.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。
请填空。
main(){int n=0,c;c=getchar();while(c!=’\n’){if(c>=’0’&&c<=’9’) n++;c=getchar();}printf(“%d\n”,n);}2.下面程序的功能是用"辗转相除法"求两个正整数的最大公约数。
c语言第七章课后题
![c语言第七章课后题](https://img.taocdn.com/s3/m/f44c56ca3169a4517723a3f0.png)
一、第七章习题7(p184-p187),7.1-7.7全做,7.8-7.12中选做两道,要求给出程序执行结果。
7-1 、#include <stdio.h>int Square(int i){return i*i;}int main(){int i=0;i=Square(i);for(; i<3;i++){static int i=1;i+=Square(i);printf("%d,",i);}printf("%d\n",i);return 0;}结果:结果分析:开头定义square()函数功能:计算一个数的平方入口参数:整数x返回值: i*i主函数: i=0; 进入循环:静态变量i=1 ;i=i+square ( 1) =2;输出2;循环变量i=0+1=1;i=1<3成立静态变量i=i+square (2) =2+4=6 ;输出6;循环变量i=i+1=2;I=2<3 成立静态变量( i 保持原值) i=6 ;i=i+square ( 6) =6+36=42 ;输出 42;循环变量i=i+1=3 ;I=3<3 不成立退出循环输出循环变量i=37-2 、#include <stdio.h>int hour,minute,second; /* 定义全局变量 */ voidupdate(){second ++;if(second == 60){second=0;minute++;}if(minute==60){minute=0 ;hour++;}if(hour==24)hour=0;}void display(){printf(" %d : %d : %d\n ",hour,minute,second);}void delay(){int t;for (t=0;t<100000000;t++); /*用循环体为空语句的循环实现延时*/}int main(){int i;second=0;for(i=0;i<1000000;i++){update(); /*利用循环控制时钟运行时间*/display(); /*显示时,分,秒*/delay(); /*模一尺时间为1秒*/ }return 0;}结果:自动跳出时间7-3 、#include <stdio.h>/*max() 函数功能:找两个数的最大值入口参数:两个整数a,b返回值:两数的最大值*/int max(int a, int b){int max=0;max = (a>b)?a:b;return max;}void main(){int x=0; /*输入的两个数x,y*/int y=0;int m=0; /*m用于接收max()函数的返回值*/printf("input two integer numbers:");scanf("%d,%d",&x,&y);m=max(x,y);printf("the max number is %d\n",m);}结果:7-4#include <stdio.h>/*LCM() 函数功能:计算两个整数的最小公倍数入口参数:两整数a, b返回值:最小公倍数*/int LCM(int a,int b){int i=0; /*循环变量*/int min=0; /*循环寻找范围的最小值*/int max=0; /*循环寻找范围的最大值*/min = (a>b)?a:b; /*最小值为a,b中的最大值*/ max = a*b;/*最大值为a*b*/for (i=min; i<=max; i++){if(i%a==0 && i%b==0)return i;}}void main(){int x; /*键盘输入两整数x,y*/int y;int m; /*m用于接收LCM()函数的返回值*/do{/*输入整数的合法数据*/ printf(" 输入两个正整数: ");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = LCM(x,y);printf(" 最小公倍数为: %d\n",m);}结果:7-5、#include <stdio.h>long fact(int n);void main(){int i=0; /* 循环变量*/int n=0; /* 输入的值*/int m=0; /* 接收 fact()函数的返回值*/do{printf("input n:");scanf("%d",&n);}while(n<0);for(i=1; i<=n; i++){m=fact(i);printf("%d!=%ld\n",i,m);}}/*fact 函数功能:计算 n!入口参数:n返回值:n!*/long fact(int n){static long p=1;p=p*n;return p;}结果:7-6、#include <stdio.h>long fact(int n);void main(){int i=0; /* 循环变量*/int n=0; /* 输入的值*/int m=0; /* 接收 fact()函数的返回值*/long s=0; /*所求最终结果*/do{printf("input n:");scanf("%d",&n);}while(n<0);for(i=1; i<=n; i++){m=fact(i);s=s+m;}printf("1!+2!+...+n! = %ld\n",s);}/*fact 函数功能:计算 n!入口参数:n返回值:n!*/long fact(int n){static long p=1;p=p*n;return p;}结果:7-7、(1)穷举法:#include <stdio.h>int Gcd(int a,int b);void main(){int x=0; /* 键盘键入两个数 */int y=0;int m=0; /* 接收 Gcd 的返回值*/do{printf(" 输入两个正数 :");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = Gcd(x,y);printf(" 最大公约数:%d\n",m); }/*Gcd() 函数功能:计算两数的最大公约数入口参数:两个正数 a, b返回值:最大公约数*/int Gcd(int a,int b){int i=0;int t=0;t=(a<b)?a:b; /*t 为 a,b 中的较小者 */ for(i=t; i>=1; i--){if(a%i==0 && b%i==0)return i;}}结果:( 2)欧几里得算法#include <stdio.h>int Gcd(int a,int b);void main(){int x=0; /* 键盘键入两个数 */int y=0;int m=0; /* 接收 Gcd 的返回值*/do{printf(" 输入两个正数 :");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = Gcd(x,y);printf(" 最大公约数:%d\n",m); }/*Gcd() 函数功能:计算两数的最大公约数入口参数:两个正数 a, b返回值:最大公约数*/int Gcd(int a,int b){int r=0;r=a%b;if(r!=0){do{a=b;b=r;r=a%b;}while(r!=0);}return b;}结果:(3)递归方法:#include <stdio.h>int Gcd(int a,int b);void main(){int x=0; /*键盘键入两个数*/int y=0;int m=0; /* 接收 Gcd 的返回值 */do{printf(" 输入两个正数:");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = Gcd(x,y);printf(" 最大公约数: %d\n",m); }/*Gcd() 函数功能:计算两数的最大公约数入口参数:两个正数a, b返回值:最大公约数*/int Gcd(int a,int b){if (a==b)/* 递归出口 */return a;else{if(a>b)return Gcd(a-b,b);elsereturn Gcd(b,b-a);}}结果:7-9、#include <stdio.h>/*old() 函数功能:计算第i 个人的年龄入口参数:人数i返回值:年龄*/int old(int i){if(i==1)return 10;elsereturn old(i-1)+2;}void main(){int x=5;/* 人数为 5*/int y=0; /* 接收 old()函数的返回值*/y=old(x);printf(" 第五个人的年龄为:%d\n",y);}结果:7-10、#include <stdio.h>void main(){int flag=0; /* 设置标志变量*/int a=0;/* 百位 */int b=0;/* 十位 */int c=0;/* 个位*/int m=0;/* 代表 acb*/int n=0;/* 代表 bac*/int p=0;/* 代表 bca*/int q=0;/* 代表 cab*/int r=0;/* 代表 cba*/int i=0;/* 从 100~999 中找 abc*/ int sum=0; /* 观众计算得结果*/printf(" 说出你的计算结果: "); scanf("%d",&sum);for(i=100;i<=999;i++){a=i/100;b=i/10%10;c=i%10;m=a*100+c*10+b;n=b*100+a*10+c;p=b*100+c*10+a;q=c*100+a*10+b;r=c*100+b*10+a;if ((m+n+p+q+r)==sum){flag=1;/* 一旦找到就退出循环*/break;}}if(flag==0)/* 未找到说明计算错误 */{printf(" 你算错了!");}else{printf(" 你想的数是 %d %d %d \n",a,b,c);}}结果:二、收集资料并整理,叙述结构化程序设计的基本思想;根据自己的编程,说说你对结构化程序设计的理解。
【免费下载】c语言程序设计课后习题答案 第7章
![【免费下载】c语言程序设计课后习题答案 第7章](https://img.taocdn.com/s3/m/18cf182be87101f69e3195b2.png)
/*习题七 2*/ #include<stdio.h> main() {
int x,n,a[10],i,j,max; printf("输入 n:\n"); scanf("%d",&n); printf("输入%d 个整数:\n",n); for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf(" %d ",a[i]); printf("\n"); }
/*练习 7-11*/ #include<stdio.h> main() {
char str[80]; int i,j,count=0; printf("输入一个以回车符结束的字符串:\n"); i=0; while((str[i]=getchar())!='\n')
putchar(str[j]); printf("\n");
}
/*习题七 1*/ #include<stdio.h> main() {
int x,y,n,a[10],i,min,max; printf("输入 n:\n"); scanf("%d",&n); printf("输入%d 个整数:\n",n); for(i=0;i<n;i++)
i++; str[i]='\0'; printf("再输入一个(); for(j=0;j<=i-1;j++)
if(str[80]==str[j]) count++;
C语言程序设计(第3版)第7章补充习题及答案
![C语言程序设计(第3版)第7章补充习题及答案](https://img.taocdn.com/s3/m/3445d6f3360cba1aa811da5e.png)
第7章补充习题及答案习题7.1 选择题(1) 表达式iA<iB||~iC&iD的运算顺序是A. ~, &, <, ||B. ~, ||, &, <C. ~, &, ||, <D. ~, <, &, ||(2) 以下叙述不正确的是A. 表达式iA&=iB等价于iA=iA&iBB. 表达式iA|=iB等价于iA=iA|iBC. 表达式iA!=iB 等价于iA=iA!iBD. 表达式iA^=iB等价于iA=iA^iB(3) 设有以下语句:char iData1=3, iData2=4, iData3 ;iData3 = iData1^iData2<<2;则z的二进制值是。
A. 00010100B. 00011011C. 00011100D. 000110007.2 填空题(1) 在C语言中,&运算符作为单目运算符时表示的是运算;作为双目运算符时表示的是。
(2) 测试char型变量第6位是否为1的表达式是(设最右位是第1位)。
(3) 设二进制数iData1的值是11001101,若想通过iData1&iData2运算使iData1中的低4位不变,高4位清零,则iData2的二进制数是。
(4) 设iData1=10100011,若要通过iData1^iData2使iData1的高4位取反,低4位不变,则iData2的二进制数是。
答案7.1 选择题(1) 表达式iA<iB||~iC&iD的运算顺序是 AA. ~, &, <, ||B. ~, ||, &, <C. ~, &, ||, <D. ~, <, &, ||(2) 以下叙述不正确的是 CA. 表达式iA&=iB等价于iA=iA&iBB. 表达式iA|=iB等价于iA=iA|iBC. 表达式iA!=iB 等价于iA=iA!iBD. 表达式iA^=iB等价于iA=iA^iB(3) 设有以下语句:char iData1=3, iData2=4, iData3 ;iData3 = iData1^iData2<<2;则z的二进制值是 C 。
C语言理论教材各章后习题参考答案第七章习题
![C语言理论教材各章后习题参考答案第七章习题](https://img.taocdn.com/s3/m/5b19274de45c3b3567ec8b7b.png)
第七章习题参考答案一、选择题7.1 答案:C7.2 答案:C7.3 答案:D7.4 答案:C7.5 答案:D二、读程序回答问题7.6 答案:B7.7 答案:C7.8 答案:D7.9 答案:A7.10 答案:C7.11 答案:D7.12 答案:C7.13 答案:C三、编写程序7.14 参考源程序如下:/* 习题7.14参考源程序*/#include<stdio.h>int N1=50,N2=10;long add(int m){static long s=0;s=s+m;return(s);}long mul(int m){static long p=1;p=p*m;return(p);}main(){int i;long sum,product;for(i=1;i<=N1;i++)sum=add(i);printf("1+2...+%d=%ld\n", N1, sum);for(i=1;i<=N2;i++)product=mul(i);printf("1*2...*%d=%ld\n", N2, product);}7.15 求素数的算法比较简单,本题主要考察通过外部变量来传递数据。
参考源程序中使用两个外部变量分别来存放素数的个数和素数的和。
参考源程序如下:参考源程序如下:/* 习题7.15参考源程序*/#include<math.h>#include<stdio.h>int n=0;long sum;void count(int n1,int n2){int i,j;int k;int flag=1;for(i=n1;i<=n2;i++){k=sqrt(n2);for(j=2;j<=k;j++)if(i%j==0) {flag=0; break;}if(flag){n++; sum+=i;}flag=1;}}main(){int n1=10,n2=100;count(n1,n2);printf("%d prime numbers, total is %d\n",n,sum);}。
明解C语言入门篇第七章答案
![明解C语言入门篇第七章答案](https://img.taocdn.com/s3/m/10a84a225b8102d276a20029bd64783e09127d8e.png)
明解C语⾔⼊门篇第七章答案练习7-1#include <stdio.h>int main() {int n;printf("%d\t%d\t%d\n", sizeof1,sizeof(unsigned)-1,sizeof n+2 ); //此⾏显⽰结果为 4 3 6 因为1的字节就是为4,⽽-1的字节也是4再减去-1所以显⽰为3,最后是n+2为6printf("%d\t%d\t%d\n", sizeof +1, sizeof(double) - 1, sizeof(n + 2));//此⾏显⽰结果是 4 7 4 因为1的字节是4,double的字节长是8 -1是7,把(n+2)括起来之后使其为⼀个值,所以是4;printf("%d\t%d\t%d\n", sizeof - 1, sizeof((double)-1), sizeof (n + 2.0) );//此⾏结果是 4 8 8 因为1的字节是4,把double-1都括起来之后,就是double类型字节为8,同理最后也是8}练习7-2#include <stdio.h>#include<math.h>int main() {unsigned int number;int x;int i;int number1;printf("请输⼊初始值:" );scanf("%d", &number);number1 = number;printf("左移多少位:");scanf("%d", &x);number <<= x;printf("左移后的值:%d",number);putchar('\n');for (i = 0; i < x; i++) {number1 *= 2;}printf("乘以2的指数幂的值:%d", number1);}#include <stdio.h>#include<math.h>int main() {unsigned int number;int x;int i;int number1;printf("请输⼊初始值:" );scanf("%d", &number);number1 = number;printf("右移多少位:");scanf("%d", &x);number >>= x;printf("右移后的值:%d",number);putchar('\n');for (i = 0; i < x; i++) {number1 /= 2;}printf("除以2的指数幂的值:%d", number1);}练习7-3#include <stdio.h>#include<math.h>unsigned rrotate(unsigned x,int n){x >>=n;}int main() {unsigned int number;int x;printf("请输⼊初始值:");scanf("%d", &number);printf("右移多少位:");scanf("%d", &x);printf("右移后的值:%d", rrotate(number, x)); }#include <stdio.h>#include<math.h>unsigned lrotate(unsigned x,int n){x <<=n;return x;}int main() {unsigned int number;int x;printf("请输⼊初始值:");scanf("%d", &number);printf("左移多少位:");scanf("%d", &x);printf("左移后的值:%d", lrotate(number, x)); }练习7-4unsigned set(unsigned x, int pos){unsigned mask = (1u << pos);x = (mask | x);return x;}//将第pos位设置为1unsigned reset(unsigned x, int pos) {unsigned mask = 1u;if (x & (1u<<pos))return (x ^ (1u << pos));elsereturn x;}//将第pos为设置为0unsigned inverse(unsigned x, int pos) {unsigned mask = 1u << pos;x = (x ^ mask);return x;}//将第pos位取反练习7-5unsigned set_n(unsigned x, int pos, int n) {for (i = 0; i < n - pos; i++) {unsigned mask = (1u << (pos + i));x = (mask | x);}return x;}//⼀个位段都设置为1unsigned reset_n(unsigned x, int pos, int n) {unsigned mask = 1u;int i;for (i = 0; i < n-pos; i++) {if (x & (1u<<pos+i))x= (x ^ (1u << pos+i));}return x;}//⼀个位段都设置为0unsigned inverse_n(unsigned x, int pos, int n) {int i;unsigned mask = 1u;for (i = 0; i < n - pos; i++) {x = (x ^ (mask << pos + i));}return x;}//⼀个位段都取反练习7-6#include <stdio.h>// 显⽰unsigned类型的值最⼤值,同时验证最⼤值+1是0. int main() {unsigned a = 0;while (++a > 0);printf("%u", a - 1);putchar('\n');printf("%u", a);}练习7-7#include <stdio.h>int main() {float a;double b;long double c;scanf("%f",&a);printf("a=%f", a);putchar('\n');scanf("%lf", &b);printf("b=%f", b);putchar('\n');scanf("%lf", &c);printf("c=%f", c);}练习7-8#include <stdio.h>int main() {float a;double b;long double c;printf("%d,%d,%d",sizeof(a), sizeof(b), sizeof(c)); }练习7-9#include <stdio.h>#include<math.h>int main() {double m;double x;printf("正⽅形的⾯积是:");scanf("%lf", &m);printf("边长是:%.2f", sqrt(m));}练习7-10#include <stdio.h>int main(void){float x;int i;float m = 0.0;for (i = 0; i <= 100; i++) {x = i / 100.0;printf("x=%f x=%f\n",m,x);m += 0.01;}return0;}练习7-11#include <stdio.h>int main(void){float x;int i;float m = 0.0;float sum1 = 0;float sum2 = 0;for (i = 0; i <= 100; i++) {x = i / 100.0;printf("x=%f x=%f\n",m,x);m += 0.01;sum1 += m;sum2 += x;}printf("%f,%f", sum1, sum2);return0;}。
C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第七章 课后答案
![C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第七章 课后答案](https://img.taocdn.com/s3/m/0860260fa5e9856a56126082.png)
#include <stdio.h>
void main()
{
int i,n;
double a[10],sum=0;
printf("Enter n :"); /*输入一个正整数n */
scanf("%d",&n);
printf("Enter %d numbers :\n",n); /*输入n个数,存储在数组a中*/
/*按逆序输出n个数*/
for(i=0;i<n;i++)
printf("%8d",a[n-1-i]);
printf("\n");
}
练习7-4
#include <stdio.h>
void main()
{
int i,index,max,n,a[10],temp;
printf("Enter n :"); /*输入一个正整数n */
else printf("NO\n");
}
习题7-6
#include <stdio.h>
void main()
{
int i,j;
char str[80];
/*输入一个以回车结束的字符串*/
printf("Enter a string: ");
i=0;
while((str[i]=getchar())!='\n')
scanf("%d",&a[i][j]);
/*判断a[n][n]是否上三角矩阵,当flag=1,表示上三角矩阵,当flag=0,表示非上三角矩阵*/
数据结构与算法(C语言篇)第7章 习题答案[2页]
![数据结构与算法(C语言篇)第7章 习题答案[2页]](https://img.taocdn.com/s3/m/e017f2a36429647d27284b73f242336c1eb93014.png)
习题答案1.思考题(1)首先采用循环的方式对单向循环链表进行遍历,然后寻找需要删除元素的上一个元素与下一个元素,最后将这两个元素进行连接,即可实现指定元素的删除。
每一次删除元素,单向循环链表都会重新连接为一个新的环。
然后继续指定元素进行删除,重复步骤,直到环中的元素全部删除完为止。
(2)回溯法,即确定了解空间的组织结构后,就可以从开始结点开始,以深度优先的方式对整个解空间进行搜索。
这个开始的结点就成为活结点,同时也是当前的扩展结点。
在此结点向下进行纵深搜索移动的一个新的结点,那么这个新借贷就会成为新的活结点和拓展结点,但是如果当前的扩展结点不能再向纵深移动,那么此活结点就会变为死结点,此时就要进行回溯移动,移动到最近的活结点,并将此活结点变为当前的扩展结点。
这就是回溯的工作方式,也是其工作的基本思想。
(3)动态规划法与分治法类似,其基本的思想是将规模较大的问题分解为较小的子问题,先求解子问题,然后通过这些子问题的解得到原问题的解,但是与分治法不同的是,经过分解后得到的子问题之间并不是相互独立的。
为了达到这一目的,可以用一个表来记录所有已经解决的子问题,这样不管计算过的子问题的答案在后面的求解过程中是否被用到都会被记录,这就是动态规划法的思想。
4.编程题(1)1int g[N][N] //表示无向图对应的矩阵2#define M (1 << (N-1))34int dp[N][M];56void TSP(){7 //初始化dp[i][0]8 int i = 0, j, k;9 for(i = 0; i < N; i++){10 dp[i][0] = g[i][0];11 }12 //求解dp[i][j],先更新列再更新行13 for(j = 1; j < M; j++){14 for(i = 0; i < N; i++){15 dp[i][j] = INF;16 //如果集合j(或状态j)中包含顶点i,则不符合条件退出17 //判断方法为:判断j对应的二进制数的第i位是否为118 if(((j >> (i - 1)) & 1) == 1){19 continue;20 }21 for(k = 1; k < N; k++){22 //跳过不合理的路径选择23 if(((j >> (k - 1)) & 1) == 0){24 continue;25 }26 //更新dp[i][j]的值27 //计算从i开始经过状态j回到起始点的最短距离28 if(dp[i][j] > g[i][k] + dp[k][j ^ (1 << (k - 1))]){29 dp[i][j] = g[i][k] + dp[k][j ^ (1 << (k - 1))];30 }31 }32 }33 }34}35。
C语言程序设计(第三版)谭浩强习题与答案 第七章
![C语言程序设计(第三版)谭浩强习题与答案 第七章](https://img.taocdn.com/s3/m/ac800a2ded630b1c59eeb56e.png)
7.6打印出以下杨辉三角形(要求打印出10行)。
1
11
121
1331
14641
15101051
∶
∶
main()
{ static int m,n,k,b[15][15];
b[0][1]=1;
for(m=1;m<15;m++)
{for(n=1;n<=m;n++)
{ b[m][n]=b[m-1][n-1]+b[m-1][n];
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
或
main()
{static int a[10],i,j,k,t;
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=1;i<=10-j;j++)
if (a[i]>a[i+1])
{ i=i-1;
j=j+1;
if((i<1)&&(j>n))
{ i=i+2;
j=j-1;
}
else
{ Байду номын сангаасf(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
(完整版)答案第七章函数..
![(完整版)答案第七章函数..](https://img.taocdn.com/s3/m/4322ee1b30126edb6f1aff00bed5b9f3f90f7202.png)
(完整版)答案第七章函数..第七章函数一、选择题1.以下函数声明正确的是: C 。
(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。
(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。
(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。
4.以下正确的函数形式是: D 。
(1级)A)double fun(int x,int y) B)fun (int x,y){z=x+y;return z;} {int z;return z;}C)fun(x,y) D)double fun(int x,int y){int x,y ; double z; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。
(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。
(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。
(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。
(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
#endif
#if 0
//7.6输出以下的杨辉三角形
#include<stdio.h>
#define N 11
void main()
{
int i,j,a[N][N];
for(i=1;i<N;i++)
{
a[i][1]=1;
a[i][i]=1;
}
for(i=3;i<N;i++)
{for(j=2;j<=i-1;j++)
{
if(a[i][j]>='A' && a[i][j]<='Z')
s1++;
else if(a[i][j]>='a' && a[i][j]<='z')
s2++;
else if(a[i][j]>='0' && a[i][j]<='9')
s3++;
else if(a[i][j]==" ")
s4++;
else
printf(" ");
else
printf("*");
}
printf("\n");
}
}
#endif
#if 0
//7.12有一行电文,。。。要求编程序将密码译回原文,并输出密码和原文。
#include<stdio.h>
void main()
{
int j,n;
char ch[80];
printf("输入原密码:");
}
}
}
#endif
#if 0
//7.2用选择法对10个整数排序
#include<stdio.h>
void main()
{
int i,j,t,min;
//int a[10];
// for(i=0;i<10;i++)
// {
//printf("a[%d]=",i);
//scanf("%d",&a[i]);
}
printf("\n");
printf("插入一个数后的排序:\n");
for(i=0,j=0;i<10,j<11;i++,j++)
{
if( n>a[i] )
{
b[j]=a[i];
printf("%5d",b[j]);
}
if( n<a[i] && flag == 0 )
{
b[j]=n;
printf("%5d",b[j]);
#include<stdio.h>
void main()
{
int i,n,j,flag = 0;
int ,38};
int b[11];
printf("输入一个数:");
scanf("%d",&n);
for(i=0;i<10;i++)
{
printf("%5d",a[i]);
printf("输入原密码:");
gets(a[N]);
printf("输出原密码:");
puts(a[N]);
printf("输出原文:");
for(i=0,j=0;i<N,j<N;i++,j++)
{
while(a[i]!='\0')
if((a[i]>='A') && (a[i]<='Z'))
{
b[j]=115-a[i];
#include<stdio.h>
void main()
{
int i,j,max,maxj,k,flag;
int a[3][3]={ {3,7,5}, {4,6,3}, {2,5,1} };
printf("输出二维数组\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%5d",a[i][j]);
#define N 7
int m[N][N];
int i,j;
int index=1;
i=0;
j=N/2;
m[i][j]=index;
for(index=1;index<=N*N;++index)
{
a=i-1;
b=j+1;
if(a<0)
{
a+=N;
}
if(b>N-1)
{
b=-N;
}
if(m[a][b]!=0)
for(i=0,k=0;i<20,k<20;i++,k++)
{
if(i<=10)
c[k]=a[i];
if((i>10) && (i<20))
c[k]=b[k-11];
}
printf("两个字符串连接起来:");
puts(c);
}
#endif
#if 0
//7.14编一程序,将两个字符串s1和s2进行比较。
scanf("%d",&a[5]);
printf("输出原始数组:");
for(i=0;i<6;i++)
printf("%d\t",a[i]);
printf("\n");
printf("插入一个数后的排序:");
for(i=1;i<6;i++)
{
for(j=0;j<6-1;j++)
{
if(a[j]>a[j+1])
continue;
}
if(flag)
{
printf("鞍点:a[%d][%d]=%d\n",i,maxj,max);
break;
}
}
if(!flag)
printf("鞍点不存在\n");
}
#endif
#if 0
//7.10有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格、以及其他字符的个数。
//}
///printf("\n");
int a[10] = {5,3,7,6,4,9,10,8,2,1};
for(i=0;i<=9;i++)
{
min=i;
{
for(j=i+1;j<=10;j++)
if(a[min]>a[j])
{
min=j;
t=a[i];
a[i]=a[min];
a[min]=t;
}
{
a=i+1;
b=j;
}
i=a;
j=b;
m[i][j]=index;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%-3d",m[i][j]);
printf(" ");
}
#endif
#if 0
// 7.8找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。
#include<stdio.h>
void main()
{
int i,j;
char a[3][80];
int s1,s2,s3,s4,other;
s1=s2=s3=s4=other=0;
for(i=0;i<3;i++)
{
printf("输入第%d行字符:\n",i+1);
gets(a[i]);
for(j=0;j<80 && a[i][j]!='\0';j++)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<6;i++)
printf("%d\t",a[i]);
}
#endif
#if 0
//7.5将一个数组中的值按逆序重新存放。
#include<stdio.h>
void main()
{
int i,j;
int b[5];
inta[5]={11,22,33,44,55};
#include<stdio.h>
#define N 80
void main()
int a[3][3]={{1,2,5},{45,56,3},{12,45,67} };