c语言程序设计指针与数组

求找错误图片

c

3个回答

 pa<pa+n永远为真,应该再定义一个变量
int *start = pa;
for (;pa < start + n)
...

pa+n是一直在变化的,

14和21行 pa是不断变化的所以pa + n 一直变化会出现溢出错误

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言指针与一维数组的问题
最近刚学C语言程序设计,学到指针这一块时,觉得理解很吃力。可以麻烦大神能否详细给我说明一下指针吗?我知道指针也就是地址,但是在理解指针指向一维数组元素时,被弄得晕头转向。比如说,我定义 int a[10],*pa=a; 或int a[10],*pa=&a[10]; 时,a+i、pa+i、pa++ 分别表示什么意思?
关于c语言指向一位数组指针用法的详细解释(C语言程序设计例题)
![图片说明](https://img-ask.csdn.net/upload/201703/22/1490193489_316173.jpg) 书中说形参(pointer是一个指向包含4个元素的一位数组指针这我能理解) 1.但是为什么(score[][4]明明是个二维数组,为什么可以将首地址作为一位数组的指针传进函数里?) 2.还有就是(pt是一个float指针,pointer也是指针为什么要写pt=*(pointer+n)) 下面有我自己打的简易代码,得到的结果是对的,但是不太明白原理,望大佬为我解惑谢谢 ``` #include<stdio.h> using namespace std; int main() { float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}; //这个不是个二维数组吗? float *search(float (*pointer)[4],int n); float *p; int i,m; printf("enter:"); scanf("%d",&m); printf("m:%d\n",m); p=search(score,m); for(i=0;i<4;i++){ printf("%5.2f\t",*(p+i)); } return 0; } float *search(float (*pointer)[4],int n){ float *pt; pt=*(pointer+n); /*这里为什么要加*取pointer所指向的元素(pointer不是自己的值就是地址吗)*/ return(pt); } ```
《C语言程序设计现代方法》习题疑惑
《C语言程序设计现代方法》习题中有关单位数组初始化问题。(单位矩阵在主对角线上的 值为1,而其他地方的值为0,其中主对角线上行、列的索引值是完全相同的。) 题目要求采用一个指针来逐个访问数组中的元素,且每次一个元素。 程序及运行结果如下图: ![图片说明](https://img-ask.csdn.net/upload/201704/16/1492316071_63739.jpg) 程序与书中给的标准答案完全一样,不知为何运行完后,所有元素都被初始化成了0。 为了检验结果,我将程序中初始化为0的地方改成了初始化为2.0,然后重新运行程序如下图: ![图片说明](https://img-ask.csdn.net/upload/201704/16/1492316179_222499.jpg) 结果所有结果还是被初始化成了0。似乎初始化的结果与程序的内容无关。 大神能否看看程序中什么地方出了问题?
C语言数组作为参数传入子函数
对不起,可能我没表达清楚,我想问,数组作为参数传入子函数为什么不是作为形式参数传入,请你看程序运行结果,如果数组作为形式参数传入子函数,那么形式参数的值并不会影响原来main函数中的值,但是实际上,main函数中数组原来的值已经被修改了,这是因为数组传入的是地址(指针),我的问题就在这里,传入的是指针为什么不是用完就扔的形式参数。 这与c语言的设计有关是吗?内部有什么机制吗?
c语言实训课程选修管理系统
1.题目描述 编写一个程序对学生的课程选修进行管理。系统能实现以下功能:  添加:添加课程或学生记录,可提供选择所要添加类别的选择界面,要求编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加;  查询:可根据编号、姓名等信息对已有的学生或课程基本信息进行查询;查询选修某门课程的学生;查询某学生学期选修的课程;如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。可提供选择界面供用户选择;  显示:可显示已有学生或课程的信息,每条记录占据一行;  编辑:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性;  删除:对已有的学生或课程记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作;  统计:能根据多种参数进行统计。如能统计某学期开设的课程数,选修某门课程的实际学生人数,选修某门课程的男女生比例,某门课程的平均成绩,某学生学期选修的课程数等;  排序:能根据多种参数进行排序。如对某门课程按实际选修人数升序/降序排序,对某门课程按学生成绩升序/降序排序等;  保存:将当前系统中各类记录存入文件中,存入方式任意;  读取:可将保存在文件中的信息读入到当前系统中,供用户使用。 2.设计提示 (1)学生基本信息包括:学号、班级、姓名、性别、联系方式等信息。课程基本信息包括:课程代码、课程名称、课程性质、总学时、学分、开课学期、选修人数等信息; (2)划分实现课程选修管理的功能模块:如主菜单、添加、修改、查询、统计、保存等功能,并确定各功能模块的实现算法; (3)确定课程选修的数据结构,至少应包括课程代码、学号和课程成绩等; (4)画出主要算法的流程图; (5)选择C语言的技术:普通数组、结构体数组、函数、指针、单链表或文件等; (6)编写程序代码。
coursera c++程序设计 魔兽世界之一:备战
这是我的代码,但是一直出现wrong answer,希望大神能帮忙指出程序的错误。 ``` #include<iostream> #include<cstring> #include<iomanip> using namespace std; char red_name[5][10]={"iceman","lion","wolf","ninja","draagonn"}; char blue_name[5][10]={"lion","dragon","ninja","iceman","wolf"}; char sr_name[5][10]={"dragon","ninja","iceman","lion","wolf"}; int life_r; int life_b; class soilder{ public: char *name; /*指针类型的*/ int life_cos; int num; soilder(char *s,int n,int a=0){ name=s;; life_cos=n; num=a; } char* pr_name(void){ return name; //返回指针地址 } }; void shuchu(soilder a,int t,char z[]){ cout<<setw(3)<<setfill('0')<<t<<' '; cout<<z<<' '<<a.name<<' '<<t+1<<" born with strength "<<a.life_cos<<","; cout<<a.num<<' '<<a.name<<" in "<<z<<" headquarter"<<endl; } void jieshu(int t,char z[]){ cout<<setw(3)<<setfill('0')<<t<<' '; cout<<z<<" headquarter stops making warriors"<<endl; } int bj(int j,int life,soilder w[5]){ /* 是为了比较看现在的生命值按照顺序还能制造第几个战士 */ for(int i=j+1;i<5;i++){ if(life>w[i].life_cos) return i; } for(int i=0;i<=j;i++){ if(life>w[i].life_cos) return i; } return 10; /*代表如果没有任何战士可以制造,就返回一个和索引无关的数*/ } int main(){ int lun; cin>>lun; int lunshu=1; while(lun!=0){ cin>>life_r; life_b=life_r; int n[5]; bool r_stop=false,b_stop=false; char color[2][5]={"red","blue"}; int time; for(int i=0;i<5;i++){ cin>>n[i]; } // 初始化红蓝军的战士名单 soilder red_worrior[5]= {soilder(sr_name[2],n[2]),soilder(sr_name[3],n[3]),soilder(sr_name[4],n[4]),soilder(sr_name[1],n[1]),soilder(sr_name[0],n[0])}; //56743 soilder blue_worrior[5]={soilder(sr_name[3],n[3]),soilder(sr_name[0],n[0]),soilder(sr_name[1],n[1]),soilder(sr_name[2],n[2]),soilder(sr_name[4],n[4])}; //63457 cout<<"Case:"<<lunshu<<endl; int r=0; int b=0; for(time=0;;time++){ //避免索引越界 if(r>4) r=0; if(b>4) b=0; //red if(life_r>=red_worrior[r].life_cos){//和当前的战士生命源比较 red_worrior[r].num++; life_r-=red_worrior[r].life_cos; shuchu(red_worrior[r],time,color[0]); r++; } else if(bj(r,life_r,red_worrior)==10 && r_stop==false){ //已经不够制造任何一种战士 jieshu(time,color[0]); r_stop=true; } else if(r_stop==false){ //向后排序发现仍然有可以制造的战士并返回战士的索引值 r=bj(r,life_r,red_worrior); red_worrior[r].num++; life_r-=red_worrior[r].life_cos; shuchu(red_worrior[r],time,color[0]); r++; } /*blue */ if(life_b>=blue_worrior[b].life_cos){ blue_worrior[b].num++; life_b-=blue_worrior[b].life_cos; shuchu(blue_worrior[b],time,color[1]); b++; } else if(bj(b,life_b,blue_worrior)==10 && b_stop==false){ jieshu(time,color[1]); b_stop=true; } else if(b_stop==false){ b=bj(b,life_b,blue_worrior); blue_worrior[b].num++; life_b-=blue_worrior[b].life_cos; shuchu(blue_worrior[b],time,color[1]); b++; } /*判断是否结束*/ if(r_stop==true && b_stop==true){ break; } } lun--; lunshu++; } return 0; } ``` 我编译输出都没有问题啊。还没有学到string用法,所以想请教一下大家。
C语言指针问题,求高手解惑
1.假设有一维int a[5],a代表数组的地址,&a有什么意义呢, 为什么这里a和&a的值相等呢? 2.假设有二维数组int a[2][3],a和&a也相等吗? 3.这个是谭浩强C程序设计里的例题: ``` #include<stdio.h> int main() { int a[4]={1,3,5,7}; int (*p)[4]; p=&a; //第六行 printf("%d\n",(*p)[3]); return 0; } ``` 书中说第六行只能写成p=&a,而不能是批p=a, 书中说p=a 表示p的值是&a[0],指向a[0]. p=&a表示p指向一维数组(行),(*p)[3]是p所指向行中序列为3的元素。 但实际上我用VC6.0调试时两个都能得到7的答案,只不过当p=&a时,没有报警, 而当p=a时,编译器有预警信息: warning C4047: '=' : 'int (*)[4]' differs in levels of indirection from 'int *' 难道谭浩强的这本书是按旧的C标准写的吗?还是说编译器允许这样的写法? 4.a和&a无条件等价吗?
C/C++ char类型指针数组输入问题
# C/C++ char类型指针数组输入问题 数据结构课程设计,要求从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上。 程序代码如下: ```cpp #include <iostream> #include <string.h> #define N 50 #define M 2*N-1 #define MAX 100 using namespace std; typedef struct { char data[5]; int weight; int parent; int lchild; int rchild; }HTNode; typedef struct { char cd[N]; int start; }HCode; void CreatHT(HTNode ht[], int n) { int i,k,lnode,rnode; int min1,min2; for (i=0; i<2*n-1; i++) { ht[i].parent=ht[i].lchild=ht[i].rchild=-1; } for (i=n; i<2*n-1; i++) { min1=min2=32767; lnode=rnode=-1; for (k=0; k<=i-1; k++) { if (ht[k].parent==-1) { if (ht[k].weight<min1) { min2=min1; rnode=lnode; min1=ht[k].weight; lnode=k; } else if (ht[k].weight<min2) { min2=ht[k].weight; rnode=k; } } } ht[lnode].parent=i; ht[rnode].parent=1; ht[i].weight=ht[lnode].weight+ht[rnode].weight; ht[i].lchild=lnode; ht[i].rchild=rnode; } } void CreatHCode(HTNode ht[], HCode hcd[], int n) { int i,f,c; HCode hc; for (i=0; i<n; i++) { hc.start=n; c=i; f=ht[i].parent; while (f!=-1) { if (ht[f].lchild==c) { hc.cd[hc.start--]='0'; } else { hc.cd[hc.start--]='1'; } c=f; f=ht[f].parent; } hc.start++; hcd[i]=hc; } } void DispHCode(HTNode ht[], HCode hcd[], int n) { int i,k; int sum=0,m=0,j; printf("输出哈弗曼编码:\n"); for (i=0; i<n; i++) { j=0; printf(" %s:\t", ht[i].data); for (k=hcd[i].start; k<=n; k++) { printf("%c", hcd[i].cd[k]); j++; } m+=ht[i].weight; sum+=ht[i].weight*j; } printf("\n平均长度=%g\n", 1.0*sum/m); } int main(int argc, const char * argv[]) { // insert code here... int n,i; char *str[MAX];//这里定义了一个指针数组存放哈夫曼编码 int fnum[MAX]; HTNode ht[M]; HCode hcd[N]; printf("输如字符集大小:"); scanf("%d", &n); printf("输入%d个字符:", n); for (i=0; i<n; i++) { scanf("%s", str[i]);//这里的输入应该如何修改? } printf("输入%d个权值:", n); for (i=0; i<n; i++) { scanf("%d", &fnum[i]); } for (i=0; i<n; i++) { strcpy(ht[i].data, str[i]); ht[i].weight=fnum[i]; } CreatHT(ht, n); CreatHCode(ht, hcd, n); DispHCode(ht, hcd, n); return 1; } ``` 有问题的地方已在主函数中注释,其他的函数都是哈夫曼树的基本算法。 困扰许久求大佬解决!
c语言 图书管理程序设计,当对图书信息进行修改时,如若未找到则程序出错
#include <stdio.h> #include <stdlib.h> #include <string.h> //定义一本书 struct book { char name[10]; char writer[10]; char publisher[21]; char price[5]; }; struct Node { //int data; struct book data; struct Node* next; }; //创建表 struct Node* createList() { //结构体变量表示表头 //指针--->变量 动态内存申请 struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); headNode->next = NULL; return headNode; } //创建结点 struct Node* createNode(struct book data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; } //插入结点 void insertNodeByHead(struct Node* headNode, struct book data) { struct Node* newNode = createNode(data); //表头法 newNode->next = headNode->next; headNode->next = newNode; } //指定位置删除 void deleteAppoinNode(struct Node* headNode, char* name) { //struct book struct Node* posNode = headNode->next; struct Node* posFrontNode = headNode; if (posNode == NULL) { printf("数据为空,无法删除!\n"); return; } //书名是字符串,字符串:strcmp while (strcmp(posNode->data.name,name)) { posFrontNode = posNode; posNode = posFrontNode->next; if (posNode == NULL) { printf("未找到指定位置无法删除!\n"); return; } } //找到了 posFrontNode->next = posNode->next; free(posNode); } //查找功能 struct Node* searchInfoByData(struct Node* headNode, char *name) { struct Node* pMove = headNode->next; if (pMove == NULL) return NULL; while (strcmp(pMove->data.name, name)) { pMove = pMove->next; } return pMove; } //打印 void printList(struct Node* headNode) { struct Node* pMove = headNode->next; //设计到数据的处理 printf("书名\t作者\t出版社\t价格\n"); while (pMove) { printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); pMove = pMove->next; } printf("\n"); } void menu() { //所有操作都同步到文件 printf("-------------【图书信息管理系统】-----------\n"); printf("\t\t1.录入图书信息\n"); printf("\t\t2.浏览图书信息\n"); printf("\t\t3.修改图书信息\n"); printf("\t\t4.删除图书信息\n"); printf("\t\t5.查找图书信息\n"); printf("\t\t0.退出系统\n"); printf("-------------------------------------------\n"); } struct Node* list = createList(); //接收指令 void keyDown() { int choice = 0; struct book data; struct Node* pMove = NULL; scanf("%d", &choice); switch (choice) { case 0: printf("正常退出!\n"); system("pause"); exit(0); break; case 1: printf("--------------【录入图书信息】-----------\n"); //插入链表 printf("请输入书名,作者,出版社,价格:\n"); fflush(stdin); //清空缓冲区 scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); insertNodeByHead(list, data); break; case 2: printf("--------------【浏览图书信息】-----------\n"); printList(list); //打印链表 break; case 3: printf("--------------【修改图书信息】-----------\n"); printf("请输入要修改的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法修改!\n"); system("pause"); } else { printf("请输入图书名,作者,出版社,价格:"); scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); strcpy(pMove->data.name, data.name); strcpy(pMove->data.writer, data.writer); strcpy(pMove->data.publisher, data.publisher); strcpy(pMove->data.price, data.price); } break; case 4: printf("--------------【删除图书信息】-----------\n"); printf("请输入删除的书名:"); scanf("%s", data.name); deleteAppoinNode(list, data.name); break; case 5: printf("--------------【查找图书信息】-----------\n"); printf("请输入要查找的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法删除!\n"); system("pause"); } else { printf("书名\t作者\t出版社\t价格\n"); printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); } break; default: printf("选择错误,重新输入\n"); system("pause"); break; } } int main() { while (1) { menu(); keyDown(); system("pause"); system("cls"); } system("pause"); return 0; }
带头的节点的指针数组在搜索问题里的运用,怎么使用C语言的程序的设计的方式来实现的
Problem Description Traveling through hyperspace is a risky thing, considering the fact that there are many stars, asteroids, (and possibly black holes!) out in the galaxy, and without careful planning, it’s so easy to end up thousands of light-years from your planned destination. Therefore people who don’t like uncertainty tend to avoid hyperspace traveling. However, as we need to travel through an unknown sector to attend the ACM/ICPC world final in the year 3007, and you’re the most experienced navigator and programmer we can find, it is unfortunately your responsibility to plan a journey that will lead us across the sector. It is know that there are several strange asteroids in the sector – every one of them is generating gravity anomaly in a circular area with a fixed radius around the asteroid. One particular position’s abnormality value is equal to the number of asteroids affecting that position. You decided that you will follow one simple rule during your travel – that is, you will always fly your ship along the gravity range boundary of one or more asteroids. Nevertheless, the possibility of failure remains due to the unpredictable nature of gravity anomaly, therefore you also want to minimize the absolute difference between the maximum abnormality value and the minimum abnormality value on your flight path. For simplicity, you can assume that all asteroids (as well as your flight path) will be on the plane Z = 0. Can you find the minimum absolute value with the help of your computer? Input There are multiple test cases in the input file. Each test case starts with one integer N (2 <= N <= 30), the number of asteroids in the sector, followed by four real numbers, Sx, Sy, Tx, Ty, representing the x-coordinate and y-coordinate of your current position and your destination. Each of the following N lines consists of three real numbers X, Y and R (R >= 1), indicating that there is an asteroid at position (X, Y) with gravity range R. There is a blank line after each test case. N = 0 indicates the end of input file and should not be processed by your program. It is guaranteed that the input data is always legal, i.e. both your starting position and your destination are on the boundary of one or more asteroids, no two asteroids will have the same position, every real number in the input file has at most three digits after the decimal point, and the absolute value of any real number does not exceed 10000. Output For each test case, output one integer on one separate line as requested. If there is no way for you to reach the destination by only flying along asteroids’ gravity range boundaries, output -1 instead. Sample Input 2 -1.000 0.000 1.000 0.000 0.000 0.000 1.000 1.000 0.000 1.000 2 -1.000 0.000 5.000 0.000 -1.000 -1.000 1.000 4.000 0.000 1.000 0 Sample Output Case 1: 1 Case 2: -1
修改程序:信源编解码(c语言)
修改程序:问题1。源文件source文本空间太长汉字太多无法运行2,未按频度要求排序 问题描述: 信源编解码是通信系统的重要组成部分。本实验旨在通过程序设计实现基于哈夫曼编码的信源编解码算法。程序具备以下功能: 对于给定的源文档 SourceDoc.txt, 1) 统计其中所有字符的频度(某字符的频度等于其出现的总次数除以总字符数) , 包括字母(区分大小写) 、标点符号及格式控制符(空格、回车等) 。 2) 按频度统计结果生成哈夫曼编码码表。 3) 基于哈夫曼码表进行编码,生成对应的二进制码流,并输出到文件 Encode.dat。 4) 对二进制码流进行哈夫曼解码,把结果输出到文件 DecodeDoc.txt。 5) 判断DecodeDoc.txt与SourceDoc.txt内容是否一致,以 验证编解码系统的正确性。 要求: 1) 用 C 语言实现。 2) 用子函数实现各功能模块。 3) 输出文件 Statistic.txt,包含的信息有:按频度大小排序的字符表,及各字符出现 的次数、频度及哈夫曼编码。 4) 应至少包含链表、二叉树的数据结构。 5) 不能用冒泡排序算法。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/stat.h> #include<sys/types.h> #include<fcntl.h> #include<unistd.h> #include<errno.h> #define N 10000 int count = 0; //每增加一个新的字符, count增加1, 可表示a中的字符种类数, 也即哈夫曼树叶子点个数 /*定义哈夫曼树结构体*/ typedef struct HuffmanTree{ int weight; int parent; int Lchild; int Rchild; }HuffmanTree[2*N]; /*定义储存字符及其出现次数的结构体*/ typedef struct DifferentCharacter{ char char_date; int num; //相同字符出现的次数 char a_code[100]; //每种字符对应的编码 }difcha[N]; /*在一定范围内选择两个weight最小的结点, 并将两个结点的序号赋给s1, s2*/ void select_two(HuffmanTree ht, int j, int *s1, int *s2) { int i = 1, temp; int min1 = 0, min2 = 0; while( (ht[i].parent != 0) && (i <= j) ) i++; *s1 = i; min1 = ht[i++].weight; while( (ht[i].parent != 0) && (i <= j) ) i++; *s2 = i; min2 = ht[i++].weight; if(min1 > min2){ temp = min1; min1 = min2; min2 = temp; } for(; i <= j; i++){ //遍历parent不为0的结点 if(ht[i].parent != 0) continue; if(ht[i].weight <= min1){ min2 = min1; min1 = ht[i].weight; *s2 = *s1; *s1 = i; } else if( (ht[i].weight < min2) && (ht[i].weight > min1) ) { min2 = ht[i].weight; *s2 = i; } } } /*建哈夫曼树*/ void EstHuffmanTree(HuffmanTree ht, int *w, int n){ int i; int s1 = 0, s2 = 0; for(i = 1; i <= n; i++){ //初始化哈夫曼树, 前n个单元存放叶子点 ht[i].weight = w[i]; ht[i].parent = 0; ht[i].Lchild = 0; ht[i].Rchild = 0; } for(i = n+1; i <= 2*n-1; i++){ //后n-1个单元存放非叶子点 ht[i].weight = 0; ht[i].parent = 0; ht[i].Lchild = 0; ht[i].Rchild = 0; } for(i = n+1; i <= 2*n-1; i++){ select_two(ht, i-1, &s1, &s2); //创建非叶子点, 建立哈夫曼树, 每次在ht[1]~ht[i-1]范围内选两个最小的weight结点,并将其序号赋给s1, s2 ht[i].weight = ht[s1].weight + ht[s2].weight; ht[i].Lchild = s1; ht[i].Rchild = s2; ht[s1].parent = i; ht[s2].parent = i; } //哈夫曼树建立完毕 } /*求哈弗曼编码*/ void CrtHuffmanCode(HuffmanTree ht, char **hcd, int n){ int start = 0, c = 0, p = 0, i; char *cd = (char*)malloc(n*sizeof(char)); //分配求当前编码的工作空间 cd[n-1] = '\0'; //从左向右存放编码 for(i = 1; i <= n; i++) { start = n-1; //初始化编码起始指针 c = i; p = ht[i].parent; while(p != 0){ start--; if(ht[p].Lchild == c) cd[start] = '0'; //左分支标0 else cd[start] = '1'; //右分支标1 c = p; //向上倒推 p = ht[c].parent; } hcd[i] = (char*)malloc((n-start)*sizeof(char)); strcpy(hcd[i], &cd[start]); } free(cd); } /*自定义错误处理函数*/ void my_err(char *err_string, int line){ printf("Line %d:\n", line); perror(err_string); exit(1); } /*从 buf_read 中统计每个字符出现的次数,将次数作为该字符的权值*/ void Statistics(difcha a, char *buf_read){ int i, j = 0; for(i = 0; i < strlen(buf_read) ; i++){ //对buf_read中的字符遍历 for(j = 0; j < count; j++){ //检查是否是新的字符 if(a[j].char_date == buf_read[i]){ a[j].num++; //若是旧字符, 则num++; break; } } if(j == count){ //若是新字符, 则记录到a中, 且对应的num++ a[count].char_date = buf_read[i]; a[count].num++; count++; //更新count } } } /*从 SourceDoc.txt 读取数据到 buf_read */ void ReadFile(char *pathName, char *buf_read){ int fd_date; int len = 0; if( (fd_date = open(pathName, O_RDWR)) < 0) //以读写方式打开SourceDoc.txt文件 my_err("open SourceDoc.txt", __LINE__); if(lseek(fd_date, 0, SEEK_END) < 0) //获取文件长度,并保持文件读写指针在文件开始处 my_err("lseek", __LINE__); if( (len = lseek(fd_date, 0, SEEK_CUR)) < 0 ) my_err("lseek", __LINE__); if(lseek(fd_date, 0, SEEK_SET) < 0) my_err("lseek", __LINE__); if(read(fd_date, buf_read, len) > len) //从SourceDoc.txt中读取内容 my_err("read SourceDoc.txt", __LINE__); } /*将 buf_code 写入 Encode.dat 中*/ void WriteFile(char *pathName, char *buf_code){ int fd_code; if((fd_code = open(pathName, O_CREAT|O_TRUNC|O_RDWR, S_IRWXU)) < 0) //创建Encode.dat文件 my_err("open Encode.dat", __LINE__); if( write(fd_code, buf_code, strlen(buf_code)) != strlen(buf_code) ) //将 buf_code 写入Encode.dat my_err("write Encode.dat", __LINE__); } /*主函数*/ void main(){ char buf_read[N] = {'\0'}; char buf_code[N] = {'\0'}; char buf_yima[N] = {'\0'}; char *hcd[N]; char temp[50] = {'\0'}; difcha a; int i, j, n, k = 0, m = 0; int w[N] = {0}; HuffmanTree ht; ReadFile("SourceDoc.txt", buf_read); Statistics(a, buf_read); for(i = 0; i < count; i++) w[i+1] = a[i].num; EstHuffmanTree(ht, w, count); //建HuffmanTree CrtHuffmanCode(ht, hcd, count); //对树中字符进行编码 for(i = 1; i <= count; i++) //将每个字符对应的编码存入结构体 a 中 strcpy(a[i-1].a_code, hcd[i]); FILE *fp1; fp1=fopen("Statistic.txt","w"); for(i = 0; i < count; i++) //查看每个字符的权值和对应的编码 fprintf(fp1,"%c %d %s\n", a[i].char_date, a[i].num, a[i].a_code); fclose(fp1); for(i = 0; i < strlen(buf_read) ; i++){ //遍历 buf_read, 给 SourceDoc.txt 中每个字符匹配编码, 存入 buf_code 中 for(j = 0; j < count; j++){ if(buf_read[i] == a[j].char_date){ strcat(buf_code, a[j].a_code); break; } } if(j == count) //匹配异常 printf("Unknown Character: %c\n", buf_read[i]); } WriteFile("Encode.dat", buf_code); //将 buf_code 写入 Encode.dat 中 ReadFile("Encode.dat", buf_read); //从 Encode.dat 中读取全部编码 n = strlen(buf_read); for(i = 0; i < n; i++){ //为 Encode.dat 中的编码匹配字符 temp[k++] = buf_read[i]; for(j = 0; j < count; j++){ if(strcmp(temp, a[j].a_code) == 0){ buf_yima[m++] = a[j].char_date; break; } } if(j < count){ //匹配成功, 对 temp 初始化 for(;k > 0; k--) temp[k] = '\0'; } } FILE *fp2; fp2=fopen("DecodeDoc.txt","w"); fprintf(fp2,"%s", buf_yima); fclose(fp2); }
新人C语言救急 !!!
在C语言中, 键盘输入k 个整数到数组x 中。 将数组x 中的k 个数放入数组y 中,但不重复放(一个数只放一次),而后输出y的这些有效元素。 例如,程序执行后的输入输出界面可设计为: x=? 23 55 -6 0 23 23 0 -12 y= 23 55 -6 0 -12 用for语句完成,不要用指针和函数。 救急!!!
用C语言完成以下功能:数据的录入、显示,链表的创建,插入数据,删除数据。每个功能用一个函数来实现。
1)定义家庭住址结构体adress,包含成员有:省份、城市、街道;定义成绩结构体score,包含成员有:“C程序设计”、“Java程序设计”、“Basic成绩设计”的成绩;再定义学生结构体student,包含的成员有:学号、姓名、性别、成绩、家庭住址、下一个结点指针,其中成绩类型定义为score类型的结构体,家庭住址的类型定义为adress结构体。下一个结点指针的类型定义为学生结构体。 2)定义头结点的结构体head,其成员为指向学生结构体的指针。 3)插入数据时学号要按照升序排列。
【C语言】结构体数组作为函数参数的排序问题
题目: 设计一个程序,统计一个班(最多50人)的学生成绩,要求能实现如下3个功能: (1) 由键盘或文件输入每个学生的学号和四门课程的成绩; (2) 计算每个学生的平均成绩和总成绩; (3) 按总成绩从高到低排名,并按名次输出每个学生的情况,包括: 学号,各科成绩,平均成绩,总成绩,排名 我写的代码如下 问题在于,输入、计算部分都没有问题,但是,运行结果显示,**并没有进行排序操作,也就是说**,排序代码并未生效。 麻烦各位大佬帮忙看看哪里出了问题,感激不尽 ``` #include <stdio.h> #include <stdlib.h> struct student{ char id[10]; float sub_1; float sub_2; float sub_3; float sub_4; float sum; float aver; //int order; }; //函数原型 void order_stu(struct student stu[],int sum_stu); void aver_stu(struct student *pt_1); void main() { int sum_stu;//学生的人数 printf("Please input the sum of students in this class:"); scanf("%d",&sum_stu); getchar(); struct student stu[sum_stu]; //从键盘读取学生学号和四门课的成绩 int i; for(i=0;i<sum_stu;i++) { printf("请分别输入第%d名学生的学号、四门课的成绩,以空格隔开:",i); scanf("%s %f %f %f %f",&stu[i].id,&stu[i].sub_1,&stu[i].sub_2,&stu[i].sub_3,&stu[i].sub_4); getchar(); aver_stu(&stu[i]); } order_stu(stu,sum_stu); } //计算总分和平均值 //利用指针,目的在于在本函数内为结构体内的aver和sum赋值,即改变结构体的内容 void aver_stu(struct student *pt_1) { pt_1->sum=pt_1->sub_1+pt_1->sub_2+pt_1->sub_3+pt_1->sub_4; pt_1->aver=(pt_1->sum)/4; } //排名次 void order_stu(struct student stu[],int sum_stu) { float sum_score;//总分 float aver; int i,j; struct student *p[sum_stu];//定义一个指针数组 //使每个指针指向一个结构体数组元素 for(i=0;i<sum_stu;i++) { p[i]=&stu[i]; } struct student *temp; //用冒泡排序法排序(从大到小) for(i=0;i<sum_stu-1;i++) {//遍历sum_stu-1轮 for(j=0;j<sum_stu-i-1;j++) {//每过一轮,遍历的元素数目-1 if((p[j]->sum)<(p[j+1]->sum)) { temp=p[j+1];//交换两结构体在结构体数组中的位置 p[j+1]=p[j]; p[j]=temp; } } } //将结果通过列表的方式打印在屏幕上 printf("id sub_1 sub_2 sub_3 sub_4 average order\n"); for(i=0;i<sum_stu;i++) printf("%s %5f %5f %5f %5f %7f %5d\n",stu[i].id,stu[i].sub_1,stu[i].sub_2,stu[i].sub_3,stu[i].sub_4,stu[i].aver,i+1); } ``` 运行结果如图所示 ![图片说明](https://img-ask.csdn.net/upload/201811/21/1542812166_499136.jpg)
c语言图书管理系统设计,卡在查找时如果是找不到则程序出错,大神能帮我解决一下吗?
输入是成功,但是如果查找的不是已输入,则程序出错。 #include <stdio.h> #include <stdlib.h> #include <string.h> //定义一本书 struct book { char name[10]; char writer[10]; char publisher[21]; char price[5]; }; struct Node { //int data; struct book data; struct Node* next; }; //创建表 struct Node* createList() { //结构体变量表示表头 //指针--->变量 动态内存申请 struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); headNode->next = NULL; return headNode; } //创建结点 struct Node* createNode(struct book data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; } //插入结点 void insertNodeByHead(struct Node* headNode, struct book data) { struct Node* newNode = createNode(data); //表头法 newNode->next = headNode->next; headNode->next = newNode; } //指定位置删除 void deleteAppoinNode(struct Node* headNode, char* name) { //struct book struct Node* posNode = headNode->next; struct Node* posFrontNode = headNode; if (posNode == NULL) { printf("数据为空,无法删除!\n"); return; } //书名是字符串,字符串:strcmp while (strcmp(posNode->data.name,name)) { posFrontNode = posNode; posNode = posFrontNode->next; if (posNode == NULL) { printf("未找到指定位置无法删除!\n"); return; } } //找到了 posFrontNode->next = posNode->next; free(posNode); } //查找功能 struct Node* searchInfoByData(struct Node* headNode, char *name) { struct Node* pMove = headNode->next; if (pMove == NULL) return NULL; while (strcmp(pMove->data.name, name)) { pMove = pMove->next; } return pMove; } //打印 void printList(struct Node* headNode) { struct Node* pMove = headNode->next; //设计到数据的处理 printf("书名\t作者\t出版社\t价格\n"); while (pMove) { printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); pMove = pMove->next; } printf("\n"); } void menu() { //所有操作都同步到文件 printf("-------------【图书信息管理系统】-----------\n"); printf("\t\t1.录入图书信息\n"); printf("\t\t2.浏览图书信息\n"); printf("\t\t3.修改图书信息\n"); printf("\t\t4.删除图书信息\n"); printf("\t\t5.查找图书信息\n"); printf("\t\t0.退出系统\n"); printf("-------------------------------------------\n"); } struct Node* list = createList(); //接收指令 void keyDown() { int choice = 0; struct book data; struct Node* pMove = NULL; scanf("%d", &choice); switch (choice) { case 0: printf("正常退出!\n"); system("pause"); exit(0); break; case 1: printf("--------------【录入图书信息】-----------\n"); //插入链表 printf("请输入书名,作者,出版社,价格:\n"); fflush(stdin); //清空缓冲区 scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); insertNodeByHead(list, data); break; case 2: printf("--------------【浏览图书信息】-----------\n"); printList(list); //打印链表 break; case 3: printf("--------------【修改图书信息】-----------\n"); printf("请输入要修改的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法修改!\n"); system("pause"); } else { printf("请输入图书名,作者,出版社,价格:"); scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); strcpy(pMove->data.name, data.name); strcpy(pMove->data.writer, data.writer); strcpy(pMove->data.publisher, data.publisher); strcpy(pMove->data.price, data.price); } break; case 4: printf("--------------【删除图书信息】-----------\n"); printf("请输入删除的书名:"); scanf("%s", data.name); deleteAppoinNode(list, data.name); break; case 5: printf("--------------【查找图书信息】-----------\n"); printf("请输入要查找的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法删除!\n"); system("pause"); } else { printf("书名\t作者\t出版社\t价格\n"); printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); } break; default: printf("选择错误,重新输入\n"); system("pause"); break; } } int main() { while (1) { menu(); keyDown(); system("pause"); system("cls"); } system("pause"); return 0; }
C语言截结构体指针中的变量又是另一个结构体指针,怎么用,代码运行不了
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #define LIST_INIT_SIZE 100//线性表存储空间的初始分配量 #define LISTINCREMENT 10//线性表存储空间的分配增量 typedef struct { int No; char name[10]; }Student; typedef struct { Student *elem;//存储空间基址 int length;//当前啊长度 int listsize;//当前分配的存储容量 }SqList; int Initlist_Sq(SqList *L) { //构建一个空的线性表 printf("boy\n"); L->elem = (Student *)malloc(LIST_INIT_SIZE*sizeof(Student)); if(!L->elem) { printf("here\n"); return -2; } L->length = 0; L->listsize = LIST_INIT_SIZE; return 0; } int main() { SqList *L; int k = Initlist_Sq(L); int i; int n; printf("there\n"); if(k == -2) return -2; scanf("%d",&n); for(i = 0; i<n; i++) { L->elem[i].No=i; gets(L->elem[i].name); } return 0; }
指向函数的指针不需要定义?
我看《C程序设计语言》书,看到103页时,有一个关于指向函数的指针把我看糊涂了。如图所示![图片说明](https://img-ask.csdn.net/upload/201506/25/1435226479_945111.jpg),函数指针就是里面那个comp。可我找了半天也找不到它在哪里定义的,那么当调用它时它是怎么转换的呢?比如那个?:返回的是numcmp,那么最后是怎么转到numcmp函数里面呢?
关于c语言从文件中读取学生信息,处理并打印
![图片说明](https://img-ask.csdn.net/upload/201712/07/1512617928_774992.png) b) 建议函数流程: i. 打开数据文件,失败返回-1; ii. 从头到尾扫描数据文件(即预读一遍)获得学生人数; iii. 根据学生人数,利用malloc和sizeof等函数或运算符为struct student** pStudents分配内存; iv. 利用rewind函数,定位到文件头; v. 读取数据文件,并把每一条记录通过数组下标法或指针法保存到结构体数组pStudents中; vi. 关闭文件; vii. 返回学生人数。 c) 数据文件格式说明: 一行一条学生信息的记录,不同属性用空格隔开,输入数据中无总成绩记录,例如: 张三 通信 89 93 95 李四 网络 88 91 94 王五 物联网 71 94 88 3. 编写统计函数: a) 函数定义void Count(struct student pStudents[], int num)。输入参数分别为保存学生的结构体数组和学生人数。 b) 功能为:统计所有学生的总成绩和每个专业(假定一共三个专业:通信,网络,物联网)的平均成绩;输入参数包括学生信息结构体数组,学生人数,返回的每个学生的总成绩直接填充到对应的输入结构体数组对应字段中。统计信息包括三个专业的总人数、平均成绩数组,用全局变量来表示。访问每个学生信息的时候,用指针来指向当前正在处理的学生。 c) 设计一个或者三个带参数的宏,判断输入的字符串是否是指定的专业名称,并在函数Count中使用。 5. 编写main函数实现: a) 定义变量,其中保存学生信息的数据文件直接在源代码中初始化; b) 读取学生信息,如果失败,打印失败信息并退出程序; c) 统计学生信息; d) 输出统计信息。 e) 释放内存。 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> struct student{ char name[15]; char major[15]; int Eng_sco; int cal_sco; int c_sco; int sum; }; int tx_per=0,tx_ave,tx_sum=0; int wl_per=0,wl_ave,wl_sum=0; int wlw_per=0,wlw_ave,wlw_sum=0; int ReadStudentInfo(const char* filename, struct student** pStudents); void Count(struct student pStudents[], int num); int main() { int count; int m; struct student *list; count=ReadStudentInfo("readme.txt", &list); printf("学生信息: \n"); printf("----------------------------------------------------\n"); printf("序号 姓 名 专业名称 英语成绩 线性代数成绩 c语言成绩 总成绩\n"); for(m=1;m<=count;m++) { printf("%4d %s %s %4d %4d %4d %4d\n",m,(list+m-1)->name,(list+m-1)->major,(list+m-1)->Eng_sco,(list+m-1)->cal_sco,(list+m-1)->c_sco,(list+m-1)->sum); } Count(list, count); printf("\n统计信息 :\n"); printf("----------------------------------------------------\n"); printf("序号 专业名称 学生人数 平均成绩\n"); printf(" 1 通信 %d %d\n",tx_per,tx_ave); printf(" 2 网络 %d %d\n",wl_per,wl_ave); printf(" 3 物联网 %d %d\n",wlw_per,wlw_ave); return 0; } int ReadStudentInfo(const char* filename, struct student** pStudents) { FILE *fp; char ch; int i=1,j; fp=fopen(readme.txt,"r"); if(fp==NULL) { printf("cann't open the file"); exit(-1); } ch=fgetc(fp); while(ch!=EOF) { if(ch=='\n') { i++; } ch=fgetc(fp); } rewind(fp); *pStudents=(struct student*)malloc(sizeof(** pStudents)*i); for(j=0;j<i;j++) { fread(&*pStudents[j],sizeof(struct student)-sizeof(int),1,fp); (*pStudents+j)->sum=((*pStudents+j)->Eng_sco+(*pStudents+j)->cal_sco+(*pStudents+j)->c_sco); } fclose(fp); return i; } void Count(struct student pStudents[], int num) { int n=1; for(n=1;n<=num;n++) { if(!strcmp((pStudents+n-1)->major,"通信")) { tx_per++; tx_sum=tx_sum+(pStudents+n-1)->sum; } if(!strcmp((pStudents+n-1)->major,"网络")) { wl_per++; wl_sum=wl_sum+(pStudents+n-1)->sum; } if(!strcmp((pStudents+n-1)->major,"物联网")) { wlw_per++; wlw_sum=wlw_sum+(pStudents+n-1)->sum; } tx_ave=tx_sum/tx_per; wl_ave=wl_sum/wl_per; wlw_ave=wlw_sum/wlw_per; } free(pStudents); } ``` 运行不起来,是哪里出问题了?
C++哈夫曼编码译码器设计与实现并对哈夫曼树进行先序遍历。
现在就是差一个先序遍历的要求没有做到 ``` #include<stdio.h> #include<string.h> #include<stdlib.h> //树结点定义 typedef struct { int weight; int parent; int lchild; int rchild; }HTNode,*HuffmanTree; static char N[100];//用于保存正文 //哈弗曼编码,char型二级指针 typedef char **HuffmanCode; //封装最小权结点和次小权结点 typedef struct { int s1; int s2; }MinCode; //函数声明 void Error(char *message); HuffmanCode HuffmanCoding(HuffmanTree &HT,HuffmanCode HC,int *w,int n); MinCode Select(HuffmanTree HT,int n); //当输入1个结点时的错误提示 void Error(char *message) { fprintf(stderr,"Error:%s\n",message); //根据指定的格式,向输出流写入数据 exit(1); } //构造哈夫曼树HT,编码存放在HC中,w为权值,n为结点个数 HuffmanCode HuffmanCoding(HuffmanTree &HT,HuffmanCode HC,int *w,int n) { int i,s1=0,s2=0; HuffmanTree p; char *cd; int f,c,start,m; MinCode min; if(n<=1) { Error("Code too small!");//只有一个结点不进行编码,直接exit(1)退出。 } m=2*n-1;//哈弗曼编码需要开辟的结点大小为2n-1 HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//开辟哈夫曼树结点空间 m+1 ,动态内存分配。 //初始化n个叶子结点,w[0] = 0,main函数已赋值 for(p=HT,i=0;i<=n;i++,p++,w++) { p->weight=*w; p->parent=0; p->lchild=0; p->rchild=0; } //将n-1个非叶子结点的初始化 for(;i<=m;i++,p++) { p->weight=0; p->parent=0; p->lchild=0; p->rchild=0; } //构造哈夫曼树 for(i=n+1;i<=m;i++) { min=Select(HT,i-1);//找出最小和次小的两个结点 s1=min.s1 ; //最小结点下标 s2=min.s2;//次小结点下标 HT[s1].parent=i; HT[s2].parent=i; HT[i].lchild=s1; HT[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; } //打印哈弗曼树 printf("HT List:\n"); printf("Number\t\tweight\t\tparent\t\tlchild\t\trchild\n"); for(i=1;i<=m;i++) { printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\n",i,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild); } //从叶子结点到根节点求每个字符的哈弗曼编码 HC=(HuffmanCode)malloc((n+1)*sizeof(char *)); cd=(char *)malloc(n*sizeof(char *));//为哈弗曼编码动态分配空间 cd[n-1]='\0';//如:3个结点编码最长为2。cd[3-1] = '\0'; //求叶子结点的哈弗曼编码 for(i=1;i<=n;i++) { start=n-1; //定义左子树为0,右子树为1 /* 从最下面的1号节点开始往顶部编码(逆序存放),然后编码2号节点,3号...... */ for(c=i,f=HT[i].parent; f!=0; c=f,f=HT[f].parent) { if(HT[f].lchild==c) cd[--start]='0'; else cd[--start]='1'; } //为第i个字符分配编码空间 HC[i]=(char *)malloc((n-start)*sizeof(char *)); //将当前求出结点的哈弗曼编码复制到HC strcpy(HC[i],&cd[start]); } free(cd); return HC; } MinCode Select(HuffmanTree HT,int n) { int min,secmin; int temp = 0; int i,s1,s2,tempi = 0; MinCode code ; s1=1; s2=1; min = 9999; //找出权值最小的结点,下标保存在s1中 for(i=1;i<=n;i++) { if(HT[i].weight<min && HT[i].parent==0) { min=HT[i].weight; s1=i; } } secmin = 9999; //找出权值次小的结点,下标保存在s2中 for(i=1;i<=n;i++) { if((HT[i].weight<secmin) && (i!=s1) && HT[i].parent==0) { secmin=HT[i].weight; s2=i; } } //放进封装中 code.s1=s1; code.s2=s2; return code; } void HuffmanTranslateCoding(HuffmanTree HT, int n,char* ch) {//译码过程 int m=2*n-1; int i,j=0; printf("After Translation:"); while(ch[j]!='\0')//ch[]:你输入的要译码的0101010串 { i=m; while(0 != HT[i].lchild && 0 != HT[i].rchild)//从顶部找到最下面 { if('0' == ch[j])//0 往左子树走 { i=HT[i].lchild; } else//1 往右子树走 { i=HT[i].rchild; } ++j;//下一个路径 } printf("%c",N[i-1]);//打印出来 } printf("\n"); } void main() { HuffmanTree HT=NULL; HuffmanCode HC=NULL; int *w=NULL; int i,n; char tran[100]; printf("Input N(char):"); gets(N); fflush(stdin); n = strlen(N); w=(int *)malloc((n+1)*sizeof(int *));//开辟n+1个长度的int指针空间 w[0]=0; printf("Enter weight:\n"); //输入结点权值 for(i=1;i<=n;i++) { printf("w[%d]=",i); scanf("%d",&w[i]); } fflush(stdin); //清空输入缓冲区 //构造哈夫曼树HT,编码存放在HC中,w为权值,n为结点个数 HC=HuffmanCoding(HT,HC,w,n); //输出哈弗曼编码 printf("HuffmanCode:\n"); printf("Number\t\tWeight\t\tCode\n"); for(i=1;i<=n;i++) { printf("%c\t\t%d\t\t%s\n",N[i-1],w[i],HC[i]); } fflush(stdin); //译码过程 printf("Input HuffmanTranslateCoding:"); gets(tran); HuffmanTranslateCoding(HT, n, tran); return; } ```题目要求:九、哈夫曼编码译码器设计与实现 编写程序设计哈夫曼编码译码器。 (1)根据输入的权值建立哈夫曼树。 (2)对建立好的哈夫曼树进行先序遍历。 (3)利用建好的哈夫曼树生成哈夫曼编码,并显示生成的各字符的哈夫曼编码。 (4)根据输入的字符进行译码。 (5)显示功能:以先序遍历的顺序显示建立好的哈夫曼树。显示哈夫曼编码和译码的结果。
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
C++(数据结构与算法):62---搜索树(二叉搜索树、索引二叉搜索树)
一、搜索树的复杂度分析 本文考察二叉搜索树和索引二叉搜索树 二叉搜索树的渐进性能可以和跳表媲美: 查找、插入、删除操作所需的平均时间为Θ(logn) 查找、插入、删除操作的最坏情况的时间为Θ(n) 元素按升序输出时所需时间为Θ(n) 虽然在最坏情况下的查找、插入、删除操作,散列表和二叉搜索树的时间性能相同,但是散列表在最好的情况下具有超级性能Θ(1) 不过,对于一个指定的关键...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
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) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
立即提问