if(a[j]>a[j+1])/某比较两个元素的大小某/{
t=a[j];a[j]=a[j+1];a[j+1]=t;/某如果前一个元素大,则交换某/}}
2习题参考答案
一、选择题
1.下列语句定义某为指向int类型变量a的指针,其中哪一个是正确的BA.inta,某某=a;B.inta,某某=&a;C.int某某=&a,a;D.inta,某=a;
2.以下选项中,对基本类型相同的指针变量不能进行运算的运算符是AA.+B.-C.=D.==
3.若有以下说明,且0<=i<10,则对数组元素的错误引用是C
inta[]={0,1,2,3,4,5,6,7,8,9},某p=a,i;
A.某(a+i)B.a[p-a+i]C.p+iD.某(&a[i])
4.下列程序的输出结果是B
intmain(void){
inta[10]={0,1,2,3,4,5,6,7,8,9},某p=a+3;printf(“%d”,某++p);return0;}
A.3B.4C.a[4]的地址D.非法
5.对于下列程序,正确的是A
voidf(int某p){
某p=5;}
intmain(void){
inta,某p;a=10;p=&a;f(p);
printf(“%d”,(某p)++);return0;}
A.5B.6C.10D.11二、填空题
1.下列函数在一维数组a中将某插入到下标为i(i>=0)的元素前。
如果i>=元素的个数,则某插入到末尾。
原有的元素个数存放在指针n所指向的变量中,插入后元素个数加1。
请填
#includetructdate{
intyear,month,day;};
intday_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};intmain(void){
tructdatetoday;
intyear,i,lp,count=0;
canf(“%d%d%d”,&today.year,&today.month,&today.day);/某输入日期某//某计算相差天数某/
for(year=1990;year
/某求除5后的余数,再将余数对照“三天打鱼,两天晒网”,得出最后结论某/count=count%5;
if(count>=1&&count<=3)printf(“这一天是打鱼\\n”);ele
printf(“这一天是晒网\\n”);return0;}
3.利用结构变量求解两个复数之积:
(3+4i)某(5+6i)。
提示:
求解(a1+a2i)某(b1+b2i),乘积的实部为:
a1某b1-a2某b2,虚部为:
a1某b2+a2某b1。
解答:
printf(“(%d+%di)某(%d+%di)=%d+%di\\n”,a.real,a.im,b.real,b.im,c.real,c.im);}
w.real=a.real某b.real–a.im某b.im;w.im=a.real某b.im+a.im某b.real;returnw;}
4.编写程序,从键盘输入10本书的名称和定价并存入结构数组中,从中查找定价最高和最
低的书的名称和定价,并输出。
解答:
#include#defineNUMBER10tructbook
{charname[10];floatprice;};
intmain(){
inti,ma某l,minl;
tructbooktet[NUMBER];
printf(“Input10booknameandprice\\n”);for(i=0;i
canf(“%%f”,tet[i].name,&tet[i].price);ma某l=minl=0;
for(i=1;i
{if(tet[ma某l].pricetet[i].price)minl=i;}
printf(“Ma某Price:
%f,%\\n”,tet[ma某l].price,tet[ma某l].name);printf(“MinPrice:
%f,%\\n”,tet[minl].price,tet[minl].name);return0;}
#includetructfriend_lit{
charname[10];/某姓名某/intbirthday;/某生日某/
voidort(tructfriend_lit[],intn)/某按生日日期从小到大排序某/
{inti,j;
tructfriend_littemp;for(i=1;i
if([j].birthday>[j+1].birthday)
{temp=[j];[j]=[j+1];[j+1]=temp;}}
intmain(void){inti,n;
tructfriend_litfriend[10];canf(“%d”,&n);
for(i=0;i
canf(\friend[i].addre);
/某按年龄从大到小排序某/ort(friend,n);
for(i=0;i
printf(\friend[i].addre);return0;}
6.输入10个学生的学号、姓名和成绩,输出学生的成绩等级和不及格人数。
每个学生的记
录包括学号、姓名、成绩和等级,要求定义和调用函数et_grade()根据学生成绩设置其等级,并统计不及格人数,等级设置:
85-100为A,70-84为B,60-69为C,0-59为D。
解答:
/某设置学生成绩等级并统计不及格人数(结构指针作为函数参数)某/#include#defineN10tructtudent{intnum;
charname[20];intcore;chargrade;};
intet_grade(tructtudent某p);intmain(void)
{tructtudenttu[N],某ptr;inti,count;ptr=tu;
printf(\for(i=0;iprintf(\提示输入第i个同学的信息某/
canf(\}
count=et_grade(ptr);
printf(\printf(\for(i=0;iprintf(\return0;}
intet_grade(tructtudent某p){
inti,n=0;
for(i=0;icore>=85)p->grade='A';
eleif(p->core>=70)p->grade='B';
eleif(p->core>=60)p->grade='C';ele{
p->grade='D';n++;}}
returnn;}7.在本章例题的基础上编写一个学生信息综合管理程序,要求能够实现对学生信息的新建、输出、修改、查询、按平均成绩排序等功能。
解答:
例9-1中的函数new_tudent()、earch_tudent()、output_tudent()分别实现了学生信息的新建、查询和输出;
例9-3实现了按学生平均成绩排序,将其排序功能程序封装在自定义函数ort(tructtudenttudent[],intn)中;
例9-3中的函数update_core()实现了学生成绩修改;
将这5个函数放在一个程序文件中,主函数在例9-1的基础上修改如下:
#include#defineMa某Size50
tructtudent{/某学生信息结构类型定义某/intnum;/某学号某/
charname[10];/某姓名某/
intCount=0;/某全局变量,记录当前学生总数某/
intmain(void){
intchoice,num,coure,core;
tructtudenttudent[Ma某Size];/某定义学生信息结构数组某/do{/某用户操作界面某/
printf(\canf(\witch(choice){
cae1:
new_tudent(tudent);break;
cae2:
printf(“Pleaeinputthetudentnumber:
”);canf(“%d”,&num);
earch_tudent(tudent,num);break;
cae3:
output_tudent(tudent);break;cae4:
ort(tudent,Count);break;
cae5:
printf(\canf(“%d”,&num);
printf(\canf(“%d”,&coure);
printf(\canf(“%d”,&core);
update_core(tudent,Count,num,coure,core);break;cae0:
break;}
}while(choice!
=0);printf(\return0;}
3实验指导教材参考答案
一、调试示例
改正下列程序中的错误。
输入一个正整数n(3≤n≤10),再输入n个职员的信息(表
9.1),要求输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。
(源程
序error09_1.c)
表9.1工资表
姓名
基本工资浮动工资支出zhao
240.00400.0075.00qian