C语言条件语句、循环语句和数组
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
- JS基础知识(上)(变量,条件判断语句,循环语句,函数,对象,数组)
- Java基础教程,第七讲,条件控制、循环语句、数组
- JAVA实训第二节(条件语句,循环和数组)
- c语言:不用if,else语句,也不用循环条件等,输入一个字符,判断是否为大写字母
- 【学习ios之路:C语言】数组.循环.语句总和运用试题练习
- 【达内C++学习培训学习笔记系列】C语言之三循环语句和数组
- 【C语言】把从1到1000的数打印出来,但你不能使用任何的循环语句或是条件语句。
- 【C语言基础】写代码可以在整型有序数组中查找想要的数字(while循环,if条件语句)
- c语言:不用if,else语句,也不用循环条件等,输入一个字符,判断是否为大写字母
- 基本循环条件语句及数组
- 【C语言】把从1到1000的数打印出来,但你不能使用任何的循环语句或是条件语句。
- [黑马IOS自学第三篇]C语言条件分支,while循环语句等
- Python学习笔记_第五章:条件,循环和其他语句
- c语言第二周总结-循环语句
- C#条件语句、循环语句
- js条件语句之职责链数组
- python 第十一周 python条件与循环语句
- IOS成长中 C语言之循环语句
- Vue---条件语句和循环语句(一)
- Shell脚本的条件控制和循环语句