问题描述:
以下两个程序结果比较.
(一)
#include"stdio.h"
#define MAX(x,y) (x)>(y)?(x):(y)
main()
{
int a=5,b=2,c=3,d=3,t
t=MAX(a+b,c+d)*10
printf("%d\n",t)
}
(二)
#include"stdio.h"
#define MIN(x,y) (x)<(Y)?(x):(y)
main()
{
int i=10,j=15,k
k=10*MIN(i,j)
printf("%d\n",k)
}
第一个答案给我的分析是:
7>6?7:6*10,即t=7.
第二个答案给我的分析是:
10*i<j?i:j,即100<15?10:15,所以k=15
第一个程序中10为什么要乘在后面,而第二个要乘在前面呢?
解析:
你的分析是正确的,这是一个关于宏定义的问题,你可以这样认为:#define MIN(x,y) (x)<(Y)?(x):(y)这句程序的意思就"在下面的程序中凡是遇到#define MIN(x,y)的地方,都用 (x)<(Y)?(x):(y)来代替就行了,然后按运算符的优先级来运算就行了。"。k=10*MIN(i,j) 可以这样认为:k=10*(x)<(Y)?(x):(y)即k=10*10<15?10:15,显然是15。
#include<stdio.h>//缺少重要
头文件
#include
<string.h>#include
<stdlib.h>
int
SIZEstruct
student{
char
name[20]
int
xh
int
yw
//语文
int
sx
//数学
int
yy
//英语}*stud
void
save()int
srsj()int
cxsj()int
main()int
gzcx()int
gzcx(){
int
i,a,b
char
name[10]={0}
FILE
*fp
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("无法打开此文件\n")
}
printf("\t\t\t<学生信息查询>\n\n\n\t\t\t查看姓名,
\n")
for(i=0i<SIZEi++)
{
fread(&stud[i],sizeof(struct
student),1,fp)
printf("\t\t%s\n\t\t%d\n\t\t%d\n\t\t%d",stud[i].name,stud[i].xh,stud[i].sx,stud[i].yw,stud[i].yy)
}
printf("\n\t\t***************************************\n")
printf("\t\t请输入数字:1:按学号查询\n
2:按姓名查询\n")
printf("\t\t***************************************\n")
printf("你输入的数字:")
scanf("%d\n",&b)
switch(b)
case
1:
{
printf("请输入工号,查看工资清单\n\n")
printf("工号:")
scanf("%d\n",&a)
printf("\t\t<学生信息查询>\n")
for(i=0i<SIZEi++)
{
if(stud[i].xh==a)
{
printf("\t\t%s\n\t\t%d\n",stud[i].name,stud[i].xh)
}
}
break
case
2:
{printf("请输姓中文姓名,查看学生信息查询\n\n")
printf("姓名:")
scanf("%s",name)
for(i=0i<SIZEi++)
{
if(strcmp(name,stud[i].name)==0)
{
printf("\t\t%s\n\t\t%d\n",stud[i].name,stud[i].xh)
}
}
}
}
printf("\n")
printf("\n\n\t\t***************************************\n")
printf("\t\t注意:但无法查询时,请按要求操作!或者是无此数据!\n")
printf("\t\t***************************************\n\n\n\n")
fclose(fp)
main()
return
0}
void
save(){
FILE
*fp
int
i
if((fp=fopen("stu.dat","wb"))==NULL)
{
printf("cannot
open
file
\n")
return
}
for(i=0i<SIZEi++)
if(fwrite(&stud[i],sizeof(struct
student),1,fp)!=1)
fclose(fp)}
int
srsj(){
int
i
int
SIZE
printf("输入学生格式:")
scanf("%d",&SIZE)
stud=new
struct
student[SIZE]
for(i=0i<SIZEi++)
scanf("%s%d%d%d%d",stud[i].name,&stud[i].xh,&stud[i].sx,&stud[i].yw,&stud[i].yy)
save()
return
0}
int
cxsj(){
int
i
FILE
*fp
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("cannot
open
file\n")
}
for(i=0i<SIZEi++)
{fread(&stud[i],sizeof(struct
student),1,fp)
printf("\t\t姓名:%s\t\t学号:%d\n",stud[i].name,stud[i].xh)
}
fclose(fp)
return
0}int
main() {
int
a
printf("\t\t1:进入
输入数据
\n\t\t2:查询数据\n\t\t3:查询\n")
printf("输入数字:")
scanf("%d",&a)
if(a==1)
srsj()
if(a==2)
cxsj()
if(a==3)
gzcx()
return
0//缺少返回}