c语言第七章课后题
C语言第七章习题带答案
选择题1.已知:int *p, a;,则语句“p=&a;”中的运算符“&”的含义是( D )。
A.位与运算B.逻辑与运算C.取指针内容D.取变量地址2.已知:int a, x;,则正确的赋值语句是( C )。
A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1, x++, x+2); D.a="good"; 3.已知:int a, *p=&a;,则下列函数调用中错误的是( D )。
A.scanf("%d", &a); B.scanf("%d", p); C.printf("%d", a); D.scanf("%d", *p); 4.已知:char *p, *q;,选择正确的语句( C )。
A.p*=3; B.p/=q; C.p+=3; D.p+=q;5.已知:int x;,则下面的说明指针变量pb的语句( C )是正确的。
A.int pb=&x; B.int *pb=x; C.int *pb=&x; D.*pb=*x;一、选择题1.设有说明int (*ptr)[M];,其中的标识符ptr是( C )。
A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M列的二维数组的一行的指针D.具有M个指针元素的一维数组的指针2.已知:double *p[6];,它的含义是( C )。
A.p是指向double型变量的指针B.p是double型数组C.p是指针数组D.p是数组指针3.已知:char s[10], *p=s,则在下列语句中,错误的语句是( B )。
A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0];4.已知:char s[100]; int i;,则在下列引用数组元素的语句中,错误的表示形式是( D )。
C语言程序设计教程第七章课后习题参考答案
C语言程序设计教程第七章课后习题参考答案P198 3 求主、副对角线元素之和#include#define M 4#define N 4int main(){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++)< p="">{for(j=0;j<n;j++)< p="">{printf("%4d",a[i][j]);}printf("\n");}for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{if(i==j)m+=a[i][j];}}printf("主对角线元素之和为:%d\n",m);for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{if(i+j==3)n+=a[i][j];}}printf("副对角线元素之和为:%d\n",n); return 0;}P198 4数组逆序存放#includevoid input(int a[],int n);void reverse(int a[],int n);int main(){int a[5];int size=sizeof(a)/sizeof(int);input(a,size);reverse(a,size);printf("\n");return 0;}void input(int a[],int n){int i;printf("请输入%d个整数:\n",n);for(i=0;i<n;i++)< p="">{scanf("%d",&a[i]);}}void reverse(int a[],int n) {int i,t;for(i=0;i<="" p="">{t=a[i];a[i]=a[5-i-1];a[5-i-1]=t;}for(i=0;i<n;i++)< p=""> {printf("%-3d",a[i]);}}198 4数组逆序存放(2)#includevoid reverse(int a[],int n); void print(int a[],int n);int main(){int a[]={1,2,3,4,5,11,16,13}; int size=sizeof(a)/sizeof(int); print(a,size);reverse(a,size);printf("\n");return 0;}void print(int a[],int n){int i;printf("原:\n");for(i=0;i<n;i++)< p="">{printf("%-4d",a[i]);}printf("\n");}void reverse(int a[],int n){int t,i;printf("逆序:\n");for(i=0;i<="" p="">{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}for(i=0;i<n;i++)< p="">{printf("%-4d",a[i]);}}P198 5对称矩阵#includevoid print(int a[][3],int rows,int cols); int fun(int a[][3],int rows,int clos); void main(){int a[3][3],i,j;printf("input:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)scanf("%d",&a[i][j]);}print(a,3,3);if(fun(a,3,3)==0)printf("此矩阵是对称矩阵\n");elseprintf("此矩阵不是对称矩阵\n"); } void print(int a[][3],int rows,int cols) {int i,j;for(i=0;i<rows;i++)< p="">{for(j=0;j<cols;j++)< p="">printf("%-4d",a[i][j]);printf("\n");}}int fun(int a[][3],int rows,int clos) {int i,j,x=0;for(i=0;i<rows;i++)< p="">{for(j=0;j<clos;j++)< p="">{if(a[i][j]!=a[j][i]) x++;}}if(x>0) return 1;else return 0;}P198 5对称矩阵(2)#include#define M 3#define N 3void print(int a[][N],int m,int n); int yan(int a[][N],int m,int n); int main(){int a[][N]={1,2,3,4,5,6,7,8,9}; print(a,M,N);if(yan(a,M,N))printf("YES\n");elseprintf("NO\n");return 0;}void print(int a[][N],int m,int n) {int i,j;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{printf("%-4d",a[i][j]);}printf("\n");}}int yan(int a[][N],int m,int n){int i,j,x=0;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{if(a[i][j]!=a[j][i]) x++;}}if(x>0) //不是对称矩阵return 0;return 1;}P198 6矩阵求和#include#define M 3#define N 3void input(int a[][N],int m,int n);void sum(int a[][N],int b[][N],int m, int n); void print(int a[][N],int m,int n);int main(){int a[M][N];int b[M][N];printf("请输入%d*%d阶矩阵A:\n",M,N);input(a,M,N);print(a,M,N);printf("请输入%d*%d阶矩阵B:\n",M,N);input(b,M,N);print(b,M,N);printf("A+B=\n");sum(a,b,M,N);return 0;}void input(int a[][N],int m,int n){int i,j;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{scanf("%d",&a[i][j]);}}}void print(int a[][N],int m,int n){int i,j;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{printf("%4d",a[i][j]);}printf("\n");}}void sum(int a[][N],int b[][N],int m,int n) {int i,j;int c[M][N];for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{c[i][j]=a[i][j]+b[i][j];}}print(c,M,N);}P198 7模拟骰子投掷#include#include#define N 10000int main(){int a[N],i;double x=0,y=0,z=0,l=0,m=0,n=0; for(i=0;i<n;i++)< p="">{a[i]=rand()%6+1;if(a[i]==1)x++;if(a[i]==2)y++;if(a[i]==3)z++;if(a[i]==4)l++;if(a[i]==5)m++;if(a[i]==6)n++;}printf("出现1的概率为:%lf\n",x/N); printf("出现2的概率为:%lf\n",y/N); printf("出现3的概率为:%lf\n",z/N); printf("出现4的概率为:%lf\n",l/N); printf("出现5的概率为:%lf\n",m/N); printf("出现6的概率为:%lf\n",n/N); return 0;}P67 1最大奇、偶数#include#define M 10int main(){int i,a[M];int max1=-1,max2=-1;for(i=0;i<m;i++)< p="">{printf("请输入第%d个正整数:",i+1); scanf("%d",&a[i]);}for(i=0;i<m;i++)< p="">{if(a[i]%2!=0){if(a[i]>max1)max1=a[i];}else{if(a[i]>max2)max2=a[i];}}if(max1==-1)printf("没有奇数\n");elseprintf("最大奇数是%d\n",max1); if(max2==-1)printf("没有偶数\n");elseprintf("最大偶数是%d\n",max2); return 0;}P69 3#includeint main(){int a[20];int p=0,n=0,i,j=0;double avg,sum=0;printf("请输入非0整数:"); while(1){scanf("%d",&a[j]);if(a[j]==0)break;j++;}for(i=0;i<j;i++)< p="">{sum=sum+a[i];}avg=sum/j;printf("平均数:%lf",avg);for(i=0;i<j;i++)< p="">{if(a[i]>0)p++;if(a[i]<0)n++;}printf("正数个数:%d 负数个数:%d\n",p,n); return 0;}P75 2冒泡排序#include#define N 10void bubble_sort(int a[],int n);void main(){int i, a[N]={1,3,6,8,9,2,11,12,14,7}; printf("原数组为:\n");for(i=0;i<n;i++)< p="">{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++)< p=""> {for(j=0;j<n-i-1;j++)< p=""> {if(a[j]>a[j+1]){tmp=a[j];a[j]=a[j+1];a[j+1]=tmp;}}}printf("\n");printf("排序后的数组为:\n"); for(i=0;i<n;i++)< p=""> {printf("%4d",a[i]);}}P76 3 成绩#includevoid input(int cla[50][3],int n); void print(int cla[50][3],int n);void sort(int cla[50][3],int n);void main(){int cla[50][3];int n;printf("请输入学生人数(小于50):\n"); scanf("%d",&n);if(n<=0 || n>=50)printf("error,请输入正确的人数。
C语言 第7章课后习题
#include<math.h> #define N 101 main()
{ int i,j,line,a[N];
for(i=2;i<N;i++) { a[i]=i; for(j=2;j<sqrt(N);j++)
{
if(a[i]!=0&&a[j]!=0) if(a[i]%a[j]==0) a[i]=0; } } printf(“\n”); for(i=2,line=0;i<N;i++)
5.将一个数组中的值按逆序重新存放,例如原来的顺序为8,6,5,4, 1。要求改为1,4,5,6,8。 #define N 5 main() { int a[N]={8,6,5,4,1},i,temp; printf("\n初始数组:\n"); for(i=0;i<N;i++) printf(%4d",a[i]); for(i=0;i<N/2;i++) { temp=a[i]; a[i]=a[N-i-1]; a[N-i-i]=temp; } printf("\n交换后的数组:\n"); for(i=0;i<N;i++) printf(%4d",a[i]); }
for(i=0;i<N;i++) printf("%5d",a[i]); printf("\n"); /*排序*/
for(i=0;i<N-1;i++) { for(j=i+1;j<N;j++) if(a[i]>a[j]) temp=a[i]; a[i]=a[min]; a[min]=temp; } /*输出*/ printf("\n 排序结果如下:\n"); for(i=0;i<N;i++) printf("%5d",a[i]); }
c语言第七章课后题
一、第七章习题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;}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>}结果: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)递归方法: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; /*设置标志变量*/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章
#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语言习题及答案(第七章)
7-4 仔细阅读下例程序,给出程序的运行结果。
(1) main(){void fun1(),fun2() ; /*应该增加的函数声明语句*/fun1() ;printf("") ;fun2()}void fun1(){printf("COMPAQ") ;}void fun2(){printf("COMPUTER") ;}(2) main(){void fun() ;/*应该增加的函数声明语句*/int i ;for(i=1;i<=10;i++)fun();}void fun(){static int a=100;int b=1 ;++b ;printf("%d+%d=%d\n",a,b,a+b);a+=1 ;}(3)static int a=10;main(){int a=100;void fun1() ,fun() ;/*应该增加的函数声明语句*/fun1();fun2();printf("a=%d\n",a);}void fun1(){a-=a/2;printf("a=%d\n",a);}void fun2(){int a=100;a*=a;printf("a=%d\n",a);}(4)main(){int add(int,int); /*应该增加的函数声明语句*/extern int x,y ;printf("%d",add(x,y));}int x=20,y=5;add(a,b)int a,b;{int s ;s=a+b;return(s) ;}(5)void f(n)int n ;{int x=5;static int y=10;if(n>0){++x ;++y;printf("x=%d,y=%d",x,y) ;}}main(){int m=1;f(m) ;}答:(1)由于fun1()函数定义在main()函数的调用后面,故在main()中应该增加函数声明函数的语句“void fun1(),fun2();”。
C语言课后练习题答案第七章
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语言程序设计第四版第七章答案-谭浩强第七章函数7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
maxyueshu(m,n)int m,n;{ int i=1,t;for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)t=i;}return(t);}minbeishu(m,n)int m,n;{int j;if(m>=n) j=m;else j=n;for(;!(j%m==0&&j%n==0);j++);return j;}main()整数,输出是否是素数的消息。
psushu(m)int m;{int i=2,t;for(;i<=m;i++)if(m%i==0&&i<m) break;if(m-i==0) t=1;else t=0;return m;}main(){int a,s;printf("enter sushu is \n");scanf("%d",&a);s=psushu(a);if(s==1) printf("a is sushu\n");else printf("s is not sushu\n");}7.4写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。
int zhuangzhi(b)int b[3][3];{int i,j,t;for(i=0;i<3;i++)for(j=0;j>=i&&j<3-i;j++){t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;}}main(){int a[3][3];int i,j;for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(" %d",a[i][j]);printf("\n");}zhuangzhi(a);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(" %d",a[i][j]);printf("\n");}}7.5写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。
c语言第七章课后题
一、第七章习题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章
/*习题七 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语言理论教材各章后习题参考答案第七章习题
第七章习题参考答案一、选择题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语⾔⼊门篇第七章答案练习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语言程序设计教程》(第三版)李凤霞 主编——第七章习题答案
习题七一、单项选择题1、以下程序的输出结果是()。
main(){int i,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=i; /*a: 0 1 2 3 4 5 6 7 8 9 */for(i=0;i<3;i++)p[i]=a[i*(i+1)]; /*p:0 2 6 */for(i=0;i<3;i++)k+=p[i]*2; /* k=5+4+12=21 */printf(“%d\n”,k);}A)20 B)21 C)22 D)232、以下正确的数组定义语句是()。
A)int y[1][4]={1,2,3,4,5}; B)float x[3][ ]={{1},{2},{3}}; C)long s[2][3]={{1},{1,2},{1,2,3}}; D)double t[ ][3]={0};3、以下程序段的输出结果是()。
main(){int m[3][3]={{1},{2},{3}}; m 1 0 0 n 1 2 3int n[3][3]={1,2,3}; 2 0 0 0 0 0printf(“%d\n”,m[1][0]+n[0][0]); 3 0 0 0 0 0printf(“%d\n”,m[0][1]+n[1][0]);}A)0 B)2 C)3 D)10 3 0 24、以下程序的输出结果是()。
main(){int i,x[3][3]={1,2,3,4,5,6,7,8,9}; 1 2 3for(i=0;i<3;i++)printf(“%d,”x[i][2-i]); 4 5 6} 7 8 9A)1,5,9 B)1,4,7 C)3,5,7 D)3,6,95、对以下程序从第一列开始输入数据:2473↙,程序的输出结果是()。
#include “stdio.h”main(){char c;while((c=getchar())!=’\n’){switch (c-‘2’){case 0:case 1:putchar(c+4);case 2:putchar(c+4);break;case 3:putchar(c+3);default:putchar(c+2);}}}A)668977 B}668966 C}66778777 D)66887666、不能正确为字符数组输入数据的是( )。
游洪跃的C语言程序设计第7章 习题解答
第7章习题解答一、选择题1.有以下程序:/* 文件路径名:ex7_1_1\main.c */#include <stdio.h> /* 标准输入/输出头文件*/#define HDY(a, b) a/b /* 带参宏*/int main(void) /* 主函数main() */{int a = 1, b = 2, c = 3, d = 4, y; /* 定义变量*/y = HDY(a + c, b + d); /* 调用带参宏HDY */printf("y=%d\n", y); /* 输出k */return 0; /* 返回值0, 返回操作系统*/ }下面针对该程序的叙述正确的是。
A)编译有错B)运行出错C)运行结果为y=0 D)运行结果为y=6解析:宏替换后,表达式"k=HDY(a+c,b+d);"即变为k=a+c/b+d=6。
答案:D2.有以下程序:/* 文件路径名:ex7_1_2\main.c */#include <stdio.h> /* 标准输入/输出头文件*/#define N 5 /* 无参宏*/#define M N+1 /* 无参宏*/#define f(x) (x*M) /* 带参宏*/int main(void) /* 主函数main() */{int i1, i2; /* 定义变量*/i1 = f(2); i2 = f(1 + 1); /* 调用带参宏*/printf("%d %d\n", i1, i2); /* 输出i1,i2 */return 0; /* 返回值0, 返回操作系统*/ }程序的运行结果是。
A)12 12 B)11 7 C)11 11 D)12 7 解析:根据宏定义可得f(2)=2*5+1=11,f(1+1)=1+1*5+1=7。
答案:B3.以下叙述中正确的是。
A)预处理命令行必须位于C源程序的起始位置B)在C语言中,预处理命令行都以#开头C)每个C程序必须在开头包括预处理命令行:#includeD)C语言的预处理不能实现宏定义和条件编译的功能解析:以#开头的行都称为“编译预处理”行;预处理功能主要包括宏定义、文件包含和条件编译等。
C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第七章 课后答案
#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页]
习题答案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语言程序设计(第三版)谭浩强习题与答案 第七章
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;
C语言程序设计 – 第 07 章课后习题
C语言程序设计– 第七章课后习题一、选择题1. 以下正确的函数定义是(D)A. double fun(int x, int y) {z = x+y; return z;}B. fun(int x, y){int z; return z;}C. fun(x, y){int x, y; double z; z = x+y; return z;} D. double fun(int x, int y) {double z;z = x+y; return z;}(解释:A:变量z未定义;B、C:参数未逐一全部指定类型)2. 若有函数调用语句:fun(a, (x, y), fun(n, d, (a, b)));,则在此函数调用语句中实参的个数是(S)A. 3B. 4C. 5D. 6(解释:函数fun()是一个含有三个参数且有返回值。
选D合理,选C亦合理,选A也未尝不可)3. 以下程序的正确运行结果是(D)# include <stdio.h>void func(int a, int b, int c){c = a * b;}main(){int c;func(2, 3, c);printf("\n%d\n", c);}A. 0B. 1C. 6D. 不确定(解释:main()函数中的c只能单向地向func()传递数值,调用完毕后不会发生改变。
注:c尚未初始化)4. C语言规定,调用函数时实参和形参之间的数据传递是(B)A. 地址传递B. 值传递C. 由实参和形参双向传递D. 由用户指定传递方式(解释:的确如此)5. 若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是(D)A. 函数的实参和其对应的形参共占用同一存储单元B. 形参只是形式上的存在,不占用具体存储单元C. 同名的实参和形参占同一存储单元D. 函数的形参和实参分别占用不同的存储单元(解释:函数被调用时,形参在函数入口处取实参的数值,此后二者再无联系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、第七章习题7(p184-p187),全做,中选做两道,要求给出程序执行结果。
7-1、
#include <>
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;
}
结果:
int t;
for (t=0;t<0;t++); /*用循环体为空语句的循环实现延时*/ }
int main()
{
int i;
second=0;
for(i=0;i<1000000;i++)
{
update(); /*利用循环控制时钟运行时间*/
display(); /*显示时,分,秒*/
delay(); /*模一尺时间为1秒*/
}
return 0;
}
结果:
自动跳出时间
7-3、
#include <>
/*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 <>
/*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中的最大值*/
7-5、
#include <>
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 <>
long fact(int n);
void main()
{
int i=0; /*循环变量*/
int n=0; /*输入的值*/
int m=0; /*接收fact()函数的返回值*/ long s=0; /*所求最终结果*/
7-7、
(1)穷举法:
#include <>
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 <>
int Gcd(int a,int b);
void main()
{
do{
a=b;
b=r;
r=a%b;
}while(r!=0);
}
return b;
}
结果:
(3)递归方法:
#include <>
int Gcd(int a,int b);
void main()
{
int x=0; /*键盘键入两个数*/
int y=0;
int m=0; /*接收Gcd的返回值*/
do{
printf("输入两个正数:");
7-9、
#include <>
/*old()函数
功能:计算第i个人的年龄
入口参数:人数i
返回值:年龄
*/
int old(int i)
{
if(i==1)
return 10;
else
return old(i-1)+2;
}
void main()
{
int x=5; /*人数为5*/
int y=0; /*接收old()函数的返回值*/
y=old(x);
printf("第五个人的年龄为:%d\n",y);
}
结果:
7-10、
#include <>
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);
二、收集资料并整理,叙述结构化程序设计的基本思想;根据自己的编程,说说你对结构化程序设计的理解。
模块化程序设计:
1、定义:将系统划分为若干个子系统,任务划分为若干个子任务,本质思想就是实现不同
层次的数据或过程的抽象过程。
2、模块分解的基本原则
(1)、保证模块的相对独立性——高聚合、低耦合。
高聚合:模块内部的联系越紧密越好,就是使模块的功能要相对独立和单一。
低耦合:模块之间的联系越松越好,就是使模块之间的接口越简单越好。
(2)、模块的实现细节对外不可见——信息隐藏。
外部:关心做什么;内部:关心怎么做。
实质:把不需要调用者知道的信息都封装在模块内部,是模块的实现细节对
外不可见。
3、设计好模块接口
(1)、接口指罗列出一个模块的所有的与外部打交道的变量等
(2)、定义好后不要轻易改动。
(3)、在模块开头(文件的开头)进行函数声明。
4、结构化程序设计思想:
(1)、逐步求精:将一个完整的、较复杂的问题分解成若干个相对独立的、较为简单的子问题,若这些子问题还较为复杂可再分解它们,直到能够容易的用某种高级语言表达
为止。