您的位置:首页 > 编程语言 > C语言/C++

C语言条件语句、循环语句和数组

2019-03-07 11:15 232 查看

1.1、switch语句格式:
switch( 变量){
case 常量1:语句1 break;
case 常量2:语句2 break;
case 常量3:语句3 break;
default: 语句4 break;

# include<stdio.h>
int main(){
char grade;
printf("你的成绩是:");
scanf("%c",&grade);

switch(grade){
case 'A':printf("优秀");   break;
case 'B':printf("良");     break;
case 'C':printf("差");     break;
default:printf("结束");   break;

}
}
输入:A
打印出:优秀

# include<stdio.h>
int main( ){
char ch;
ch =getchar();
switch(ch){
case 'H':printf("Hello!\n");                            //这里没有break
case 'G':printf("Good morning!\n");
default:printf("Bye Bye!\n");
}
}
输入:H
打印出:
Hello!
Good morning!
Bye Bye!

为什么打印出这么多?
因为你在case后面没有break,所以全部打印出来了。

# include<stdio.h>
int main( ){
int i=1,j=0;
switch(i){
case 1:
switch(j){
case 1:printf("first\n");  break;
case 0:printf("second\n"); break;
}
case 0:printf("third\n");
}
}
打印出:
second
third
为什么打印出这个呢?
因为在打印出second之后,break终止了里面的switch这个代码块,然后调到外面候继续执行外层中的case 0:printf("third\n");

1.1.1
注意事项:JAVA中也是这样

int grd;
printf("请输入学生的成绩(整数):");
scanf("%d",&grd);

switch(grd/10){

case 9:printf("A"); break;                 //90~99的区间
case 8:printf("B"); break;               //80~89区间
case 7:printf("C"); break;                //70~79区间
case 6:printf("D"); break;               //60~69区间
default:printf("E"); break;              //剩下区间
}

输入:90~99   打印出:A
输入:80~89   打印出:B
输入:70~79   打印出:C
输入:60~69   打印出:D

1.1.2
注意事项:
C语言中if(a>b>c),编译系统会按照从左到右运算,也就是if((a>b)>c),表示,a与b比较的值(1或者0)再与c比较。 JAVA中不能这样,JAVA中直接编译报错

# include <stdio.h>
int main(){
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)                //函数执行的是这一步
printf("%d",d+1);
else
printf("%d\n",d+2);
}
打印出:3

1.2、数组的定义:
1.格式:int a[10];

注意:C语言中不允许对数组的大小做动态的定义。如:

int   n;
scanf("%d",&n);
int a
;
这样是不允许的
``

2.但是如果在被调用的函数中(不包括主函数)定义数组,其长度可以是变量,如:

void func(int n){
int  a[2*n];
这是可以的
}

1.3、数组的初始化
1.格式一:
对全部数组赋值:int a[10]={0,1,2,3,4,5,6,7,8,9};
2.格式二:
也可以对部分数组元素赋值:int a[10]={0,1,2,3,4};
着表示对数组的前面5个元素赋值,后面5个元素都是0
3.格式三:
全部数组元素都是0:int a[10]={0,0,0,0,0,0,0,0,0,0};或者int a[10]={0};
4.格式四:
对于数据元素已经确定的,可以不指定长度:int a[]={0,1,2,3,4};
次数组的长度是5

注意事项:
(1)对于int型数组,系统初始化是0
(2)对于字符型数组,系统初始化是’\0’
(3)对于指针型数组,系统初始化是NULL

