| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4988 人关注过本帖
标题:大家都来看阿,瞧一瞧看一看啊
只看楼主 加入收藏
韩剧鼻祖
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2006-10-1
收藏
得分:0 
谢谢,孤单就是豪爽

2006-10-28 22:25
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

结构体与共用体综合测试

1 定义一个结构体变量(包括年,月,日)。计算该日在本年中是第几天,注意闰年
问题。
解:
struct
{ int year;
int month;
int day;
} date;
main()
{ int days;
printf("input year,month,day:");
scanf("%d,%d,%d",&year,month,day);
switch(date.month)
{ case 1: days=date.day; break;
case 2: days=date.day+31; break;
case 3: days=date.day+59; break;
case 4: days=date.day+90; break;
case 5: days=date.day+120; break;
case 6: days=date.day+151; break;
case 7: days=date.day+181; break;
case 8: days=date.day+212; break;
case 9: days=date.day+243; break;
case 10: days=date.day+273; break;
case 11: days=date.day+304; break;
case 12: days=date.day+334; break;
}
if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.month>=3)
days+=1;
printf("\n%d/%d is the %dth day in %d."date.month,date.day,days,date.year);
}
2 写一个函数days,实现上面的计算。由主函数将年,月,日传递给days函数,计算
后将日数传回主函数输出。
解:
struct y_m_d
{ int year;
int month;
int day;
} date;
int days(struct y_m_d datel)
{ int sum;
switch(datel.month)
{ case 1: sum=date1.day; break;
case 2: sum=date1.day+31; break;
case 3: sum=date1.day+59; break;
case 4: sum=date1.day+90; break;
case 5: sum=date1.day+120; break;
case 6: sum=date1.day+151; break;
case 7: sum=date1.day+181; break;
case 8: sum=date1.day+212; break;
case 9: sum=date1.day+243; break;
case 10: sum=date1.day+273; break;
case 11: sum=date1.day+304; break;
case 12: sum=date1.day+334; break;
}
if((date1.year%4==0&&date1.year%100!=0||date1.year%400==0)&&date1.month>=3)
sum+=1;
return(sum);
}
main()
{ printf("input year,month,day:");
scanf("%d,%d,%d",&year,month,day);
printf("\n");
printf("%d/%d is the %dth day in %d."date.month,date.day,days(date),date.year);
}
3 编写一个函数printf,打印一个学生的成绩数组,该数组中有5个学生的数据记录
每个记录包括(num,name,score[3],用主函数输入这些记录,用printf函数输出这些记录
解:
#define N 5
struct student
{ char num[6];
char name[8];
int score[4];
} stu[N];
main()
{ int i,j;
for(i=0;i<N;i++)
{ printf("\ninput score of student %d:\n",i+1);
printf("No.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{ printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
printf("\n");
}
print(stu);
}
print(struct student stu[6])
{ int i,j;
printf("\n NO. name score1 score2 score3\n");
for(i=0;i<N;i++)
{ printf("%5s%10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]);
printf("\n");
}
}
4 在上题的基础上,编写一个函数input,用来输入5个学生的数据记录.
解:
#define N 5
struct student
{ char num[6];
char name[8];
int score[4];
}stu[N];
input(struct student stu[])
{ int i,j;
for(i=0;i<N;i++)
{ printf("\ninput scores of student %d:\n",i+1);
printf("No.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{ printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
printf("\n");
}
}
写一个main函数,调用input函数以及题3中提供的print函数,就可以完成对学生
数据的输入和输出.
5 有10个学生,每个学生的数据包括学号,姓名,3门课的成绩,从键盘输入10个学生的
数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课
成绩,平均分数).
#define N 10
struct student
{ char num[6];
char name[8];
int score[4];
float avr;
} stu[N];
main()
{ int i,j,maxi,sum;
float average;
for(i=0;i<N;i++)
{ printf("\ninput score of student %d:\n",i+1);
printf("No.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{ printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
}
average=0;
max=0;
maxi=0;
for(i=0;i<N;i++)
{ sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max)
{ max=sum;
maxi=i;
}
}
average/=N;
printf("NO. name score1 score2 score3 average\n");
for(i=0;i<N;i++)
{ printf("%5s%10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]);
printf("%8.2f\n",stu[i].avr);
}
printf("average=%6.2f\n",average);
printf("The highest score is: %s,score total: %d",stu[maxi].name,max);
}
6 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),
指向字符串开始的空间.new(n)表示分配n个字节的内存空间.
#define NULL 0
#define NEWSIZE 1000
char newbuf[NEWSIZE];
char *newp=newbuf;
char *new(int n)
{ if(newp+n<=newbuf+NEWSIZE)
{ newp=newp+n;
return(newp-n);
}
else
rerurn(NULL);
}
7 写一个函数free,将上题用new函数占用的空间释放.free(p)表示将p(地址)指向
的单元以后的内存段释放.
解:
#define NULL 0
#define NEWSIZE 1000
char newbuf[NEWSIZE];
char *newp=newbuf;
free(char *p)
{ if((p>=newbuf)&&(p<newbuf+NEWSIZE))
new=p;
}
8 已有a,b两个链表,每个链表中的结点包括学号,成绩,要求把两个链表合并,按学号
升序排列.
解:
#include<stdio.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{ long num;
int score;
struct student *next;
};
struct student listA,listB;
int n,sum=0;
main()
{ struct student *creat(void);
struct student *insert(struct student*,struct student*);
void pint(struct student *);
struct student *ahead,*bhead,*abh;
printf("\ninput list a:\n");
ahead=creat();
sum=sum+n;
printf("input list b:\n");
bhead=creat();
sum+=n;
abh=insert(ahead,bhead);
print(abh);
}
struct student *creat(void)
{ struct student *p1,*p2,*head;
n=0;
p1=p2=(struct student *)malloc(LEN);
printf("if number&scores of student:\n");
printf("if number is 0,stop inputing.\n");
scanf("%ld,%d",&p1->num,&p2->score);
head=NULL;
while(p1->num!=0)
{ n+=1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student *)malloc(LEN);
scanf("%ld,%d",&p1->num,&p2->score);
}
p2->next=NULL;
return(head);
}
struct student *insert(struct student *ah,struct student *bh)
{ struct student * pa1,* pa2,* pb1,* pb2;
pa2=pa1=ah;
pb2=pb1=bh;
do
{ while((pb1->num>pa1->num)&&(pa1->next!=NULL))
{ pa2=pa1;
pa1=pa1->next;
}
if(pb1->num<=pa1->num)
{ if(ah==pa1)
ah=pb1;
else pa2->next=pb1;
pb1=pb1->next;
pb2->next=pa1;
pa2=pb2;
pb2=pb1;
}
}
while((pa1->next!=NULL)||pa1==NULL&&pb1!=NULL));
if((pb1->num>pa1->num)&&(pa1->next==NULL))
pa1->next=pb1;
return(ah);
}
void print(struct student *head)
{ struct student *p;
printf("\nThere are %d records:\n",sum);
p=head;
if(p!=NULL)
do
{ printf("%ld%d\n",p->num,p->score);
p=p->next;
}
while(p!=NULL);
}
9 13个人围成一圈,从第一个人开始顺序报号1,2,3.凡报到"3"者退出圈子.找出最后
留在圈子中的人原来的序号.
解:
#define N 13
struct person
{ int number;
int nextp;
}link[N+1];
main()
{ int i,count,h;
for(i=1;i<=N;i++)
{ if(i==N)
link[i].nextp=1;
else
link[i].nextp=i+1;
link[i].number=i;
}
printf("\n");
count=0;
h=N;
printf("sequence that persons leave the circle:\n");
while(count<N-1)
{ i=0;
while(i!=3)
{ h=link[h].nextp;
if(link[h].number)
i++;
}
printf("%4d",link[h].number);
link[h].number=0;
count++;
}
printf("\nThe last one is");
for(i=1;i<=N;i++)
if(link[i].number)
printf("%3d",link.number);
}
10 有两个链表a和b,设结点中包含学号,姓名.从a链表中删去与b链表中有相同学号的那些
结点.
解:
#define LA 4
#define LB 5
#define NULL 0
struct student
{ char num[6];
char name[8];
struct student *next;
} a[LA],b[LB];
main()
{ struct student a[LA]={{"101","wang"},{"102","li"},{"105","zhang"},{"106","
wei"}};
struct student b[LB]={{"103","zhang"},{"104","ma"},{"105","chen"},{"107","
guo"},{"108","lui"}};
int i,j;
struct student *p,*p1,*p2,*Pt,*head1,*head2;
head1=a; head2=b;
printf("\nlist a:\n");
for(p1=head1,i=1;p1<a+LA;i++)
{ p=p1;
p1->next=a+i;
printf("%8s%8s\n",p1->num,p1->name);
p1=p1->next;
}
p1->next=NULL;
printf("\n list b:\n");
for(p2=head2,i=1;p2<b+LB;i++)
{ p=p2;
p2->next=b+i;
printf("%8s%8s\n",p2->num,p2->name);
p2=p2->next;
}
p2->next=NULL;
printf("\n");
p1=head1;
while(p1!=NULL)
{ p2=head2;
while(p2!=NULL&&strcmp(p1->num,p2->num)!=0)
p2=p2->next;
if(strcmp(p1->num,p2->num)==0)
if(p1==head1)
head1=p1->next;
else
p->next=p1->next;
p=p1;
p1=p1->next;
}
p1=head1;
printf("\n result:\n");
while(p1!=NULL)
{ printf("%7s%7s\n",p1->num,p1->name);
p1=p1->next;
}
}
11 建立一个链表,每个结点包括:学号,姓名,性别,年龄.输入一个年龄,如果链表中
的结点所包含的年龄等于此年龄,则将此年龄删去.
解:
#define NULL 0
#define LEN sizeof(struct student)
struct student
{ char num[6];
char name[8];
char sex[2];
int age;
struct student *next;
} stu[10];
main()
{ struct student *p,*pt,*head;
int i,length,iage,flag=1;
int find=0;
while(flag==1)
{ printf("Input length of list(<10):");
scanf("%d",&length);
if(length<10)
flag=0;
}
for(i=0;i<length;i++)
{ p=(struct student *)malloc(LEN);
if(i==0)
head=pt=p;
else
pt->next=p;
pt=p;
printf("NO:");
scanf("%s",p->num);
printf("name:");
scanf("%s",p->name);
printf("sex:");
scanf("%s",p->sex);
printf("age:");
scanf("%d",&p->age);
}
p->next=NULL;
p=head;
printf("\n NO. name sex age\n");
while(p!=NULL)
{ printf("%4s%8s%6s%6d\n",p->num,p->name,p->sex,p->age);
p=p->next;
}
printf("input age:");
scanf("%d",&iage);
pt=head;
p=pt;
if(pt->age==iage)
{ p=pt->next;
head=pt=p;
find=1;
}
else
pt=pt->next;
while(pt!=NULL)
{ if(pt->age==iage)
{ p->next=pt->next;
find=1;
}
else
p=pt;
pt=pt->next;
}
if(!find)
printf("Not found %d.",iage);
p=head;
printf("\nNO. name sex age\n");
while(p!=NULL)
{ printf("%4s%8s",p->num,p->name);
printf("%6s%6d\n",p->sex,p->age);
p=p->next;
}
12 将一个链表按逆序排列,即将链头当链尾,链尾当链头.
解:
#define NULL 0
struct stu
{ int num;
struct stu *next;
}
main()
{ int len=1,i;
struct stu *p1,*p2,*head,*new,*newhead;
p1=p2=head=(struct stu *) malloc(sizeof(struct stu));
printf("input number(0:list end):");
scanf("%d",&p1->num);
while(p1->num!=0)
{ p1=(struct stu *) malloc(sizeof(struct stu));
printf("input number(0:list end):");
scanf("%d",&p1->num);
if(p1->num==0)
p2->next=NULL;
else
{ p2->next=p1;
p2=p1;
len++;
}
p1=head;
printf("\n the original list:\n");
do
{ printf("%4d",p1->num);
if(p1->next!=NULL)
p1=p1->next;
}
while(p1->next!=NULL)
printf("%4d",p1->num);
for(i=0;i<len;i++)
{ p2=p1=head;
while(p1->next!=NULL)
{ p2=p1;
p1=p1->next;
}
if(i==0)
newhead=new=p1;
else
new=new->next=p1;
p2->next=NULL;
}
printf("\n\n The new list:\n");
p1=newhead;
for(i=0;i<len;i++)
{ printf("%4d",p1->num);
p1=p1->next;
}
printf("\n");
}



2006-10-28 22:25
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

选择结构程序设计综合测试

1 什么是算术运算?什么是关系运算?什么是逻辑运算?
2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?
解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”,例如3&&5的值为真,系统给出3&&5的值为1。
3 写出下面各逻辑表达式的值,设a=3,b=4,c=5。
1) a+b>c&&b==c
2) a||b+c&&b-c
3) !(a>b)&&!c||1
4) !(x=a)&&(y=b)&&0
5) !(a+b)+e-1&&b+c/2
答案:1)0 2) 1 3)1 4)0 5)1
4有三个整数a,b,c,由键盘输入,输出其中最大的数。
main()
{
int a,b,c,max;
printf(“请输入三个数a,b,c:\n”);
scan(“%d,%d,%d”,&a,*b,&c);
max=a;
if(max<b) max=b;
if(max<c) max=c;
printf(“最大数为:%d:”,max);
} x (x<1)
5 有一函数 y= 2x-1 (1<=x<10) 写一程序,输入x值,输出y值
3x-11 (x>=10)
main ( )
{ int x,y;
printf(“输入x:”);
scanf(“%d”,&x);
if(x<1)
{ y=x;
printf(“x=%3d,y=%d\n”,x,y);}
else if(x<10)
{ y=2*x-1;
printf(“x=%3d,y=%d\n”,x,y);}
else
{ y=3*x-11;
printf(“x=%3d,y=%d\n”,x,y);}
}


