鸡鸭同笼问题
#include<stdio.h>
int main(){
int n=0,m=0;
printf("请输入有几个头,几条腿\n");
scanf("%d %d",&n,&m);
for(int i=0;i<=n;i++){
int j=n-i;
if(2*i+4*j==m){
printf("鸡有%d只,鸭有%d只\n",i,j);
}
}
return 0;
}
数组
1.1引入目的:
对于之前所学习的内容,都是对单个数据进行操作,只需要定义单个变量,然后对该变量进行处理即可但是,如果对于庞大的数据而言,需要定义很多变量来解决,为了批量处理数据,我们引入了数组所谓数组,就是多个变量的集合,
1.2数组的概念及定义:
1.2.1 定义:
数组是连续存储多个相同数据类型的变量的集合,数组于构造数据类型
1.2.2 定义格式:
数据类型 数据名[数据长度]
int score[40];
定义了一个长度为40的整型数组score
1.2.3 注意:
连续存储,说明这多个变量的地址是连续的
相同数据类型,说明同一个数组中的每个变量的数据类型都是一样的
变量的集合:说明数组定义时不能为空
1.数据类型:可以是基本数据类型,也可以是构造数据类型,指针类型或者空类型
2.数组名:标识符,要符合标识符的命名规则
1)只能由字母、数字、下划线组成
2)不能以数字开头
3)不能使用关键字
4)严格区分大小写
5)做到见名知意
3.中括号:表示这是数组的标识,正在定义一个数组
4.常量:表示定义的数组长度,或者说是定义的变量的个数
1)不能为0
2)不能为小数
3)不能空着
1.2.4 数组的定义:
#include<stdio.h>
int main(){
int arr[5];//整形数组
char brr[5];//字符数组
double crr[5];//小数数组
printf("arr[0]=%d brr[0]=%c brr[0]=%lf\n",arr[0],brr[0],crr[0]);
//arr[0]=610876056 brr[0]={ brr[0]=0.000000 随机值
int drr[5]={1,2,3,4,5};//全部初始化
int err[5]={11,22,33};//部分初始化
int frr[]={111,222,333,444,555};//特殊初始化
printf("sizeof(frr)=%ld\n",sizeof(frr));//20
printf("len of frr=%ld\n",sizeof(frr)/sizeof(frr[0]));//5
return 0;
}
对于没有赋值的数组,他的值是随机的
1.2.5 数组的初始化:
所谓初始化,就是在给变量申请空间时,顺便给定初始值;初始化时,用一对花括号将元素的值包裹起来,多个值之间使用逗号隔开
对于数组的初始化而言,有三种方式
1.全部初始化:数组的长度为多少,就初始化几个元素的值
int arr[5]={1,2,3,4,5};
arr[0]=1, arr[1]=2, arr[2]=3, arr[3]=4, arr[4]=5
2.部分初始化:初始化元素的个数,小于数组的长度,此时,默认从前往后初始化,没有初始化的元素用0补齐
int arr[5]={1,2,3};
arr[0]=1, arr[1]=2, arr[2]=3, arr[3]=0, arr[4]=0
3.特殊初始化:在定义数组并初始化时,可以不用给定数组的长度,数组的长度由初始化元素个数而定
int arr[]={1,2,3};
arr[0]=1, arr[1]=2, arr[2]=3
1.3对数组元素的常规操作
1.3.1 输入输出
所谓对数组进行输入输出,其实就是对任意一个元素进行重复性输入输出,重复性的动作我们使用循环解决
注意:C语言不允许对除字符数组外的其他数组整体进行输入输出,只能找到数组元素,对单个元素进行操作
#include <stdio.h>
int main(){
int arr[5]={0};
for(int i=0;i<5;i++){
printf("请输入第%d个数:",i+1);
scanf("%d",&arr[i]);
}
return 0;
}
1.3.2 求和值,均值
所谓求和值,就是将所有任意值进行累加,需要定义一个变量存储总和但是要求,在使用之前,必须清零
#include <stdio.h>
int main(){
//数组的输入
define num=10;
int score[num]={0};
for(int i=0;i<num;i++){
printf("请输入第%d个数:",i+1);
scanf("%d",&score[i]);
}
//求和值,均值
int sum=0;
double avg=0;
for(int i=0;i<num;i++){
sum+=score[i];
}
avg=1.0*sum/num;
printf("总和为:%d,平均值为:%.2lf\n",sum,avg);
return 0;
}
1.3.3 求最值
#include <stdio.h>
int main(){
//数组的输入
define num=10;
int score[num]={0};
for(int i=0;i<num;i++){
printf("请输入第%d个数:",i+1);
scanf("%d",&score[i]);
}
//求和值,均值
int sum=0;
double avg=0;
for(int i=0;i<num;i++){
sum+=score[i];
}
avg=1.0*sum/num;
printf("总和为:%d,平均值为:%.2lf\n",sum,avg);
//求最值
int max=0;
int maxi=0;//下标
max=score[0];
for(int i=1;i<num;i++){
if(max<score[i]){
max=score[i];
maxi=i+1;//记录下标
}
}
return 0;
}
1.3.4 查找
#include <stdio.h>
int main(){
//数组的输入
define num=10;
int score[num]={0};
for(int i=0;i<num;i++){
printf("请输入第%d位成绩:",i+1);
scanf("%d",&score[i]);
}
//求和值,均值
int sum=0;
double avg=0;
for(int i=0;i<num;i++){
sum+=score[i];
}
avg=1.0*sum/num;
printf("成绩总和为:%d,平均成绩为:%.2lf\n",sum,avg);
//求最值
int max=0;
int maxi=0;//下标
max=score[0];
for(int i=1;i<num;i++){
if(max<score[i]){
max=score[i];
maxi=i+1;//记录下标
}
}
printf("成绩最高的是%d位,成绩为%d\n",maxi,max);
//查找
int search=0;
printf("请输入需要查找的成绩\n");
scanf("%d",&search);
for(int i=0;i<max;i++){
if(search==score[i]){
printf("您要查找的成绩是第%d位",i+1);
break;
}
if(i==max){
printf("查找失败\n");
}
}