1.4、定义二维数组:int a[3][4]
这个二维数组是3行4列,相当于定义了3个一维数组.
如下:
a[0]------a[0][0] a[0][1] a[0][2] a[0][3]
a[1]------a[1][0] a[1][1] a[1][2] a[1][3]
a[2]------a[2][0] a[2][1] a[2][2] a[2][3

注意事项:这个3行4列的矩阵只是在逻辑上面的理解,实际在内存中,这个庶族它是连续的,相互之间是线性的关系。

1.5、二维数组的初始化
1.格式一:(推荐这种)
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
第一个花括号给第一行,一次类推
2.格式二:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
3.格式三:
int a[3][4]={{1},{0,6},{0,0,11}};
这种为:
1 0 0 0
0 6 0 0
0 0 11 0

1.6、定义字符型数组
1.格式1:char ch[10];
ch[0]=‘a’ ch[1]='A’等
2.格式2:由于字符型数据是以ASCII(整数形式)存放的,因此可以用整型数组来存放
int a[10];
a[0]=‘a’ a[1]='m’等

1.7、初始化字符数组
char ch[10]={‘a’,’ ‘,‘b’,‘c’,’ ‘,‘d’,‘e’,‘f’,‘g’,’ ‘}; 或者char ch[ ]={‘a’,’ ‘,‘b’,‘c’,’ ‘,‘d’,‘e’,‘f’,‘g’,’ '};

1.8、字符串和字符串结束标志
printf(“how do you do?\n”);
执行此语句系统怎么知道输出到哪里结束?
实际上,系统自动在最后一个字符’\n’后面加上’\0’,作为字符串结束标志。在执行此函数时每输出一个字符就检查一次,看下一个字符是否是’\0’,遇到’\0’就结束。

由于上面的原因,因此有了下面字符数组初始化的方法:
char ch[ ]={“I am happy”}; 或者 char ch[ ]=“I am happy”;
此时的数组长度不是10而是11,因为系统在最后会加上一个’\0’
上面的等价于:
char ch[ ]={‘I’,’ ‘,‘a’,‘m’,’ ‘,‘h’,‘a’,‘p’,‘p’,‘y’,’\0’};

1.9、字符数组的输入或输出
方式1:

char ch[ ]="china";
int i;
for(i=0;i<6;++i){
printf("%c",ch[i]);
}

打印出:china

方式2:

char ch[ ]="china";                  //在内存中的存储情况为:china\0
printf("%s\n",ch);
打印出:
china

如果利用一个scanf( )函数输入多个 字符串,则应在输入时以空格分隔,如:

char str1[5],str2[5],str3[5];
scanf("%s%s%s",str1,str2,str3);
printf("%s %s %s?",str1,str2,str3);

输入:
how are you?
打印出:
how are you?

注意事项;
在C语言中数组名代表该数组的起始地址,因此在使用scanf()函数时不需要加&
如:scanf("%s",&ch); //这是错误的

1.10、字符串输入或输出函数
输出:
1.格式:

puts(字符数组)

char str[ ]="china";
puts(str);
打印出:
china

输入:
1.格式:
gets( 字符数组)

char str[ ];
gets(str);
puts(str);
输入:
china
打印出:
china

注意事项:
用puts和gets函数只能输出或输入一个字符串,不能写成put(str1,str2)

1.11、字符串连接函数
1.格式:strcat(字符数组1,字符数组2)

char str1[50 ]="hello";
char str2[ ]="world";
printf("%s",strcat(str1,str2));
打印出:
helloworld

注意事项:
(1)将字符串2连接到字符串1后面,结果放在字符数组1中,函数调用后得到一个函数值是字符数组1的地址
(2)由于(1),所以字符数组1的空间必须足够大,因此我定义了50,如果时char str1[ ]="hello"就会出错
(3)连接前两个字符串后面都有’\0’,连接后第一个字符串的’\0’取消,只在最后保留了’\0’

1.12、字符串复制函数
1.格式:strcpy(字符数组1,字符串2) 将字符串2复制到字符数组1中

char str1[50];
char str2[ ]="hello world";
strcpy(str1,str2);
printf("%s",str1);

打印出:
hello world

注意事项:字符数组1必须定义的足够大,以便容纳被复制的字符串2

还可以这样写:

char str1[50];
strcpy(str1,"hello world");
printf("%s",str1);

打印出:
hello world

1.13、测字符串长度函数
1.格式:strlen(字符数组)

char str1[ ]="china";
printf("%d",strlen(str1));
打印出:5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: