程序设计基础——C语言科学出版社第六章——其他数据模型,教材习题答案。
东风冷雪如果认为对自己不利那就离开。
你看了比没有看好,首先印象还是有的,如果自己不会你可能都不会写,结果就是什么也不做,老师讲解时效果也会降低。
其次你不会可能上网查书也是为了寻找答案,这样浪费时间(可能影响深些)。
一份答案做起来不容易,合理利用不要全部抄复制,这样老师会发现。
你可以修改啊!你可以排版的比我更加调理清楚。
1.0#include<stdio.h>struct s{int x,*y;} *p;int date[]={10,20,30};struct s array[]={100,&date[0],200,&date[1],300,&date[2]};void main(){p=array;printf("%d\n",++p->x);printf("%d\n",++*p->y);printf("%d\n",*++p->y);}/* p指向结构体数组array首地址即是&array[0].(1)++p->x 中->运算符优先级大于++所以)p->x 结果是100++p->x =101。
(2)++*p->y中->运算符优先级大于++和*++和*同优先级别结合方向自右向左所以p->y=&date[0], *p->y=date[0]=10, ++*p->y=11。
(3)*++p->y中同理所以 p->y=&date[0], ++p->y=&date[1], *++p->y=date[1]=20. */#include"stdio.h"void main(){struct stuinf{char name[15];int score;}; //定义结构体类型struct stuinf student;printf("输入学生的姓名\n");gets();/*不要用scanf输入它遇到空格要结束。
*/ printf("输入学生的分数\n");scanf("%d",&student.score);printf("\n%s\t%d\n",,student.score); }3.0#include<stdio.h>#define n 2struct student{long int id; //这里的学号是数字char name[10];char sex;int age;float score;};typedef struct student stu; //重新命名,好操作。
void main(){stu s[n]; //定义结构体数组int i,j;float aveage,avescore;int num1=0,num2=0,sumage=0,sumscore=0;for(i=0;i<n;i++){printf("输入第%d人学号:",i+1);scanf("%ld",&s[i].id);printf("输入第%d人的姓名:",i+1);scanf("%s",s[i].name);printf("请输入第%d人性别,如果男输入m,女输入f: ",i+1);getchar(); //接受上次的回车,scanf("%c",&s[i].sex);//字符要取地址,字符串不用取地址符号。
printf("输入第%d人的年龄:",i+1);scanf("%d",&s[i].age);printf("输入第%d人的成绩",i+1);scanf("%f",&s[i].score);printf("\n");}for(i=0;i<n;i++){if(s[i].sex=='m') num1++;else num2++;sumage=sumage+s[i].age;sumscore=sumscore+s[i].score;}aveage=sumage/n;avescore=sumscore/n;printf("班上男生:%d人女生:%d人\n",num1,num2); printf("平均年龄为:%.2f\n",aveage);printf("平均成绩为:%.2f\n",avescore);printf("\n成绩高于平均分的学生信息为:\n");for(i=0;i<n;i++)if(s[i].score>avescore)printf("%ld, %s, %c,%d, %.2f",s[i].id,s[i].name,s[i].sex,s[i].age,s[i].score);}}4.0输入今天是星期几的序号(0~6代表星期天至星期六),给今天和昨天赋予枚举值,并输出昨天是星期几对应的枚举值。
#include<stdio.h>enum day{sun=0,mon=1,thu=2,wed=3,th=4,fri=5,sat=6};void main(){enum day today ,yesterday;int a;printf("输入今天是星期几的序号:");/* 06代表星期天至星期六*/scanf("%d",&a);if(a>0&&a<7)printf("昨天是星期几对应的枚举值:%d\n",a-1);else if(a==0)printf("昨天是星期几对应的枚举值:%d\n",6); else printf("error ,error\n");printf("昨天是:");switch(a-1){case 0: printf("sum\n"); break;case 1: printf("mon\n"); break;case 2: printf("thu\n"); break;case 3: printf("wed\n"); break;case 4: printf("th\n"); break;case 5: printf("fri\n"); break;case 6: printf("sat\n"); break;case 7: printf("sun\n"); break;}}5.0#include"stdio.h"#define m 20void main(){struct publish_date{int year;int month;int day;};struct book{char book_name[30];char author[10];char publisher[50];struct publish_date time;float price;};struct book b[m];int i;for(i=0;i<m;i++){printf("输入第%d本书的信息",i+1);printf("请输入书名:");scanf("%s",b[i].book_name);printf("输入作者");scanf("%s",b[i].author);printf("输入出版社");scanf("%s",b[i].publisher);printf("输入出版日期,逗号分隔");scanf("%d,%d,%d",&b[i].time.year,&b[i].time.month,&b[i].time.day);printf("输入价格");scanf("%f",&b[i].price);}printf("book_name\t author\t publisher\t publish_date\t price\n");for(i=0;i<m;i++){printf("%-10s\t ",b[i].book_name);printf("%-10s\t",b[i].author);printf("%-10s\t",b[i].publisher);printf("%d-%d-%d\t",b[i].time.year,b[i].time.month,b[i].time.day);printf("%-3.2f\n",b[i].price);printf("\n");}}6.06.0某单位工资结构体包含,工资编号,职工姓名,工资年龄,考核奖金,房租水电,公积金,实发工资等内容,假设该单位有六位职工。
输入职工信息,不包括实发工资,计算每一个人的实发工资;统计单位的实发工资总额;计算单位的平均工资;#include<stdio.h>void select(struct worker s[],int n); // 这个函数是从小到大排序#define m 6struct worker{int id;char name[15];int wage1; //工龄工资int price;int pay1; // 房租水电int pay2; //公积金float wage; // 实发工资};void main(){struct worker s[m];int i,j,k,max;int sum;float ave,wage[m],temp;for(i=0;i<m;i++){printf("输入第%d人的信息",i+1);printf("输入工资编号:");scanf("%d",&s[i].id);printf("输入职工姓名:");scanf("%s",s[i].name);printf("工龄工资:");scanf("%d",&s[i].wage1);printf("考核奖金:");scanf("%d",&s[i].price);printf("房租水电:");scanf("%d",&s[i].pay1);printf("工积金:");scanf("%d",&s[i].pay2);}sum=0;for(i=0;i<m;i++){wage[i]=s[i].wage1+s[i].price-s[i].pay1-s[i].pay2;printf("第%d人的实发工资",i+1);printf("%5.2f\n",wage[i]);sum=sum+wage[i];}printf("单位工资总额:%d\n",sum);printf("单位平均工资:%f\n",sum/(m*1.0));for(k=0;k<m;k++){s[k].wage=s[k].wage1+s[k].price-s[k].pay1-s[k].pay2;}select(s,m);for(i=0;i<m;i++){printf("%-10d %-10 %s",s[i].id,s[i].name);printf("%5d %5d %5d %5d %10.2f\n",s[i].wage1,s[i].price,s[i].pay1,s[ i].pay2,s[i].wage);}}/*排序函数*/ // 这个函数是从小到大排序void select(struct worker s[],int n){int i,j,k,max;struct worker temp;for(i=0;i<n-1;i<i++){max=i;for(j=i+1;j<n;j++)if(s[max].wage>s[j].wage)max=j;if(i!=max){temp=s[i];s[i]=s[max];s[max]=temp;}}7-1#include<stdio.h>void main(){int a=5,b=6,c=7,d=8,m=2,n=2;printf("%d\n",(m=a>b)&(n=c>d));}/*a>b不成立,所以m=0, c>d不成立,所以n=0, 0&0=0 */#include<stdio.h>void main(){unsigned a,b,c,d;scanf("%o",&a);b=a>>4;c=~(~0<<4);d=b&c;printf("%o,%o\n",a,b);printf("d=%o c=%o\n",d,c);}/* a=0331(8),八进制,因为输入为%o, a=011 011 001(2)b=a>>4=000001101(2)=015(8)c=000~1111=15d=b&c=000 001 101(2)=15(8) */8题编写一个函数int move(int value,char dirction,int digits), 其中形参是value是被循环移位的数,dirction,是被移位的方向,r为友移,l左移, digits为移动位数,函数函数换回值为移动结果。