📄 下半学期.txt
字号:
/*学生信息管理。方法一:单向动态链表*/
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define E "%s%s%s%d"
#define F p->num,p->name,p->sex,&p->score
#define G " %s %-5s %s %4d\n"
#define H i->num,i->name,i->sex,i->score
#define J "number name sex score\n"
struct student /*结构体定义*/
{char num[5];
char name[20];
char sex[2];
int score;
struct student *next;
};
int m=1;
struct student *creat() /*建立单向动态链表函数*/
{struct student *head;
struct student *p,*q;
head=p=q=(struct student *)malloc(sizeof(struct student));
printf("please input the information of students:\n");
while(scanf(E,F),strcmp(p->num,"0")!=0)
{p=(struct student *)malloc(sizeof(struct student));
q->next=p;q=p;m++;}
q->next=NULL;
return(head);}
/*以下根据学生的姓名和学号进行操作*/
void stu_printf(struct student *p) /*输出全部学生信息函数*/
{struct student *i;
printf(J);
for(i=p;i!=NULL;i=i->next) printf(G,H);}
void stu_search(struct student *p,char *c) /*查询学生信息函数*/
{struct student *i;int n=0;
for(i=p;i!=NULL;i=i->next)
if(strcmp(i->num,c)==0||strcmp(i->name,c)==0)
{printf(J);printf(G,H);}
else n++;
if(n==m) printf("not found\n");}
void stu_correct(struct student *p,char *c) /*修改学生信息函数*/
{struct student *i;int n=0;
for(i=p;i!=NULL;i=i->next)
if(strcmp(i->num,c)==0||strcmp(i->name,c)==0)
scanf(E,i->num,i->name,i->sex,&i->score);
else n++;
if(n==m) printf("not found\n");
printf("\n");
stu_printf(p);
}
void stu_delete(struct student *p,char *c) /*删除学生信息函数*/
{struct student *i,*j;int n=0;
for(i=p;i!=NULL;i=i->next)
if(strcmp(i->num,c)==0||strcmp(i->name,c)==0) break;
else n++;
if(n==m) printf("not found\n");
else {for(j=p;j->next!=i;j=j->next);
j->next=i->next;}
printf("\n");
stu_printf(p);
}
void stu_new_down(struct student *p,char *c) /*插入学生信息函数*/
{struct student *i,*j;int n=0;
for(i=p;i!=NULL;i=i->next)
if(strcmp(i->num,c)==0||strcmp(i->name,c)==0) break;
else n++;
if(n==m) printf("not found\n");
else {j=(struct student *)malloc(sizeof(struct student));
j->next=i->next;i->next=j;
scanf(E,j->num,j->name,j->sex,&j->score);}
printf("\n");
stu_printf(p);
}
main()
{char a[20];char x;int flag=1,q;
struct student *head;
void (*pt)(struct student *p,char *c); /*指向函数的指针变量*/
head=creat(); /*建立单向动态链表*/
while(flag)
{printf("please choose the operatian:\n");
printf("1:search\n2:corret\n3:delete\n4:new\n");
printf("choose:");
scanf("%d",&q);
switch(q) /*菜单*/
{case 1:pt=stu_search;break;
case 2:pt=stu_correct;break;
case 3:pt=stu_delete;break;
case 4:pt=stu_new_down;break;
default:printf("ERROR\n");}
printf("please input the number or name\n");
scanf("%s",a);
(*pt)(head,a);
printf("continue or not?(y/n)\n"); /*循环的菜单*/
getchar();
x=getchar();
if(x=='n') flag=0;}
getchar();
getchar();
}
/*学生信息管理。方法二:结构体数组*/
#include<stdio.h>
#include<string.h>
#define E "%s%s%s%d"
#define F "number name sex score\n"
#define G " %s %-5s %s %4d\n"
#define H i->num,i->name,i->sex,i->score
#define N 10
struct student /*结构体定义*/
{char num[5];
char name[20];
char sex[2];
int score;
}stu[N]={{"012","lin","m",68},{"045","wang","m",87},{"026","huang","f",64},
{"022","li","m",77},{"046","tu","m",87},{"084","qing","f",68},
{"049","zhang","f",88},{"056","gen","m",91},{"099","ni","m",79},
{"120","shu","m",94}};
/*以下根据学生的姓名和学号进行操作*/
void stu_printf(struct student *p) /*输出全部学生信息函数*/
{struct student *i;
printf(F);
for(i=p;i<p+N;i++) printf(G,H);}
void stu_search(struct student *p,char *c) /*查询学生信息函数*/
{struct student *i;int n=0;
for(i=p;i<p+N;i++)
if(strcmp(i->num,c)==0||strcmp(i->name,c)==0)
{printf(F);printf(G,H);}
else n++;
if(n==N) printf("not found\n");}
void stu_correct(struct student *p,char *c) /*修改学生信息函数*/
{struct student *i;int n=0;
for(i=p;i<p+N;i++)
if(strcmp(i->num,c)==0||strcmp(i->name,c)==0)
scanf(E,i->num,i->name,i->sex,&i->score);
else n++;
if(n==N) printf("not found\n");
printf("\n");
stu_printf(stu);
}
void stu_delete(struct student *p,char *c) /*删除学生信息函数*/
{struct student *i,*j;int n=0;
for(i=p;i<p+N;i++)
if(strcmp(i->num,c)==0||strcmp(i->name,c)==0) break;
else n++;
if(n==N) printf("not found\n");
else
{for(j=i;j<p+N-1;j++)
{strcpy(j->num,(j+1)->num);strcpy(j->name,(j+1)->name);
strcpy(j->sex,(j+1)->sex);j->score=(j+1)->score;}
strcpy((p+N-1)->num,'\0');
strcpy((p+N-1)->name,'\0');
strcpy((p+N-1)->sex,'\0');
(p+N-1)->score=0;}
printf("\n");
stu_printf(stu);
}
void stu_new_down(struct student *p,char *c) /*插入学生信息函数*/
{struct student *i,*j;int n=0;
for(i=p;i<p+N;i++)
if(strcmp(i->num,c)==0||strcmp(i->name,c)==0) break;
else n++;
if(n==N) printf("not found\n");
else
{for(j=p+N-2;j>i;j--)
{strcpy((j+1)->num,j->num);strcpy((j+1)->name,j->name);
strcpy((j+1)->sex,j->sex);(j+1)->score=j->score;}
scanf(E,(i+1)->num,(i+1)->name,(i+1)->sex,&(i+1)->score);}
printf("\n");
stu_printf(stu);
}
main()
{char a[20];char x;int flag=1,q;
void (*pt)(struct student *p,char *c); /*指向函数的指针变量*/
while(flag)
{printf("please choose the operatian:\n");
printf("1:search\n2:corret\n3:delete\n4:new\n");
printf("choose:");
scanf("%d",&q);
switch(q) /*菜单*/
{case 1:pt=stu_search;break;
case 2:pt=stu_correct;break;
case 3:pt=stu_delete;break;
case 4:pt=stu_new_down;break;
default:printf("ERROR\n");}
printf("please input the number or name\n");
scanf("%s",a);
(*pt)(stu,a);
printf("continue or not?(y/n)\n"); /*循环的菜单*/
getchar();
x=getchar();
if(x=='n') flag=0;}
getchar();
getchar();
}
/*指针数组与指向指针变量的指针变量*/
#include<stdio.h>
#include<string.h>
void sort(char **q,int n)
{char **i,**j;char *t;
for(i=q;i<q+n-1;i++)
for(j=i+1;j<q+n;j++)
if(strcmp(*i,*j)>0)
{t=*i;*i=*j;*j=t;}
}
void pr(char **q,int n)
{char **i;
for(i=q;i<q+n;i++)
printf("%s ",*i);}
main()
{char *p[4]={"beijing","shanghai","shenzhen","guangzhou"};
sort(p,4);
printf("the sorted order is:\n");
pr(p,4);
getchar();
getchar();
}
/*指向函数的指针变量*/
/*无限划分离散,高度近似连续*/
/*定积分*/
#include<stdio.h>
#include<math.h>
#define N 1.0e7
double f1(double x){return(x*x*x);}
double f2(double x){return(x*log(x));}
double djf(double (*p)(double x),double a,double b)
{double s=0;long k;
for(k=1;k<=N;k++)
s+=(*p)(a+k*(b-a)/N);
s*=(b-a)/N;
return(s);}
main()
{printf("area=%f\n",djf(f1,0,1));
printf("area=%f\n",djf(f2,0,1));
getchar();
getchar();}
/*指向一维数组的指针变量*/
#include<stdio.h>
void invert(int (*p)[4],int (*q)[3])
{int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
*(*(q+j)+i)=*(*(p+i)+j);
}
main()
{int i,j;
int a[3][4]={1,2,3,4,5,6,7,8,9,0,1,2},b[4][3];
invert(a,b);
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
printf("%d ",*(*(a+i)+j));
printf("\n");}
for(i=0;i<4;i++)
{for(j=0;j<3;j++)
printf("%d ",*(*(b+i)+j));
printf("\n");}
getchar();
getchar(); }
/*指针实现字符串复制,测长,连接,比较*/
#include<stdio.h>
void strcpynew(char *x,char *y)
{while(*x++=*y++);}
int strlennew(char *x)
{int i;
for(i=0;*x++;i++);
return(i);}
void strcatnew(char *x,char *y)
{while(*x++);
x--;
while(*x++=*y++);}
int strcmpnew(char *x,char *y)
{while(*x||*y)
{if(*x!=*y) return(*x-*y);
x++;
y++;}
return(0);}
main()
{char a[30]={"You are a teacher."};
char b[30]={"I am a student."};
char c[40];
printf("The length of the string is:%d\n",strlennew(a));
strcpynew(c,a);
printf("The copied string is:%s\n",c);
strcatnew(c,b);
printf("The new string is:%s\n",c);
printf("%d\n",strcmpnew(a,b));
printf("%d\n",strcmpnew(c,a));
getchar();
getchar();
}
/*带参数的main函数*/
#include<stdio.h>
main(int argc,char **argv)
{printf("%d %s\n",argc,*(argv+1));getchar();getchar();}
/*二维数组有关指针常量与所指向的变量*/
#include<stdio.h>
main()
{int a[2][3]={1,2,3,4,5,6};
printf("%x %x %x\n",a,a+0,&a[0]);
printf("%x %x\n",a+1,&a[1]);
printf("%x %x %x %x\n",*a,*(a+0),a[0],&a[0][0]);
printf("%x %x %x\n",*(a+1),a[1],&a[1][0]);
printf("%x %x %x\n",*(a+1)+2,a[1]+2,&a[1][2]);
printf("%d %d %d\n",*(*(a+1)+2),*(a[1]+2),a[1][2]);
getchar();
getchar();
}
/*指针运算*/
/*一维数组有关指针常量与所指向的变量*/
#include<stdio.h>
main()
{int a[5]={1,10,100,1000,10000},*p,x,y,i;
p=a;
printf("a=%x,&a[0]=%x,*a=%d,a[0]=%d\n",a,&a[0],*a,a[0]);
printf("a+1=%x,&a[1]=%x,*(a+1)=%d,a[1]=%d\n",a+1,&a[1],*(a+1),a[1]);
x=*p++;y=(*p)++;
printf("x=%d,y=%d\n",x,y);
x=*++p;y=++*p;
printf("x=%d,y=%d\n",x,y);
printf("p=%x,p-a=%d\n",p,p-a);
for(i=0;i<5;i++)
printf("%d ",a[i]);
getchar();
getchar();
/*指针实现数组排序*/
#include<stdio.h>
void sort(int *p,int n)
{int *i,*j,t;
for(i=p;i<p+n-1;i++)
for(j=i+1;j<p+n;j++)
if(*i>*j){t=*i;*i=*j;*j=t;}
}
void array_printf(int *p,int n)
{int *i;
for(i=p;i<p+n;i++)
printf("%d ",*i);
}
main()
{int a[10]={1,2,3,4,5,6,7,8,9,0};
sort(a,10);
array_printf(a,10);
getchar();
getchar();
}
/*指针实现数组反序*/
#include<stdio.h>
#define N 10
void sort(int *p,int n)
{int *i,*j,m=(n-1)/2,t;
for(i=p,j=p+n-1;i<=p+m;i++,j--)
{t=*i;*i=*j;*j=t;}
}
void array_printf(int *p,int n)
{int *i;
for(i=p;i<p+n;i++)
printf("%d ",*i);
}
main()
{int a[N]={1,2,3,4,5,6,7,8,9,0};
sort(a,N);
array_printf(a,N);
getchar();
getchar();
}
/*指针作为函数参数*/
#include<stdio.h>
void sort(int *x,int *y,int *z)
{int t;
if(*x>*y){t=*x;*x=*y;*y=t;}
if(*y>*z){t=*y;*y=*z;*z=t;}
if(*x>*y){t=*x;*x=*y;*y=t;}
}
main()
{int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
sort(&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
getchar();
getchar();
}
/*不带参数的宏,带多个参数的宏*/
#include<stdio.h>
#define PI 3.14
#define CIRCLE(R,S,V) S=4*PI*R*R;V=4/3.0*PI*R*R*R
main()
{float r,s,v;
printf("r=");
scanf("%f",&r);
CIRCLE(r,s,v);
printf("s=%f,v=%f\n",s,v);
getchar();
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -