一、判断奇偶
提起判断奇偶,我们通常会想到检查除2的余数。
public class IsOdd {
public static boolean isOdd(int i){
return i%2==1;
}
public static void main(String[] args) {
int i=3;
System.out.println(isOdd(i));
}
}
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://i-blog.csdnimg.cn/blog_migrate/9430d403612d340975163bf0a680846f.png)
我们也会用与运算,数字与1进行&,
运算规则:
0 & 0 = 0;0 & 1 = 0;1 & 0 = 0;1 & 1 = 1;
比如4的二进制为0100,3的二进制为0011,1的二进制为0001
4&1=0,3&1=1
因此偶数&1为0,奇数&1为1
public static boolean isOdd(int i){
return (i&1)!=0;
}
二、C基础
1.形式参数
函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用。下面是一个实例:
#include <stdio.h>
/* 全局变量声明 */
int a = 20;
int main ()
{
/* 在主函数中的局部变量声明 */
int a = 10;
int b = 20;
int c = 0;
int sum(int, int);
printf ("value of a in main() = %d\n", a);
c = sum( a, b);
printf ("value of c in main() = %d\n", c);
return 0;
}
/* 添加两个整数的函数 */
int sum(int a, int b)
{
printf ("value of a in sum() = %d\n", a);
printf ("value of b in sum() = %d\n", b);
return a + b;
}
运行结果: value of a in main() = 10 value of a in sum() = 10 value of b in sum() = 20 value of c in main() = 30
全局变量与局部变量在内存中的区别:
- 全局变量保存在内存的全局存储区中,占用静态的存储单元;
- 局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。
2.多维数组
(1)多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,
(2)传递数组给函数
有三种格式:
void myFunction(int *param) { . . . } //形式参数是一个指针
void myFunction(int param[10]) { . . . } //形式参数是一个已定义大小的数组
void myFunction(int param[]) { . . . } //形式参数是一个未定义大小的数组
就函数而言,数组的长度是无关紧要的,因为 C 不会对形式参数执行边界检查。
#include <stdio.h>
/* 函数声明 */
double getAverage(int arr[], int size);
int main ()
{
/* 带有 5 个元素的整型数组 */
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
/* 传递一个指向数组的指针作为参数 */
avg = getAverage( balance, 5 ) ;
/* 输出返回值 */
printf( "平均值是: %f ", avg );
return 0;
}
double getAverage(int arr[], int size)
{
int i;
double avg;
double sum=0;
for (i = 0; i < size; ++i)
{
sum += arr[i];
}
avg = sum / size;
return avg;
}
(3)从函数返回数组
C 语言不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。
如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,
例如: int * myFunction() { . . . }
C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
(4)指向数组的指针
数组名是一个指向数组中第一个元素的常量指针。
double balance[50];
balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。
因此,下面的程序片段把 p 赋值为 balance 的第一个元素的地址:
double *p; double balance[10]; p = balance;
3.枚举
语法格式:enum 枚举名 {枚举元素1,枚举元素2,……};
第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。
可以在定义枚举类型时改变枚举元素的值:
enum season {spring, summer=3, autumn, winter};
没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5
#include<stdio.h>
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
int main()
{
enum DAY day;
day = WED;
printf("%d",day);
return 0;
}
运行结果:3
(注:要想遍历枚举类型,则枚举类型必须是连续的)
#include <stdio.h>
#include <stdlib.h>
int main()
{
enum color { red=1, green, blue };
enum color favorite_color;
/* ask user to choose color */
printf("请输入你喜欢的颜色: (1. red, 2. green, 3. blue): ");
scanf("%d", &favorite_color);
/* 输出结果 */
switch (favorite_color)
{
case red:
printf("你喜欢的颜色是红色");
break;
case green:
printf("你喜欢的颜色是绿色");
break;
case blue:
printf("你喜欢的颜色是蓝色");
break;
default:
printf("你没有选择你喜欢的颜色");
}
return 0;
}