C语言编程问题.

Python025

C语言编程问题.,第1张

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

以下两个程序结果比较.

(一)

#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//缺少返回}