认识c语言->从stdio开始

stdio简介

stdio是指standard input &output,即标准输入输出,往往是初学者首先接触的头文件。其中包含了很多库函数,包括输入输出、文件操作等。本文意在讲解#include开始后stdio.h会给你带来什么。

#include在做什么?

预处理器发现#include后,会尝试查看后面紧跟的文件名并把文件内容包含到当前文件中,可简单理解为复制了一个特殊文件。
通常有两种形式:

#include<stdio.h>//在标准系统目录中查找该文件,通常在
//查找系统自带的头文件时使用
#include"stdio.h"//首先在文件当前目录中查找该文件
//没找到则再查找标准系统目录
#include"/user/myhead/cOnly.h"//首先查找/user/myhead目录

从此开始,stdio.h就是你的了。你可以应用它定义的所有的函数、变量等,在不重名的情况下。

为什么不重名?

可以试试如果重名会怎么样。

//vs debug x64
#include<stdio.h>
char* printf(const char* arr){
return (char*)arr;
}
int main(void){
printf("hello world?");
return 0;
}

错误 C2668 “printf”: 对重载函数的调用不明确
报错了,它指出printf调用了两个函数,它不知道调用哪一个。这是重名会有的情况。
当然如果你足够幸运,运行如下代码,则会正常通过编译:

//VS debug x64或x86模式下
#include<stdio.h>
int printf(char arr) {
	return arr;
}
int main(void) {
	printf("hello world?");
	return 0;
}

