null编程练习编程练习1、输入任一年份,判断该年是否闰年
#include"stdio.h"
main()
{ int year;
printf("请输入一个年份:");
scanf("%d",&year);
if((year%4==0&&year%100!=0)||(year%400==0))
printf("%d是闰年!\n",year);
else
printf("%d不是闰年!\n",year);
} 编程练习编程练习2、输入一个字符,判断它是否大写字母,如果是,将它转换成小写字母,如果不是不转换,然后输出最后的字符。
#include"stdio.h"
main()
{ char ch;
scanf("%c",&ch);
ch=(ch>='A'&& ch<='Z')?(ch+32):ch;
printf("%c\n",ch);
}
编程练习编程练习3、判断m是否素数
#include”stdio.h”
#include”math.h”
main()
{int m,i,k;
scanf(“%d”,&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)printf(“%d是素数”,m);
else printf(“%d不是素数”,m);
}
求100~200间的全部素数#include"stdio.h"
#include"math.h"
main()
{ int m,i,k,n=0;
for(m=101;m<=200;m++)
{k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)
{printf("%d ",m);n=n+1;}
if(n%10==0)
printf("\n");
}
}
编程练习编程练习4、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个,到了第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。#include"stdio.h"
main()
{ int t1,t2,day;
t2=1;
for(day=9;day>=1;day--)
{ t1=(t2+1)*2;
t2=t1;
}
printf("%d\n",t1);
}
null第六章 数 组
数组是内存中的一种数据集合,用于存贮较大量的相同类型的数据元素,在程序中数组有一个名字,并通过下标访问数组的某个元素。
6.1 一维数组
一、一维数组的定义
语法
:元素类型名 数组名[元素个数];
如:int a[5],b[8];double y[15],c[20];
#define N 10
long pos[N];int c[N+1];/*正确*/
例如:int n=10,a[n];/*错误*/只能是整型常量表达式 int n;
scanf(“%d”,&n);
int a[n];null
二、一维数组元素的引用
语法格式:数组名[下标表达式]
如:若有定义 int a[4]; 则元素a[0],a[1],a[2],a[3]是数组的有效元素。a[4]并非有效元素,属于下标超范围。下标超范围会引起死机或程序错误,但C语言不自动检查下标是否超范围,故必须在设计阶段从程序逻辑上保证下标不超范围。必须是整型常量或整型表达式数组下标固定从0开始编号6.1 一维数组int a[10]; /*定义数组长度为10*/
t=a[6]; /*引用a数组中序号为6的元素,此时
6不代表数组元素*/
a[0]=a[5]+a[7]-a[2*3]
数组元素的引用数组元素的引用#include “stdio.h”
main()
{ int i,a[10];
for(i=0;i<=9;i++)
a[i]=i;
for(i=9;i>=0;i--)
printf(“%d”,a[i]);
printf(“/n”);
}null一维数组的元素在内存中是连续存放的。
例如:若有int a[10];,则a数组中包含的10个元素在内存中的存储情况如下:三、一维数组存贮空间分析:如: double a[5]; 该数组共5个元素,存贮5个double型实数,共占用40字节存贮空间。6.1 一维数组null四、一维数组的初始化1、在定义数组时对数组元素赋予初值。例如:
int a[10]={0,1,2,3,4,5,6,7,8,9};
2、可以只给一部分元素赋值。例如:
int a[10]={0,1,2,3,4};
3、如果想使一个数组中全部元素值为0,可以写成:
int a[10]={0,0,0,0,0,0,0,0,0,0};
或 int a[10]={0};
4、对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:
int a[5]={1,2,3,4,5};或 int a[]={1,2,3,4,5};
但是若数组长度与提供初值的个数不相同,则数组长度不能省略。
int a[10]={1,2,3,4,5};只初始前5个元素,后5个元素为07.1 一维数组null例6.1 将数值5,3,4,5,3,6,6,4,3,2,9赋予数组a并求其和。
程序: #include
main()
{int a[]={5,3,4,5,3,6,6,4,3,2,9};
int sum,i;
sum=0;
for (i=0;i<=10;i++)
sum+=a[i];
printf("sum=%d\n",sum);
} 6.1.3 一维数组应用举例null例6.2 计算5个学生成绩的平均分,并计算每个学生成绩与平均分之差,最后将全部成绩打印出来。6.1.3 一维数组应用举例# include "stdio.h"
main()
{ int i,j=0,a[5];
printf("输入成绩=");
for(i=0;i<5;i++)
{ scanf("%d",&a[i]);
j=j+a[i];
}
j=j/5;
printf("平均成绩=%d\n",j);
printf("成绩 与平均成绩之差\n");
for(i=0;i<5;i++)
printf("%d %d\n",a[i],a[i]-j);
}经典例题经典例题1.以下能正确定义一维数组的选项是________。
A)int num[]; B)#define N 100;
int num[N];
C)int num[0…100] D)int N=100;
int num[N];
正确答案:B(知识点:一维数组的定义)
2.假设int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占的字节数是________。
A)3 B)6 C)10 D)20
正确答案:D(知识点:一维数组的定义)
null3.以下程序运行后的输出结果是________。
main()
{ int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;
printf("%d ",n[i]);
}
正确答案:1 3 7 15(知识点:一维数组的定义与引用)
null
一、二维数组的定义
语法格式:
元素类型名 数组名[下标1维数][下标2维数];
如:int a[5][8]; /*5行8列整型数组*/
又如:#define N 6
long m[N][N]; /*N行N列长整型数组*/
行数列数6.2 二维数组null二、二维数组元素的引用
语法格式:
数组名[行下标][列下标]
其中,下标表达式必须是整型表达式;下标固定从0开始编号。
如: 若有定义int a[3][4];
则左上角元素下标为a[0][0],
右下角元素下标为a[2][3]。
C语言不自动检查下标是否超范围,故必须在设计阶段从程序逻辑上保证下标不超范围。null例如,若有int a[2][3];,则a数组中包含的二行三列共6个元素在内存中的存储情况如下:
三、二维数组存贮空间分析:null初始化方法:
int a[2][3]={{1,2,3},{4,5,6}};
注意:用内层{}表示行,每行可视作一个一维
数组,并按行初始化。
2.对所有元素初始化可以缺省行数和内层{}
如:上述初始化可写为
int a[][3]={{1,2,3},{4,5,6}}或
int a[][3]={1,2,3,4,5,6}; 或
int a[2][3]={1,2,3,4,5,6};6.2.2、二维数组的初始化null(3)每行可以只对前几列元素进行初始化,余下的元素初值自动为0。
如: int a[][3]={{1},{2,3}};则
矩阵元素初值如下:(4)指定行数时,可以只初始化前面几行,余下各行元素初值自动为0.
如: int a[4][3]={{1},{2,3,4},{5,6}};
则矩阵初值如下:1 0 0
2 3 01 0 0
2 3 4
5 6 0
0 0 06.2.2、二维数组的初始化null例6.4 将下表存入数组a,按行求元素之和并显示。
25 13 32
10 54 536.2.3 应用举例
程序:
#include
main()
{
int a[2][4],i;
a[0][0]=25;a[0][1]=13;a[0][2]=32;
a[1][0]=10;a[1][1]=54;a[1][2]=53;
for (i=0;i<=1;i++)
a[i][3]=a[i][0]+a[i][1]+a[i][2];
for (i=0;i<=1;i++)
printf("%d %d %d %d \n",a[i][0],a[i][1],a[i][2],a[i][3]);
}null例6.5:输入一个三行四列的矩阵A,计算其转
置矩阵B,输出矩阵B。b[j][i]=a[i][j]6.2.3 应用举例
null6.2.3 应用举例
#include
main()
{ int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j;
printf("array a:\n");
for (i=0;i<=1;i++)
{ for (j=0;j<=2;j++)
{ printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("array b:\n");
for (i=0;i<=2;i++)
{ for (j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
} 程序:null例6.6 编写一程序,求全班40个学生每个学生三门功课的平均成绩。 1.定义数据结构
①40个学生3门功课的存放:int a[40][3];
②每个学生三门功课的平均成绩存放:int v[40];
2.输入学生成绩
3.求每个学生平均成绩:
v[i]= (a[i][0]+a[i][1]+a[i][2])/3,
4.输出结果.分析:6.2.3 应用举例
null程序:
#include
main()
{ int a[40][3],s,i,j,v[40];
for(i=0;i<40;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<40;i++)
{ s=0;
for(j=0;j<3;j++)
s=s+a[i][j];
v[i]=s/3;
}
for(i=0;i<40;i++)
printf("%d %d\n",i,v[i]);
} null例6.7 在N行M列的二维数组x中,找出数组的最大值以及此最大值所在的行、列下标。 分析:1.定义二维数组:int x[N][M];
定义变量 max:存放最大值
line:存放最大值行号
col:存放最大值列号
2.找最大值:max初始值= x[0][0], line及col的初始值为0, 再将二维数组x中的元素逐个与max进行比较,确定新的max和line及col的值,直到二维数组x中的元素全部处理完。
3.输出数据6.2.3 应用举例
null程序运行结果如下:
input array numbers:
12 31 40
20 67 80
max=80 line=1 col=2程序:
#define N 2
#define M 3
#include "stdio.h"
main()
{
int i,j,x[N][M],max,line,col;
printf("input array numbers:\n");
for(i=0;ia[i])_____;
}
Prntf(“max=%d,min=%d\n”,max,min);
}
运行结果:
Max=38,min=4
答案:min=a[i]null以下程序运行后输出的结果是:
Main()
{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9};
For(i=0;i<3;i++)
For(j=i+1;j<3;j++)
a[i][j]=0;
For(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf(“%d”,a[i][j]);
Printf(“\n”);
}A 1 2 3 B 1 0 0 C 1 2 3 D 1 0 0
0 5 6 2 5 0 4 5 6 4 5 0
0 0 9 3 6 9 7 8 9 7 8 9答案:Dnull以下函数rotate的功能是:将a所指的N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。#define N 4
Void rotade(int a[][N],int b[][N])
{int i,j;
for(i=0;i