循环是重复执行其他语句(循环体)的语句。
C语言提供了三种重复语句:
- while
- do
- for
水仙花数
while语句while(ii=i+2; }
int i=5; while(i>=1){ printf("%dn",i); i--; }
do语句本质上就是while语句,只是控制表达式是在每次执行完循环体之后进行判定。
do语句while(表达式);
int i =10; do{ printf("%dn",i); i--; }while(i>0);for语句
for语句非常适合应用在使用“计数”变量的循环中。
for语句格式:
for(表达式1;表达式2;表达式3)语句
从0向上加到n-1:
int i; for(i=0;i<10;i++) printf("i=%dn",i);
执行for语句时,变量i先初始化为0,接着判定i是否小于10。因为判定的结果为真,所以打印i=0,然后对变量i进行自增操作。随后再次对条件i>0进行判定,直到不满足条件(判定为false)为止。
for的省略表达式C语言允许省略任意或者全部的表达式:
int i=0; for(;i<10;i++) printf("i=%dn",i);
int i; for(i=0;i<=10;){ printf("i=%dn",i); i++; }
如果省略表达式2,那么它默认为真值,for语句不会终止,会无限循环。
for语句声明int i=2; for(int i=0;i<10;i++) printf("i=%dn",i); printf("%d",i);
for语句声明的变量不可以在循环外访问。
循环中的break语句int main(void) { int i=0; for(;;i++){ printf("i=%dn",i); if(i==5){ break; } } return 0; }continue语句
break语句会使程序跳出循环,而continue语句会把程序控制留在循环内。
//读入十个非零数后循环中止 int n=0; int sum=0; while(n<0){ scanf("%d",&i); if(i==0) continue;//跳过读入的0 sum +=1; n++; }基本类型 整数类型
- int
- long int
整数溢出
对整数进行算数运算时,其结果可能因为太大而无法表示。
例如,对两个int值进行算术运算时,结果必须仍然能用int类型来表示,否则会发生溢出。
long l; scanf("%ld",&l); printf("%ld",l);浮点类型
C语言提供3种浮点类型,对应三种不同的浮点格式
- float:单精度浮点数
- double:双精度浮点数
- long double:扩展精度浮点数
double d; scanf("%lf",&d); //printf函数格式中f可以用来写double类型(不能用lf)字符类型
char类型,即字符类型
ASCII码
char类型的变量可以用任意单字符赋值:
char ch; ch ='a'; ch ='A'; ch ='0'; ch =' ';//空格 ch =ch+1;
可以像比较数那样对字符进行比较
下面的if语句测试ch中是否含有小写字母,如果有,那么它会把ch转化成相应的大写字母。
int main(void) { char ch; ch='f'; if ('a'<=ch && ch<='z') ch =ch -'a'+'A'; printf("%c",ch); return 0; }getchar
可以使用getchar函数和putchar函数来读写字符。
putchar函数用于写单个字符
每次调用getchar函数时,它会读入一个字符并将其返回。
ch=getchar();//为保存这个字符,必须使用赋值操作将其储存到变量中
已知的最古⽼的⼀种加密技术是凯撒加密(得名于 Julius caesar)。该⽅法把⼀条消息中的每个字⺟⽤字⺟表中固定距离之后的那个字⺟来替代。(如果越过了字⺟Z,会绕回到字⺟表的起始位置。例如,如果每个字⺟都⽤字⺟表中两个位置之后的字⺟代替,那么Y就被替换为A,Z就被替换为B。) 编写程序⽤凯撒加密⽅法对消息进⾏加密。⽤户输⼊待加密的消息和移位计数(字⺟移动的位置数⽬): Enter message to be encrypted: Go ahead, make my day. Enter shift amount (1-25): 3 Encrypted message: Jr dkhdg, pdnh pb gdb. 注意,当⽤户输⼊26与移位计数的差值时,程序可以对消息进⾏解密: Enter message to be encrypted: Jr dkhdg, pdnh pb gdb. Enter shift amount (1-25): 23 Encrypted message: Go ahead, make my day 不是字⺟的那些字符不要改动。此外,加密时不要改变字⺟的⼤⼩写。 输出范例: Enter message to be encrypted: Hello, world! Enter shift amount (1-25): 3 Encrypted message: Khoor, zruog! Enter message to be encrypted: Khoor, zruog! Enter shift amount (1-25): 23 Encrypted message: Hello, world!数组 一维数组
声明数组a有10个int类型的元素:
int a[10];
或者用宏定义:
#define N 10 int a[N];数组下标
为了存取特定的数组元素,可以在写数组名的同时在后面加上一个用方括号围绕的整数值(对数组取下标或进行索引)
如果a是含有10个元素的数组,可以依此标记为a[0],a[1]…a[9]
数组索引从0开始
数列反向
#include数组初始化 对数组使用sizeof运算符#define N 10 int main(void) { int a[N], i; printf("Enter %d numbers: ", N); for (i = 0; i < N; i++) scanf("%d", &a[i]); printf("In reverse order:"); for (i = N - 1; i >= 0; i--) printf(" %d", a[i]); printf("n"); return 0; }
二维数组m有5行9列:
int m[5][9];
多维数组初始化