C语言学习-翁凯(第八章笔记)

C语言学习-翁凯(第八章笔记)

第八章

8.1.1 初试数组

  • 之前讨论过
    • 如何写一个程序计算用户输入的数字的平均数?
int x;
double sum=0;
int cnt=0;
scanf("%d",&x);
while(x!=-1){
   
    sum+=x;
    cnt++;
    scanf("%d",&x);
}
if(cnt>0){
   
    printf("%f\n",sum/cnt);
}
  • 不需要记录输入的每一个数

  • 如何写一个程序,计算用户输入的数字的平均数,并输出所有大于平均数的数?

如何记录很多数?
  • int num1,num2,num3…?
数组
  • int number[100];
  • scanf("%d",&number[i]);
int x;
	double sum=0;
	int cnt=0;
	int number[100]; 
	scanf("%d",&x);
	while(x!=-1){
   
		number[cnt]=x;
		/*
		int i;
		for(i=0;i<=cnt;i++){
				printf("%d ",number[i]);
			}
			printf("\n"); 
		*/
		
		sum+=x;
		cnt++;
		scanf("%d",&x);
	}
	if(cnt>0){
   
		printf("%f\n",sum/cnt);
		int i;
		for(i=0;i<cnt;i++){
   
			if(number[i]>sum/cnt){
   
				printf("%d\n",number[i]);
			}
		}
	}
	
	return 0;

在这里插入图片描述

(这个程序存在安全隐患,是什么?)

(数组定义为100,但是未讨论cnt是否大于100)

8.1.2 数组的使用:如何定义和使用数组,数组的下标和下标的范围

定义数组
  • <类型>变量名称[元素数量];
    • int grades[100];
    • double weight[20];
  • 元素数量必须是整数
  • C99之前:元素数量必须是编译时刻确定的字面量
数组
  • 是一种容器(放东西的东西),特点是:
    • 其中所有的元素具有相同的数据类型;
    • 一旦创建,不能改变大小
    • *(数组中的元素在内存中是连续依次排列的)
int a[10]
  • 一个int的数组
  • 10个单元:a[0],a[1],…a[9]

在这里插入图片描述

  • 每个单元就是一个int类型的变量
  • 可以出现在赋值的左边或右边:
    • a[2]=a[1]+6;
  • *在赋值左边的叫做左值
数组的单元
  • 数组的每个单元就是数组类型的一个变量
  • 使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数:
    • grades[0]
    • grades[99]
    • average[5]
有效的下标范围
  • 编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写
  • 一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃
    • segmentation fault
  • 但是也可能运气好,没造成严重的后果
  • 所以这是程序员的责任来保证程序只使用有效的下标值:[0,数组的大小-1]
int x;
	double sum=0;
	int cnt=0;
	int number[100]; 
	scanf("%d",&x);
	while(x!=-1){
   
		number[cnt]=x;
		/*
		int i;
		for(i=0;i<=cnt;i++){
				printf("%d ",number[i]);
			}
			printf("\n"); 
		*/
		
		sum+=x;
		cnt++;
		scanf("%d",&x);
	}
	if(cnt>0){
   
		printf("%f\n",sum/cnt);
		int i;
		for(i=0;i<cnt;i++){
   
			if(number[i]>sum/cnt){
   
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾叶King

非常感谢您的支持和认同!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值