当前位置: 首页 > news >正文

C语言初尝试——洛谷

一、C数组:

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

声明数组

在 C 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:

type arrayName [ arraySize ];

初始化数组

在 C 中,您可以逐个初始化数组,也可以使用一个初始化语句,如下所示:

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

访问数组元素

数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。例如:

double salary = balance[9];

获取数组长度

数组长度可以使用 sizeof 运算符来获取数组的长度,例如:

int numbers[] = {1, 2, 3, 4, 5};
int length = sizeof(numbers) / sizeof(numbers[0]);

利用数组解决问题:

1.将数组逆序重存放:

#include <stdio.h>int main() {int n;int a[500];scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);}for (int i = n; i >= 1; i--) {printf("%d ", a[i]);}return 0;
}

2.年龄与疾病:

#include <stdio.h>int main() {int a;scanf("%d", &a);int arr[100];float count18 = 0;float count35 = 0;float count60 = 0;float count61 = 0;for (int i = 0; i < a; i++) {scanf("%d", &arr[i]);int age = arr[i];for	(int i = 0; i < a; i++) {if ( age <= 18) {count18++;} else if ( age <= 35) {count35++;} else if (age <= 60) {count60++;} else {count61++;}}}printf("%.2f%%\n", count18 / a * 10 );printf("%.2f%%\n", count35 / a * 10 );printf("%.2f%%\n", count60 / a * 10 );printf("%.2f%%\n", count61 / a * 10 );}

3.向量点积计算:

#include <stdio.h>
int main() {int a;scanf("%d", &a);int arr[1000];int brr[1000];for (int i = 0; i < a; i++) {scanf("%d", &arr[i]);}for (int i = 0; i < a; i++) {scanf("%d", &brr[i]);}int num = 0;for (int i = 0; i < a; i++) {num += arr[i] * brr[i];}printf("%d\n", num);}

4.开关灯:

错误提交代码:

#include <stdio.h>int main() {int N;scanf("%d", &N);int arr[5000];for (int i = 1; i * i <= N; i++) {printf("%d", i * i);}
}

错误原因:

仅寻找表层规律,认为只需要输出样例范围内给出的平方数,不可能适用于所有条件,遗憾仅得10分。

改正代码:

#include <stdio.h>
#include <stdbool.h>int main() {int N;scanf("%d", &N);// 初始化灯的状态:true表示开,false表示关,初始全部为开bool light[N];for (int i = 1; i <= N; ++i) {light[i] = true;}for (int k = 1; k <= N; ++k) {for (int i = k; i <= N; i += k) {light[i] = !light[i];}}bool isFirst = true;for (int i = 1; i <= N; ++i) {if (!light[i]) {if (isFirst) {printf("%d", i);isFirst = false;} else {printf(" %d", i);}}}return 0;
}

二、字符串:

C 字符串

在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。

空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\0 是转义字符,意思是告诉编译器,这不是字符 0,而是空字符。

下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符 \0,所以字符数组的大小比单词 RUNOOB 的字符数多一个。

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

依据数组初始化规则,您可以把上面的语句写成以下语句:

char site[] = "RUNOOB";

C 中有大量操作字符串的函数:

序号函数 & 目的
1strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
2strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。
3strlen(s1);
返回字符串 s1 的长度。
4strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
5strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

下面的实例使用了上述的一些函数:

实例

#include <stdio.h>
#include <string.h>int main ()
{char str1[14] = "runoob";char str2[14] = "google";char str3[14];int  len ;/* 复制 str1 到 str3 */strcpy(str3, str1);printf("strcpy( str3, str1) :  %s\n", str3 );/* 连接 str1 和 str2 */strcat( str1, str2);printf("strcat( str1, str2):   %s\n", str1 );/* 连接后,str1 的总长度 */len = strlen(str1);printf("strlen(str1) :  %d\n", len );return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

strcpy( str3, str1) :  runoob
strcat( str1, str2):   runoobgoogle
strlen(str1) :  12

利用字符串解决问题:

1.统计数字字符个数:

#include <stdio.h>
#include <string.h>int main() {char arr[500];scanf("%[^\n]", &arr);int len = strlen(arr);int count = 0;for (int i = 0; i < len; i++) {char c = arr[i];if (c >= '0' && c <= '9') {count++;}}printf("%d", count);return 0;
}

