- 杭电oj运行成功截图
笔记
数组
- 用数组定义变量很方便
- 保存大量同类型数据
- 为了模拟显示世界
- 对原始数组用的不多 一维数组的使用
- 对多个变量连续分配空间
- 所有变量数据类型必须相同
- 所有元素所占字节必须相同
- 不完全初始化剩下的值为零
- 不初始化是垃圾值
- 只有在定义时的数字为个数,在用时为下标
- 只有在定义数组时才能对整体赋值,其他的赋值都是错误的
- 数组名是数组第一个元素的地址
int main()
{
int a[5]={1,2,3,4,5};
int i;
scanf("%d",&a[0]);
printf("%d\n",a[0]);
scanf("%d",&a[3]);
printf("%d\n",a[3]);
for (i=0;i<5;i++)
printf("%d",a[i]);
return 0;
}
int main()
{
int a[7]={1,2,3,4,5,6,7};
int i,j;
int t;
i=0;
j=6;
while(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
for(i=0;i<7;i++)
printf("%d\n",a[i]);
return 0;
}
void max(int i,int j)
{
if(i>j)
printf("%d\n",i);
else
printf("%d\n",j);
}
int main()
{
int a,b,c,d,e,f;
a=1;
b=2;
c=3;
d=4;
e=5;
f=6;
max(a,b);
max(c,d);
max(e,f);
return 0;
}
- 可以解决大量重复性问题,避免重复性操作
- 有利于程序的模块化 什么是函数
- 能完成特定功能的独立单元
- 能都接受数据
- 能够对接受的数据进行处理
- 能够贱数据处理的函数返回 如何定义函数
- 函数定义的本质是纤细表述函数之所以能够实现某种特定功能的方法
- 函数返回值的类型也称为函数的类型,因为如果函数名前的返回值类型和函数执行体重的return类型不同,则组中函数返回值得类型以函数明前的返回值类型为准 return和break的区别
- return终止被调函数,向主调函数返回表达是的值
- 如果表达式为空,则值终止函数,不想背调函数返回任何值
- break是用来终止循环和switch的 函数的分类
- 有参函数
- 无参函数
- 有返回值函数和吴返回值函数
- 库函数和用户自定义函数
- 普通函数和主函数
- 主函数是函数的入口,也是函数的出口 函数的声明
void f(void);
int main()
{
f();
return 0;
}
void f(void)
{
printf("哈哈\n");
}
- 如果函数的调用写在函数定义的前面,则必须加函数前置声明
- 告诉编译器即将可能出现若干个字母代表一个函数
- 告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值得具体情况
- 函数声明是一个语句,末尾加分号
- 对胡函数的声明是通过#include<文件名.h>实现
- 形参和实参
- 个数相同,位置一一对应,数据类型相互兼容 如何在开发中合理的设计函数
- 一个函数尽量独立,单一
- 多学习,多模仿牛人代码
- 函数是C语言的基本单位,类是JAVA,C++的基本单位
- 递归
- 自己调用自己 - 变量的作用于和存储方式
- 按作用域分全局变量和局部变量 按变量的存储方式分静态变量和自动变量和寄存器变量
- 局部变量:在一个函数内部定义的变量或函数的形参
- 全局变量使用范围:从变量定义开始到整个程序执行结束
杭电Oj作业
- 第一题源代码
int main(){
char a,b,c;
char t;
while(scanf("%c%c%c",&a,&b,&c)!=EOF){
getchar();
if(a>b){
t=a;
a=b;
b=t;
}
if(a>c){
t=a;
a=c;
c=t;
}
if(b>c){
t=b;
b=c;
c=t;
}
printf("%c %c %c\n",a,b,c);
}
return 0;
}
- 解题思路
- 首先需要定义字符型变量
- 用getchar函数的返回值是int类型进行比较和交换值
- 空格也相当于一个字符,所以要抵消,否则下次就会少个字母,让空格占用了一个位置
- 让程序在一个永真的while循环中,方便输入下一组
- 运行成功截图
- 第二题源代码
- 解题思路
- 求距离要用math.h这个数学函数库,定义变量
- 利用距离公式进行解题
- 同样在while循环里边
- 运行成功截图
#include<math.h>
int main()
{
float x1,x2,y1,y2;
float s1;
while(scanf("%f%f%f%f",&x1,&y1,&x2,&y2)!=EOF)
{
s1=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("%.2f\n",s1);
}
return 0;
}
- 第三题源代码
#define pi 3.1415
int main()
{
float r1,r2;
float v1,v2;
while(1)
{
scanf("%f",&r1);
scanf("%f",&r2);
v1=4.0/3*pi*r1*r1*r1;
v2=4.0/3*pi*r2*r2*r2;
printf("%.3f\n",v1);
printf("%.3f",v2);
}
return 0;
}
- 解题思路
- 首先需要定义float类型的变量
- 利用宏定义定义pi的值
- 利用体积公式己性求解
- 运行成功截图
- 第四题源代码
int main()
{
float x1,x2;
scanf("%f",&x1);
scanf("%f",&x2);
if(x1<0)
{
x1=-x1;
printf("%.3f\n",x1);
}
else printf("%.3f\n",x1);
if(x2<0)
{
x2=-x2;
printf("%.3f",x2);
}
else printf("%.3f",x2);
return 0;
}
- 解题思路
- 即是若输入数大于零原样输出,小于零取相反数输出
- 即可判断我们需要使用if语句进行判断
- 运行成功截图
第五题源代码
int main()
{
int score;
while(scanf("%d",&score)!=EOF)
{
if(score>=90&&score<=100) printf("A\n");
else if(score>=80&&score<=89) printf("B\n");
else if(score>=70&&score<=79) printf("C\n");
else if(score>=60&&score<=69) printf("D\n");
else if(score>=0&&score<=59) printf("E\n");
else printf("Score is error!\n");
}
return 0;
}
- 解题思路
- 本来用Switch语句的,但一直错误,发现有些书不对
- 最后用if语句算是通过了,思路不难 第六题源代码
int main()
{
int year, month, day;
int cnt = 0, sum = 0;
while (scanf("%d/%d/%d", &year, &month, &day) != EOF)
{
sum = 0;
int a[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
for (cnt = 0; cnt < month; ++cnt)
sum = sum + a[cnt];
if (month <= 2)
printf("%d\n", sum + day);
else if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
printf("%d\n", sum + day+1);
else
printf("%d\n", sum + day);
}
return 0;
}
- 解题思路
- 首先定义了一个数组将每个月有多少天列出有来
- 进行循环,但要判断是不是闰年,闰年加一天
- 第七题源代码
int main()
{
int x,a,b;
while(scanf("%d",&x)!=EOF)
{
b=1;
while(x--)
{
scanf("%d",&a);
if(a%2!=0)
b*=a;
}
printf("%d\n",b);
}
return 0;
}
- 解题思路首先因为要输入多个数,想到了数组,但是不知道数据的个数不能用数组,所以要用固定格式判断数去的每一个数在利用一个while循环,非零即真的概念进行写程序,对输入的每个数进行判断,不能被2整除,则说明着个数就是奇数,将其去出进行累乘 第八题源代码
int main()
{
int m,n;
int x,y,t;
while(scanf("%d%d",&m,&n)!=EOF)
{
x=0;
y=0;
if(m>n)
{
int t=m;
m=n;
n=t;
}
for(int i=m;i<=n;i++)
{
if(i%2==0)
{
x+=i*i;
}
else y+=i*i*i;
}
printf("%d %d\n",x,y);
}
return 0;
}