C语言中结构体先声明后定义不可以吗?

C语言中结构体先声明后定义不可以吗? 我几次测过了,把结构体放在主函数前正常运行,把结构体放在结构体后面就用不了了,求各位帮我解释一下。

2个回答

可以的,比如

#include <stdio.h>
struct A;
struct A
{
    int x;
};
int main () {
    printf("hello");
    return 0;
}

这种情况叫 前置声明 函数、类(结构体)都可以

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言中结构体的定义问题
下面结构体的定义语句中,错误的是  A)struct ord {int x;int y;int z;}; struct ord a;  B)struct ord {int x;int y;int z;} struct ord a;  C)struct ord {int x;int y;int z;} a;  D)struct {int x;int y;int z;} a; 自我分析是B ,因为是在定义时就声明,所以不用加struct ord
c++里的结构体还有必要用typedef吗?
c语言里声明了结构体后,在定义结构体变量时,要如下形式: ``` struct A { // 声明结构体A int a; }; struct A a_st; // 定义结构体 struct A *a_p; // 定义结构体指针 ``` 为了方便使用,c里面通常用typedef来声明结构体: ``` typedef struct _A{ // 用typedef声明结构体 int a; } A, *PA; A a_st; //定义结构体 PA a_p; //定义结构体指针 ``` 但是在c++中,结构体的在定义的时候,struct关键字是不必要的 ``` struct A { // 声明结构体 int a; }; A a_st; //定义结构体 A* a_p; // 定义结构体指针 ``` 我的问题是,在c++中,还有必要使用typedef的方式来声明结构体吗?
C语言结构体在VS2013输入时候遇到的问题
IDE:VS2013 OS:Windows7 源码附上: ``` #include<windows.h> #include<stdio.h> int main() { //定义一个People类型的结构体 struct People{ char name[10];//名字 char sex[5];//性别 int age;//年龄 int Class;//班级 }me; //将me声明为People类型的结构体变量 printf("Please Input Your Name\n"); scanf_s("%s", &me.name); printf("Please Input Your sex\n"); scanf_s("%s", &me.sex); printf("Please Input Your age\n"); scanf_s("%d", &me.age); printf("Please Input Your Class\n"); scanf_s("%d", &me.Class); printf("%s", me.name); printf("%s", me.sex); printf("%d", me.age); printf("%d", me.Class); system("pause"); return 0; } ``` 问题概述 输入名字后 程序直接没了 然后直接打印出后面的三句话了 按程序来说 应该是打印一句话 然后停下来让我输入的啊 怎么我输入一个 下面三句话都打印出来了 运行结果: ![图片说明](https://img-ask.csdn.net/upload/201512/19/1450459187_263278.png) 改了下程序 把scanf_s _s去掉后 在Devc++中就可以正常使用 在Devc++中的运行结果 ![图片说明](https://img-ask.csdn.net/upload/201512/19/1450459313_572972.jpg) 请问各位C前辈 是不是因为VS2013中 对键盘缓冲区进行了特殊的处理呢?
for的外面为什么不能定义变量?
搞不懂定义结构体变量时要在for里面定义,或者在main函数的开始时定义,不能在for的外面定义,否则不能通过编译,这是为什么?![图片](https://img-ask.csdn.net/upload/201509/19/1442673609_650183.jpg)![图片](https://img-ask.csdn.net/upload/201509/19/1442673731_837507.jpg)![图片](https://img-ask.csdn.net/upload/201509/19/1442673970_206438.jpg)
c语言中数据结构二叉树的遍历问题
I use a data structrue to description a tree. struct Node{ char *name; int value; //标志位,1说明该节点在数组中无效了,0则有效 int isNull; struct Node *leftNode; struct Node *rightNode; struct Node *parentNode; int isLastNode; }. I want to reckon a Haffman code. this is my code: # include <stdio.h> # include <string.h> # include <stdlib.h> struct Node{ char *name; int value; //标志位,1说明该节点在数组中无效了,0则有效 int isNull; struct Node *leftNode; struct Node *rightNode; struct Node *parentNode; int isLastNode; } nodes[5],sigleNode; //声明定义的初始化节点的方法 void initNodes(); //声明获取节点数组的长度的方法 int getNodesSize(); //声明获得哈夫曼树节点的方法 Node getHaffTree(); //声明获取值最小的节点的方法 Node getMinValueNode(); //声明获取非空节点数量的方法 int getNotNullNodesSize(); //声明判断是否是空节点的方法 int isNullNode(Node n); //声明获取第几个有效节点的方法,i从0开始 Node getValidNode(int i); //声明将节点插入到数组节点中无效节点的方法 void addNodetoList(Node n); //声明检索树的方法 void viewTree(Node *n); //主方法 int main(){ //初始化节点 initNodes(); Node mainNode = getHaffTree(); //printf("根节点值 %d \n",mainNode.value); viewTree(&mainNode); return 0; } //检索树结构 void viewTree(Node *mainNode){ Node *leftNodeP = mainNode->leftNode; if( leftNodeP->isLastNode == 1){ //计算哈夫曼码.to do printf("权值为[%d]的节点[%s]哈夫曼码是: \n",leftNodeP->value,leftNodeP->name); }else{ viewTree(leftNodeP->leftNode); } Node *rightNodeP = mainNode->rightNode; if( rightNodeP->isLastNode == 1){ //计算哈夫曼码.to do printf("权值为[%d]的节点[%s]哈夫曼码是: \n",rightNodeP->value,rightNodeP->name); }else{ viewTree(rightNodeP->rightNode); } /* if(NULL != mainNode.rightNode){ Node rightNode = *mainNode.rightNode; Node rlNode = *rightNode.leftNode; Node rrNode = *rightNode.rightNode; char *rlName = rlNode.name; char *rrName = rrNode.name; if(strcmp(empName,rlName) ==0 && strcmp(empName,rrName) == 0){ printf("权值为[%d]的节点[%s]哈夫曼码是: \n",rightNode.value,rightNode.name); }else{ viewTree(rightNode); } } */ //viewTree(leftNode); /* if(!leftNode==NULL){ if(leftNode.leftNode == NULL && leftNode.rightNode == NULL){ //String haffCode = getHaffCode(leftNode,""); printf("权值为[%d]的节点[%s]哈夫曼码是: \n",leftNode.value,leftNode.name); }else{ viewTree(leftNode); } }*/ //Node rightNode = *mainNode.rightNode; //printf("右 value %d \n",rightNode.value); //viewTree(rightNode); /* if(!rightNode==NULL){ if(leftNode.leftNode == NULL && leftNode.rightNode == NULL){ //String haffCode = getHaffCode(rightNode,""); printf("权值为[%d]的节点[%s]哈夫曼码是:\n",rightNode.value,rightNode.name); }else{ viewTree(rightNode); } } */ } //递归方法组件树形数据结构 Node getHaffTree(){ int size = getNotNullNodesSize(); printf("length = %d \n",size); if(size > 2){ printf("before size %d \n",getNotNullNodesSize()); Node minNode1 = getMinValueNode(); Node minNode2 = getMinValueNode(); printf("value1 %d \n",minNode1.value); printf("value2 %d \n",minNode2.value); printf("after size %d \n",getNotNullNodesSize()); //声明2个节点生产的父节点对象 Node mainNode; //将子节点的值相加赋给父节点 mainNode.value = minNode1.value+minNode2.value; mainNode.isNull = 0; mainNode.isLastNode = 0; //将小值节点地址赋给左节点的指针变量 mainNode.leftNode = &minNode1; mainNode.rightNode = &minNode2; minNode1.parentNode = &mainNode; minNode2.parentNode = &mainNode; //将父节点插入到数组中的无效节点位置 addNodetoList(mainNode); return getHaffTree(); }else if(size = 2){ Node minNode1 = getMinValueNode(); Node minNode2 = getMinValueNode(); //声明2个节点生产的父节点对象 Node mainNode; //将子节点的值相加赋给父节点 mainNode.value = minNode1.value+minNode2.value; mainNode.isNull = 0; mainNode.isLastNode = 0; //将小值节点地址赋给左节点的指针变量 mainNode.leftNode = &minNode1; mainNode.rightNode = &minNode2; minNode1.parentNode = &mainNode; minNode2.parentNode = &mainNode; return mainNode; } Node n; return n; } //定义声明的初始化节点方法 void initNodes(){ nodes[0].name="A"; nodes[0].value=5; nodes[0].isNull=0; nodes[0].isLastNode = 1; nodes[1].name="B"; nodes[1].value=4; nodes[1].isNull=0; nodes[1].isLastNode = 1; nodes[2].name="C"; nodes[2].value=3; nodes[2].isNull=0; nodes[2].isLastNode = 1; nodes[3].name="D"; nodes[3].value=2; nodes[3].isNull=0; nodes[3].isLastNode = 1; nodes[4].name="E"; nodes[4].value=1; nodes[4].isNull=0; nodes[4].isLastNode = 1; } //定义计算节点数量的方法 int getNodesSize(){ return sizeof(nodes)/sizeof(sigleNode); } int getNotNullNodesSize(){ int size = getNodesSize(); int reallSize=0; for(int i = 0;i<size;i++){ if(isNullNode(nodes[i]) ==0){ reallSize++; } } return reallSize; } //判断是否是空节点 int isNullNode(Node n){ if(n.isNull == 1){ return 1; }else{ return 0; } } //定义获取值最小的节点方法 Node getMinValueNode(){ int size = getNodesSize(); Node minNode = getValidNode(0); int index = 0; for(int i=0;i<size;i++){ Node n = nodes[i]; //空值节点不判断 if(isNullNode(n)==0 && n.value <= minNode.value){ minNode = n; index = i; } } Node empNode; empNode.isNull = 1; nodes[index] = empNode; return minNode; } //定义获取第几个有效节点的方法 Node getValidNode(int index){ int size = getNodesSize(); int continueNum = index; Node rs; for(int i=0;i<size;i++){ Node n = nodes[i]; //空值节点不判断 if(isNullNode(n)==0 && continueNum ==0){ rs = n; break; } if(isNullNode(n) == 0){ continueNum--; } } return rs; } //定义将节点插入到数组节点中无效节点的方法 void addNodetoList(Node insertN){ int size = getNodesSize(); for(int i=0;i<size;i++){ Node n = nodes[i]; //如果是空白节点则,更新该位置为要插入的节点 if(isNullNode(n)==1){ nodes[i] = insertN; break; } } } I debug for the main method, before into the viewTree(Node *N) method,the mainNode like pic1: ![进入遍历树节点方法前的mainNode](https://img-ask.csdn.net/upload/201608/03/1470204966_754823.png) but when I debug into the viewTree(Node *n) method. thie mainNode like pic2?! ![进入遍历树节点方法时候的mainNode](https://img-ask.csdn.net/upload/201608/03/1470204999_439482.png) who can help me to explain such problem? Thanks !
新手用VS2010写程序问题!头文件中定义结构体error LNK2005,fatal error LNK1169!
1>Firstset.obj : error LNK2005: "struct AttentionInfo Atten" (?Atten@@3UAttentionInfo@@A) 已经在 A03.obj 中定义 1>Itemdisplay.obj : error LNK2005: "struct AttentionInfo Atten" (?Atten@@3UAttentionInfo@@A) 已经在 A03.obj 中定义 1>wlcmmu.obj : error LNK2005: "struct AttentionInfo Atten" (?Atten@@3UAttentionInfo@@A) 已经在 A03.obj 中定义 1>D:\VisualStudio\Projects\A03\Debug\A03.exe : fatal error LNK1169: 找到一个或多个多重定义的符号 头文件代码如下 ``` #ifndef FUNCTIONS_H_ #define FUNCTIONS_H_ #include <string> #include <iostream> using namespace std; struct AttentionInfo { char name[30]; //存储联系人姓名 char num[20]; //一个存储手机号码的一维数组 char email[30]; //储存电子邮件 char address[30]; //储存地址 }Atten; void wlcm(); // 声明hellpeople函数,用于显示 欢迎使用联系人管理系统 界面 void menu(); // 声明menu函数,用于在在屏幕上显示系统功能菜单 void Firstset(int atten_num[]); // 声明Firstset函数,用于对联系人信息进行原始录入 #endif ```
C语言中for循环里面有dowhile怎么算次数
#include <stdio.h> /* User Code Begin(考生可在本行后添加代码,例如结构体的定义、函数原型声明等,行数不限) */ struct stu { char name[10], num[10]; int score; }; void input(struct stu *stud, int num); void output(struct stu *stud, int num); /* User Code End(考生添加代码结束) */ int main(void) { struct stu stud[5]; input(stud, 5); printf("\nfailed the exam: "); output(stud, 5); return 0; } /* User Code Begin(考生在此后完成自定义函数的设计,行数不限) */ void input(struct stu *stud, int n) { int i, count = 0; printf("input name number score:\n"); for (i = 0; i < n; i++) { do { count++; printf("student %d:", count); scanf("%s%s%d", (stud + i)->name, (stud + i)->num, &(stud + i)->score); if ((stud + i)->score < 0 || (stud + i)->score > 100) { printf(" error score! input again!\n"); count--; } }while ((stud + i)->score < 0 || (stud + i)->score > 100); } } void output(struct stu *stud, int n) { int i, flag = 0; for (i = 0; i < n; i++) { if ((stud + i)->score < 60) { printf("%s/%s,%d ", (stud + i)->num, (stud + i)->name, (stud + i)->score); } flag = 1; } if (flag == 0) { printf("Not Find!"); } putchar('\n'); }![图片说明](https://img-ask.csdn.net/upload/201908/05/1564994283_888602.png)
c语言编程时出现错误为:1.#QNAN0000000,麻烦大佬们看一下问题出在哪儿了,感谢
![图片说明](https://img-ask.csdn.net/upload/201911/11/1573471041_542290.png) # 数值分析大作业 ## c语言 这个是数值分析大作业,我是按照书上一步一步编写的,前366行都是没问题的,问题就出在双步位移QR分解那里,但是我真的无能为力了,感谢大佬们相救,感谢。 ``` 代码如下:(有些printf是我测试用的) #include<stdio.h> #include<math.h> const int n=10,L=10; double err=1e-12; //定义主函数 int main() { int i,j; double A[n][n],B[n][n]; //B[][]是为保证矩阵A(n-1)[][]不被破坏的中间矩阵 //调用函数声明 void faketriangle(double a[n][n]); //构造拟上三角化矩阵函数 void QR(double a[n][n]); void doublestepQR(double a[n][n]); printf("矩阵A为:\n"); //定义矩阵A for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) { A[i][j]=1.52*cos(1+i+1.2*(1+j)); }else { A[i][j]=sin(0.5*(1+i)+0.2*(1+j)); } printf("%0.12f\t",A[i][j]); } printf("\n"); } printf("\n"); printf("矩阵A(n-1)为:\n"); //调用构造拟上三角化矩阵函数A(n-1) faketriangle(A); for(i=0;i<n;i++) { for(j=0;j<n;j++) { B[i][j]=A[i][j]; } } printf("\n"); printf("矩阵A(n-1)分解为QR矩阵\n"); QR(A); printf("\n"); doublestepQR(B); } //构造拟上三角化矩阵函数A(n-1) 函数主体 void faketriangle(double a[n][n]) { int i,j,r; double sum,d,c,h,t; double u[n],w[n],q[n],p[n]; //算法开始迭代 for(r=0;r<n-2;r++) { sum=0; for(i=r+2;i<n;i++) { sum+=fabs(a[i][r]); } //判断是否满足a[i][r]=0(i=r+2,..,n)? if(sum>0) { sum=0; //计算d for(i=r+1;i<n;i++) { sum+=a[i][r]*a[i][r]; } d=sqrt(sum); //计算c if(a[r+1][r]>0) { c=-d; }else { c=d; } //计算h h=c*c-c*a[r+1][r]; //向量u[r]的建立 for(i=0;i<n;i++) { if(i<r+1) { u[i]=0; }else if(i==r+1) { u[i]=a[i][r]-c; }else { u[i]=a[i][r]; } // printf("%0.12f\n",u[i]); } //求解向量p for(i=0;i<n;i++) { sum=0; for(j=0;j<n;j++) { sum+=a[j][i]*u[j]; } p[i]=sum/h; // printf("%0.12f\n",p[i]); } // //求解矩阵q for(i=0;i<n;i++) { sum=0; for(j=0;j<n;j++) { sum+=a[i][j]*u[j]; } q[i]=sum/h; // printf("%0.12f\n",q[i]); } //求t sum=0; for(i=0;i<n;i++) { sum+=p[i]*u[i]; } t=sum/h; // printf("%0.12f\n",t); //求w[] for(i=0;i<n;i++) { w[i]=q[i]-t*u[i]; // printf("%0.12f\n",w[l]); } //求a(r+1) for(i=0;i<n;i++) { for(j=0;j<n;j++) { a[i][j]=a[i][j]-(w[i]*u[j]+u[i]*p[j]); // printf("%0.12f\t",a[i][j]); } // printf("\n"); } } } //输出矩阵A(n-1) for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%0.12f\t",a[i][j]); } printf("\n"); } } //将 A(n-1)矩阵进行QR分解 void QR(double a[n][n]) { int i,j,k,r; double sum,d,c,h; double Q[n][n],u[n],w[n],p[n],R[n][n],b[n][n]; //定义矩阵Q[][] for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) { Q[i][j]=1; }else { Q[i][j]=0; } // printf("%0.12f\t",Q[i][j]); } // printf("\n"); } // printf("\n"); //算法迭代 for(r=0;r<n-1;r++) { sum=0; for(i=r+1;i<n;i++) { sum+=fabs(a[i][r]); } if(sum>0) { //计算d sum=0; for(i=r;i<n;i++) { sum+=a[i][r]*a[i][r]; } d=sqrt(sum); //计算c if(a[r][r]>0) { c=-d; }else { c=d; } //计算h h=c*(c-a[r][r]); //构造向量u[] for(i=0;i<n;i++) { if(i<r) { u[i]=0; }else if(i==r) { u[i]=a[i][r]-c; }else { u[i]=a[i][r]; } } //计算w[] for(i=0;i<n;i++) { sum=0; for(j=0;j<n;j++) { sum+=Q[i][j]*u[j]; } w[i]=sum; } //计算Q(r+1) for(i=0;i<n;i++) { for(j=0;j<n;j++) { Q[i][j]=Q[i][j]-w[i]*u[j]/h; } } //计算P[] for(j=0;j<n;j++) { sum=0; for(i=0;i<n;i++) { sum+=a[i][j]*u[i]/h; } p[j]=sum; } //计算a[r+1] for(i=0;i<n;i++) { for(j=0;j<n;j++) { a[i][j]=a[i][j]-u[i]*p[j]; } } } } printf("Q矩阵为:\n"); //输出Q[][]、R[][] for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%0.12f\t",Q[i][j]); } printf("\n"); } printf("\n"); printf("R矩阵为:\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { R[i][j]=a[i][j]; printf("%0.12f\t",R[i][j]); } printf("\n"); } printf("RQ相乘后的矩阵为:\n"); //求解R[][]*Q[][] for(i=0;i<n;i++) { for(j=0;j<n;j++) { sum=0; for(k=0;k<n;k++) { sum+=R[i][k]*Q[k][j]; } b[i][j]=sum; printf("%0.12f\t",b[i][j]); } printf("\n"); } // printf("QR相乘后的矩阵为:\n"); // //求解Q[][]*R[][] // for(i=0;i<n;i++) // { // for(j=0;j<n;j++) // { // sum=0; // for(k=0;k<n;k++) // { // sum+=Q[i][k]*R[k][j]; // } // b[i][j]=sum; // printf("%0.12f\t",b[i][j]); // } // printf("\n"); // } } //以上没问题 //定义复数结构体 struct complex { double re; double im; }; //对A(n-1)进行双步位移的QR分解 void doublestepQR(double a[n][n]) { //M[][]QR分解函数声明 void MQR(double a[n][n],double M[n][n],int m); int i,j,k,m,r,l; double A[n][n],M[n][n],I[n][n],A2[n][n]; double x,y,z,sum; double s,t; struct complex lambda[n]; struct complex s1,s2; k=0;m=n-1; step3: if(fabs(a[m][m-1])<=err) { lambda[m].re=a[m][m]; lambda[m].im=0; m--; goto step4; }else { goto step5; } step4: if(m==0) { lambda[m].re=a[0][0]; lambda[m].im=0; goto step11; }else if(m==-1) { goto step11; }else { goto step3; } step5: x=a[m-1][m-1]+a[m][m]; y=a[m-1][m-1]*a[m][m]-a[m-1][m]*a[m][m-1]; z=x*x-4*y; if(z>=0) { z=sqrt(z); s1.re=(x+z)/2; s1.im=0; s2.re=(x-z)/2; s2.im=0; }else { z=sqrt(fabs(z)); s1.re=(x)/2; s1.im=(z)/2; s2.re=x/2; s2.im=(-z)/2; } step6: if(m==1) { lambda[m].re=s1.re; lambda[m].im=0; lambda[m-1].re=s2.re; lambda[m-1].im=s2.im; goto step11; }else { goto step7; } step7: if(fabs(a[m-1][m-2])<=err) { if(z>=0) { lambda[m-1].re=(x+sqrt(z))/2; //两个特征值 lambda[m-1].im=0; lambda[m-2].re=(x-sqrt(z))/2; lambda[m-2].im=0; }else { lambda[m-1].re=(x)/2; lambda[m-1].im=(sqrt(fabs(z)))/2; lambda[m-2].re=x/2; lambda[m-2].im=(-sqrt(fabs(z)))/2; } m=m-2; goto step4; }else { goto step8; } step8: if(k==L) { goto step12; }else { goto step9; } step9: // for(i=0;i<m;i++) // { // for(j=0;j<m;j++) // { // a[i][j]=a[i][j]; // } // } s=a[m-1][m-1]+a[m][m]; t=a[m-1][m-1]*a[m][m]-a[m][m-1]*a[m-1][m]; //定义矩阵I[][] for(i=0;i<m;i++) { for(j=0;j<m;j++) { if(i==j) { I[i][j]=1; }else { I[i][j]=0; } } } // printf("%M[][]为:\n"); //计算矩阵M[][] for(i=0;i<m;i++) { for(j=0;j<m;j++) { sum=0; for(l=0;l<m;l++) { sum+=a[i][l]*a[l][j]; } M[i][j]=sum-s*a[i][j]+t*I[i][j]; printf("%0.12f\t",M[i][j]); } printf("\n"); } printf("\n"); //调用M[][]QR分解、计算A(k+1)的函数 MQR(a,M,m); step10: k++; goto step3; step11: printf("特征值已计算完毕。\n"); for(i=0;i<n;i++) { printf("%0.12f+%0.12fi\n",lambda[i].re,lambda[i].im); } for(i=0;i<n;i++) { if(lambda[i].im==0) { // vector(); } } step12: printf("未得到所有特征值。\n"); } //M[][]QR分解、计算A(k+1)的函数 void MQR(double a[n][n],double M[n][n],int m) { int i,j,r; double sum,d,c,h,t; double B[n][n],C[n][n],p[n],q[n],v[n],w[n],u[n]; printf("B:\n"); for(i=0;i<m;i++) { for(j=0;j<m;j++) { B[i][j]=M[i][j]; printf("%f\t",B[i][j]); } printf("\n"); } for(i=0;i<m;i++) { for(j=0;j<m;j++) { C[i][j]=a[i][j]; } } //循环计算矩阵A(k+1) for(r=0;r<m;r++) //r的范围 { sum=0; for(i=r+1;i<m;i++) { sum+=fabs(B[i][r]); } printf("sum:\n"); printf("%0.12f\n",sum); //sum有问题 printf("\n\n\n"); printf("r:%d\n\n\n\n\n",r); if(sum>0) { //计算d sum=0; for(i=r;i<m+1;i++) { sum+=B[i][r]*B[i][r]; printf("B:%0.12f\n",B[i][r]); //B[][]? printf("\n"); } printf("sum:%0.12f\n",sum); //sum有问题 fiest!! printf("\n"); d=sqrt(sum); printf("%0.12f\n",d); //d有问题 printf("\n"); //计算c if(B[r][r]>0) { c=-d; }else { c=d; } printf("%0.12f\n",c); //c有问题 printf("\n"); //计算h h=c*(c-B[r][r]); printf("%0.12f\n",h); //h有问题 printf("\n"); //构造向量u[] for(i=0;i<m;i++) { if(i<r) { u[i]=0; }else if(i==r) { u[i]=B[i][r]-c; }else { u[i]=B[i][r]; } } //计算v[] for(i=0;i<m;i++) { sum=0; for(j=r;j<m;j++) { sum+=B[j][i]*u[j]; } v[i]=sum/h; } //计算B(r+1) for(i=0;i<m;i++) { for(j=0;j<m;j++) { B[i][j]=B[i][j]-u[i]*v[j]; } } //计算p[] for(i=0;i<m;i++) { sum=0; for(j=r;j<m;j++) { sum+=C[j][i]*u[j]; } p[i]=sum/h; } //计算q[] for(i=0;i<m;i++) { sum=0; for(j=r;j<m;j++) { sum+=C[i][j]*u[j]; } q[i]=sum/h; } //计算t sum=0; for(i=r;i<m;i++) { sum+=p[i]*u[i]; } t=sum/h; //计算w[] for(i=0;i<m;i++) { w[i]=q[i]-t*u[i]; } //计算C[r+1] for(i=0;i<m;i++) { for(j=0;j<m;j++) { C[i][j]=C[i][j]-w[i]*u[j]-u[i]*p[j]; } } }else { ; } } for(i=0;i<m;i++) { for(j=0;j<m;j++) { a[i][j]=C[i][j]; printf("%f\t",a[i][j]); } printf("\n"); } } ```
求教各位,关于c语言的结构与指针的问题
![图片说明](https://img-ask.csdn.net/upload/201612/09/1481264283_524924.png) ![图片说明](https://img-ask.csdn.net/upload/201612/09/1481264230_3416.png) ![图片说明](https://img-ask.csdn.net/upload/201612/09/1481264258_839664.png) 我想通过声明一个指针int*p;来指向结构stu[0].deadline,并通过p+1,p+2,的形式f分别指向stu[0].deadline,stu[1].deadline,stu[2].deadline. 不知道应该怎么声明和使用这个指针,是hotel*p还是int*p,如果是hotel*p的话应该怎么达到该效果。 代码如下:(传上去格式就没了,而且容易丢东西,麻烦看看照片) // 房间安排.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" int maopao(int*p,int n); int _tmain(int argc, _TCHAR* argv[]) { int s=0; int n=0; int i=0; struct hotel { int room; int date; int during; int deadline; }; hotel stu[10000]; printf("请输入测试数据组数:\n"); scanf("%d",&n); printf("请输入每组的订单数:\n"); scanf("%d",&s); while(n--) { for(i=0;i<s;i++) { scanf("%d",&stu[i].room); scanf("%d",&stu[i].date); scanf("%d",&stu[i].during); stu[i].deadline=stu[i].date+stu[i].during; } for(int y=0;y<s-1;y++) //以开始日期为条件将结构按从小到大的顺序排出 { for(int u=0;u<s-1-y;u++) { if(stu[u].date>stu[u+1].date) { hotel temp=stu[u]; stu[u]=stu[u+1]; stu[u+1]=temp; } } } int*p; p=; //此处已经将结构按起始日期从大到小进行排序了4 9 6 3 10 4 3,12,6 int re=maopao(p,s); int w=0; int total; while(w<s) { if(stu[w].date<re) total=total+stu[w].room; if(stu[w].date>=re&&total>stu[w].room) total=total+0; if(stu[w].date>=re&&total<stu[w].room) total=stu[w].room; w++; } printf("%d\n",total); } return 0; } int maopao(int*p,int n) { for(int i=0;i<n-1;i++) for(int q=0;q<n-1-i;q++) { if(*(p+q)>*(p+q+1)) { int num=*(p+q); *(p+q)=*(p+q+1); *(p+q+1)=num; } } return *(p+0); }
C语言写入数据到二进制文件失败
# 相关代码如下 # 我在add()调用lessondatewrite()写进去了 #但是lessondateltater()调用lessondatewrite()没写进去 # 调试结果![图片说明](https://img-ask.csdn.net/upload/201811/02/1541169947_50238.png) #运行结果 英语行的 40 应该变成39 ![图片说明](https://img-ask.csdn.net/upload/201811/02/1541169992_687847.png) ``` typedef struct //定义一个Lesson类型的结构体 { char name[50]; char techer[50]; char location[50]; char time[50]; int number; }LESSON; /*课程结构体参数 课程名 char 50字节 授课老师 char 50字节 位置 char 50字节 开课时间 char 50字节 座位数 int 4字节 结构体大小总计 204字节*/ LESSON lessondatewrite(FILE *fl,LESSON date)//这是一个结构体类型的函数,它可以写入课程数据,接受一个文件指针 { fflush(fl);//刷新缓存区 使将要输入的数据写入硬盘 一次性输入大量数据时使用 避免输入失败 fwrite(&date,sizeof(LESSON),1,fl); } void add()//添加一个课程数据 { FILE *lessondate; LESSON lesson={0};// 声明一个LESSON类型的变量为lesson if((lessondate=fopen("lessondate","rb+"))==NULL)//若文件不存在,则建立文件 { lessondate=fopen("lessondate","wb+"); //rb+打开二进制文本文件,允许读写,若不存在返回空 //wb+新建二进制文本文件,允许读写。如果文件存在则删除文件重建 } printf("请依次输入如下数据,课程名,授课老师,教室位置,开课时间(xx月xx日xx:xx),座位数(各数据以空格隔开,回车结束)\n"); scanf("%s %s %s %s %d",&lesson.name,&lesson.techer,&lesson.location,&lesson.time,&lesson.number); //scanf在接收字符串时 不会接收空白符(空格与回车) 逗号或其他都能接收 //%s不能使用char 而是char[] fseek(lessondate,0L,SEEK_END); lessondatewrite(lessondate,lesson); fclose(lessondate); system("cls"); admin(); } void lessondatelater(int choose) { FILE *lessondate; LESSON lesson={0}; int i; lessondate=fopen("lessondate","rb+"); for(i=0;i<choose;i++) { lesson=lessondateread(lessondate);//给读取函数传递一个文件指针 假定有是三个结构体A B C 循环结束后光标在C前面B后面 } fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面 lesson=lessondateread(lessondate);//读取这个结构体数据 读取B的数据 此时光标前进到C前面 lesson.number--;//修改结构体数据 fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面 lessondatewrite(lessondate,lesson);//写入修改后结构体数据 覆盖B } ```
C语言运行总是出问题。。。。
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> //将一块内存数据写入文件中 使用的函数为:fwrite; #define NUM 2 typedef struct { char name[20]; int age; char email[50]; }person; //定义结构体 结构体名为person; void getinfor(person* pinfor) { printf("input name: "); gets(pinfor->name); printf("input age: "); scanf("%d",&pinfor->age); //getchar(); //printf("input email "); //gets("pinfor->email"); } void main(void) { person people[NUM]; //声明结构体数组,结构体名称为 person 数组名为 people; //声明文件,要写入的文件名; char filename[50]; printf("please input the file name that you want to save date : \n"); gets(filename); FILE* fpo = NULL; fpo = fopen(filename,"wt"); if (fpo == NULL) { printf("the file open fail,check again please!\n"); exit(0); } else printf("the file open success!\n"); for (int i=0;i<NUM;i++) { getinfor(&people[i]); if (fwrite(&people[i],sizeof(person),1,fpo) == 0) { printf("fwrite in fail\n"); exit(0); } else printf("write in success!\n"); } fclose(fpo); printf("The file has been closed\n"); } 各位大牛帮帮忙呀 谢谢大家~!
c语言 打印不出来?文件用得对吗
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #define max 100 //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! <货物类型> typedef struct Node{ char NAME[100];//各类型名称 int NUM; //各类型下的货物总数 struct Node*next; }Node; // 定义单个货物 typedef struct Goods{ char name[100];//货物名称 double price;//货物价格 int num;//货物库存 int id;//所属类型的id }Goods; //函数声明 void Create_File_List(); //创建文件 void add_kinds();//将种类信息录入文件中 Node*CreateList();//创建链表(将信息放到链表中) void Print_List(Node*head);//打印链表 //主函数 void main() { int x; Node *head; if(!(head=(Node *)malloc(sizeof(Node)))) //分配空间 { printf("\n"); exit(1); } Create_File_List();//创建文件 printf("欢迎使用我的仓库管理系统!\n"); while(1) { //主菜单开始 printf("==========================\n"); printf("1.显示货物类型列表\n"); printf("2.增加货物类型\n"); printf("3.删除货物类型\n"); printf("4.货物入库\n"); printf("5.货物出库\n"); printf("6.库存显示\n"); printf("7.退出\n"); printf("==========================\n"); //主菜单结束 printf("选择1-7:"); scanf("%d",&x); switch(x) { case 1:Print_List(head);break; case 2:add_kinds(); CreateList(); break; case 3:printf("******请输入要删除货物类型的编号:******\n"); break; case 4:;break; case 5:;break; case 6:;break; case 7:printf("bye!see you next time!\n"); exit(0); break; default:printf("input error!\nplaese input1-7"); } } } //函数 //创建文件是否成功 void Create_File_List() { FILE *fp;//需要在每个函数写这句吗 if ((fp = fopen("storehouse.txt","r"))==NULL) /*如果此文件不存在*/ { if ((fp = fopen("student.txt","w"))==NULL) { printf( "无法建立文件!"); } } } //录入货物信息到文件中 void add_kinds() { FILE*fp; struct Node Node; fp = fopen("storehouse.txt","a+"); Create_File_List(); printf("请输入货物名称:"); scanf("%s",&Node.NAME); printf("请输入货物总数:"); scanf("%d",&Node.NUM); fwrite(&Node,sizeof(Node),1,fp);//这两个fwrite有区别吗 fclose(fp); } //从已经写入的文件中读到链表中(函数功能:创建链表) Node*CreateList() { Node*p,*head,*q;//p指针总是指向新申请的节点,q总是指向尾节点 p=(Node*)malloc(sizeof(Node)); head=p;//开辟头/尾节点内存 (头结点没有信息) q=p; q->next=NULL;//标志链表的结束 FILE*fp; fp=fopen("storehouse.txt","r"); struct Node Node; while(fread(&Node,sizeof(Node),1,fp)!=0)//从文件中读结构块体 { //p=(Node*)malloc(sizeof(Node)); strcpy(p->NAME,Node.NAME); p->NUM=Node.NUM; //下面两句没看懂 q->next=p;//把新节点挂到尾节点后 q=q->next;//q指针指向新的尾节点 //第二句不就是q=p吗? } q->next=NULL;//标志链表的结束 fclose(fp); return head; } //从链表中输出打印到屏幕中数据(输出链表) void Print_List(Node*head) { Node*p; p=head->next;//跳过无数据的头结点 while(p!=NULL) { printf("%s",p->NAME); printf("%d",p->NUM); p=p->next;//指向下一个节点 } } ![图片说明](https://img-ask.csdn.net/upload/201806/01/1527846937_495816.png)
|undefined reference to `init_student_info_list'| 怎么解决?
大一c语言作业出现bug,求解决 ```main #include "student.h" #include <stdlib.h> #include <stdio.h> void menu(); //学生信息链表 student_info* student_list; //用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。 int main() { int choice; int num; printf("**************************\n"); printf("欢迎使用学生信息管理系统\n"); printf("**************************\n"); printf("-----------------------------\n"); init_student_info_list(); if(read_file()) printf("从文件中读取学生信息成功.\n"); else printf("从文字中读取学生信息失败.\n"); printf("-----------------------------\n"); menu(); while(1) { printf("请选择操作: "); scanf("%d",&choice); switch(choice) { case 1: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else display_student_info(); break; case 2: if(add_student_info()) printf("添加学生信息成功.\n"); else printf("添加学生信息失败.\n"); break; case 3: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else { printf("请输入要删除学生信息的学号: "); scanf("%d",&num); if(delete_student_info(num)) printf("成功删除该学号对应的学生信息.\n"); else printf("删除失败.\n"); } break; case 4: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else { printf("请输入要修改学生信息的学号: "); scanf("%d",&num); if(modify_student_info(num)) printf("成功修改该学号对应的学生信息.\n"); else printf("修改失败.\n"); } break; case 5: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else display_average(); break; case 6: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else if(save_file()) printf("保存学生信息成功.\n"); else printf("保存学生信息失败.\n"); break; case 0: printf("欢迎下次使用,再见.\n"); system("pause"); exit(0); break; default: printf("输入错误,请重新选择操作.\n"); } } system("pause"); return 0; } void menu() { printf("1.查看学生信息.\n"); printf("2.添加学生信息.\n"); printf("3.删除学生信息.\n"); printf("4.修改学生信息.\n"); printf("5.输出平均成绩.\n"); printf("6.保存学生信息.\n"); printf("0.退出系统操作.\n"); } ``` student。h #ifndef STUDENT_HEAD #define STUDENT_HEAD typedef struct node /*定义结构体*/ { int num; //学号 char name[15];//姓名 char sex[9]; //性别 int age; //年龄 int english; //英语成绩 int math; //数学成绩 int computer;//计算机成绩 int average; //平均成绩 struct node *next; //链表指针域 }student_info; //学生信息链表 extern student_info* student_list; //全局变量声明 //初始化函数声明 //初始化学生信息链表 void init_student_info_list(); //判断学生信息链表是否为空 int student_list_empty(); //操作函数声明 //向学校信息表中添加学生信息记录 int add_student_info(); //根据学号删除学生信息 int delete_student_info(int num); //根据学号修改学生信息 int modify_student_info(int num); //根据学号查找学生信息 student_info* search_student_info(int num); //输出每个学生的平均成绩 void display_average(); //显示所有学生信息 void display_student_info(); //将学生信息保存到文件 int save_file(); //从文件中读取学生信息 int read_file(); #endif ``` student。cpp #include "student.h" #include <stdio.h> #include <string.h> #include <malloc.h> //初始化学生信息链表 void init_student_info_list() { //学生信息链表头结点 student_list = (student_info*)malloc(sizeof(student_info)); student_list->next = NULL; } //判断学生信息链表是否为空 int student_list_empty() { return student_list->next == NULL; } //操作函数实现 //向学校信息表中添加学生信息记录 int add_student_info() { student_info *pstu = (student_info*)malloc(sizeof(student_info)); if(pstu == NULL) { printf("内存分配失败.\n"); return 0; } printf("请按要求一次输入学生的信息.\n"); printf("请输入学号: "); scanf("%d",&pstu->num); //判断该学号是否已经存在 if(search_student_info(pstu->num) != NULL) { printf("该学号已经存在学生信息表中.\n"); return 0; } printf("请输入姓名: "); getchar(); gets(pstu->name); printf("请输入性别: "); scanf("%s",pstu->sex); printf("请输入年龄: "); scanf("%d",&pstu->age); printf("请输入英语成绩: "); scanf("%d",&pstu->english); printf("请输入数学成绩: "); scanf("%d",&pstu->math); printf("请输入计算机成绩: "); scanf("%d",&pstu->computer); pstu->average = (pstu->english + pstu->math + pstu->computer)/3; //每次从学生信息链表的头部插入; pstu->next = student_list->next; student_list->next = pstu; return 1; } //根据学号删除学生信息 int delete_student_info(int num) { student_info *pstu; student_info *qstu; if(search_student_info(num) == NULL) { printf("不存在该学好为%d的学生信息.\n",num); return 0; } pstu = student_list->next; qstu = student_list; while(pstu->num != num) { qstu = pstu; pstu = pstu->next; } qstu->next = pstu->next; free(pstu); return 1; } //根据学号修改学生信息 int modify_student_info(int num) { int choice; student_info *pstu = search_student_info(num); if(pstu == NULL) { printf("不存在该学好为%d的学生信息.\n",num); return 0; } printf("1.姓名 2.性别 3.年龄 4.英语成绩 5.数学成绩 6.计算机成绩.\n"); printf("请选择修改的信息: "); scanf("%d",&choice); switch(choice) { case 1: printf("请输入新的姓名: "); getchar(); gets(pstu->name); break; case 2: printf("请输入新的性别: "); scanf("%s",pstu->sex); break; case 3: printf("请输入新的年龄: "); scanf("%d",&pstu->age); break; case 4: printf("请输入新的英语成绩: "); scanf("%d",&pstu->english); break; case 5: printf("请输入新的数学成绩: "); scanf("%d",&pstu->math); break; case 6: printf("请输入新的计算机成绩: "); scanf("%d",&pstu->computer); break; default: printf("请按提示要求操作.\n"); } return 1; } //根据学号查找学生信息 student_info* search_student_info(int num) { student_info *pstu; pstu = student_list->next; while(pstu && pstu->num != num) { pstu = pstu->next; } return pstu; } //输出每个学生的平均成绩 void display_average() { student_info *pstu; pstu = student_list->next; while(pstu) { printf("学号为%d,姓名为%s的学生平均成绩为: %d\n",pstu->num,pstu->name,pstu->average); pstu = pstu->next; } } //显示所有学生信息 void display_student_info() { student_info *pstu; pstu = student_list->next; printf("所有学生信息如下所示.\n"); printf("学号\t姓名\t性别\t年龄\t英语\t数学\t计算机\t平均成绩.\n"); while(pstu) { printf("%d\t",pstu->num); printf("%s\t",pstu->name); printf("%s\t",pstu->sex); printf("%d \t",pstu->age); printf("%d \t",pstu->english); printf("%d \t",pstu->math); printf("%d \t",pstu->computer); printf("%d\n",pstu->average); pstu = pstu->next; } } //将学生信息保存到文件 int save_file() { FILE *pfile; student_info *pstu; pfile = fopen("student.txt","w"); if(pfile == NULL) { printf("打开文件失败.\n"); return 0; } pstu = student_list->next; while(pstu) { fprintf(pfile,"%5d%15s%9s%3d%4d%4d%4d%4d",pstu->num,pstu->name,pstu->sex,pstu->age, pstu->english,pstu->math,pstu->computer,pstu->average); pstu = pstu->next; } fclose(pfile); return 1; } //从文件中读取学生信息 int read_file() { FILE *pfile; student_info *pstu; pfile = fopen("student.txt","r"); if(pfile == NULL) { printf("打开文件失败.\n"); return 0; } while(!feof(pfile)) { pstu = (student_info*)malloc(sizeof(student_info)); fscanf(pfile,"%5d%15s%9s%4d%4d%4d%4d%4d",&pstu->num,pstu->name,pstu->sex,&pstu->age, &pstu->english,&pstu->math,&pstu->computer,&pstu->average); pstu->average = (pstu->english + pstu->math + pstu->computer)/3; //每次从学生信息链表的头部插入; pstu->next = student_list->next; student_list->next = pstu; } fclose(pfile); return 1; } ``` 用code blokes运行 出现 D:\Projects\C\3\main.c|19|undefined reference to `init_student_info_list'| D:\Projects\C\3\main.c|20|undefined reference to `read_file'| D:\Projects\C\3\main.c|33|undefined reference to `student_list_empty'| 怎么解决啊?
c语言数据结构词索引表出了点问题,谁能帮忙看看呀
#include<stdio.h> #include<string.h> #include<stdlib.h> #include <conio.h> #include <ctype.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -2 #define MaxBookNum 1000 //假设只对1000本书建立索引表(1000) #define MaxKeyNum 2500 //索引表的最大容量(2500) #define MaxLineLen 500 //书目串的最大长度(500) #define MaxWordNum 10 //词表的最大容量 #define MaxWordLength 30 //单词的最大长度 typedef int Status; typedef int ElemType; //定义链表的数据元素类型为整型 typedef int Boolean; typedef struct { char item[MaxWordNum][MaxWordLength]; //字符串的数组 int last; //词表的长度 }WordListType; //词表的类型(顺序表) typedef struct { char *ch; //如果是非空串,则按串长分配存储区,否则ch为NULL int length; //串长度 }HString; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*Link,*Position; typedef struct { Link head,tail; int len; }LinkList; typedef struct { HString key; //关键词 LinkList bnolist; //存放书号索引的链表 }IdxTermType; //索引项类型 typedef struct { IdxTermType item[MaxKeyNum+1]; int last; }IdxListType; //索引表类型 //----------------主要变量-------------- char buf[MaxLineLen]; //书目串缓冲区 WordListType wdlist; //关键字词表 IdxListType idxlist; //索引表 char oftenwords[6][10] = {"an","a","of","and","to","the"}; /*******************************声明部分****************************************/ //--------------基本操作--------- void InitIdxList (IdxListType *idxlist); //初始化操作,置索引表idxlist为空表,且在idxlist.item[0]设一空串 void GetLine (FILE *f); //从文件F读入一个书目信息到书目串缓冲区buf void ExtractKeyWord (int *Num); //Status ExtractKeyWord(char* Buffer,WordListType *w,int *Num); //从buf中提取书名关键词到词表wdlist,书号存入bno Status InsIdxList (IdxListType *idxlist,ElemType bno); //将书号为bno的书名关键词按词典顺序插入索引表idxlist void PutText (FILE *g,IdxListType idxlist); //将生成的索引表idxlist输出到文件g //--------------为实现在索引表上进行插入,要先实现下列操作----------- void GetWord (int i,HString *wd); //用wd返回词表wdist中第i个关键词 int Locate (IdxListType *idxlist,HString wd,Boolean *b); //在索引表idxlist中查询是否存在与wd相等的关键词。若存在,则返回其在索引表 //中的位置,且b取值TRUE;否则返回插入位置,且b取值FALSE void InsertNewKey(int j,HString wd); //在索引表idxli的第i项上插入新关键词wd,并初始化书号索引的链表为空表 Status InsertBook (int i,int bno); //在索引表idxlist的第i项中插入书号为bno的索引 //------------串的堆分配存储表示----------- Status StrAssign(HString *T,char *chars); //生成一个其值等于串常量chars的串T int StrCompare(HString S,HString T); //若S>T,则返回值>0,若S=T,则返回值 = 0,若S<T,则返回值<0 Status StrCopy(HString *T, HString S); //由串S复制得串T //----------------带头结点的线性链表------------- Status InitList(LinkList *L); //构造一个空的线性链表L Status MakeNode(Link *p,ElemType e); //分配由p指向值e的结点,并返回OK;若分配失败,则返回ERROR Status Append (LinkList *L,Link s); //将指针s所指的一串结点链接在线性链表L的最后一个结点 //之后,改变链表L的尾指针指向新的尾结点 /*******************************函数部分****************************************/ Status StrAssign(HString *T,char *chars) { int i = strlen(chars); if((*T).ch) free((*T).ch); if(!i){ //若chars为空 (*T).ch = NULL; (*T).length = 0; } else{ //chars不空 if(!((*T).ch = (char *)malloc(i * sizeof(char)))) //为T分配chars所需的存储空间 exit(OVERFLOW); int count; for(count = 0;count <= i;count++) //把chars存入T中 (*T).ch[count] = chars[count]; (*T).length = i; } //else return OK; } void InitString(HString *T) { (*T).length = 0; (*T).ch = NULL; } int StrCompare(HString S,HString T) { int count; for(count = 0;count<S.length && count<T.length;count++){ if(S.ch[count] != T.ch[count]) return S.ch[count]-T.ch[count] ; } return S.length-T.length; } Status StrCopy(HString *T, HString S) { int j; if((*T).ch) free((*T).ch); //删除T串中原有值 (*T).ch = (char*)malloc(S.length * sizeof(char)); if(!(*T).ch) exit(OVERFLOW); for(j = 0; j <= S.length; j++) (*T).ch[j] = S.ch[j]; (*T).length = S.length; return OK; } Status InitList(LinkList *L) { Link p; p = (Link)malloc(sizeof(LNode)); if(!p) exit(OVERFLOW); p->next = NULL; (*L).head = (*L).tail = p; (*L).len = 0; return OK; } Status MakeNode(Link *p,ElemType e) { *p = (Link)malloc(sizeof(LNode)); if(!(*p)) exit(OVERFLOW); (*p)->data = e; (*p)->next = NULL; return OK; } Status Append (LinkList *L,Link s) { int i = 1; (*L).tail->next = s; while(s->next){ s = s->next; i++; } (*L).tail = s; (*L).len += i; return OK; } void GetWord(int i,HString *wd) { char *p; p = *(wdlist.item +i); StrAssign(wd,p); //生成关键字字符串 } int Locate(IdxListType *idxlist,HString wd,Boolean *b) { int i,m; for(i = (*idxlist).last-1; ( m=StrCompare((*idxlist).item[i].key,wd) ) >0; --i); if(m == 0){ //找到 *b = TRUE; return i; } else{ *b = FALSE; return i+1; } } void InsertNewKey(int j,HString wd) { int count; InitList(&idxlist.item[idxlist.last+1].bnolist); for(count = idxlist.last-1; count>=j; --count){ //后移索引项 idxlist.item[count+1] = idxlist.item[count]; } InitString(&idxlist.item[j].key); StrCopy(&idxlist.item[j].key,wd); //插入新的索引项 //串赋值 InitList(&idxlist.item[j].bnolist); //初始化书号索引表为空表 ++idxlist.last; } Status InsertBook (int i,int bookno) { Link p; if(!MakeNode(&p,bookno)) return ERROR; Append(&idxlist.item[i].bnolist,p); return OK; } Status InsertIdxList(IdxListType *idxlist,int bno) { int i,j; HString wd; Boolean b; InitString(&wd); for(i= 0;i<wdlist.last;++i){ GetWord(i,&wd); //获取wdlist中保存的单词 j = Locate(idxlist,wd,&b); //查找是否已存在于idxlist中 if(!b) //不存在 InsertNewKey(j,wd); //则插入新的关键词 InsertBook(j,bno); //插入书号 } return OK; } void InitIdxList (IdxListType *idxlist) { int i; (*idxlist).last = 0; for(i = 0;i<MaxKeyNum;i++){ InitList(&(*idxlist).item[i].bnolist); //初始化索引表项目中的书号的链表 } } void ExtractKeyWord (int *BookNum) { int i = 0,j = 0,k = 0,m; wdlist.last = 0; //很重要 Boolean Ignore; char TempChar[30]; for(m = 0;m<=30;m++) TempChar[m] = '\0'; //清空TempChat[] while(*(buf+i) !=' '){ //提取书目串缓冲区其中的书号 TempChar[i] = *(buf+i); //将书号以字符串类型保存在该数组中 i++; } TempChar[i] ='\0'; *BookNum = atoi(TempChar); //将书号转为int for(m = 0;m<=i;m++) TempChar[m] ='\0'; //清空TempChat[] i++; //推进一位,当前*(buf+i)开始为书名 while(*(buf+i) !='\n' && *(buf+i) != '\0'){ //每个字符串末尾都有结束符\n if(*(buf+i) != ' '){ //若非空字符 if(*(buf+i) >'A'&& *(buf+i) <= 'Z'){ *(buf+i) -= 'A' - 'a'; //若为大写,则转为小写 } TempChar[j] = *(buf+i); //把当前字符加入TempChar中//------------ j++; i++; } //if else{ //若为空字符,则检索当前TempChar中保存的字符串是否为常用词 Ignore = FALSE; //若Ignore为TRUE,则为常用词;为FALSE则不是常用词 for(m = 0;m<6;m++){ //查找是否为常用词 if(strcmp(TempChar,oftenwords[m]) == 0){ Ignore = TRUE; //是常用词 break; }//if }//for if(Ignore){ for(m = 0;m<=j;m++) TempChar[m] = '\0'; //清空TempChat[] i++; j = 0; }//if else{ //不是常用词 for(m = 0;m<=j;m++) //将该词插入wdlist中 wdlist.item[wdlist.last][m] = TempChar[m]; for(m = 0;m<=j;m++) TempChar[m] = '\0'; //清空TempChat[] k++; wdlist.last++; i++; j=0; }//else }//else }//while } void GetLine(FILE *f) { fgets(buf,MaxLineLen,f); } void PutText (FILE *g,IdxListType idxlist) { int i,j,k; Link p; for(i = 0;i<=idxlist.last;i++){ for(j = 0;j<idxlist.item[i].key.length; j++) putc(*(idxlist.item[i].key.ch + j),g); putc('\t',g); if(idxlist.item[i].key.length < 8) putc('\t',g); p = idxlist.item[i].bnolist.head; for(k = 0;k<idxlist.item[i].bnolist.len ; k++){ p = p->next; fprintf(g,"%03d",p->data); putc(' ',g); }//for putc('\n',g); }//for } void PrintFile(FILE *FileName) { char ch; rewind(FileName); ch = getc(FileName); while(ch != EOF){ putchar(ch); ch = getc(FileName); } printf("\n"); rewind(FileName); } /*******************************主函数部分**************************************/ int main() { FILE *f,*g; int ct; int BookNo; if((f = fopen("BookName.txt","r")) == NULL){ printf("ERROR in open BookName.txt\n"); exit(1); } if((g = fopen("KeyWordIndex_self.txt","w"))==NULL){ printf("ERROR in open KeyWordIndex_self.txt\n"); exit(1); } printf("书单文件:\n"); PrintFile(f); InitIdxList(&idxlist); WordListType w; while(!feof(f)){ GetLine(f); //读取书单文件中的一行到缓冲区 ExtractKeyWord(&BookNo); InsertIdxList(&idxlist,BookNo); } PutText(g,idxlist); fclose(f); fclose(g); printf("\n结果如下:\n"); if((g = fopen("KeyWordIndex_self.txt","r"))==NULL){ printf("ERROR in open KeyWorkIndex_self.txt\n"); exit(1); } PrintFile(g); fclose(g); return 0; }
c语言 自己写的zz代码不知道怎么连续输入链表每一个节点的数据 求大佬帮忙
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! typedef struct Node{ int NUM;//类型总数 int NAME;//各类型名称 int num; //各类型下的货物总数 struct Node*next; }Node; //函数声明 Node*create(Node*L); Node*input(Node*L); Node*output(Node*L); Node*outnum(Node*L); Node*outname(Node*L); Node*current(Node*L); void search(Node*L); void print(Node*L); void searchnum(Node*L); void searchname(Node*L); void display(Node*L); //========新增加的函数======== Node*append(Node*L); //主函数 void main() { printf("欢迎使用我的仓库管理系统!\n"); while(1); { //主菜单开始 printf("==========================\n"); printf("1.显示货物类型列表\n"); printf("2.增加货物类型\n"); printf("3.删除货物类型\n"); printf("4.货物入库\n"); printf("5.货物出库\n"); printf("6.库存显示\n"); printf("7.退出\n"); printf("==========================\n"); //主菜单结束 printf("选择1-7:"); scanf("%d",&x); switch(x) { case 1:;break; case 2:append(L);break; case 3:;break; case 4:;break; case 5:;break; case 6:;break; case 7:;break; default:printf("input error!\nplaese input1-7"); } } } //函数 //1.创建链表节点 Node*create(Node*L) { Node*pTail=L; L->next=NULL; Node*p; p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } //利用尾插建立单链表 pTail->next=p; p->next=NULL; pTail=p; } //2.增加货物类型 Node*append(Node*L) { }
C语言超市信息管理系统,按照销售额排序的时候输出全是烫?
![图片说明](https://img-ask.csdn.net/upload/201906/19/1560956202_209394.png) #include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #include<assert.h> #define FILENAME "goodsfile" //定义商品信息文件名 /*-------定义商品信息结构体--------*/ typedef struct good_tag { int good_id; //商品编号 char name[50]; //商品名称 float good_inprice; //商品进价 float good_outprice; //商品售价 int good_innumber; //商品进货量 int good_outnumber; //商品销售量 float good_grossprofit; //商品毛利 int good_reserve; //商品库存 struct good_tag *next; //定义商品结构体指针 }GOODS; GOODS *G_head; //定义一个商品信息的结构体指针 /*------------函数声明-----------*/ int menu(); //定义主菜单函数 int menu_check();//定义查看菜单函数 GOODS *alloc_a_goods_node(); //为load分配一个GOODS结构体大小的堆空间 GOODS *Add_Goods_Reserve(GOODS *G_head,GOODS *pload); //添加商品入库函数 int free_goods_node(GOODS *G_head); //释放商品链表堆空间 int Show_Goods_of_Reserve(GOODS *G_head); //显示所有商品信息 GOODS *Find_a_goods(GOODS *G_head, int num);//查找商品 GOODS *Delete_a_node(GOODS *G_head); //删除商品 GOODS *modify_a_goods(GOODS *G_head); //修改库存商品 void Show_Goods_of_Reserve_bysales(GOODS *G_head,int n); //显示商品按销售额排序 void Show_Goods_of_Reserve_bygrossprofit(GOODS *G_head);//显示商品按毛利排序 void Write_Goods_list_to_file(GOODS *G_head); //将导入的库存商品信息保存至文件中 GOODS *Read_file_Goods_to_list(GOODS *G_head); //将文件中商品的信息导出到链表 int count(); /*--------------主菜单-------------*/ void menu_of_fun() { int num; GOODS *load = NULL; GOODS *pload = NULL; printf("----------------------------------/n"); printf("---欢迎进入超市商品信息管理系统---/n"); printf("----------------------------------/n"); switch (menu()) { case 1: Show_Goods_of_Reserve(G_head); //查看所有商品 break; case 2: printf("请输入要查找的商品的编号:\n"); //查找单个商品 scanf("%d", &num); load = Find_a_goods(G_head,num); if (load==NULL) printf("没有找到商品!\n"); else { printf("编号 名称 进价 售价 进货量 销售量 毛利 库存\n"); printf("%d %10s %7.2f %7.2f %9d %9d %11.2f %7d\n", load->good_id, load->name, load->good_inprice, load->good_outprice, load->good_innumber, load->good_outnumber, load->good_grossprofit, load->good_reserve); } break; case 3: pload = alloc_a_goods_node(); G_head = Add_Goods_Reserve(G_head,pload); //添加商品 break; case 4: G_head = Delete_a_node(G_head); //删除商品 break; case 5: G_head = modify_a_goods(G_head); //修改商品 break; case 6: Write_Goods_list_to_file(G_head); free_goods_node(G_head); //在系统退出时释放库存商品链表堆空间 exit(0); //退出系统 } } int menu() //定义主菜单函数 { int choice; printf("-------------------------------\n"); printf(" 1:查看库存商品 \n"); printf(" 2:查找商品 \n"); printf(" 3:添加库存商品 \n"); printf(" 4:删除库存商品 \n"); printf(" 5:修改库存商品 \n"); printf(" 6:退出系统 \n"); printf("-------------------------------\n"); printf("请输入你的选择:\n"); while (1) //选择步骤 { scanf("%d", &choice); if (choice >= 1 && choice <= 6) break; else printf("请重新输入!\n"); } return choice; } int menu_check() //定义排序菜单函数 { int choice; printf("-------------------------------\n"); printf(" 1:按商品原顺序排序 \n"); printf(" 2:按销售额高到低排序 \n"); printf(" 3:按毛利高到低排序 \n"); printf("-------------------------------\n"); printf("请输入你的选择:\n"); while (1) //选择步骤 { scanf("%d", &choice); if (choice >= 1 && choice <= 3) break; else printf("请重新输入!\n"); } return choice; } /*--------------主函数-------------*/ int main() { G_head=Read_file_Goods_to_list(G_head); while (1) { menu_of_fun(); } system("pause"); //使程序在此处暂停 } /*-------商品库存增删查改函数------*/ /*-----------商品库存增加----------*/ GOODS *alloc_a_goods_node() { GOODS *load = (GOODS *)malloc(sizeof(GOODS)); //为load分配一个GOODS结构体大小的堆空间 printf("请输入商品信息:\n"); printf("编号 名称 进价 售价 进货量 销售量 毛利 库存\n"); scanf("%d %s %f %f %d %d %f %d", &(load->good_id), load->name, &(load->good_inprice), &(load->good_outprice), &(load->good_innumber), &(load->good_outnumber), &(load->good_grossprofit), &(load->good_reserve)); return load; } GOODS *Add_Goods_Reserve(GOODS *G_head,GOODS *pload) //头插法 { GOODS *buff = G_head; if (G_head == NULL) { G_head = pload; pload->next = NULL; } else { pload->next = G_head; G_head = pload; } return G_head; } /*----------释放堆空间--------*/ int free_goods_node(GOODS *G_head) { GOODS *pload = G_head; GOODS *buff = NULL; if (G_head == NULL) return 0; while (pload ->next != NULL) { buff = pload->next; free(pload); pload = buff; } free(pload); return 1; } /*---------显示库存中所有商品信息----------*/ void Show_A_Goods(GOODS *pload) { printf("%d %10s %7.2f %7.2f %9d %9d %11.2f %7d\n", pload->good_id, pload->name, pload->good_inprice, pload->good_outprice, pload->good_innumber, pload->good_outnumber, pload->good_grossprofit, pload->good_reserve); } void Show_Goods_of_Reserve_bysales(GOODS *G_head,int n) //显示商品按销售额排序 { int i,j; GOODS temp, good_tag[200], *pload; for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) { if((good_tag[j].good_outnumber*good_tag[j].good_outprice)>(good_tag[j+1].good_outnumber*good_tag[j+1].good_outprice)) { temp = good_tag[j+1]; good_tag[j+1] = good_tag[j]; good_tag[j] = temp; } } } printf("\n"); printf("依据商品销售额排序:\n\n"); pload = good_tag; printf("%d %10s %7.2f %7.2f %9d %9d %11.2f %7d\n", pload->good_id, pload->name, pload->good_inprice, pload->good_outprice, pload->good_innumber, pload->good_outnumber, pload->good_grossprofit, pload->good_reserve); } int Show_Goods_of_Reserve(GOODS *G_head) { GOODS *buff = G_head; if (G_head == NULL) //链表为空直接退出函数 { printf("库存中没有商品!\n"); return 0; } else { switch(menu_check()) { case 1: printf("编号 名称 进价 售价 进货量 销售量 毛利 库存\n"); while (buff != NULL) { Show_A_Goods(buff); buff = buff->next; } break; case 2: Show_Goods_of_Reserve_bysales(G_head,count()); break; case 3: //Show_Goods_of_Reserve_bygrossprofit(G_head); break; } } return 0; } /*----------查找商品---------*/ GOODS *Find_a_goods(GOODS *G_head,int num) { GOODS *buff = G_head; if (G_head == NULL) { return NULL; } else { while (buff != NULL) { if (buff->good_id == num) { return buff; } else { buff = buff->next; } } return NULL; } } /*-------删除库存中商品---------*/ GOODS *Delete_a_node(GOODS *G_head) { GOODS *buff = G_head; GOODS *prebuff = G_head; int num = 0; printf("请输入要删除的商品编号:\n"); scanf("%d", &num); while (buff != NULL) { if (buff->good_id != num) { prebuff = buff ; buff = buff->next; } else { if (G_head->good_id == num) { G_head = G_head->next; } else { prebuff->next = buff->next; } free(buff); break; } } return G_head; } /*-------------修改库存商品--------------*/ GOODS *modify_a_goods(GOODS *G_head) { int num = 0; GOODS *buff = G_head; printf("请输入要修改的商品的编号:\n"); scanf("%d", &num); while (buff != NULL) { if (buff->good_id == num) { printf("请重新输入这个商品的信息:\n"); scanf("%d %s %f %f %d %d %f %d", &buff->good_id, buff->name, &buff->good_inprice, &buff->good_outprice, &buff->good_innumber, &buff->good_outnumber, &buff->good_grossprofit, &buff->good_reserve); break; } else { buff = buff->next; } } return G_head; } /*----------文件操作---将导入的库存商品信息保存至文件中----------------*/ void Write_Goods_list_to_file(GOODS *G_head) { GOODS *pload = G_head; FILE *fp = fopen(FILENAME,"wb+"); assert(fp != NULL&&pload != NULL); while (pload != NULL) { fwrite(pload, sizeof(GOODS), 1, fp); pload = pload->next; } fclose(fp); } /*---------文件操作---将文件中商品的信息导入链表--------------------*/ GOODS *Read_file_Goods_to_list(GOODS *G_head) { GOODS *pload = malloc(sizeof(GOODS)); FILE *fp = fopen(FILENAME, "rb+"); if (fp == NULL) //如果文件中为空直接返回空 return NULL; assert(fp != NULL&&pload != NULL);//保护 while (fread(pload, sizeof(GOODS), 1, fp)==1)//fread函数读成功后返回size个数 { G_head = Add_Goods_Reserve(G_head, pload);//将读出的数据依次插入链表 pload = malloc(sizeof(GOODS)); } free(pload);//释放最后多分配的空间 fclose(fp);//关闭文件 return G_head; } int count() { int i=0; GOODS *nood=G_head; while(nood) { i++; nood=nood->next; } return i; }
c语言链表显示出错 求大佬帮忙
选项6出错 ![图片说明](https://img-ask.csdn.net/upload/201805/28/1527503476_559126.png) #include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! typedef struct Node{ int NUM;//类型总数 char NAME[100];//各类型名称 int num; //各类型下的货物总数 struct Node*next; }Node; //函数声明 Node*create(int n,Node*L); Node*input(Node*L); Node*output(Node*L); Node*outnum(Node*L); Node*outname(Node*L); Node*current(Node*L); void search(Node*L); void print(Node*L); void searchnum(Node*L); void searchname(Node*L); void display(int n,Node*L); //========新增加的函数======== Node*append(Node*L); //主函数 void main() { int x; int n;//初次输入的大小 Node *L; if(!(L=(Node *)malloc(sizeof(Node)))) //分配空间 { printf("\n"); exit(1); } printf("欢迎使用我的仓库管理系统!\n"); while(1) { //主菜单开始 printf("==========================\n"); printf("1.显示货物类型列表\n"); printf("2.增加货物类型\n"); printf("3.删除货物类型\n"); printf("4.货物入库\n"); printf("5.货物出库\n"); printf("6.库存显示\n"); printf("7.退出\n"); printf("==========================\n"); //主菜单结束 printf("选择1-7:"); scanf("%d",&x); switch(x) { case 1:;break; case 2:printf("请输入最初的货物类型数量:\n"); scanf("%d",&n); create(n,L); break; case 3:;break; case 4:;break; case 5:;break; case 6:display(n,L);break; case 7:;break; default:printf("input error!\nplaese input1-7"); } } } //函数 //1.创建链表节点 Node*create(int n,Node*L) { Node*pTail=L; L->next=NULL; Node*p; p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } //利用尾插建立单链表 int i; for(i=1;i<=n;i++) { printf("请输入第%d种类型编号:",i); scanf("%d",&p->NUM); printf("请输入第%d种类型名称:",i); scanf("%s",&p->NAME); printf("请输入第%d种类型库存:",i); scanf("%d",&p->num); putchar('\n'); pTail->next=p; pTail=p; } p->next=NULL; return L; } //2.增加货物类型 /*Node*append(Node*L) { Node*ptail=L; L->next=NULL; Node*p; p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } else { printf("请输入新增加的类型编号:\n"); scanf("%d",&p->NUM); printf("请输入第%d种类型名称:\n",i); scanf("%s",&p->NAME); printf("请输入第%d种类型库存:\n",i); scanf("%d",&p->num); while(p->NUM>) { } pTail->next=p; pTail=p; } p->next=NULL; } return L; } */ //货物显示函数 void display(int n,Node*L) { Node*p; p=(Node*)malloc(sizeof(Node)); p=L->next; int i=0; //for(i=0;i<n;i++) //{ while(p!=NULL) { printf("第%d种类型名称:",&p->NUM); printf("%s\n",&p->NAME); printf("第%d种类型库存:",&p->NUM); printf("%d\n",&p->num); p=p->next; //} } }
C语言链表与文件 从文件读数据到链表里
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! typedef struct Node{ int NUM;//类型总数 char NAME[100];//各类型名称 int num; //各类型下的货物总数 struct Node*next; }Node; //函数声明 Node*create(int n,Node*L); Node*input(Node*L); Node*output(Node*L); Node*outnum(Node*L); Node*outname(Node*L); Node*current(Node*L); void search(Node*L); void print(Node*L); void searchnum(Node*L); void searchname(Node*L); void display(int n,Node*L); //========新增加的函数======== Node*append(Node*L); //主函数 void main() { //创建文件 FILE*fp; fp = fopen("storehouse.txt","w"); fwrite(); fclose(fp); int x; int n;//初次输入的大小 Node *L; if(!(L=(Node *)malloc(sizeof(Node)))) //分配空间 { printf("\n"); exit(1); } printf("欢迎使用我的仓库管理系统!\n"); while(1) { //主菜单开始 printf("==========================\n"); printf("1.显示货物类型列表\n"); printf("2.增加货物类型\n"); printf("3.删除货物类型\n"); printf("4.货物入库\n"); printf("5.货物出库\n"); printf("6.库存显示\n"); printf("7.退出\n"); printf("==========================\n"); //主菜单结束 printf("选择1-7:"); scanf("%d",&x); switch(x) { case 1:;break; case 2:printf("请输入最初的货物类型数量:\n"); scanf("%d",&n); create(n,L); break; case 3:;break; case 4:;break; case 5:;break; case 6:display(n,L);break; case 7:;break; default:printf("input error!\nplaese input1-7"); } } } =========================== 想要读入货物信息:货物名称 货物价格 所属类型?这个怎么搞! [图片说明](https://img-ask.csdn.net/upload/201805/29/1527585662_34177.png) //函数 //1.创建链表节点 Node*create(int n,Node*L) { Node*pTail=L; L->next=NULL; Node*p; //利用尾插建立单链表 int i; for(i=1;i<=n;i++) { p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } printf("请输入第%d种类型编号:",i); scanf("%d",&p->NUM); printf("请输入第%d种类型名称:",i); scanf("%s",&p->NAME); printf("请输入第%d种类型库存:",i); scanf("%d",&p->num); putchar('\n'); pTail->next=p; pTail=p; } p->next=NULL; return L; } //货物显示函数 void display(int n,Node*L) { Node*p; p=(Node*)malloc(sizeof(Node)); p=L->next;; int i=0; for(i=0;i<n;i++) //{ //while(p!=NULL) { printf("第%d种类型名称:",p->NUM); printf("%s\n",p->NAME); printf("第%d种类型库存:",p->NUM); printf("%d\n",p->num); putchar('\n'); p=p->next; //} } }
c语言指针问题,谢谢大家
各位,有时间可以帮我看一下如何使用这个指针呢?34行 问题:房间排序 为了更好地接待在这期间来自世界各地的参观者,如何合理安排各宾馆的住房问题提到了日程。组委会已接到了大量的客户住宿定单,每张定单的内容包括要住宿的房间数,开始住宿时间和要住的天数。为了便于整个城市各宾馆的管理,组委会希望对这些定单进行安排,目的是用尽可能少的房间来满足这些定单,以便空出更多的房间用于安排流动游客。 假设:某个定单上的游客一旦被安排到某房间,在他预定住宿的期间内是不换房间的。为了简化描述,定单上的开始住宿时间为距离现在的第几天。例如,定单为(10,30,5)表示游客要求使用10个房间,第30天开始连住5天。 第一行:T 表示有T组测试数据 每组测试数据第一行:N 表示定单数 每组测试数据接下来有N行,每行有三个整数 A B C 表示房间数,开始住宿时间和天数 1<=T<=100 1<=N<=10000 1<=A<=10 1<=B<=180 1<=c<=10 输出 输出一个整数,为满足所有定单要求的最少房间数。 思路:本题只和开始日期A和结束日期B之间的关系有关 1:先求出最小截止日期 2:将输入的数据按开始日期进行从小到大排序 3: 若是A<B;则total=total+输入数据的房间数 A>=B 分二种情况:1,total<输入元素的房间数,则total=输入元素的房间数 2,total>输入元素的房间数,则total=total+0 代码如下:(34行不会声明合适的指针使其指向stu[].deadline,并可以通过函数循环至stu[1].deafline stu[2].deadline) // 房间安排.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" int maopao(int*p,int n); int _tmain(int argc, _TCHAR* argv[]) { int s=0; int n=0; int i=0; struct hotel { int room; int date; int during; int deadline; }; hotel stu[10000]; printf("请输入测试数据组数:\n"); scanf("%d",&n); printf("请输入每组的订单数:\n"); scanf("%d",&s); while(n--) { for(i=0;i<s;i++) { scanf("%d",&stu[i].room); scanf("%d",&stu[i].date); scanf("%d",&stu[i].during); stu[i].deadline=stu[i].date+stu[i].during; } for(int y=0;y<s-1;y++) //以开始日期为条件将结构按从小到大的顺序排出 { for(int u=0;u<s-1-y;u++) { if(stu[u].date>stu[u+1].date) { hotel temp=stu[u]; stu[u]=stu[u+1]; stu[u+1]=temp; } } } int*p; p=; //此处已经将结构按起始日期从大到小进行排序了4 9 6 3 10 4 3,12,6 int re=maopao(p,s); int w=0; int total; while(w<s) { if(stu[w].date<re) total=total+stu[w].room; if(stu[w].date>=re&&total>stu[w].room) total=total+0; if(stu[w].date>=re&&total<stu[w].room) total=stu[w].room; w++; } printf("%d\n",total); } return 0; } int maopao(int*p,int n) { for(int i=0;i<n-1;i++) for(int q=0;q<n-1-i;q++) { if(*(p+q)>*(p+q+1)) { int num=*(p+q); *(p+q)=*(p+q+1); *(p+q+1)=num; } } return *(p+0); }
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
深析Synchronized关键字(小白慎入,深入jvm源码,两万字长文)
目录一、synchronized基础1.1synchronized的使用1.1示例1.2验证1.2.1 普通方法和代码块中使用this是同一个监视器(锁),即某个具体调用该代码的对象1.2.2 静态方法和代码块中使用该类的class对象是同一个监视器,任何该类的对象调用该段代码时都是在争夺同一个监视器的锁定1.2、synchronized的特点二、synchronized进阶2.1对象头2.2sy
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
超全Python图像处理讲解(多图预警)
文章目录Pillow模块讲解一、Image模块1.1 、打开图片和显示图片1.2、创建一个简单的图像1.3、图像混合(1)透明度混合(2)遮罩混合1.4、图像缩放(1)按像素缩放(2)按尺寸缩放1.5、图像的剪切与粘贴(1)图像粘贴(2)裁剪图像1.4、图像旋转和格式转换(1)图像旋转(2)格式转换1.5、分离和合并(1)分离(2)合并二、ImageFilter2.1、高斯模糊2.2、其它滤镜三、...
20道你必须要背会的微服务面试题,面试一定会被问到
这篇博客总结了面试中最常见的微服务面试题,相信对你有所帮助。
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
HTTP性能极限优化
无论你在做前端、后端还是运维,HTTP都是不得不打交道的网络协议。它是最常用的应用层协议,对它的优化,既能通过降低时延带来更好的体验性,也能通过降低资源消耗带来更高的并发性。 可是,学习HTTP不久的同学,很难全面说出HTTP的所有优化点。这既有可能是你没好好准备过大厂的面试:-),也有可能你没有加入一个快速发展的项目,当产品的用户量不断翻番时,需求会倒逼着你优化HTTP协议。 这篇文章是根据...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
没用过这些 IDEA 插件?怪不得写代码头疼
使用插件,可以提高开发效率。对于开发人员很有帮助。这篇博客介绍了IDEA中最常用的一些插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
推荐一些有趣的在线编程游戏
1.Robocode 让坦克们互相博弈的游戏,你可以看到它们飞奔,碾碎一切挡道的东西。机器人配有雷达与火炮,选手在躲避对手进攻的同时攻击对手,以此来较量得分的多少。这个游戏很有意思,曾经令我沉迷… 你可以用Java、Scala、C#等编程语言,编写人工智能程序,驱动机器人。 2.Code Combat Code Combat是一款学习编程的角色扮演游戏。每一关都用任务的形式设立目标,用实时的反馈...
工作十年的数据分析师被炒,没有方向,你根本躲不过中年危机
2020年刚刚开始,就意味着离职潮高峰的到来,我身边就有不少人拿着年终奖离职了,而最让我感到意外的,是一位工作十年的数据分析师也离职了,不同于别人的主动辞职,他是被公司炒掉的。 很多人都说数据分析是个好饭碗,工作不累薪资高、入门简单又好学。然而今年34的他,却真正尝到了中年危机的滋味,平时也有不少人都会私信问我: 数据分析师也有中年危机吗?跟程序员一样是吃青春饭的吗?该怎么保证自己不被公司淘汰...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
张朝阳回应迟到 1 分钟罚 500:资本家就得剥削员工
loonggg读完需要2分钟速读仅需 1 分钟大家我,我是你们的校长。前几天,搜狐的董事局主席兼 CEO 张朝阳和搜狐都上热搜了。原因很简单,就是搜狐出了“考勤新规”。一封搜狐对员工发布...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
立即提问