一维数组
数组的定义:
方式一:int a[10]; // 事先自己写明
方式二:int n; scanf("%d",&n); int a[n]; // 用户输入
简单运用:
对10个数组元素依次赋值为0,1,2...,9,要求按逆序输出。
#include<stdio.h>
int main(){
int i,a[10];
for(i = 0;i <= 9;i++){
a[i] = i; // 对数组元素 a[0]-a[9]赋值
}
for(i = 9;i >= 0;i--){
printf("%d ",a[i]); // 输出 a[9]-a[0]共10个元素
}
printf("\n");
return 0;
}
运用于斐波那契数列。
#include<stdio.h>
int main(){
int i;
int f[20] = {1,1}; // 对最前面的2个元素赋值均为 1
for(i = 2;i < 20;i++){
f[i] = f[i-2]+f[i-1];
}
for(i = 0;i < 20;i++){
if (i%5 == 0) // 一行输出 5个数
printf("\n");
printf("%10d ",f[i]); // 对齐格式
}
printf("\n");
return 0;
}
输入10个数,运用冒泡法排序输出。
#include<stdio.h>
int main(){
int a[10];
int i,j,t;
printf("input 10 numbers : \n");
for(i = 0;i < 9;i++){
scanf("%d",&a[i]);
}
printf("\n");
for(j = 0;j < 9;j++) // 重点!!!
for(i = 0;i < 9-j;i++)
if(a[i] > a[i+1]){
t = a[i];
a[i] = a[i+1];
a[i+1] = t;
}
printf("the sorted numbers : \n");
for(i = 0;i < 10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
二维数组
数组的定义:
方法一: float a[3][4],b[2][3];
方法二: int a[3][4] = {{1,2,3,4},{5,6,7,8},{5,6,3,4}};
方法三: int a[3][4] = {{1},{5},{6}}; // 未被赋值的都为0
简单运用:
将2行3列矩阵a的数,存放到3行2列的矩阵b中。
#include<stdio.h>
int main(){
int a[2][3] = {{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n"); // 输出矩阵 a
for(i = 0;i < 2;i++){
for(j = 0;j < 3;j++){
printf("%3d ",a[i][j]);
b[j][i] = a[i][j];
}
printf("\n");
}
printf("\n");
printf("array b:\n"); // 输出矩阵 b
for(i = 0;i < 3;i++){
for(j = 0;j < 2;j++){
printf("%3d ",b[i][j]);
}
printf("\n");
}
return 0;
}
存在3×4的矩阵a,找到矩阵中最大的数,并确定它的行和列。
打擂台算法
#include<stdio.h>
int main(){
int i,j,row=0,colum=0,max;
int a[3][4] = {{1,2,3,4},{4,5,8,9},{-13,-5,3,10}}; // 赋初值
max = a[0][0]; // 先将 a[0][0] 当作最大
for(i = 0;i < 3;i++){
for(j = 0;j < 4;j++){
if(a[i][j] > max){
max = a[i][j];
row = i + 1; // 行数从 0 开始,所以所在行 + 1
colum = j + 1;
}
}
}
printf("max = %d\nrow = %d\ncolum = %d\n",max,row,colum);
return 0;
}
字符数组
数组的定义:
方法一: char c[10];
方法二: c[0] = M;c[1] = E;
方法三: char c[2] = {'M','E'};
简单运用:
输出一个菱形图。
#include<stdio.h>
int main(){
char diamond[][5] = {{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
int i,j;
for(i = 0;i < 5;i++){
for(j = 0;j < 5;j++){
printf("%c",diamond[i][j]);
}
printf("\n");
}
return 0;
}
输入一行字符,统计其中有多少个单词。
#include<stdio.h>
int main(){
char string[50];
int i,num = 0,word = 0;
char c;
gets(string);
for(i = 0;(c = string[i]) != '\0';i++){ // 只要不是结束符‘\0’,就继续执行循环
if(c == ' ') word = 0; // 如果是空格字符,使word置为0
else if(word == 0){ // 如果不是空格字符,且word置为了0
word = 1;
num++;
}
}
printf("There are %d words in this line.\n",num);
return 0;
}
输入三个字符串,找到其中最大的一个。(在英文字典位置靠后的字母大,且小写字母比大写字母大)
#include<stdio.h>
#include<string.h>
int main(){
char str[3][20];
char string[20];
int i;
for(i = 0;i < 3;i++){
gets(str[i]); //读入 3 个字符串,分别给str[0],str[1],str[2]
}
if(strcmp(str[0],str[1]) > 0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
printf("%s",string);
if(strcmp(str[2],string) > 0)
strcpy(string,str[2]);
printf("\nthe largest string is :\n%s\n",string);
return 0;
}
#include<string.h>常用函数
puts/gets ---> 输出或输入一个字符
strcat ---> 连接字符
strcat(str1,str2);
strcpy ---> 字符串复制
strcpy(str2,str1); // 将str1复制到str2内
strcmp ---> 字符串比较
strcmp(str1,str2)>0; // str2>str1 ASCⅡ
strlen ---> 字符串长度
strlen("China");
strlwr ---> 字符串转小写
strupr ---> 字符串转大写