1.在键盘上输出一个正整数,要求将其十位数和个位数对调。
#include
int main(){
int a,i,j;
printf("请输入一个正整数:");
scanf("%d",&a);
while(a<=0||a!=(int)a) {
printf("输入错误\n请输入一个正整数:");
scanf("%d",&a);
}
i=a%10;//个位
if(i==a){
printf("对调后结果为:%d",a);
return 0;
}
j=a%100/10;//十位
a=a/100*100+i*10+j;//除100去除后两位数字再乘以100填上两个0,个位*10变为十位
printf("对调后结果为:%d",a);
return 0;
}
2.从键盘输入3个整数,按照从大到小顺序输出。
#include
int main(){
int a,b,c,max,min;
printf("请输入3个整数:");
scanf("%d%d%d",&a,&b,&c);
printf("您输入的结果为:%d%d%d\n",a,b,c);
max=a>b?(a>c?a:c):(b>c?b:c);
min=a
3.输入一个四位正整数,计算它每位数之和,非零数之积。
#include
int main(){
int a,i,j,k,l,sum,mul;
printf("请输入一个四位正整数:");
scanf("%d",&a);
i=a%10;//个位
j=a%100/10;//十位
k=a%1000/100;//百位
l=a/1000;//千位
sum=i+j+k+l;
i=(i!=0)?i:1;//非零为i,否则为1
j=(j!=0)?j:1;
k=(k!=0)?k:1;
l=(l!=0)?l:1;
mul=i*j*k*l;
printf("它每位数之和是:%d,非零数之积是:%d",sum,mul);
return 0;
}
4.输入某自然数递增序列首项和末项,输出该序列所有数的和。
#include
int main(){
int f,end,sum;
printf("输入某自然数递增序列首项和末项:");
scanf("%d%d",&f,&end);
sum=(end-f+1)*(f+end)/2;//等差数列求和,因为是自然数包含0所以,项数是末项-首项+1
printf("输出该序列所有数的和:%d",sum);
return 0;
}
5.让计算机生成一个1-6之间的随机整数来表示骰子的点数,由用户输入'1'猜大,'2'猜小,输出结果。
#include
#include
int main(){
int a,n;
printf("系统掷骰子中...\n");
srand(time(NULL));
n=rand()%6+1;
printf("请猜大小,输入1表示大,输入2表示小:");
scanf("%d",&a);
if(a==1&&n>3)//4,5,6是大
printf("恭喜,猜对了,数字为:%d",n);
else if(a==2&&n<4)//1,2,3是小
printf("恭喜,猜对了,数字为:%d",n);
else
printf("猜错了,数字为:%d",n);
return 0;
}
6.求圆柱体的体积、表面积
#include
#define PI 3.1415926
int main(){
int r,h,v,s;
printf("请输入圆柱体半径:");
scanf("%d",&r);
printf("高度:");
scanf("%d",&h);
v=PI*r*r*h;//PI&R2*H
s=2*PI*r*r+2*PI*r*h;//两个底面积+侧面积(2*PI*R2*H)
printf("圆柱体体积为:%d,表面积为:%d",v,s);
return 0;
}
7.从键盘上输入秒数,将其转换为几小时几分钟几秒的形式
#include
int main(){
int s,h,m;
printf("请输入秒数:");
scanf("%d",&s);
h=s/3600;
m=s%3600/60;
s=s%60;
printf("%d小时%d分钟%d秒",h,m,s);
return 0;
}
8.计算两个数之差的绝对值
#include
#include
int main(){
int a,b;
int z=0;
int x=0;
printf("输入两个数:");
scanf("%d%d",&a,&b);
//使用abs()函数
z=abs(a-b);
printf("两个数之差的绝对值:%d\n",z);
//或者
x=a-b;
if(a-b<0) x=b-a;
printf("两个数之差的绝对值:%d",x);
return 0;
}
9.求一元二次方程3X2-20X-10=0的根,保留二位小数
公式:Δ=b^2-4ac
若Δ<0,二次方程无实数根;若Δ=0,二次方程有1个实数根;若Δ>0,二次方程有2个不相等的实数根;
#include
int main(){
int a=3,b=-20,c=-10;
double z,x1,x2;
z=b*b-4*a*c;
if(z>0){
x1=(-b+sqrt(z))/(2*a);
x2=(-b-sqrt(z))/(2*a);
printf("x1=%.2lf,x2=%.2lf\n",x1,x2);
}
else if(z==0){
x1 = (-b )/(2*a);
x2 = x1;
printf("x1 =x2 = lf%\n",x2);
}
else
printf("无解\n");
return 0;
}
10.输入三角形的三个边长,求三角形面积;三角形输入两条边,求第三边
#include
int main(){
int a,b,c,p,s;
printf("请输入三角形的三条边:");
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a){//判断是否是三角形
p=(a+b+c)/2;//海伦公式,令p=(a+b+c)/2,面积S=√[p(p-a)(p-b)(p-c)]
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("三角形面积是:%d\n",s);
}
else
printf("输入错误\n");
three();//求第三边
return 0;
}
void three(){
int a,b,c;
printf("请输入三角形的两条边:");
scanf("%d%d",&a,&b);
c=sqrt(a*a+b*b);
printf("第三条边是:%d",c);
}
11.从键盘输入k,求1平方+2平方+3平方+...+k平方
#include
int main(){
int k,i,sum=0;
printf("请输入一个数:");
scanf("%d",&k);
if(k<1){
printf("输入错误");
return 0;
}
for(i=1;i<=k;i++)
sum=sum+i*i;
printf("结果为:%d",sum);
return 0;
}
12.求1-1/2+1/3-1/4+...+1/99-1/100的和
#include
int main(){
int i,sum=0,flag=1;
for(i=1;i<=100;i++)
{
sum=sum+flag*1/i;
flag=-flag;
}
printf("结果为:%d",sum);
return 0;
}
13.求e=1+1/1!+1/2!+...1/n!,直到最后一项小于10的-5次为止
#include
/**
求e=1+1/1!+1/2!+...1/n!,直到最后一项小于10的-5次为止
*/
int main(){
double e=1,i=1,s=1;
while(1/s>1e-5)
{
s=s*i;//阶乘
e=e+1/s;
i++;
}
printf("最终结果为:%lf",e);
return 0;
}
14.输入正整数m、n,求最小公倍数
#include
int main(){
int m,n,k;
printf("请输入两个正整数:");
scanf("%d%d",&m,&n);
k=m;//假设m为最小公倍数
while(k%m!=0||k%n!=0){//当k不是m或n的倍数
k++;
}
printf("最小公倍数为:%d",k);
return 0;
}
15.输出方程x2+y2=1989的所有正整数解
#include
int main(){
int x,y,s=1989,k;
k=sqrt(s);
for(x=1;x<=k;x++){
for(y=1;y<=k;y++)
if(x*x+y*y==1989)
printf("x2+y2=1989的所有正整数解为:%d*%d+%d*%d=%d\n",x,x,y,y,s);
}
return 0;
}
16.从键盘输入一个正整数,计算2-n之间所有素数之和
#include
/**
素数:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数
*/
int isprime(int n){
int i;
if(n>1){
for(i=2;i
17.有36块砖,由36人搬,男人一次搬4块,女人一次搬3块,两个小孩一次搬1块,要求全部搬完。求男、女、小孩人数。
#include
int main(){
int men=0,women=0,children=0,s=36;
for(men=0;men
18.猴子第一天摘下若干个桃子,当即吃了一半,觉得不过瘾又多吃了一个,以后每天都吃前面一天剩下的桃子的一半加上一个。第十天时,又剩下一个。求第一天一共摘了多少个桃子?
#include
int main(){
int n=1,i;
for(i=9;i>0;i--){
n=(n+1)*2;
printf("第%d天,吃了%d个\n",i,n);
}
printf("第一天,一共摘了%d个桃子",n);
return 0;
}
19.有两个羽毛队进行比赛,各出3个队员,甲队abc,乙队xyz,第一场比赛通过抽签决定对阵名单,结果为a不和x比,c不和x、z比。输出对阵名单。
#include
int main(){
char a,b,c;
for(a='x';a<='z';a++){//穷举a的对手
for(b='x';b<='z';b++){//穷举b的对手
if(a!=b){//a和b不能和同一个人比赛
for(c='x';c<='z';c++){//穷举c的对手
if(c!=a&&c!=b){//a、b、c三人比赛对手都不同
if(a!='x'&&(c!='x'&&c!='z')){//排除题目要求
printf("a和%c比赛\nb和%c比赛\nc和%c比赛",a,b,c);}
}
}
}
}
}
return 0;
}
20.任何一个自然数n的立方均可以写成n个连续的奇数之和
#include
int main(){
int n,m,i,s;
int sum=0;
printf("请输入一个自然数:");
scanf("%d",&n);
m=n*n-(n-1);//连续的第一个奇数
if(n>1){
for(i=1;i<=n;i++){
sum=sum+m;
printf("%d ",m);
m+=2;
}
}
else
sum=1;
printf("\n");
s=n*n*n;
printf("n的立方为:%d,奇数之和为%d",s,sum);
return 0;
}
21.求一个整数的任意次方的最后3位数
#include
int main(){
int n,m,i,k;
int s=1;
printf("请输入一个整数:");
scanf("%d",&n);
printf("请输入次方数:");
scanf("%d",&m);
for(i=0;i
22.从键盘输入一个N*N的矩阵。求矩阵B=A+A',即将矩阵A与其转置矩阵A'相加以后存放在矩阵B中
#include
#define N 2
int main(){
int i,j;
int a[N][N],b[N][N],c[N][N];
printf("请输入矩阵:");
for(i=0;i
23.求方阵右上三角元素之和
#include
int main(){
int i,j,sum=0;
int a[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
for(j=i+1;j<3;j++){
printf("%d\n",a[i][j]);
sum=sum+a[i][j];
}
printf("方阵右上三角元素之和:%d",sum);
return 0;
}
24.从键盘输入一个字符串,删除字符串中的前导空格
#include
#define MAX 10
int main(){
char a[MAX],b[MAX];
int i=0,j;
printf("输入一个字符串:");
gets(a);
printf("输入的字符串为:%s\n",a);
while(a[i]==' '){
i++;
}
for(j=0;j
25.使用二重循环打印下列图形
#include
int main(){
int i,j,k=0;
for(i=1;i<=5;i++){
for(j=1;j<=5-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++){
printf("%c",'A'+i-1);
}
printf("\n");
}
return 0;
}
26.整钱换零钱问题,把1元兑换成1分、2分、5分的硬币,要求每种硬币至少一枚,有多少种不同的换法
#include
int main(){
int i,j,k;//i表示1分硬币,j表示2分硬币,k表示5分硬币
for(i=1;i<=10;i++)//1分最多10个
for(j=1;j<=5;j++)//1分最多5个
for(k=1;k<=2;k++){//5分最多2个
if((1*i+2*j+5*k) == 10){
printf("1分硬币%d枚,2分硬币枚,5分硬币%d枚\n",i,j,k);
}
}
return 0;
}
27.从键盘上输入一个以回车结束的字符串,将其大写字母都转换成小写字母,然后输出该字符串
#include
#define MaxSize 10
int main(){
char a[MaxSize],i=0;
printf("请输入一个字符串:");
gets(a);
while(a[i]!='\0'){
if(a[i]>='A'&&a[i]<='Z')//将其大写字母都转换成小写字母
a[i]+=32;
printf("%c",a[i]);
i++;
}
return 0;
}
28.使用二维数组打印杨辉三角形(行数要求从键盘输入)
#include
#define N 50
int main(){
int a[N][N];
int n,i,j;
printf("请输入行数:");
scanf("%d",&n);
for(i=0;i
29.从键盘输入一个字符串,删除字符串中所有空格后输出
#include
int main(){
char a[20],b[20];
int n,i,j;
printf("请输入一个字符串:");
gets(a);
for(i=0,j=0;a[i]!='\0';i++){
if(a[i]!=' ')
b[j++]=a[i];
}
b[j]='\0';
puts(b);
return 0;
}
30.定义一个含有30个整型元素的数组,按顺序分别赋予一个100以内的随机正整数,然后每五个元素求和,结果放在另一个数组中并输出
#include
#include
int main(){
int a[30],b[6];
int i,j;
int sum=0;
for(i=0,j=0;i<30;i++){
a[i]=rand()%100;//随机正整数
sum+=a[i];//求和
if((i+1)%5==0){//每五个元素
b[j++]=sum;
sum=0;
}
}
for(i=0;i
31.编写一个求下列式子的函数,要求n在主程序中输入,结果在主程序中输出
s=1+(1+根号2)+(1+根号2+根号3)+...+(1+根号2+根号3+...+根号n)
#include
#include
double cal(int n);
int main(){
int n;
double s;
printf("请输入一个n:");
scanf("%d",&n);
s=cal(n);
printf("结果为:%lf",s);
return 0;
}
double cal(int n){
int i,j;
double sum=0;
for(i=1;i<=n;i++){//输出
for(j=1;j<=i;j++)
sum=sum+sqrt(j);
}
return sum;
}
32.将一个数字字符串转换为一个整数
#include
int main(){
char a[6]="-12345";
shift(a,6);
return 0;
}
void shift(char a[],int n){
int i=0,s=0, k=0;
if(a[0]=='-'){//第一个字符为-号
i++;
k=1;
}
for(;i
33.从主函数输入3个整数,调用交换函数将它们从大到小顺序排序并输出(使用指针)
#include
int main(){
int a,b,c;
printf("请输入3个整数:");
scanf("%d%d%d",&a,&b,&c);
if(a
34.编写函数,判断一个字符串是否是回文,所谓回文是指顺读和倒读都一样的字符串。如"XZYKYZX"
#include
int main(){
char a[]="XZYKYZX";
int k;
k=ishuiwen(&a);
if(k==1)
printf("字符串是回文");
else
printf("字符串不是回文");
return 0;
}
int ishuiwen(int *a[]){
char *i,*j;
for(i=a,j=strlen(a)-1;i
35.从键盘输入职工人数和每位职工的信息,包括:职工号、姓名和工资输出所有职工的平均工资和工资低于2000元的职工信息
#include
typedef struct{
char no[10];
char name[10];
double salary;
}worker;
int main(){
worker *p,*p1;
int i,n;
double s=0;
printf("请输入职工人数:");
scanf("%d",&n);
p1=(worker *)malloc(sizeof(worker));//动态分配
p=p1;
for(i=0;ino,&p->name,&p->salary);
s=s+p->salary;//工资之和
p++;
}
printf("所有职工的平均工资:%.2lf\n",s/n);
printf("工资低于2000元的职工信息\n");
p=p1;//从头开始
for(i=0;isalary<=2000)
printf("职工号:%s\n职工姓名:%s\n职工工资:%.2lf\n",p->no,p->name,p->salary);
p++;
}
return 0;
}
36.从键盘输入一个学生的姓名,年龄,将其写入磁盘文件中,并输出在显示屏幕上
#include
int main(){
int age;
char name[10];
FILE *fp,*sp;
printf("请输入学生姓名:");
gets(name);
printf("请输入学生年龄:");
scanf("%d",&age);
fp=fopen("student.txt","w");//以写打开文件
fprintf(fp,"%s %d",name,age);//写入
fclose(fp);
sp=fopen("student.txt","r");//以读打开文件
if(sp==NULL){
printf("打不开文件!\n");
exit(0);
}
fscanf(sp,"%s %d",name,&age);//读入
printf("%s %d",name,age);//显示在屏幕上
fclose(sp);
return 0;
}
37.从键盘输入若干行字符,将它们存入磁盘文件中,再读出这些字符,将大写字母转换成小写字母后,再写入另一磁盘文件中
#include
#define Max 50
int main(){
int i;
char c[Max],r[Max];
FILE *fp,*sp;
if((fp=fopen("a.txt","w+"))==NULL){//以写打开文件,并先写后读
printf("打开失败");exit(0);
}
if((sp=fopen("b.txt","w"))==NULL){//以写打开文件,并先写后读
printf("打开失败");exit(0);
}
printf("请输入字符,回车时终止:\n");
while(strlen(gets(c))>0)//不为空行时,读入一行字符
{
fputs(c,fp);
fputc('\n',fp);
}
rewind(fp);//指针重置
while(fgets(r,Max,fp)!=NULL){
for(i=0;r[i]!='\0';i++)
if(r[i]>='A'&&r[i]<='Z')
r[i]+=32;
fputs(r,sp);
printf("转换为:%s",r);
}
fclose(fp);
fclose(sp);
return 0;
}
38.从键盘输入一个正整数x,把从右端开始的4-7位数赋值给变量y
#include
int main(){
int x,y;
printf("请输入一个正整数:");
scanf("%d",&x);
x=x>>3;//找到第四位
y=x&15;//15是的二进制为1111,可以利用这个赋值给y
printf("y:%d",y);
return 0;
}
39.编写part(int n)函数,输出正整数n的所有划分,比如3,1+1+1、1+2、2+1、3,一共四种
#include
int main(){
int n;
int a[50];
printf("请输入一个正整数n:");
scanf("%d",&n);
part(n,1,a);
return 0;
}
void part(int n,int k,int a[]){
int i;
if(n==0)
{
print(a,k-1);
printf("\n");
return;
}
for(i=1;i<=n;i++){
a[k]=i;
part(n-1,k+1,a);
}
}
void print(int a[],int k){
int i;
for(i=1;i<=k;i++){
printf("%d",a[i]);
if(i
40.用递归方法编写函数,输出一个十进制正整数的二进制编码
#include
int main(){
int n;
printf("请输入一个正整数n:");
scanf("%d",&n);
binary(n);
return 0;
}
int binary(int n){
if(n<2)
printf("%d",n);
else{
binary(n/2);
printf("%d",n%2);
}
}
41.编写一个程序,求1+2+...n之和,要求用带参宏实现
#include
#define sum(n)(n*(n+1)/2)
int main(){
int n;
printf("输入一个n:");
scanf("%d",&n);
printf("%d",sum(n));
return 0;
}
42.有十三个人围成一个圈,从第1个人开始顺序数数,数到3的人退出圈,直到剩下一个人。用链表编程来实现,求最后剩下的人原来的序号
#include
typedef struct node{
int data;
struct node *next;
}LinkNode;
LinkNode* Create(LinkNode *L,int a[],int n){
int i;
LinkNode *s,*r;
L=(LinkNode *)malloc(sizeof(LinkNode));
r=L;
for(i=0;idata=a[i];
r->next=s;
r=s;
}
r->next=L->next;//循环链表
return L;
}
void getout(LinkNode *L,int n){
LinkNode *p=L,*q;
int i,j;
for(i=1;i<=n-1;i++){//共有13-1人出圈n-1
for(j=1;j<3;j++){
p=p->next;}
q=p->next;
p->next=q->next;
printf("出圈的人是:%d\n",q->data);
free(q);
}
printf("最后一个留在圈内的人是:%d",p->data);
}
int main(){
LinkNode *L=NULL;
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
int n=13;//圈内人数
int a[14]={1,2,3,4,5,6,7,8,9,10,11,12,13};
L=Create(L,a,n);
getout(L,n);
}
43.文本in.txt中存放若干行整数,每行字符不超过100个,每行不超过10个整数,整数间以空格分割。编写一个程序,按行输出整数,并求出每行数据的和并输出。
#include
int main(){
char a[100];//存放一行字符
char b[50];//存放和
int i=1;
FILE *fp,*sp;
fp=fopen("in.txt","r");//读
if(fp==NULL)
printf("文件不存在");
while(fgets(a,100,fp)!=NULL)
{
puts(a);//该行输出
sp=fopen("temp.txt","w+");//借助一个临时文件读写
fputs(a,sp);
rewind(sp);
int sum=0,n;
while(fscanf(sp,"%d",&n)==1)sum=sum+n;
printf("第%d行的和为%d\n",i++,sum);
fclose(sp);
}
fclose(fp);
return 0;
}
44.求Sn=a+aa+aaa+...+aa...a的值,其中a是一个数字,n表示a的位数,n由键盘输入
#include
int main(){
int n,a,i;
int sn=0,k=0;
printf("请输入位数:");
scanf("%d",&n);
printf("请输入数字:");
scanf("%d",&a);
for(i=1;i<=n;i++){
k=k*10+a;//每次进一位
sn=sn+k;
}
printf("值为:%d",sn);
return 0;
}
45.用牛顿迭代法求下面方程在1.5附近的根:2x3-4x2+3x-6=0
#include
int main(){
int i=0;
double x1=1.5,x0=0;//迭代初值
double f,f1;
while (fabs(x1-x0)>=1e-5)//判断公式
{
f=2*x0*x0*x0-4*x0*x0+3*x0-6;//用x0代入题目
f1=6*x0*x0-8*x0+3;//系数和次数相乘
x1=x0-f/f1;
//x0=x1;//替换再次迭代
i++;//计算次数
}
printf("x=%.2f\t共迭代:%d次",x1,i);
return 0;
}
46.写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出
#include
void copy(char a[],char b[]){
int i=0,j=0;
while(a[i]!='\0'){//元音字母a,e,i,o,u
if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'){
b[j]=a[i];
j++;}
i++;
}
printf("%d,%d\n",i,j);
}
void cpy(char *a,char *b){
char *p=b;
while(*a!='\0'){
if(*a=='a'||*a=='e'||*a=='i'||*a=='o'||*a=='u'){
*(p++)=*a;
}
a++;
}
}
int main(){
char a[10]="abcaeauio";char b[10];
copy(a,b);
//cpy(a,b);
printf("a字符串:%s\n",a);
printf("b字符串:%s\n",b);
return 0;
}
47.写一个函数,用起泡法对输入的10个字符由小到大顺序排列
#include
int BubbleSort(char a[],int n){
int i,j;char temp;int exchange;
for(i=0;ii;j--){
if(a[j-1]>a[j]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
exchange=1;
}
}
if(exchange==-1) return;
}
return i;
}
int main(){
char a[]="cdefgabhij";
int i;
printf("排序前的字符串:%s\n",a);
i=BubbleSort(a,10);
printf("冒泡排序后的字符串:%s\n",a);
printf("执行了%d次",i);
return 0;
}
48.有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数
#include
int Move(int a[],int m,int n){
int i,j,k;
int b[n-m];//用来存储n-m个整数
for(i=0;i
49.在主函数中输入5个等长的字符串,用另一函数对它们排序,并在主函数输出
#include
void BubbleSort(char a[],int n){
int i,j;char temp;int exchange;
for(i=0;ii;j--){
if(a[j-1]>a[j]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
exchange=1;
}
}
if(exchange==-1) return;
}
}
void sort(char a[5][6],int m,int n){//m是字符串个数,n是字符串长度
int i,j;
for(i=0;i
50.有a,b两个链表,每个链表中的结点包括学号、姓名、成绩,要求把两个链表合并,按学号升序排列,并删除相同学号的结点
#include
typedef struct{
int number;
char name[10];
double score;
}Elem;
typedef struct node{
Elem data;
struct node *next;
}LinkList;
LinkList* CreateListR(LinkList* L,Elem a[],int n){//尾插法建表
LinkList *r,*s;
int i;
L=(LinkList*)malloc(sizeof(LinkList));
r=L;
for(i=0;idata=a[i];
r->next=s;
r=s;
}
r->next=NULL;
return L;
}
LinkList* init(LinkList *L){
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
return L;
}
LinkList* merge(LinkList *a,LinkList *b,LinkList *c,int n){//合并,默认是有序链表
LinkList *p,*s,*r;
p=a->next;
s=b->next;
r=c;
while(p!=NULL&&s!=NULL){
if(p->data.number < s->data.number){//a链表学号比b链表学号小
r->next=p;r=p;p=p->next;
}
else {//b链表学号比a链表学号小
r->next=s;r=s;s=s->next;
}
}
while(p!=NULL){//如果未空,继续插入
r->next=p;r=p;p=p->next;
}
while(s!=NULL){
r->next=s;r=s;s=s->next;
}
r->next=NULL;
return c;
}
LinkList* DeleteSame(LinkList *c){//删除相同结点
LinkList *p,*q,*r;
p=c->next;
while(p!=NULL){
q=p;//q是指向p的结点
while(q->next!=NULL){//查询p之后有无相同学号
if(p->data.number==q->next->data.number){
r=q->next;q->next=r->next;free(r);
}
q=q->next;
}
p=p->next;
}
return c;
}
void Disp(LinkList *L){//输出链表
LinkList *p;
p=L->next;
while(p!=NULL){
printf("学号:%d\t\t姓名:%s\t成绩:%.2lf\n",p->data.number,p->data.name,p->data.score);
p=p->next;
}
}
int ListEmpty(LinkList *L)
{return(L->next==NULL);
}
int main(){
//建立a、b两个链表
Elem a_data[5]={{1,"学生1",70},{2,"学生2",75},{3,"学生3",80},{3,"学生3",68},{5,"学生5",81}};
Elem b_data[4]={{6,"学生6",90},{7,"学生7",73},{8,"学生8",60},{9,"学生9",60}};
LinkList *a,*b,*c;
a=CreateListR(a,a_data,5);
b=CreateListR(b,b_data,4);
printf("链表a:%d\n",ListEmpty(a));
Disp(a);
printf("\n链表b:%d\n",ListEmpty(b));
Disp(b);
c=init(c);//归并到c中
c=merge(a,b,c,9);
printf("\n链表c:%d\n",ListEmpty(c));
Disp(c);
printf("\n删除相同结点后的链表c:\n");
c=DeleteSame(c);
Disp(c);
return 0;
}