2.输出亲朋字符串:

#include <stdio.h>
#include <cstring>int main() {char s[1000];scanf("%s", s);int len = strlen(s);for (int i = 0; i < len; i++) {char c = s[i];// 获取当前索引i对应的字符char n;// 定义变量n,用于存储下一个字符// 判断当前字符是否是字符串的最后一个字符if (i == len - 1) {n = s[0];// 如果是最后一个字符,下一个字符取第一个字符} else {n = s[i + 1];//否则下一个字符取当前字符的后一位字符}printf("%c", c + n);// 输出当前字符c与下一个字符n的ASCII值相加后得到的新字符}return 0;
}


文章转载自:

http://VQ9g8b8O.Ljwyc.cn
http://yPSmFvmr.Ljwyc.cn
http://6GmTAhl0.Ljwyc.cn
http://xhKELn8j.Ljwyc.cn
http://Hwop23eQ.Ljwyc.cn
http://rnWl4deT.Ljwyc.cn
http://zKAi3XU4.Ljwyc.cn
http://50f8adGo.Ljwyc.cn
http://NLVadxKU.Ljwyc.cn
http://Dexw3P2V.Ljwyc.cn
http://QLf7bjqH.Ljwyc.cn
http://KMwu80V8.Ljwyc.cn
http://wSu1ON3d.Ljwyc.cn
http://urWms5SZ.Ljwyc.cn
http://r1MlUuT7.Ljwyc.cn
http://jYW0P1F0.Ljwyc.cn
http://GDBssznA.Ljwyc.cn
http://IR2yNsxz.Ljwyc.cn
http://BtLpmqpt.Ljwyc.cn
http://qxiRjd9Y.Ljwyc.cn
http://BaYPy9kc.Ljwyc.cn
http://dkT6DGTi.Ljwyc.cn
http://FqyHRmMq.Ljwyc.cn
http://312nUUt4.Ljwyc.cn
http://n5vjJKx1.Ljwyc.cn
http://oHh1a2wv.Ljwyc.cn
http://VXxeWjIs.Ljwyc.cn
http://s3Wbl21v.Ljwyc.cn
http://gqlDFnPF.Ljwyc.cn
http://avsNyoad.Ljwyc.cn
http://www.dtcms.com/a/386867.html

相关文章:

  • Kaleidoscope for Mac:Mac 平台文件与图像差异对比的终极工具
  • LeetCode 刷题【80. 删除有序数组中的重复项 II】
  • 淘宝扭蛋机小程序系统开发:引领电商娱乐化潮流
  • 【车载audio开发】【基础概念2】【Usage、ContentType、Flags、SessionId之间的关系】
  • 【Day 52 】Linux-Jenkins
  • 向内核社区提交补丁
  • 【Java-常用类】
  • 在线教程丨ACL机器翻译大赛30个语种摘冠,腾讯Hunyuan-MT-7B支持33种语言翻译
  • 006 Rust基本数据类型
  • docker配置代理加速
  • 基于MATLAB的视频动态目标跟踪检测实现方案
  • AirPods Pro 3正式发布:全方位升级​
  • PyTorch生成式人工智能(29)——基于Transformer生成音乐
  • 《如龙8外传》共五章:漂流记、老人与海、金银岛等!
  • NVIDIA DOCA与BlueField DPU理解与学习
  • 蜜罐--攻防、护网的强大助力
  • OpenStack 学习笔记
  • 2025年09月16日Github流行趋势
  • git永久存储凭证(可以不用经常输入git密钥)
  • 豆包对高可用系统建设的理解
  • nginx.org 官方仓库安装与配置 NGINX
  • 数据驱动的核心基石:概率分布全家桶的技术实践与方法论思考
  • 贪心算法应用:抗干扰信道分配问题详解
  • 深度搜索 DeepSearch GLM-4.5-flash 实现
  • 基础分割模型U-Net
  • LeetCode:8.无重复字符的最长字串
  • 卷积神经网络搭建实战(一)——torch云端的MNIST手写数字识别(全解一)
  • 实验四 Cache 3种不同的地址映射机制(仿真)
  • 北航计算机保研机试题+解答
  • Python Flask快速入门