数组(array)
-
一维数组
- 定义方式
类型说明符 数组名[常量表达式];
例如:
int a[5];它表示定义了一个整型数组,数组名为 a,定义的数组称为数组 a。数组名 a 除了表示该数组之外,还表示该数组的首地址
-
初始化
- 完全初始化
int a[5] = {1, 2, 3, 4, 5};通过将数组元素的初值依次放在一对花括号中,如此初始化之后,a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5,即从左到右依次赋给每个元素。需要注意的是,初始化时各元素间是用逗号隔开的,不是用分号。
- 不完全初始化
int a[5] = {1, 2};定义的数组 a 有 5 个元素,但花括号内只提供两个初值,这表示只给前面两个元素 a[0]、a[1] 初始化,而后面三个元素都没有被初始化。不完全初始化时,没有被初始化的元素自动为 0。
- 引用
通过 数组名[下标] 引用
-
二维数组
- 二维数组定义
类型说明符 数组名[ 常量表达式][ 常量表达式];
比如:
int a[3][4];表示定义了一个 3×4,即 3 行 4 列总共有 12 个元素的数组 a。这 12 个元素的名字依次是:a[0][0]、a[0][1]、a[0][2]、a[0][3];a[1][0]、a[1][1]、a[1][2]、a[1][3];a[2][0]、a[2][1]、a[2][2]、a[2][3]。
- 初始化
和一维数组基本相同 - 引用
数组名[下标][下标]
函数(function)
-
定义:指一定的功能模块
-
作用:使代码模块化,提高可读性,方便修改。
-
基本定义格式:
函数类型 函数名(形式参数)
{
函数体(变量声明,函数表达式)
}- 形式参数
- 局部变量
- 一个或多个或者没有
- 形式参数
-
调用函数
- 基本格式
函数类型 函数名(实际参数);
注意:实际参数和形式参数的类型一致(一一对应),个数相同。
- 基本格式
-
函数返回
通过 return 返回,只能返回一个量 -
函数使用方法
- 通过指针
通过指针用来改变主函数变量的值
或用指针传递信息 - 递归
通过函数的自我调用实现一定功能
简单说程序调用自身的编程技巧叫递归。递归的思想是把一个大型复杂问题层层转化为一个与原问题规模更小的问题,问题被拆解成子问题后,递归调用继续进行,直到子问题无需进一步递归就可以解决的地步为止。
使用递归需要避免出现死循环,为了确保递归正确工作,递归程序应该包含2个属性:
- 基本情况(bottom cases),基本情况用于保证程序调用及时返回,不在继续递归,保证了程序可终止。
- 递推关系(recurrentce relation),可将所有其他情况拆分到基本案例。
- 通过指针
示例
变量的作用域与存储方式
题目解答
2000
#include <stdio.h>
void swap(char*p1,char*p2);
int main(void)
{
char c1,c2,c3,c;
char*p1,*p2,*p3;
scanf("%c%c%c",&c1,&c2,&c3);
swap(&c1,&c2);
swap(&c1,&c3);
swap(&c2,&c3);
printf("%c %c %c",c1,c2,c3);
}
void swap(char*p1,char*p2)
{
char c;
if(*p1>*p2){
c = *p2;
*p2 = *p1;
*p1 = c;
}
}
结果
2001
#include <stdio.h>
#include <math.h>
int main(void)
{
float x1,x2,y1,y2,a;
scanf("%f%f%f%f",&x1,&y1,&x2,&y2);
a = sqrtf((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("%.2f",a);
return 0;
}
结果
2002
#include <stdio.h>
#define PI 3.1415926;
int main(void)
{
int r;
float m,Q;
Q = 4;
scanf("%d",&r);
m = r*r*r*(Q/3)*PI;
printf("%.3f",m);
}
结果
2003
#include <stdio.h>
#include <math.h>
int main(void)
{
float a;
scanf("%f",&a);
a = sqrt(a*a);
printf("%.2f",a);
return 0;
}
结果
2004
#include <stdio.h>
int main(void)
{
while(1)
{
int x;
scanf("%d",&x);
if((x<=100)&&(x>=90))
printf("A\n");
else if((x<=89)&&(x>=80))
printf("B\n");
else if((x<=79)&&(x>=70))
printf("C\n");
else if((x<=69)&&(x>=60))
printf("D\n");
else if((x>=0)&&(x<=59))
printf("E\n");
else printf("Score is error!\n");
}
}
结果
2005
#include <stdio.h>
int main(void)
{
int year,month,day,day_all;
bool Logic;
scanf("%d/%d/%d",&year,&month,&day);
Logic = (!((year % 4 == 0 && year%100 == 0)||year%400 == 0));
if(month == 1)
day_all = day;
else if(month == 2)
day_all = 31+day;
else if(month == 3)
day_all = 31+28+day;
else if(month == 4)
day_all = 31+28+31+day;
else if(month == 5)
day_all = 31+28+31+30+day;
else if(month == 6)
day_all = 31+28+31+30+31+day;
else if(month == 7)
day_all = 31+28+31+30+31+30+day;
else if(month == 8)
day_all = 31+28+31+30+31+30+31+day;
else if(month == 9)
day_all = 31+28+31+30+31+30+31+31+day;
else if(month == 10)
day_all = 31+28+31+30+31+30+31+31+30+day;
else if(month == 11)
day_all = 31+28+31+30+31+30+31+31+30+31+day;
else day_all = 31+28+31+30+31+30+31+31+30+31+30+day;
if((month>2)&&(!Logic)){
day_all++;
}
printf("%d",day_all);
return 0;
}
结果
2006
#include <stdio.h>
int main(void)
{
int n,i,x;
int P_uneven;
P_uneven = 1;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&x);
if(x%2 != 0){
P_uneven = P_uneven*x;
}
}
printf("%d",P_uneven);
return 0;
}
结果
2007
#include <stdio.h>
int main(void)
{
int x,y,i;
int sum_even,sum_uneven;
sum_even = sum_uneven = 0;
scanf("%d%d",&x,&y);
for(i=x;i<=y;i++)
{
if(i%2 == 0){
sum_even = sum_even+i*i;
}
else {
sum_uneven =sum_uneven+i*i*i;
}
}
printf("%d %d",sum_even,sum_uneven);
return 0;
}
结果