C编程例题
更新时间:2023-09-25 15:04:01 阅读量: 综合文库 文档下载
《C语言程序设计》习题集
第1章 C语言概述
1.1 c语言程序的总体结构是怎样的。
解:一个完整的c语言程序,是由一个、且只能由一个main()函数(又称主函数)和若 干个其他函数结合而成的,或仅由一个main()函数构成。
1.2 c语言程序的基本单位是什么?它的结构又如何? 解:函数是c语言程序的基本模块单元。
任何函数(包括主函数main())都是由函数说明和函数体两部分组成。其一般结构如下: [函数类型] 函数名(函数参数表)
{ 说明语句部分;
执行语句部分; }
1.3主函数main()在程序中的地位如何。程序总是从哪个函数开始执行,到哪个函数执行完后结束? 解:main()函数的作用相当于其他高级语言中的主程序;其他函数的作用相当于子程序。 一个c语言程序,总是从main()函数开始执行,而不论其在程序中的位置。当主函数执 行完毕时,亦即程序执行完毕。习惯上,将主函数main()放在最前头。 1.4 c语言的语句分为哪几类?
解:按照语句功能或构成的不同,可将c语言的语句分为五类。 控制语句、函数调用语句、表达式语句、空语句和复合语句。
1.5执行一个c语言程序的一般过程是什么? 解:运行一个c语言程序的一般过程,如下图所示。
逻辑错误
启动TC 编辑或修改源程序 编译 连接 运行 退出TC(结束) 语法错误
1)启动Tc,进入Tc集成环境。 2)编辑(或修改)源程序。
3)编译。如果编译成功,则可进行下一步操作;否则,返回2)修改源程序,再重新编译,直至编译成功。 4)连接。如果连接成功,则可进行下一步操作;否则,根据系统的错误提示进行相应修改,再重新连接,直至连接成功。
5)运行。通过观察程序运行结果,验证程序的正确性。 6)退出Tc集成环境,结束本次程序运行。
1.6在Tc集成环境下,下列操作的快捷键分别是什么
解:存盘:F2;编译与连接:F9;运行:nF9;查看运行结果:Alt+F5。
第2章 数据类型、运算符与表达式
2.1 指出下列变量名中,哪些是合法的,哪些是非法的。如果非法,为什么? Int,char,345,ABdf,c&d,string*,_322,alpf_beat,JOHN.smith,3ab 解:ABdf,_322,alpf_beat合法,其它的非法
1
Int,char非法是因为它们都是C语言关键字;
345,3ab非法是因为变量名不能以阿拉伯数字开头;
c&d,string*,JOHN.smith非法是因为变量名中只能由字母、数字和下划线组成。 2.2 计算下列表达式的值
(1)a+b%3*(int)(a-b)/4 (设a=13.6,b=8) (2)(x+y)/2+(int)x%(int)y (设x=4.5,y=2.5) (3)z*=3+6,z/z=z/2,z+=z-=z*=z (设z=6) 解:(1) 15.600000;(2)3.500000;(3)0。
第3章 顺序结构程序设计
3.1 若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765, c1=‘a’,c2=‘b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 a=□3□□b=□4□□c=□5
x=1.200000,y=2.400000,z=-3.600000 x+y=□3.600□□y+z=-1.20□□z+x=-2.40 c1=ˊaˊ□or□97(ASCII) c2=ˊbˊ□or□98(ASCII) (□表示空格,下同)
参考源程序如下: main()
{int a=3,b=4,c=5;
long int u=51274,n=128765; float x=1.2,y=2.4,z=3.6; char c1='a',c2='b';
printf(\ printf(\
printf(\ printf(\
printf(\ printf(\ }
3.2用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82, c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入?
main() {
int a,b;float x,y;char c1c2; scanf(\,&a,&b); scanf(\,&y); scanf(\,&c1,&c2); }
输入方法如下:
a=3□b=7
□x=8.5□y=71.82 □c1=A□c2=a
2
3.2 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。
参考源程序: main()
{float r,h,C1,Sa,Sb,Va,Vb; scanf(\ C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa;
Va=4*3.14*r*r*r/3; Vb=Sa*h;
printf(\
printf(\ }
3.3输入一个华氏温度,要求输出摄氏温度。公式为参考源程序如下: main()
{float F,c;
scanf(\ c=5*(F-32)/9;
printf(\输入的华氏温度为:%.2f,}
3.4 已知三角形的三边长,求其面积。解:假设输入的三边能构成三角形,三角形的面积公式为: Area=s(s?a)(s?b)(s?c)
其中S=(a+b+c)/2。
参考源程序如下:
#include “math.h” Main() {
Float a,b,c,s,area;
Printf(“请输入三角形的三边Scanf(“%f,%f,%f”,&a,&b,&c); S=(a+b+c)/2.0;
Area=sqrt(s*(s-a)*(s-b)*(s-c));
Printf(“三角形的三边为:Prinft(“三角形的面积为: }
4.1 写出下面表达式的值(设a=1,b=2,c=3,x=4,y=3)
c=5(F-32)/9,输出要求有文字说明,取位2小数。 %.2f\
”,a,b,c);
3
则摄氏温度为
:”); %7.2f, %7.2f, %7.2f\\n%7.2f\\n”,area);
第4章 选择结构程序设计(1)a+b>c&&b==c
(2)!a=x+y)?c-a:y-x (4)!(x=a)&&(y=b)&&0 (5)!(a+b)+c-1&&b+c/2 (6)a||1+’a’&&b&&’c’
解:(1)0;(2)1;(3)2;(4)0;(5)1;(6)1。
4.2有三个整数a、b、c,由键盘输入,输出其中最大的数。 参考源程序: main()
{int a,b,c,t;
scanf(\ if(a>b)
if(a>c) t=a; else t=c;
else if(b>c) t=b; else t=c;
printf(\ }
4.3给出一百分制成绩,要求输出成绩等级'A'、'B'、'C'、'D'、'E'。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D', 60分以下为'E'。
参考源程序: main()
{int number,md;char c1; scanf(\ md=number/10; switch(md) {
case 10:
case 9: c1='A';break; case 8: c1='B';break; case 7: c1='C';break; case 6: c1='D';break; case 5: case 4: case 3: case 2: case 1:
case 0: c1='E';break; }
printf(\ }
4.4给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆顺序打印出各位
4
数字,例如原来为321,应输出123。
参考源程序: main()
{int a,b,c,d,e,n;long m; scanf(\ a=0.0001*m;
b=10*(0.0001*m-a);
c=100*(0.0001*m-a-0.1*b);
d=1000*(0.0001*m-a-0.1*b-0.01*c);
e=m-10000*a-1000*b-100*c-10*d;
if(a!=0)
n=5,printf(\
else if(b!=0) n=4,printf(\ else if(c!=0) n=3,printf(\ else if(d!=0) n=2,printf(\ else n=1,printf(\ }
4.5企业发放的奖金根据利润提成。利润(I)低于或等于10万元的,奖金可提10%;利润高于10万元,低20万元(10000010000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。 要求:⑴用if语句编程序;⑵用switch语句编程序。 ⑴用if语句编程序: main()
{int a,b,c,d,e;float d1=0.01,d2=0.015,d3=0.03,d4=0.05,d5=0.075,d6=0.10;
double jj,k;long i; scanf(\
k=0.00001*i;a=k-10;b=k-6;c=k-4;d=k-2;e=k-0; if(a<0) a=0; if(b<0) b=0; if(c<0) c=0; if(d<0) d=0;
jj=a*d1+(b-a)*d2+(c-b)*d3+(d-c)*d4+(e-d)*d5+(k-e)*d6; printf(\ }
⑵用switch语句编程序: main()
{ int a,b,c,d,e,n,x;
float d1=0.01,d2=0.015,d3=0.03,d4=0.05,d5=0.075,d6=0.10;
double jj,k;long i; scanf(\
k=0.00001*i;a=k-10;b=k-6;c=k-4;d=k-2;e=k-0;x=k; switch(x)
{case 0:e=0;
5
case 1:d=0; case 3:c=0; case 5:b=0;
case 9:a=0; default:n=0;
}
jj=a*d1+(b-a)*d2+(c-b)*d3+(d-c)*d4+(e-d)*d5+(k-e)*d6; printf(\ }
4.6输入四个整数,要求按大小顺序输出。 参考源程序:
main()
{ int a,b,c,d,t;scanf(\ if(a
printf(\ }
4.7有四个圆塔,圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1。见下图。这四个塔的高度为10米,塔外无建筑物。今输入任一点的坐标,求该点的建筑物高度(塔外高度为零)。
参考源程序:
#include\ main()
{ float x,y,n,m,r;int h; scanf(\ n=fabs(x);m=fabs(y);
r=sqrt((n-2)*(n-2)+(m-2)*(m-2)); if(r>1) h=0; else h=10;
printf(\ }
第5章 循环结构程序设计
5.1求∑n!(n=1->20),(即求1!+2!+3!+4!+5!+?+20!) 参考源程序: main()
{ int n,i=1;long sum=0,s=1; scanf(\ while(i<=n)
{s=s*i;sum=sum+s;i++;}
6
printf(\
}
5.2输入两个正整数m和n,求其最大公约数和最小公倍数。 main()
{long m,n,i=1,j,s;
scanf(\ 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(\ }
5.3输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 参考源程序:
#include\ 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(\ }
5.4求Sn=a+aa+aaa+?+aa?aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。
参考源程序:
#include\ main()
{ int n,sum=0,i=1,s=2; scanf(\ while(i<=n)
{sum=sum+s;s=s+2*pow(10,i);i++;} printf(\ }
5.5打印出所有\水仙花数\,所谓\水仙花数\是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。
参考源程序:
#include\ main()
{ int x=100,a,b,c;
7
while(x>=100&&x<1000)
{a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;
if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf(\
x++; }
}
5.6一个数如果恰好等于它的因子之和,这个数就称为\完数\。例如,6的因子为1、2、3,而6=1+2+3,因此6是\完数\。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1、2、3 参考源程序: main()
{int m,i,j,s;
for(m=6;m<10000;m++) {s=1;
for(i=2;i {printf(\ printf(\ } } 或 main() {int m,i,j,s; for(m=6;m<1000;m++) {s=m-1; for(i=2;i {printf(\ printf(\ } } 5.7有一分数序列: 2/1,3/2,5/3,8/5,13/8,21/13? 求出这个数列的前20项之和。 参考源程序: main() {int i=1,n;double t,x=1,y=2,s,sum=0; scanf(\ while(i<=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;} printf(\ } 8 5.8一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?次反弹多高? 参考源程序: main() {int i,n;double h=100,s=100; scanf(\ for(i=1;i<=n;i++) {h*=0.5; if(i==1) continue;s=2*h+s; } printf(\ } 5.9猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩 参考源程序: main() {int i=1,sum=0; for(;i<=10; i++); sum=2*sum+1; printf(\ } 5.10用迭代法求x=a。求平方根的迭代公式为: Xn+1=(Xn+1/Xn)/2 0.00001参考源程序: #include\ main() {float x0,x1,a; scanf(\ x1=a/2; do {x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=0.00001); printf(\ } 5.11用二分法求方程在(-10,10)之间的根 2x3-4x2 +3x-6=0 参考源程序: main() {double x1,x2,y1,y2;x1=-10;x2=10; do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3);}while(y1!=0); do{y2=2*x2*x2*x2-4*x2*x2+3*x2-6; 10天早上想再吃时,见只剩9 第10下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第下一个桃子了。求第一天共摘多少桃子。 要求前后两次求出的得差的绝对值少于。 x2=x2-y2/(6*x2*x2-8*x2+3);}while(y2!=0); printf(\ } 5.12打印以下图案 * *** ***** ******* ***** *** * 参考源程序: #include\ main() {int i=1,k,l,m; for(;i<=49;i++) {k=i%7;l=3-fabs((i-1)/7-3);m=fabs(i-4-7*((i-1)/7)); if(k==1) printf(\ if(m<=l) printf(\ else printf(\ printf(\ } 第6章 数组 6.1用筛选法求100以内的素数。 参考源程序: main() {int i,j,a[100]; for(i=2;i<100;i++) {a[i]=i; for(j=2;j<=i;j++) {if(j if(a[i]-j==0) printf(\ } printf(\ } 或 #include\ main() {static int i,j,k,a[98]; for(i=2;i<100;i++) {a[i]=i;k=sqrt(i); for(j=2;j<=a[i];j++) 10 if(j printf(\ } 6.2求一个矩阵对角线元素之和。 解:以3*3矩阵为例,参考源程序如下: main() {int i=0,j=0,a[3][3],s1,s2; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(\ s1=a[0][0]+a[1][1]+a[2][2]; s2=a[0][2]+a[1][1]+a[2][0]; printf(\ } 6.3一个已按从小到大的顺序排好的数组,今输入一个数要求按原来排序的规律将它插入数组中。 解:我们以一个10元素的数组为例,参考源程序如下: main() {static int a[10]={1,7,8,17,23,24,59,62,101};int i,j,t; scanf(\ for(i=9;i>0;i--) if(a[i] printf(\ } 6.4将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 参考源程序: main() {int i,b[10]; for(i=0;i<10;i++) scanf(\ for(i=9;i>-1;i--) printf(\ printf(\ } 6.5 打印出以下杨辉三角形(要求打印出10行)。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 11 ∶ ∶ 参考源程序: 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]; printf(\ printf(\} } 6.6找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。 参考源程序: #define N 10 #define M 10 main() { int I,j,m,n,flag1,flag2,a[N][M],max,maxj; /*输入二维数组array1*/ printf(“输入二维数组的行数:”); scanf(“%d”,&n); printf(“输入二维数组的列数:”); scanf(“%d”,&m); printf(“输入二维数组:\\n”); for(i=0;i prinf(“请输入a[-][-]:”,I,j); scanf(“%d”,&a[i][j]); } printf(“\\n”); /*输出数组*/ prinf(“二维数组为:\\n”); for(i=0;i for(j=0;j /*寻找鞍点*/ flag2=0; /*flag2作为数组中是否有鞍点的标志*/ for(i=0;i max=a[i][0]; 12 for(j=0;j for(k=0,flag1=1;k { printf(“\\n第%d行第%d列的%d是鞍点\\n”,j,maxj,max); flag2=0; } } if(!flag2) printf(“\\n无鞍点!\\n”); } 6.7 从键盘上输入多个字符,编程统计其中字母、空格、数字及其他字符的个数。 参考源程序: #include “stdio.h” Main() { char str[40]; int alphabet=0,digit=0,space=0,other=0,i=0; printf(“请输入一串字符:\\n”); gets(str); while(str[i]!=’\\o’) { if((‘A’<=str[i])&&(str[i]<=’Z’)||&&(‘a’<=str[i])&&(str[i]<=’z’)) ++alphabet; else if(str[i]==’ ‘) ++space; else if((str[i]<=’9’)&&(str[i]>=’0’)) ++digit; else ++other; } Printf(“其中有%d个字母,%d个空格,%d个数字,%d个其他字符!”,alphabet,space,digit,other); } 6.8 有n个学生,学习m门课程,已知所有学生全部课程的成绩,要求输出每门课程最高分的学生学号、课程代号和成绩。 参考源程序: #define N 50 #define m 20 main() { char a[N][10]; 13 float score[N][M],max_score; int n,m,i,j,studid; /*输入学生的学号和各门课程的成绩*/ printf(“请输入学生数n和课程数m;”); scanf(“%d,%d”,&n,&m); for(i=1;i<=n;i++) { printf(“请输入第%d位学生的学号:”,i); scanf(“%s”,a[i]); printf(“请按课程顺序输入成绩:”); for(j=1;j<=m;j++) scanf(“%f”,&score[i][j]); } /*找出每门课程最高的学生学号、课程代号和成绩并输出*/ For(j=1;j<=m;j++) { studid=1;max_score=score[1][j]; for(i=1;i<=n;i++) if(score[i][j]> max_score) { max_score=score[i][j]; studid=i; } Printf(“第%d门课程最高分的学生学号是:%s,成绩为:%.2f\\n”,j,a[studid],max_score); } } 第7章 函数 7.1 写出函数定义的一般形式,并说明各部分的意义。 解:(略) 7.2 函数调用有哪几种形式,各自有什么特点? 解:在C语言中,可以用以下几种方式调用函数: (1) 函数表达式。函数作为表达式的一项,出现在表达式中,以函数返回值参与表达式的运算。这种方式要 求函数是有返回值的。 (2) 函数语句。C语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用作为一各独立的语句。 (3) 函数实参。函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送, 因此要求该函数必须是有返回值的。 7.3写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 解:参考源程序: int maxyueshu(int m,int n) {int m,n; int i=1,t; for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) t=i;} 14 return(t); } int minbeishu(int m,int 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(\ scanf(\ max=maxyueshu(a,b); min=minbeishu(a,b); printf(\ } 2222 7.4 求方程ax+bx+c=0的根,用三个函数分别求当b-4ac>0、b-4ac=0和b-4ac<0时的根,并输出结果。从主函数输入a、b、c的值。 解:参考源程序: #include\ 2 /* 求b-4ac>0时的根*/ float yishigen(float m,float n,float k) { float m,n,k; float x1,x2; x1=(-n+sqrt(k))/(2*m); x2=(-n-sqrt(k))/(2*m); printf(\ } 2 /* 求b-4ac=0时的根*/ float denggen(float m,folat n) { float m,n; float x; x1=x2=-n/(2*m); printf(\ } 2 /* 求b-4ac<0时的根*/ float xugen(float m,float n,float k) { float m,n,k; float x,y; x=-n/(2*m); y=sqrt(-k)/(2*m); printf(\ } 15 main() {float a,b,c,q; printf(\ scanf(\ printf(\ 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.5写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 解:参考源程序: /*是素数返回1,否则返回0*/ int sushuis(int m) { int m; int i=2,t; for(;i<=m;i++) if(m%i==0&&i main() { int a,s; printf(\ scanf(\ s=sushuis(a); if(s==1) printf(\是素数!\\n\ else printf(\不是素数!\\n\ } printf(\ printf(\ } 7.6编一个函数fun(char *s)把字符串中的内容逆置。例如:字符串中原有的内容为:gfedcba,则调用该函数后,串中的内容为:abcdefg。 解:程序分析:该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s+i 参考源程序: #include 16 { int i=0,t,n=strlen(s); for(;s+i {t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;} } main() { char a[N]; clrscr(); printf(\ printf(\fun(a); printf(\ printf(\puts(a); } 7.7 编写一个函数实现两个字符串的连接(不使用库函数strcat())。 例如,分别输入下面两个字符串: This is t he best program. 程序输出: This is the best porgram. 解:参考源程序: #include void fun(char p1[],char p2[]) { int i,j; for(i=0;p1[i];i++) for(j=0;p2[j];j++) p1[i++]=p2[j]; p1[i]='\\0'; } main() { char s1[80],s2[80]; clrscr(); printf(\scanf(\printf(\printf(\ printf(\fun(s1,s2); printf(\printf(\} 7.8自定义函数求3*3矩阵的转置矩阵。 17 解:程序分析 这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列互换时a[j]在好是与a[j][i]互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i<2;i++)再套for(j=i+1;j<3;j++)来完成左上角的走动。*/ 参考源程序: #include int fun(int array[3][3]) { int i,j,t; for(i=0;i<2;i++) for(j=i+1;j<3;j++) {t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;} } main() { int i,j; int array[3][3]={{100,200,300},{400,500,600},{700,800,900}}; clrscr(); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(\printf(\} fun(array); printf(\转置矩阵是:\\n\for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(\printf(\} } 7.9 用函数实现牛顿迭代法求一元三次方程的根。 -5 解:牛顿迭代法的公式是:x=x0-f(x)/f’(x),设迭代误差小于10时结束。 参考源程序: #include float solut(float a,float b,float c,float d) { float x=1,x0,f,f1; do{ x0=x; f=((a*x0+b)*x0+c)*x0+d; f1=(3*a*x0+2*b)*x0+c; x=x0-f/f1;}while(fabs(x-x0)>=1e-5); return(x); } main() 18 { float a,b,c,d; printf(“请输入一元三次方程的系数a,b,c,c:\\n”); scanf(“%f,%f,%f,%f”,&a,&b,&c,&d); printf(“一元三次方程为:%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0\\n”,a,b,c,d); printf(“该方程的根为:x=%7.2f\\n”,solut(a,b,c,d)); } 第8章 编译预处理 解:参考源程序: {int c,d,s; scanf(\ CHANGE(c,d,s); } 三角形面积为:三角形的面积公式为: s(s?a)(s?b)(s?c) 其中S=(a+b+c)/2。 S,一个用来求area,另一个宏用来求。写程序,在程序中用带实参的宏名来求面积AQRT(m,n,k) sqrt(SSS(m,n,k)*(SSS(m,n,k)-m)*(SSS(m,n,k)-n)*(SSS(m,n,k)-k)) 19 8.1定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的 两个值。 #define CHANGE(a,b,t) t=a;a=b;b=a main() printf(\ 8.2输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。 #define Q(a,b) a%b main() {int c,d,t; scanf(\ t=Q(c,d); printf(\ } 8.3 Area= 定义两个带参的宏area。 #include\ #define SSS(m,n,k) (m+n+k)/2 #define main() { float a,b,c,s,area; scanf(\ s=SSS(a,b,c); area=AQRT(a,b,c); printf(\ } 8.4给年份year定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y。 解:参考源程序: #define LEAPYEAR(y) y%4==0&&y0!=0||y@0==0 main() {int y; scanf(\ if(LEAPYEAR(y)) printf(\ else printf(\ } 第9章 指针 9.1 输入三个整数,按由小到大的顺序输出。 解:参考源程序: main() {int a,b,c,*p1,*p2,*p3,t; scanf(\ p1=&a;p2=&b;p3=&c; if(*p1>*p2) {t=p1;p1=p2;p2=t;} if(*p1>*p3) {t=p1;p1=p3;p3=t;} if(*p2>*p3) {t=p2;p2=p3;p3=t;} printf(\ } 或 main() {int a,b,c,*p1,*p2,*p3,t; scanf(\ p1=&a;p2=&b;p3=&c; if(a>b) {t=*p1;*p1=*p2;*p2=t;} if(a>c) {t=*p1;*p1=*p3;*p3=t;} if(b>c) {t=*p2;*p2=*p3;*p3=t;} printf(\ } 9.2输入三个字符串,按由小到大的顺序输出 #define N 3 #define M 20 main() {char str0[N][M],str1[M],*p,*q; int i,l,m,n; q=str0; for(;p l=strcmp(q,q+1); 20 str[i]=str[i]-32; fputc(str[i],fp); i++;} fclose(fp); fp=fopen(\ fgets(str,strlen(str)+1,fp); printf(\fclose(fp); } 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出 平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件\中。 1.程序分析: 2.程序源代码: #include \struct student { char num[6]; char name[8]; int score[3]; float avr; } stu[5]; main() {int i,j,sum; FILE *fp; /*input*/ for(i=0;i<5;i++) { printf(\printf(\ scanf(\printf(\ scanf(\sum=0; for(j=0;j<3;j++) { printf(\scanf(\sum+=stu[i].score[j]; } stu[i].avr=sum/3.0; } fp=fopen(\for(i=0;i<5;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf(\fclose(fp); } 26
正在阅读:
C编程例题09-25
北京师范大学易学与建筑文化高级硕士研修班12-30
谈教师的礼仪修养03-26
小班主题活动图形宝宝活动反思(一)07-21
花旗银行内部控制和风险评估04-20
《中华民国训政时期约法》01-02
亲情无价作文350字06-23
爸爸的目光作文500字07-03
“七五”普法先进个人事迹材料范文2篇09-07
远程教育大作业题目03-29
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 例题
- 编程
- 我国加入WTO后企业财务管理的发展对策
- K3 BOS 实施开发应用指南 - 图文
- 对外汉语中级说话课教案
- 大学生暑期英语家教社会实践报告
- 施工组织设计“10kV疏港线车路溪村公变台区低压改造工程” - 图文
- 2018年中国钻机电控系统行业调研与未来报告目录
- 说课课题教案
- 正确认识民间融资 助推经济又好又快发展
- 化学研究报告标记版
- 常青北路监理大纲删减后
- 2019年中国工业锅炉市场调查研究及发展前景趋势分析报告目录
- 水力学与水泵复习题(含标准答案) - 图文
- 机械原理实验思考题参考 - 图文
- 二十年后回故乡作文800字 - 26正式版
- Book3 Unit1单元检测
- 公司开展基层组织建设年活动实施方案
- delphi中的应用程序、文件和工程管理器
- 文化生活知识点填空练习
- 珠海长隆海洋王国超级详细攻略
- 美学原理2019