结果输出了“hello world?”(欢迎尝试),绕过了我设的陷阱。
怎么回事呢?等下一次更新吧。第一次写专栏,求大佬建议耶,共同进步吧!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
#include #include struct DATA { int ID; char name[4]; char sex[3]; int score; }; void paixu(int*,DATA*,int); int sishewuru(double); void func1(int*,int*,DATA*,int*,int,int,int,int);//统计男女比例 int func2(int*,int,DATA*);//查找考生序号 void print(); void main() { int length=0,i,yiben,erben,sanben,dazhuan,male[4],female[4]; int yi,er,san,si; char input; FILE* file=fopen("f1.txt","r"),*file1; if(file==NULL) { printf("No such file!\n"); return; } while(EOF!=fscanf(file,"%*[^\n]\n")) length++;//自动计算考生数罝ATA* data=(DATA*)malloc(length*sizeof(DATA)); int* pai=(int*)malloc(length*sizeof(int)); rewind(file); for(i=0;i='0'&&input<='4')) { printf("非法输入,请重新输入\n请输入:"); fflush(stdin); } else break; } getchar(); switch(input) { case '0': printf("\n一类本科招生线:%d\n二类本科招生线:%d\三类本科招生线:%d\\n高职高专招生线:%d\n",yi,er,san,si); printf("是否打印为文件?(y/n):"); if(getchar()=='y') { file1=fopen("各批次录取分数线.txt","w"); fprintf(file1,"一类本科招生线:%d\n二类本科招生线:%d\\n三类本科招生线:%d\n高职高专招生线:%d\n",yi,er,san,si); fclose(file1); } fflush(stdin); break; case '1': func1(male,female,data,pai,yiben,erben,sanben,dazhuan); printf("一类本科招生线男女比例:%d:%d\n",male[0],female[0]); printf("二类本科招生线男女比例:%d:%d\n",male[1],female[1]); printf("三类本科招生线男女比例:%d:%d\n",male[2],female[2]); printf("高职高专招生线招生线男女比例:%d:%d\n",male[3],female[3]); printf("是否打印为文件?(y/n):"); if(getchar()=='y') { file1=fopen("各批次录取男女比例.txt","w"); fprintf(file1,"一类本科招生线男女比例:%d:%d\n",male[0],female[0]);
### 回答1: 广度优先算法(BFS)是一种图论算法,它的思想是从一个点开始,按照宽度的顺序依次搜索周围的点,直到找到目标点为止。这个过程可以用队列来实现。 下面是一个简单的广度优先搜索的C语言代码实现: ``` #include <stdio.h> #include <stdlib.h> #define MAX_VERTEX_NUM 20 // 最大顶点数 // 图的邻接矩阵存储结构 typedef struct { int vertex[MAX_VERTEX_NUM]; // 顶点信息 int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵 int vertex_num, arc_num; // 顶点数和边数 } Graph; // 队列的存储结构 typedef struct { int data[MAX_VERTEX_NUM]; // 队列数组 int front, rear; // 队列头和队列尾 } Queue; // 初始化队列 void init_queue(Queue *q) { q->front = q->rear = 0; } // 入队操作 void enqueue(Queue *q, int x) { q->data[q->rear++] = x; } // 出队操作 int dequeue(Queue *q) { return q->data[q->front++]; } // 判断队列是否为空 int queue_empty(Queue *q) { return q->front == q->rear; } // 广度优先搜索 void BFS(Graph *g, int start) { int i; int visited[MAX_VERTEX_NUM]; // 记录顶点是否被访问过 Queue q; // 初始化访问数组和队列 for (i = 0; i < g->vertex_num; i++) { visited[i] = 0; } init_queue(&q); ### 回答2: 广度优先算法是一种图的遍历算法,可以用来查找从一个节点到其他节点的最短路径。 "六度空间"是一种理论,即每个人和其他人之间最多通过6个人(中间人)就可以建立联系。这个理论源于一个社交网络的实验,即通过美国民众之间的朋友关系,任意两个人之间平均需要6个中间人才能够彼此认识。 我们可以将"六度空间"问题转化成一个图的问题,每个人作为图的一个节点,两个人之间有边连接表示他们之间有朋友关系。然后使用广度优先算法来计算每个节点到其他节点的最短路径距离。 首先,我们需要定义一个队列来存储待处理的节点。我们从一个起始节点开始,将其加入队列。然后,依次处理队列中的节点,首先将其标记为已访问,然后将其邻居节点(即与之有边连接的其他节点)加入队列中。 在每次处理节点时,我们需要记录节点到起始节点的距离。这个距离可以通过之前已知的距离加一来计算。我们可以使用一个数组来保存节点到起始节点的最短路径距离。 当队列为空时,表示所有节点都已经被处理完毕。此时,我们可以根据这个数组来计算每个节点到起始节点的最短路径距离。 使用广度优先算法可以有效地计算每个节点到起始节点的最短路径距离,从而判断两个节点之间是否满足"六度空间"的条件。根据计算结果,我们可以得出任意两个人之间的最短路径距离,从而验证"六度空间"理论的正确性。 ### 回答3: 广度优先算法(BFS)是一种用于遍历或搜索图或树的算法。在六度空间问题中,考虑一个社交网络,我们想要找到某个人与其他所有人之间的关系链,即找到这个人的“六度好友”。 下面是使用C语言编写广度优先算法解决六度空间问题的代码: ```c #include <stdio.h> #include <stdbool.h> #define MAX_SIZE 100 // 存储队列元素的结构体 typedef struct { int data[MAX_SIZE]; int front; int rear; } Queue; // 初始化队列 void initQueue(Queue *q) { q->front = q->rear = -1; } // 入队操作 void enqueue(Queue *q, int value) { q->rear++; q->data[q->rear] = value; } // 出队操作 int dequeue(Queue *q) { q->front++; return q->data[q->front]; } // 判断队列是否为空 bool isEmpty(Queue *q) { return q->front == q->rear; } // 广度优先搜索六度空间 void sixDegrees(int graph[MAX_SIZE][MAX_SIZE], int start, int n) { Queue q; bool visited[MAX_SIZE] = { false }; int level[MAX_SIZE] = { 0 }; initQueue(&q); enqueue(&q, start); visited[start] = true; while (!isEmpty(&q)) { int node = dequeue(&q); for (int i = 0; i < n; i++) { if (graph[node][i] && !visited[i]) { enqueue(&q, i); visited[i] = true; level[i] = level[node] + 1; } } } for (int i = 0; i < n; i++) { if (i != start) { printf("与节点%d相连的最短关系链长度为%d\n", i, level[i]); } } } int main() { int n; // 节点数量 int graph[MAX_SIZE][MAX_SIZE]; // 存储图的邻接矩阵 printf("请输入节点数量:"); scanf("%d", &n); printf("请输入邻接矩阵:\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &graph[i][j]); } } int start; // 起始节点 printf("请输入起始节点:"); scanf("%d", &start); sixDegrees(graph, start, n); return 0; } ``` 代码中定义了`initQueue`、`enqueue`、`dequeue`、`isEmpty`等相关函数,用于实现队列的基本操作。`sixDegrees`函数使用BFS算法来搜索六度空间,并根据起始节点与其他节点之间最短的关系链长度,在控制台打印出结果。`main`函数中则获取节点数量、邻接矩阵和起始节点等输入,然后调用`sixDegrees`函数进行搜索。 使用该代码,我们可以根据输入的邻接矩阵和起始节点,输出起始节点与其他节点之间的最短关系链长度,从而找到六度空间中的关系链。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值