2006-10-28 22:26
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 

顺序程序设计综合测试

1 C语言中的语句有哪几类?C语言与其他语言中的语句有哪些异同?
2 怎样区分表达式和表达式语句?C语言为什么要设表达式语句?什么时候用表达式,什么时候用表达式语句?
3 C语言为什么要把输入输出的功能作为函数,而不作为语言的基本部分?
4 若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’,想得到以下的输出格式和效果,请写出程序(包括定义变量类型设设计输出)。要求结果如下:
a= 3 b= 4 c= 5
x=1.200000,y=2.400000.z=-3.600000
x+y= 3.60 y+z=-1.20 z+x=-2.40
u= 51274 n= 128765
c1=’a’ or 97(ASCII)
c2=’b’ or 98(ASCII)

main( )
{
int a,b,c;
long int u,n;
float x,y,x;
char c1,c2;
a=3;b=4;c=5;
x=1.2;y=2.4;z=-3.6;
c1=’a’;c2=’b’;
printf(“\n”);
printf(“a=%2db=%2dc=%2d\n”,a,b,c);
printf(“x=%8.6f,y=%8.6f,z=%9.6f\n”,x,y,z);
printf(“x+y=%5.2fy+z=%5.2fz+x=%5.2f\n”,x+y,y+z,z+x);
printf(“u=%6ldn=%9ld\n”,u,n);
printf(“c1=’%c’ or %d(ASCII)\n”,c1,c1);
printf(“c2=’%c’ or %d(ASCII)\n”,c2,c2);
}
5请写出下面程序的输出结果
解答:
57
5 7
67.856400,-789.124023
67.856400,-789.124023
67.86,-789.12,67.856400,-789.124023,67.856400,-789.124023
A,65,101,41
1234567,4553207,d687
65535,177777,ffff,-1
COMPUTER,COM
6用下面的scanf函数输入数据,使得a=3,b=7,x=8.5,y=71.82,c1=’A’,ca=’a’,问在键盘上如何输入?
main( )
{
int a,b;
float x,y;
char c1,c2;
scanf(“a=%d b=%d”,&a,&b);
scanf(“%f %c”,&x,&y);
scanf(“%c %c”,&c1,&c2);
printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n”,a,b,x,y,c1,c2);
}
7用下面的scanf函数输入数据,使得a=10,b=20,c1=’A’,c2=’a’,x=1.5,y=-3.75,z=67.8,请问在键盘上如何输入数据?
scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z);
可以在键盘上输入: 10 20Aa1.5 –3.75 1.5,67.8
8设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编写程序
main( )
{
float pi,p,h,r,l,s,sq,vq,vz;
pi=3.1415926
printf(“请输入圆半径r,圆柱高h:\n”);
scanf(“%f,%f”,&r,&h);
l=2*pi*r;
s=pi*r*r;
sq=4*pi*r*r;
vq=3.0/0*pi*r*r*r;
vz=pi*r*r*h;
printf(“圆周长为:l=%6.2f\n”,l);
printf(“圆面积为:s=%6.2f\n”,s);
printf(“圆球表面积为:sq=%6.2f\n”,sq);
printf(“圆球体积为:vq=%6.2f\n”,vq);
printf(“圆柱体积为:vz=%6.2f\n”,vz);
}
9输入一个华氏温度,要求输出摄氏温度,公式为 ,输出要求有文字说明,取两位小数。
解:
main( )
{
float c,f;
printf(“请输入一个华氏温度:\n”);
scanf(“%f”,&f);
c=5.0/9.0*(f-32);
printf(“摄氏温度为:%5.2f\n”,c);
}
10编写程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符,并思考以下问题:(1)变量c1、c2应定义为字符行或整型?抑或二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整型变量与字符变量是否在任何情况下都可以互相代替?如”char c1,c2;”与”int c1,c2;”是否无条件等价?


2006-10-28 22:27
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 
以下是引用韩剧鼻祖在2006-10-28 22:25:38的发言:
谢谢,孤单就是豪爽

当然豪爽
灌水还有这么多的积分 还得人情


2006-10-28 22:28
韩剧鼻祖
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2006-10-1
收藏
得分:0 
呵呵,我早就料到,不过您替我办了事,我还是要谢您,我的积分也是这么来的

2006-10-28 22:34
韩剧鼻祖
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2006-10-1
收藏
得分:0 
看到后做得怎么样啊,怎么也没人回我一个

2006-10-28 22:45
孤单的帅哥
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-10-28
收藏
得分:0 
你看你电脑上的这个->
谁还回拉

2006-10-28 22:47
韩剧鼻祖
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2006-10-1
收藏
得分:0 
你啊,呵呵,还问我呢,你自己用行动都回答了

2006-10-28 22:49
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
楼上的,不要再发了.

这些大都是老潭书上的习题.
这里有一部分参考程序:
http://bbs.bc-cn.net/viewthread.php?tid=90685&extra=&page=100#

倚天照海花无数,流水高山心自知。
2006-10-28 23:03
快速回复:大家都来看阿,瞧一瞧看一看啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030344 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved