输入与输出points--c语言笔记

输入与输出问题–c语言笔记
一.字符的输入与输出
1.Putchar
(1)原型:int putchar(int c)
第一个int:表示函数的返回值,也就是说,函数如果正确执行,则返回输出字符的字符码;否则,则输出EOF。
第二个int:表示函数需要一个int类型的参数,该参数即为函数输出字符的ASCII码值。
(2)调用形式:putchar(c)
C虽为实际参数,但可以是char,short,int类型的表达式。
所以:
eg:char c=‘a’;
Putchar(c)
Putchar(‘a’)
Putchar(97)
Putchar(‘\141’)
都算对。
2.Getchar
(1)原型:int getchar(void)
函数返回值为int,void表示不需要参数。
(2)调用形式:getchar();
为便于理解,举例。
如c=getchar();
Tips1:函数值执行时从输入流中读取一个字符,并将所读取的字符转为int类型后返回,c即为返回的变量。
Tips2:此函数只会取出输入流中的第一个字符,然后程序向后进行。
Tips3:此函数中,回车键也算字符,并且只有回车键,才能激活处于等待状态的函数。
Tips4:输入流中没有字符,函数则处于等待状态。
eg:ch1=getchar(); ch2=getchar();ch3=getchar();
输入a↙b↙
则ch1读取了a,并被↙激活,程序向后进行,ch2读取了↙,b进入输入流,↙激活ch3旁边的getchar,其读取b。最后ch1=97,ch2=10,ch3=98.

通过putchar与getchar在整形上的互相转换,可以实现很多程序的精简。
二.字符串的输入与输出
1.Puts
(1)原型:int puts(const char *s)
函数返回值为int,参数s表示存放所要输出字符串的内存缓冲区首地址,类型为字符指针,puts函数从s所指定的地址读取字符串输出到标准输出设备,并在结尾输出一个换行符’\n’。
函数正确执行时返回非负整值,否则返回EOF。
(2)调用形式:puts(s);
S为实际参数,可以是字符串常量,字符数组名,或指向某字符串的字符指针变量。其中字符串常量所表示的是该字符串在内存缓冲区的首地址。
所以,如:char s[20]=”hello,”;char *pc=”world!”;
Puts(s);puts(pc);等价于puts(“hello,\nworld!”);
2.Gets
(1)原型char *gets(char s);
函数返回值类型为char
,参数s为一个字符指针,指向存放输入字符串的内存缓冲区首地址。S应该足够大。
(2)调用格式:gets(s);
输入字符最后的换行符会被’\0’空字符取代,如果正确执行,则返回内存缓冲区与的首地址;如果遇到文件尾或出错,则返回空字符NULL。
若有声明a[81],则可以直接从键盘输入一串字符并返回给a[81].
注意:若输入字符有空白字符,则必须用gets。
三.格式化输入与输出
next…

K-means是一种常用的无监督机器学习算法,用于数据聚类。在C语言中实现K-means的主要步骤包括: 1. 初始化质心:随机选择k个数据点作为初始质心(中心)。 2. 分配数据点到最近的质心:对于每个数据点,计算它到所有质心的距离,并将其分配给距离最近的那个质心。 3. 更新质心:根据每个簇内的所有数据点重新计算新的质心位置,通常取簇内所有点的均值。 4. 重复步骤2和3直到满足停止条件:比如达到预设的最大迭代次数、质心不再改变,或者簇内点的分布变化小于某个阈值。 以下是简化的C语言代码示例(使用整数数组表示数据集): ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #define K 3 // 聚类数目 #define MAX_ITER 100 // 最大迭代次数 typedef struct { int center; // 质心 int count; // 所属簇的数据点个数 } Cluster; void init_clusters(int data[], int n, Cluster clusters[K]) { for (int i = 0; i < K; ++i) { clusters[i].center = rand() % n; clusters[i].count = 0; } } void assign_points_to_clusters(int data[], int n, Cluster* clusters) { for (int i = 0; i < n; ++i) { int min_dist = INT_MAX, closest_center = -1; for (int j = 0; j < K; ++j) { int dist = abs(data[i] - clusters[j].center); if (dist < min_dist) { min_dist = dist; closest_center = j; } } clusters[closest_center].count++; // 可能需要更新簇的平均值 } } void update_centers(int data[], int n, Cluster* clusters) { for (int i = 0; i < K; ++i) { if (clusters[i].count > 0) { clusters[i].center = (data[0] + ... + data[clusters[i].count - 1]) / clusters[i].count; } else { // 对于空簇,可以设置随机位置或其他处理方式 } } } // 主函数 int main() { int data[] = {...}; // 数据集 int n = sizeof(data) / sizeof(data[0]); Cluster clusters[K]; for (int iter = 0; iter < MAX_ITER; ++iter) { assign_points_to_clusters(data, n, &clusters); update_centers(data, n, clusters); // 检查是否收敛 if (clusters[0].center == ... && ...) { break; } } return 0; } ``` 请注意,这只是一个简化版的K-means实现,实际应用中可能需要处理更多细节,例如数据预处理、异常值处理以及更复杂的终止条件等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值