《C语言第三版课后习题》9
课后习题8.9
编写一函数count,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数, 只要结果,别输出什么提示信息。
#include<stdio.h>
#include<string.h>
int str(char p[]) {
int i=0,a=0,b=0,c=0,d=0;
while(p[i]!='\0') {
if(p[i]>='a'&&p[i]<='z'||p[i]>='A'&&p[i]<='Z') {
(a)++;
} else if(p[i]>='0'&&p[i]<='9') {
(b)++;
} else if(p[i]==' ') {
(c)++;
} else {
(d)++;
}
i++;
}
printf("%d %d %d %d",a,b,c,d);
return 0;
}
int main() {
char p[30];
gets(p);
str(p);
}
课后习题9.2
输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。
#include<stdio.h>
#define s(a,b) a%b
int main() {
int x,y;
scanf("%d%d",&x,&y);
printf("%d",s(x,y));
return 0;
}
课后习题9.3
三角形面积=SQRT(S*(S-a)*(S-b)*(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。
定义两个带参的宏,一个用来求area,另一个宏用来求S。
写程序,在程序中用带实参的宏名来求面积area。
#include <stdio.h>
#include<math.h>
#define s(a,b,c) (a+b+c)/2
#define area(a,b,c,s) sqrt(s*(s-a)*(s-b)*(s-c))
int main() {
float x,y,z;
scanf("%f%f%f",&x,&y,&z);
printf("%.3f",area(x,y,z,s(x,y,z)));//先算小括号,然后大括号;
return 0;
}