c语言第七章课后题
一、第七章习题7(p184p187),7、17、7全做,7、87、12中选做两道,要求给出程序执行结果。 71、 #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; } 结果:
结果分析: 开头定义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=3 72、 #include int hour,minute,second; /*定义全局变量*/ void update { 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; } 结果: 自动跳出时间
73、 #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); } 结果:
74 #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中得最大值*/ 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); }
结果:
75、 #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; }
结果:
76、 #include 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; }
结果:
77、 (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=(afor(i=t; i>=1; i) { if(a%i==0 && b%i==0) return i; } }
结果: (2)欧几里得算法 #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 r=0; r=a%b; if(r!=0) { 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("输入两个正数:"); 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(ab,b); else return Gcd(b,ba); }
C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组
第7章数组【练习7-1】将例7—3 程序中的break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:当去掉break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为x 的元素,因此程序输出会有变化。
当输入数据仍为2 9 8 1 9 时,输出将是index is 1 index is 4。
【练习7—2】将数组中的数逆序存放.输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始.试编写相应程序。
解答:#include<stdio。
h〉int main(void){int i,n,temp;int a[10];printf("Input n:");scanf(”%d",&n);printf(”Input %d integer:",n);for(i=0;i<n;i++)scanf(”%d”,&a[i]);printf(”After reversed:");for(i=0;i〈n/2;i++){temp=a[i];a[i]=a[n—1—i];a[n-1—i]=temp;}for(i=0;i〈n;i++)printf("%d ”,a[i]);return 0;}【练习7-3】求最大值及其下标.输入一个正整数n(1〈n<=10),再输入n个整数,存入数组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素.试编写相应程序.解答:#include〈stdio.h>int main(void){int i,index,n;int a[10];printf("Enter n:”);scanf(”%d",&n);printf(”Enter %d integrs:”,n);for(i=0;i〈n;i++)scanf("%d",&a[i]);for(i=n—1;i〉=0;i++)printf("%d ”,a[i]);return 0;}【练习7-4】找出不是两个数组共有的元素。
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(){int a,b,max,min;printf("enter two number is: ");scanf("%d,%d",&a,&b);max=maxyueshu(a,b);min=minbeishu(a,b);printf("max=%d,min=%d\n",max,min);}7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。
从主函数输入a、b、c的值。
#include"math.h"float yishigen(m,n,k)float m,n,k;{float x1,x2;x1=(-n+sqrt(k))/(2*m);x2=(-n-sqrt(k))/(2*m);printf("two shigen is x1=%.3f and x2=%.3f\n",x1,x2);}float denggen(m,n)float m,n;{float x;x=-n/(2*m);printf("denggen is x=%.3f\n",x);}float xugen(m,n,k)float m,n,k;{float x,y;x=-n/(2*m);y=sqrt(-k)/(2*m);printf("two xugen is x1=%.3f+%.3fi and x2=%.3f-%.3fi\n",x,y,x,y);}main(){float a,b,c,q;printf("input a b c is ");scanf("%f,%f,%f",&a,&b,&c);printf("\n");q=b*b-4*a*c;if(q>0) yishigen(a,b,q);else if(q==0) denggen(a,b);else xugen(a,b,q);}7.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
C语言题库第7章宏定义与预处理√
第七章宏定义与预处理一.单项选择1. 以下程序的运行结果是( D )。
#include<stdio.h>#define ADD(x) x+xint main ( ){int m=1,n=2,k=3,sum ;sum = ADD(m+n)*k ;printf(“%d\n”,sum) ;return 0;}A.18B.9C.12D.102. 以下程序的运行结果是( C )。
#include<stdio.h>#define MIN(x,y) (x)>(y) ? (x) : (y)int main ( ) {int i=10, j=15 , k;k = 10*MIN(i,j);printf(“%d\n”,k);return 0;}A.15B.100C.10D.1503. 以下程序的运行结果是( A )。
#include<stdio.h>#define X 5#define Y X+1#define Z Y*X/2int main ( ) {int a=Y;printf(“%d\n”,Z);printf(“%d\n”,--a);return 0;}A.75B.125C.76D.1264. 以下程序的运行结果是( C )。
#include<stdio.h>#define DOUBLE(r) r*rint main ( ) {int x=1,y=2,t;t = DOUBLE(x+y) ;printf (“%d\n”,t); return 0;}A.7B.6C.5D.85. 在“文件包含”预处理命令形式中,当#include后面的文件名用””(双引号)括起时,寻找被包含文件的方式是( C )。
A.仅仅搜索源程序所在目录B.直接按系统设定的标准方式搜索目录C.先在源程序所在目录中搜索,再按系统设定的标准方式搜索D.仅仅搜索当前目录6. 若有定义#define N 2#define Y(n) ((N+1)*n)则执行语句z=2*(N+Y(5));后,z的值为( C )。
计算机二级c语言第七章函数习题
计算机二级c语言第七章函数习题第七章函数一、选择题1、以下关于函数的叙述中正确的是A)每个函数都可以被其它函数调用(包括main函数)B)每个函数都可以被单独编译C)每个函数都可以单独运行D)在一个函数内部可以定义另一个函数2、设函数fun的定义形式为void fun(char ch,float x) { … }则以下对函数fun的调用语句中,正确的是A)fun("abc",3.0); B)t=fun('D',16.5);C)fun('65',2.8); D)fun(32,32);3、有以下程序int f1(int x,int y){return x>y?x:y;}int f2(int x,int y){return x>y?y:x;}main(){ int a=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d));f=f1(f2(a,b),f2(c,d));g=a+b+c+d-e-f;printf("%d,%d,%d\n",e,f,g); }程序运行后的输出结果是A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,74、有以下程序#define P 3#define F(int x) { return (P*x*x);}main(){ printf("%d\n",F(3+5));}程序运行后的输出结果是A)192 B)29 C)25 D)编译出错5、若程序中定义了以下函数double myadd(double a,double B){ return(a+B);}并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是A)double myadd(double a,B); B)double myadd(double,double);C)double myadd(double b,double A); D)double myadd(double x,double y);6、有以下程序char fun(char x ,char y){ if(x < y) return x;return y;}main(){ int a=’9’,b=’8’,c=’7’;printf("%c\n",fun(fun(a,b),fun(b,c))); }程序的执行结果是A)函数调用出错 B)8 C)9 D)77、有以下程序void f(int v,int w){ int t;t=v;v=w;w=t;}main(){ int x=1,y=3,z=2;if(x>y) f(x,y);else if(y>z) f(y,z);else f(x,z);printf("%d,%d,%d\n",x,y,z);}执行后输出结果是A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,18、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是A) 调用可以作为独立的语句存在 B) 调用可以作为一个函数的实参C) 调用可以出现在表达式中 D) 调用可以作为一个函数的形参9、有以下函数定义:void fun(int n,double x) { …… }若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是A)fun(int y,double m); B) k=fun(10,12.5);C)fun(x,n); D) vold fun(n,x);10、有以下程序fun(int a,int b){ if(a>b) return(a);else return(b);}main(){ int x=3,y=8,z=6,r;r=fun(fun(x,y),2*z);printf("%d\n",r);}程序运行后的输出结果是A) 3 B) 6 C) 8 D) 1211、在一个C程序中A) main函数必须出现在所有函数之前B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后D) main函数必须出现在固定位置12、有以下程序int f1(int x,int y){ return x>y?x:y; }int f2(int x,int y){ return x>y?y:x; }main(){ int a=4,b=3,c=5,d,e,f;d=f1(a,b); d=f1(d,c);e=f2(a,b); e=f2(e,c);f=a+b+c-d-e;printf("%d,%d,%d\n",d,f,e);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 3,5,413、有如下程序void f(int x,int y){ int t;if(x < y){ t=x; x=y; y=t; }}main(){ int a=4,b=3,c=5;f(a,b); f(a,c); f(b,c);printf("%d,%d,%d\n",a,b,c);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,514、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是A) void B) int C) float D) double15、有以下程序float fun(int x,int y){ return(x+y); }main(){ int a=2,b=5,c=8;printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序运行后的输出结果是A) 编译出错 B) 9 C) 21 D) 9.016、若有以下程序#includevoid f(int n);main(){ void f(int n);f(5);}void f(int n){ printf("%d\n",n); }则以下叙述中不正确的是A)若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB)若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数fC)对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明D)函数f无返回值,所以可用void将其类型定义为无值型17、以下函数值的类型是fun(float x){ float y;y= 3*x-4;return y;}A)int B)不确定 C)void D)float18、以下所列的各函数首部中,正确的是A)void play(var :Integer,var b:Integer)B)void play(int a,b)C)void play(int a,int b)D)Sub play(a as integer,b as integer)19、以下程序的输出结果是fun(int x, int y, int z){ z=x*x+y*y; }main(){ int a=31;fun(5,2,a);printf("%d",a);}A)0 B)29 C)31 D)无定值20、有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是A) 3 B) 4 C) 5 D) 有语法错21、有如下程序int func(int a,int b){ return(a+b);}main(){ int x=2,y=5,z=8,r;r=func(func(x,y),z);printf("%d\n",r);}该程序的输出的结果是A) 12 B) 13 C) 14 D) 1522、以下叙述中不正确的是A)在不同的函数中可以使用相同名字的变量B)函数中的形式参数是局部变量C)在一个函数内定义的变量只在本函数范围内有效D)在一个函数内的复合语句中定义的变量在本函数范围内有效23、有以下程序void fun (int a,int b,int c){ a=456; b=567; c=678;}main(){ int x=10, y=20,z=30;fun(x,y,z);printf("%d,%d,%d \n",z,y,x);}输出结果是A)30,20,10 B)10,20,30 C) 456,567,678 D) 678,567,45624、有以下程序#include "stdio.h"int abc(int u,intv);main(){ int a=24,b=16,c;c=abc(a,b);printf("%d\n",c);}int abc(int u,int v){ int w;while(v){ w=u%v; u=v; v=w }return u;输出结果是A)6 B)7 C)8 D)925、以下说法中正确的是A)C语言程序总是从第一个的函数开始执行B)在C语言程序中,要调用的函数必须在main()函数中定义C)C语言程序总是从main()函数开始执行D)C语言程序中的main()函数必须放在程序的开始部分26、请读程序:#includefunc( int a, int b){ int c;c=a+b;return c;}main(){ int x=6,y=7,z=8,r;r=func((x--,y++,x+y),z--);printf("%d\n",r);}上面程序的输出结果是A)11 B)20 C)21 D)31二、填空题1、有以下程序int sub(int n) {return(n/10+n%10); }main(){ int x,y;scanf("%d",&x);y=sub(sub(sub(x)));printf("%d\n",y);若运行时输入:1234<回车>,程序的输出结果是。
c语言复习题及答案第七章数组
第七章 数组 (8学时) 学习目的与要求: 1 、重点掌握一维数组的定义和引用; 2 、基本掌握二维数组的定义和引用; 3 、重点掌握字符型数组的定义与引用; 4 、能正确使用字符串处理函数; 5 、学会使用数组解决实际问题。 重点:
1 、一维数组的定义与引用; 2 、二维数组的定义与引用; 3 、字符数组的定义与引用; 第1讲
知识归纳: 1、一维数组的定义:类型说明符 数组名[ 常量表达式 ] ;
(1) (1)数组名后必须用方括弧 [ ] ,用其他括弧均错误 ; (2) 方括弧中的常量表达式表示数组的元素个数; (3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量; 2、一维数组的引用: 数组名[ 下标 ] for ( i =0 ; i<7 ; i ++ ) printf( “%c” , c1[ i ] ); (2)将整个字符串一次输入输出,用格式符%s ; 如: char c1[10] ; scanf ( “ %s”, c1) ; 100]; D) int N=100; int num[N]; (2003年9月) 25、有以下程序
main() { char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’,‘g’,‘h’,‘\0’}; int i,j; i=sizeof(a); j=strlen(a); printf(“%d,%d\b”i,j); } 程序运行后的输出结果是( )。
A)9,9 B)8,9 C)1,8 D)9,8 (2002年9月) 21、C 22、C 23、D 24、B 25、D
二、填空题 1、下面fun函数的功能是将形参x的值转换成二进制数,所得二进制数的每一位数放在一 维数组中返回,二进制数的最低位放在下标为0的元素中,其它依此类推。请填空。 fun(int x,int b[]) { int k=0,r; do { r=x%2; b[k++]=r; x/=2 ; } while(x); } (1996年4月) 2 2
C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第七章 课后答案
min=0;
for(j=0;j<n;j++)
if(a[j][max]<a[min][max])min=j;
if(min==i){flag=1;break;}
}
/*根据flag值输出结果*/
if(flag==1)printf("鞍点是a[%d][%d]=%d\n",min,max,a[min][max]);
{
int i,j,n,a[6][6],max,min,flag;
printf("Enter n :"); /*输入一个正整数n */
scanf("%d",&n);
printf("Enter %d integers :\n",n); /*输入一个n阶方阵,存储在数组a中*/
for(i=0;i<n;i++)
{
int i,j,n,a[6][6],flag;
printf("Enter n :"); /*输入一个正整数n */
scanf("%d",&n);
printf("Enter %d integers :\n",n); /*输入一个n阶方阵,存储在数组a中*/
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[i]>a[index1])index1=i;
if(a[i]<a[index2])index2=i;
}
/*交换位置:最大值与最后一个数交换,最小值与第一个数交换*/
C语言答案第7章
第7章[习题7-1]输入3个整数,按从小到大的顺序输出。
/*c7_1.c*/#include <stdio.h>void swap(int *p1,int *p2){i nt p;p=*p1;*p1=*p2;*p2=p;}void main(void){i nt n1,n2,n3;i nt *pointer1,*pointer2,*pointer3;p rintf("请输入三个整数 n1,n2,n3:");s canf("%d,%d,%d",&n1,&n2,&n3);p ointer1=&n1;p ointer2=&n2;p ointer3=&n3;i f(n1>n2) swap(pointer1,pointer2);i f(n1>n3) swap(pointer1,pointer3);if(n2>n3) swap(pointer2,pointer3);p rintf("排序后三个整数为:%d,%d,%d\n",n1,n2,n3);}[习题7-2]编写程序,输入一个十进制的正整数,将其对应的八进制数输出。
/*c7_2.c*/#include<stdio.h>#define N 10void main(void){i nt x;c har *p,result[N];p rintf("输入十进制正整数:");s canf("%d",&x);f or(p=result;x!=0;p++){*p=x%8+'0';x=x/8;}f or(p--;p>=result;p--)putchar(*p);p utchar('\n');}[习题7-3]输入一个字符串,用指针方式逐一显示字符,并求其长度。
C语言第7章 习题及实验参考答案~1
/*为密码字符串预留 1 个结束标志位*/
printf("\n Please input the password (6~12 characters): ");
for( loop = 0; loop < MAX; loop++)
{ password[loop] = getch();
printf("*");
}
6. 编程,输出一个 3 行 4 列(记作 34)矩阵 A 的转置矩阵 AT(行列互换)。 参考程序: #include <stdio.h> void main() { int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int b[4][3],i,j; printf("array a:\n"); for(i=0;i<3;i++) { for(j=0;j<4;j++)
3. 编程,输入 n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出 交换后的 n 个数。
参考程序: # include "stdio.h" #define N 10 void main()
{ int term[N]; int i,max,min; for(i=1;i<N,i++) scanf("%d",&term[i]); max=0; min=0; for(i=1;i<10;i++) { if (term[i]< term[min]) min=i; if (term[i]> term[max]) max=i; } if(term[min]!=term[0]) { t=term[min]; term[min]= term[0]; term[0]=t;} if(term[max]!=term[N-1]) { t=term[max]; term[max]= term[N-1]; term[N-1]=t;} for(i=1;i<N,i++) printf("%d",trem[i]);
C语言教材 第七章 指针 实验
第七章指针第一部分知识训练【知识要点】1. 地址与指针指针变量的概念:用一个变量专门来存放另一个变量的地址。
2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。
3. 指针与数组引用一个数组元素可以用下标法和指针法;可以用数组名作函数的参数。
4.指针与函数函数指针变量定义的一般形式为:类型说明符 (*指针变量名)();一个函数的返回值可以是一个函数。
【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。
6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5。
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)。
int *ptr=(int *)(&a+1);则ptr实际是&(a[5]),也就是a+5。
原因如下:1)&a是数组指针,其类型为 int (*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。
2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不一样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是一样的,但意思不一样。
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写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。
