C语言:数组-
知识点预习:
1、C语言中如何来存储字符串?
C语言中,将字符串变量作为字符数组来处理。
2、什么字符用于标识一个字符串的结束,使用时需要注意什么?两种赋值字符串的形式是否都需要显式加上末端字符?
字符串中的字符逐个存放在数组元素中,以字符 '\0' 作为字符串结束标志。
注意:字符串两端用 " " 括起来赋初值。
系统可以在字符串常量最后自动添加 '\0'
3、如何声明和初始化一维数组,如何来对一维数组进行数据的修改以及访问?
声明一维数组
类型说明符 数组名[常量表达式];
例 int a[10];
引用
数组名[下标]
例 a[0] a[9]
初始化
在声明时初始化
int a[5] = { 0, 1, 2, 3, 4} ;
4、如何声明字符串,字符串存储在什么类型变量中,字符串和数组关系如何?
5、如何声明和初始化二维数组,如何来对二维数组进行数据的修改以及访问?
类型说明符 数组名[常量表达式][常量表达式];
例 int a[3][4];
6、熟悉冒泡排序的实现原理 (134页)
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
冒泡排序算法的运作如下:(从后往前)
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include<stdio.h> #defineSIZE8
voidbubble_sort(inta[],intn);
voidbubble_sort(inta[],intn)//n为数组a的元素个数 { inti,j,temp; for(j=0;j<n-1;j++) //n-1次循环 for(i=0;i<n-1-j;i++) //每次循环 n - 1 - j 次比较 { if(a[i]>a[i+1])//数组元素大小按升序排列 { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } int main() { intnumber[SIZE]={95,45,15,78,84,51,24,12}; inti; bubble_sort(number,SIZE); for(i=0;i<SIZE;i++) { printf("%d",number[i]); } printf("\n"); } |
7、gets()、puts()函数的使用;
146page
习题:
1、输入一些数据放入数组,然后找到其中的最大值和最小值。
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[60];
int i, j, n , max, min;
printf("Input some numbers: ");
for (i = 0; ; i++) {
scanf("%d", &a[i]);
n++;
if (getchar() == '\n') {
break;
}
}
max = a[0];
min = a[0];
for (j = 1; j < n; j++) {
if (max < a[j]) {
max = a[j];
}
if (min > a[j]) {
min = a[j];
}
}
printf("max = %d\n", max);
printf("min = %d\n", min);
return 0;
}
2、使用数组实现冒泡排序,要求从大到小排列。
//Exersice 2
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[60];
int i, j, n , temp;
printf("Input some numbers: ");
for (i = 0; ; i++) {
scanf("%d", &a[i]);
n++;
if (getchar() == '\n') {
break;
}
}
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i ; j++) {
if (a[j] < a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
}
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
3、使用二维数组统计一个学习小组的各科平均分以及最高分。
语文 数学 英语
学生0 98 84 55
学生1 67 70 92
学生2 88 91 74
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[3][3] = {{98,84,55},{67,70,92},{88,91,74}};
int i;
int ChineseHighSore = 0;
int MathHighSore = 0;
int EnglishHighSore = 0;
int Sum_Chinese = 0;
int Sum_Math = 0;
int Sum_English = 0;
float ChineseAverageSore = 0;
float MathAverageSore = 0;
float EnglishAverageSore = 0;
for (i = 0; i < 3; i++) {
Sum_Chinese += a[i][0];
Sum_Math += a[i][1];
Sum_English += a[i][2];
if (ChineseHighSore < a[i][0]) {
ChineseHighSore = a[i][0];
}
if (MathHighSore < a[i][1]) {
MathHighSore = a[i][1];
}
if (EnglishHighSore < a[i][2]) {
EnglishHighSore = a[i][2];
}
}
ChineseAverageSore = Sum_Chinese / 3.0 ;
MathAverageSore = Sum_Math /3.0 ;
EnglishAverageSore = Sum_English /3.0 ;
printf("ChineseAverageSore = %.2f\n", ChineseAverageSore);
printf("MathAverageSore = %.2f\n", MathAverageSore);
printf("EnglishAverageSore = %.2f\n", EnglishAverageSore);
printf("\n");
printf("ChineseHighSore = %d\n", ChineseHighSore);
printf("MathHighSore = %d\n", MathHighSore);
printf("EnglishHighSore = %d\n", EnglishHighSore);
printf("\n");
return 0;
}
4、输入一些书籍名称,然后排序整理,按照字母顺序输出。
#include<stdio.h>
#include<string.h>
int main(int argc, const char * argv[])
{
char book[5][80];
char temp[80];
int i,j;
printf("Please input 5 book names:\n");
for (i = 0;i < 5;i++)
{
fgets(book[i],40,stdin);
}
for (i = 0;i < 5;i++)
{
for (j = i + 1 ; j < 5; j++)
{
if (strcmp(book[i],book[j]) > 0)
{
strcpy(temp,book[i]);
strcpy(book[i],book[j]);
strcpy(book[j],temp);
}
}
}
printf("The strings:\n");
for (i = 0; i < 5; i++)
{
puts(book[i]);
}
return 0;
}
5、编写一个C程序,用于处理用户购物单据,思路如下:
a) 首先定义一个数组,存储5个价格,例如:3.32,4.35,1.99,3.10,10.87。
b) 然后用户输入各个商品的购买数量,存入一个数组。
c) 最终将各个商品的金额存储到另外一个数组中。然后打印如下清单以及总金额:
商品价格 商品数量 金额
----------------------
3.32 10 33.2
……
----------------------
总金额:xxx
#include<stdio.h>
int main(int argc, const char * argv[])
{
float price[5] = {3.32,4.35,1.99,3.10,10.87};
int quantity[5];
float sum_money[5];
float total = 0.0;
int i, j;
printf("Milk = $3.32 , Beef = $4.35\n");
printf("Bread = $1.99, Fruit = $3.10, Vodka = $10.87\n");
printf("Input quantity of each product: ");
for (i = 0; i < 5; i++) {
scanf("%d", &quantity[i]);
}
for (i = 0; i < 5; i++) {
sum_money[i] = price[i] * quantity[i];
}
for (j = 0; j < 5; j++) {
total += sum_money[j];
}
printf(" Welcome! \n");
printf("\n");
printf("Price Quantity Amount\n");
printf("---------------------------\n");
for (int j = 0; j < 5; j++) {
printf("%5.2f %7d %12.2f\n" ,
price[j], quantity[j], sum_money[j]);
}
printf("---------------------------\n");
printf(" Total: %3.2f\n", total);
return 0;
}
6、编写一个程序,将两个字符串连接起来,不要使用strcat函数;
#include <stdio.h>
int main(int argc, const char * argv[]) {
char s1[100] = "232w32e4dsddjhwqvdqewdqwdscz3422";
char s2[100] = "w2324ee3wsdsdsedajdbw";
int i, j;
while(s1[i] != '\0')
i++; //length of s1
j = 0;
while(s2[j] != '\0')
s1[i++] = s2[j++]; //copy s2 behind s1
s1[i] = '\0'; //now "i" refers to total length of s1 and s2
printf("%s\n", s1); //make s1 stop
return 0;
}