7.3 程序分析题 1.阅读下列程序,写出运行结果。(字符0的ASCII码为十六进制的30) main() { union { char c; char i[4]; } z; z.i[0]= 0x39;z.i[1]= 0x36; printf("%c \n", z.c); } 【解】共用型变量z有两个成分,一个是字符型的c,另一个是有4个字符的数组i。由于共用型的成分是覆盖存储,成分c的内容也是成分i的首元素。程序给Z的i成分的首元素置十六进制代码0x39,即十进制数57。数57是字符’9’的ASCII代码。用字符输出格式,输出该变量的值,将输出字符’9’ 。
2.阅读下列程序,写出程序的运行结果。 main () { struct student { char name[10]; float k1; float k2; } a[2]={ {"zhang", 100,70} ,{"wang",70,80 } },* p=a; int i; printf("\nname:%s total=%f",p ->name,p -> k1+p -> k2); printf("\nname:%s total=%f",a[l].name, a[1].k1+a[l].k2); } 【解】结构数组a 有两个元素,每个元素有三个成分:10个元素的字符数组和两个类型为float的成分k1、k2。结构指针变量p指向结构数组a的首元素。其中初始化使a的两个元素分别有值如下: a[0].name="zhang",a[0].k1= 100.0,a[0].k2=70.0, a[1].name="wang", a[l].k1=70.0, a[1].k2 =80.0。所以程序运行后输出: name:zhang total = 170.000000 name: wang total= 150.000000
3.阅读下列程序,写出程序的运行结果。 main ( ) { enum em { em1=3, em2=l, em3 }; char * aa[] = {"AA","BB","CC","DD" }; printf("%s%s%s\n",aa[em1],aa[em2], aa[em3] ); } 【解】由枚举类型测的定义知,枚举类型常量em1的值是3,枚举类型常量em2的值是1,枚举类型常量em3的值是2。所以程序运行后输出: DD BB CC 7.4 程序设计题 1.用结构体存放下表中的数据,然后输出每人的姓名和实发工资( 基本工资+浮动工资-支出)。 姓名 基本工资(元) 浮动工资(元) 支出(元) Li 220.00 300.00 90.00 Xia 370.00 180.00 60.00 Wang 620.00 0.00 70.00 【解】程序定义struct person结构类型,包含人的姓名(<20个字符)、基本工资、浮动工资和支出,用这个struct person结构类型定义数组。程序首先输入人数n(<100),再输入n人的信息,最后输出各人的姓名和实发金额。程序如下: # include # include # define N 100 struct person { char name[20] ; float base; float ds; float pay; } person[N], *p; void main () { int n; float d; char buf[120]; printf("输入n(<%d)! \n",N); do { scanf("%d", &n); if(n>0 && n printf("输入n不合理! 请重新输入! \n" ); } while(1); printf("输入%d个人的姓名、基本工资、浮动工资和支出 \n", n); for( p=person; p scanf("%s", buf); strncpy( p -> name, buf, 19); scanf("%f", &d); p -> base=d; scanf("%f",&d); p -> ds=d; scanf("%f", &d ); p -> pay= d; } for(p = person; p< person+n; p++) printf("%s %.2f\n",p-> name,P->base+p->ds-P -> pay); }
2.编一个程序,输入10个职工的编号、姓名、基本工资、职务工资,求出其中“基本工资十职务工资”最少的职工姓名并输出。 【解】类似上一程序,直接给出程序如下: # include # define N 10 struct person { char no[10]; char name[20]; float base1; float base2; } person[N], *p, *minp; void main () { float d; char buf[120]; printf("输入%d个人的编号、姓名、基本工资、职务工资 \n", N); for(p=person; p scanf("%s", buf); strncpy(p -> no,buf,9); scanf("%s", buf); strncpy( p -> name, buf, 19); scanf("%f", &d);p -> base1 =d; scanf("%f",&d);p -> base2=d; } for(minp=p=person; p if (p -> basel+p -> base2< minp -> basel+ minp -> base2) minp =p; printf("基本工资与职务工资和最少的职工是%s \n",minp -> name); printf("他的基本工资与职务工资和是%.2f \n",minp -> basel+ minp -> base2); } |