5. 04 C语言 数组,字符串
来源:互联网 发布:学java去哪儿好 编辑:程序博客网 时间:2024/05/01 14:46
数组的定义
基本概念:
在定义数组时,计算机会分配一块连续的空间
定义方式为:类型 数组名[数组长度];
命名规则与变量命名规则相同(首字母小写、驼峰法)
数组长度定义后,就不能改变
Clang编译环境下,长度可以是变量。但是数组取的值,是定义数组时,变量的值。
字符串
在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串(字符数组即元素为字符的数组)。并且将\0作为结束标志。
字符串定义
char string[10];
因为最后一位string[9]要留给\0,所以对于string来说,有效位应该是9位。
char string[] = {'a', 'b', 'c', 'd'}; // 此时空间长度为4,只是字符数组
char string[] = "abcd"; // 此时真正的空间长度是5,系统自动加了\0
#include <string.h>
strlen
功能:计算字符串长度
char string[10] = "abc";
int length = strlen(string);
strcat
功能:把string2中的字符串连接到string1 中字符串的后面,并删去string1后的串标志“\0”。本函数返回值是string1的首地址。
注意:因为字符串会直接拼接给string1,所以要确保string1的长度够长,至少能装下拼接过来的string2。
char string1[10] = "abc";
char string2[] = "def";
strcat(string1, string2);
strcpy
功能:字符串拷贝,将string2拷贝给string1(把后一个拷贝给前一个)。
char string1[10] = {};
char string2[] = "def";
strcpy(string1, string2);
strcmp
功能:字符串比较。通过ASCII,比较两个字符串的大小。根据编译器不同,有的返回-1, 0, 1;有的返回相差多少(Clang返回相差多少)。
char string1[10] = "abc";
char string2[] = "ard";
int a = strcmp(string1, string2);
printf("%d", a); // 输出-16
作业:
1. 编写一个C程序,接收用户输入的7个温度,然后求出7个温度的平均值,然后打印该平均值。
#include <stdio.h>
int main(int argc, const char * argv[]) {
double temp[7] = {0.0};
double sum = 0.0;
double avgTemp = 0.0;
printf("Input each day's tempreture(last week): \n");
for (int i = 0; i < 7; i++) {
scanf("%lf", &temp[i]);
sum += temp[i];
}
avgTemp = sum / 7;
printf("Average tempreture of this week: %.2f\n",avgTemp);
return 0;
}
2. 循环录入5个数字,然后按反序输出(将一个数组中的值按逆序重新存放,例如原来的顺序为:8,6,5,4,1.要求改为:1,4,5,6,8;并将数组中的值输出)
#include <stdio.h>
int main(int argc, const char * argv[]) {
int num[5] = {0};
int temp[5] = {0};
printf("Input 5 numbers: \n");
for (int i = 0; i < 5; i++) {
scanf("%d", &num[i]);
temp[4 - i] = num[i];
}
for (int j = 0; j < 5; j++) {
printf("%d ", temp[j]);
}
return 0;
}
3. 随机产生20个100-200之间的正整数存放到数组中,并求数组中的所有元素最大值、最小值、平均值,然后将各元素的与平均值的差组成一个新数组。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, const char * argv[]) {
unsigned int arr[20] = {0};
unsigned int new[20] = {0};
srand((unsigned) time(NULL));
//generate a radom number;
printf("You've got an radom number array[20]: \n");
for (int i = 0; i < 20; i++) {
int a = 100, b = 200;
arr[i] = (rand() % (b - a + 1)) + a;
printf("%u ", arr[i]);
}
printf("\n\n");
//get max, min, avg
int max = arr[0];
int min = arr[0];
int sum = 0;
int avg = 0;
for (int i = 0; i < 20 ; i++) {
if (max < arr[i]) {
max = arr[i];
}
if (min > arr[i]) {
min = arr[i];
}
sum += arr[i];
}
avg = sum / 20;
printf("Max = %d\n", max);
printf("Min = %d\n", min);
printf("Avg = %d\n\n", avg);
//generate new array
printf("And your new array[20]: \n");
for (int i = 0; i < 20 ; i++) {
new[i] = arr[i] - avg;
printf("%d ", new[i]);
}
printf("\n\n");
return 0;
}
4. 数组有1000个元素,设数组a[1000],存放1-1000内的数值,但是现在有一个数值重复了,只遍历一次数组,找出那个重复的数。(注:本题可以先采用10个数做例子,不需要循环录入1000个数)
(例:{1,3,4,5,6,7,2,9,8,3},找出重复数为3)
方法1:算数法
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[10] = {1, 3, 4, 5, 6, 7, 2, 9, 8, 3};
int sum = 0;
int temp = 0;
int result = 0;
for (int i = 0; i < 9; i++) {
temp += (i + 1);
sum += a[i];
}
sum += a[9];
result = sum - temp;
printf("%d\n", result);
return 0;
}
方法2:填坑法
void question4() {
int array[10] = {1, 4, 6, 5, 6, 7, 2, 9, 8, 3};
int array1[10] = {0};
// 遍历数组
for (int i = 0; i < 10; i ++) {
int index = array[i] - 1; // 得到一个下标
// 将index作为array1的下标
if (array1[index] > 0) {
printf("%d是重复的", array[i]);
break;
}
array1[index] ++;
}
}
reference:
http://blog.csdn.net/dongtingzhizi/article/details/8858981
http://www.cnblogs.com/cysolo/p/3587314.html
http://buptdtt.blog.51cto.com/2369962/749049
5. 求整型数组(每个元素都是0-9的整数)中最长连续元素子串所组成的最大的数值。
测试数据
int arr1[] = {1,3,3,3,4,4,4,4,4,0,0,0,4,4,4,4},此例中由5个连续的4为最大连续子串,返回结果为44444.
int arr2[] = {1,3,3,3,4,4,4,4,4,0,0,0,0,0,0,5,5,5,5},返回44444;
int arr3[] = {1,3,3,3,5,5,5,5,5,4,4,4,4,4,0,0,0,0,0,0,4,4,4,4},返回55555;
#include <stdio.h>
int main(int argc, const char * argv[]) {
// int arr1[] = {1,3,3,3,4,4,4,4,4,0,0,0,4,4,4,4};
// int arr2[] = {1,3,3,3,4,4,4,4,4,0,0,0,0,0,0,5,5,5,5};
int arr3[] = {1,3,3,3,5,5,5,5,5,4,4,4,4,4,0,0,0,0,0,0,4,4,4,4};
int length = sizeof(arr3) / sizeof(arr3[0]);
long int sum = arr3[length - 1];
long int max = sum;
int index = 1;
for (int i = length - 1; i > 0; i--) {
if (arr3[i] == arr3[i - 1]) {
index *= 10;
sum += arr3[i - 1] * index;
if (max < sum) {
max = sum;
}
} else {
index = 1;
sum = arr3[i -1];
if (max < sum) {
max = sum;
}
}
}
printf("max = %ld\n", max);
return 0;
}
- 5. 04 C语言 数组,字符串
- C语言04 -- 一维数组,字符串
- 关于C语言字符串数组
- C语言字符串、字符数组
- C语言--数组与字符串
- c语言数组与字符串
- C语言之数组、字符串
- C语言------数组和字符串
- C语言 数组和字符串
- C语言之字符串,数组
- c语言 数组和字符串
- C语言 数组与字符串
- c 语言字符串数组排序
- C语言中字符串数组
- C语言:操作字符串数组
- C语言逆转字符串数组
- C语言---数组,字符串数组,冒泡排序
- C语言--关于二维数组,字符串数组,多维数组
- 4. 29 C语言 程序结构-初级
- 数据库 删除表原理
- xhost unable to open display解决方法
- 4. 30 C语言 程序结构-高级
- C#动态获取类的属性名和值
- 5. 04 C语言 数组,字符串
- iOS集成第三方登录的使用
- 5. 05 C语言 函数
- C#中的访问修饰符 部分类 密封类 序列化 反序列化
- 程序员英语学习
- android加固apk包,并防止apk被二次打包
- 5. 07 C语言 结构体
- C++中的string 类 简单介绍
- 程序员必读书单 1.0