C 语言学习-05【数组】
1、一维数组元素的操作
输入一个数,按原来排序的规律将它插入到一个一排列好的数组中:
#include <stdio.h> int main() { int i, data, a[10] = {2, 3, 6, 9, 11, 12, 14, 17, 19}; printf("Primitive series: \n"); for (i = 0; i < 9; i++) { printf("%d ", a[i]); } printf("\n"); printf("Please enter the data you want to insert: \n"); scanf("%d", &data); for (i = 8; i >= 0; i--) { if (a[i] < data) { for (int j = 8; j > i; j--) { a[j + 1] = a[j]; } a[i + 1] = data; break; } else { continue; } } printf("The sequence after inserting data: \n"); for (i = 0; i < 10; i++) { printf("%d ", a[i]); } return 0; }
- 运行结果:
对某城市五月份每天的气温进行统计,找出最大值及对应的是那一天
#include <stdio.h> int main() { int i, index, max, a[31]; printf("enter data: \n"); for (i = 0; i < 31; i++) { scanf("%d", &a[i]); } max = a[0]; index = 0; for (i = 1; i < 31; i++) { if (a[i] > max) { max = a[i]; index = i; } } printf("max = %d, index = %d", max, index + 1); return 0; }
- 运行结果:
有 10 个同学的成绩,要求把他们的成绩从高到低排序
#include <stdio.h> int main() { int score[10]; int i, j, t; printf("Please enter the scores of 10 students: \n"); for (i = 0; i < 10; i++) { scanf("%d", &score[i]); } printf("\n"); for (j = 0; j < 9; j++) { for (i = 0; i < 9 - j; i++) { if (score[i] < score[i + 1]) { t = score[i]; score[i] = score[i + 1]; score[i + 1] = t; } } } printf("Well-ranked grades: \n"); for (i = 0; i < 10; i++) { printf("%d ", score[i]); } printf("\n"); }
- 运行结果:
2、一维数组应用举例
统计获选人的选票:
#include <stdio.h> void main () { int x, n[4] = {0}; printf("Please enter the candidate number: "); scanf("%d", &x); while (x) { n[x]++; printf("Please enter the candidate number: "); scanf("%d", &x); } printf("\nStatistical result: \n"); for (x = 1; x <= 3; x++) { printf("The number %d candidate has %d votes\n", x, n[x]); } }
- 运行结果:
有一个大小为 50 的整数数组,里面的数字是随机生成的,均介于 1 到 99 之间,但是数字有重复,需要去除数组中的数字进行存储
#include <stdio.h> #include <stdlib.h> // srand(), rand() #include <time.h> // time() int main() { int a[50], b[50], i, j, temp, t, count; srand((unsigned int)time(NULL)); // 设置当前时间为种子 for (i = 0; i < 50; i++) { a[i] = rand() % 100 + 1; } printf("Randomly generated array: \n"); for (i = 0; i < 50; i++) { printf("%4d", a[i]); if ((i + 1) % 10 == 0) { printf("\n"); } } for (i = 0; i < 49; i++) { for (j = 0; j < 50; j++) { if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } printf("The array is sorted from smallest to largest: \n"); for (i = 0; i < 50; i++) { printf("%4d", a[i]); if ((i + 1) % 10 == 0) { printf("\n"); } } t = 0; for (i = 0; i < 50;) { b[t++] = a[i]; for (j = 1;;j++) { if (a[i] == a[i + j]) { continue; } if (a[i] != a[i + j]) { break; } } i += j; } count = t; printf("The array after deduplication contains %d data\n", count); for (i = 0; i < count; i++) { printf("%4d", b[i]); if ((i + 1) % 10 == 0) { printf("\n"); } } return 0; }
- 运行结果:
3、字符数组的初始化
讲一句话中的每个英文单词的瘦子米转换成大写:
#include <stdio.h> int main() { char str[10] = {'g', 'o', 'o', 'd', ' ', 'l', 'u', 'c', 'k', '!'}; int i, t = 0; for (i = 0; i < 10; i++) { printf("%c", str[i]); } printf("\n"); for (i = 0; i < 10; i++) { if (t == 0) { if (str[i] == ' ') { t = 0; continue; } else { str[i] -= 32; t = 1; } } else { if (str[i] == ' ') { t = 0; continue; } } } for (i = 0; i < 10; i++) { printf("%c", str[i]); } return 0; }
- 运行结果
4、字符串和字符串结束标志
输出字符串的有效长度:
#include <stdio.h> int main() { char str[] = "I am a student."; int i, count = 0; for (i = 0; str[i] != '\0'; i++) { putchar(str[i]); count++; } printf("\nThe valid length of the string is %d", count); return 0; }
- 运行结果:
5、字符串输入函数
输入一段话,同级其中单词的个数
#include <stdio.h> int main() { char str[100]; int i = 0, count = 0, flag = 0; puts("Please enter a paragraph: "); gets(str); while (str[i] != '\0') { if (flag == 0) { if (str[i] == ' ') { flag = 0; } else { count++; flag = 1; } } else { if (str[i] == ' ') { flag = 0; } } i++; } printf("There are %d English words in this passage\n", count); return 0; }
- 运行结果:
6、字符串操作方法
原型 功能 int strlen(char *d)
返回字符串 d 的长度,不包括终止符 NULL char *strcat(char *d,char *s)
把字符串 s 接到字符串 d 后面,返回字符串 d char *strncat(char *d,char *s,int n)
把字符串 s 中至多 n 个字符接到字符串 d 后面;
如果 s 小于 n 个字符,用 ‘\0’ 补上,返回字符串 dchar *strcpy(char *d,char *s)
复制字符串 s 到字符串 d,返回字符串 d char *strncpy(char *d,char *s,int n)
复制字符串 s 中至多 n 个字符到字符串 d;
如果 s 小于 n 个字符,用 ’\0’ 补上,返回字符串 dvoid *memcpy(void *d,void *s,int n)
从 s 复制 n 个字符到 d,返回字符串 d void *memmove(void *d,void *s,int n)
和 memcpy 相同,即使 d 和 s 部分相同也运行 int strcmp(char *d,char *s)
比较字符串 d 和字符串 s。
如果 d < s,返回 -1;
如果 d > s,返回 1;
如果 d == s,返回 0.int strncmp(char *d,char *s,int n)
比较字符串 d 中至多 n 个字符和字符串 s。
如果 d < s,返回 -1;
如果 d > s,返回 1;
如果 d == s,返回 0.int memcmp(void *d,void *s,int n)
比较字符串 d 的前 n 个字符与 s,和 strcmp 返回值相同 char *strchr(char *d,char c)
返回一个指向字符串 d 中字符 c 第 1 次出现的指针;
或者如果没有找到 c,则返回指向 NULL 的指针char *strstr(char *d,char *s)
返回一个指向字符串 d 中字符串 s 第 1 次出现的指针;
或者如果没有找到 s,则返回指向 NULL 的指针void *memchr(void *d,char c,int n)
返回一个指向被 d 所指向的 n 个字符中 c 第 1 次出现的指针;
或者如果没有找到 c,则返回指向 NULL 的指针void *memset(void *d,char c,int n)
使用 n 个字符 c 填充 void* 类型变量 d void *strupr(char *p)
字符串中字母转换成大写字母 void *strlwr(char *p)
字符串中字母转换成小写字母
7、字符数组应用
输入 5 个同学的姓名,按字典顺序从小到大排序
#include <stdio.h> #include <string.h> int main() { char stu[5][20]; char name[20]; int i, j, t; puts("Please enter student name: "); for (i = 0; i < 5; i++) { gets(stu[i]); } puts("Lexicographic ordering: "); for (i = 1; i < 5; i++) { for (j = 0; j < 5 - i; j++) { if (strcmp(stu[j], stu[j + 1]) > 0) { strcpy(name, stu[j]); strcpy(stu[j], stu[j + 1]); strcpy(stu[j + 1], name); } } } for (i = 0; i < 5; i++) { puts(stu[i]); } return 0; }
- 运行结果: