⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 下半学期.txt

📁 c语言专业课本学期的全部练习,适合新手自学,快速上手
💻 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 + -