1.while 循环练习
1) 统计从键盘输入的一行字符的个数。
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义变量储存字符
char ch;
// 定义字符个数计数器
int count = 0;
// 提示用户输入一行字符
printf("请输入一行字符:\n");
// 接收用户输入的字符
scanf("%c", &ch);
// 统计字符个数
while (ch != '\n') {
count ++; // 计数器+1
// 继续取下一个字符
scanf("%c", &ch); // scanf原理:如果缓冲区不为空,不会让用户输入内容,而是直接从缓冲区获取
}
// 输出字符个数
printf("字符个数为:%d\n",count);
return 0;
}
2) 用while语句计算从1加到100的值。
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义变量存放当前用于计算的数和计算结果
int i = 1;
int sum = 0;
// 计算从1加到100的值
while (i <= 100) {
sum += i;
i ++;
}
// 打印计算结果
printf("从1加到100的值为:%d",sum);
return 0;
}
3) 使用while循环实现 w(上) s(下) a(左) d(右) 方向控制以及 q(退出)。
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义变量储存用户的命令
char command;
// 提示用户输入命令
printf("请输入命令: w.上 s.下 a.左 d.右 q.退出\n");
// 执行命令
int flag = 1;
while (flag) { // 只要flag不为0,就会一直循环
// 接收用户输入的命令
scanf("%c", &command);
switch (command) { // 判断用户输入的命令
case 'w':
case 'W':
printf("上\n"); // 上
break;
case 's':
case 'S':
printf("下\n"); // 下
break;
case 'a':
case 'A':
printf("左\n"); // 左
break;
case 'd':
case 'D':
printf("右\n"); // 右
break;
case 'q':
case 'Q':
printf("程序已退出\n"); // 退出
flag = 0;
break;
default:
break;
}
}
return 0;
}
4) 使用随机数随机产生一个1-1000的数,让用户猜10次,并打印每次猜的结果。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
// 定义变量
int randomNum; // 随机数
int guessNum; // 用户猜的数
int times = 1; // 用户当前是第几次输入
int chance = 9; // 用户还有几次机会
// 产生一个1-1000的随机数
randomNum = arc4random_uniform(1000) + 1;
// 让用户猜
while (chance > 0) { // 只要chance大于0,就会一直循环
// 提示用户输入
printf("当前是第%d次输入,你还有%d次机会\n", times, chance);
// 接收用户输入的数
scanf("%d", &guessNum);
// 用户输入的数和电脑产生的随机数进行比较
if (guessNum > randomNum) { // 猜的数比随机数大
printf("对不起,你猜大了!\n");
} else if (guessNum < randomNum){ // 猜的数比随机数小
printf("对不起,你猜小了\n");
} else { // 猜的数与随机数相等
printf("恭喜你,你猜对了!\n");
return 0; // 如果猜对,退出循环
}
times ++;
chance --;
}
// 如果10次都没猜对
printf("我靠,10次都没有猜对,你的智商不适合玩这个游戏!\n");
return 0;
}
2.do-while循环
1)计算1+2+3+...+100的结果。
#include <stdio.h>
int main(int argc, const char * argv[]) {
int i = 1;
int sum = 0;
do {
sum += i;
i ++;
} while (i <= 100);
printf("%d",sum);
return 0;
}
2)打印100次我爱你
#include <stdio.h>
int main(int argc, const char * argv[]) {
int i = 1;
do {
printf("第%d次我爱你\n",i);
i ++;
} while (i <= 100);
return 0;
}
#include <stdio.h>
void test1();
void test2();
void test3();
void test4();
void test5();
int main(int argc, const char * argv[]) {
test1();
test2();
test3();
test4();
test5();
return 0;
}
// 打印出5行5列的*方阵
void test1(){
// 打印5行
for (int i = 1; i <= 5; i ++) {
// 每行打印5颗星
for (int j = 1; j <= 5; j++) {
printf("*\t");
}
// 打印完5颗星换行
printf("\n");
}
}
// 打印出由*排列成的正直角三角形
void test2(){
// 打印5行
for (int i = 1; i <= 5; i ++) {
// 每行打印的*数量依次递增1
for (int j = 1; j <= i; j ++) {
printf("* ");
}
// 打印完一行进行换行操作
printf("\n");
}
}
// 打印由*排列成的倒直角三角形
void test3(){
// 打印5行
for (int i = 0; i < 5; i ++) {
// 每行的*数量依次递减1
for (int j = 0; j < 5 - i; j ++) {
printf("* ");
}
// 打印完一行进行换行操作
printf("\n");
}
}
// 打印正三角形
void test4(){
// 定义变量
int n;
// 提示输入
printf("请输入一个整数:\n");
// 接收整数
scanf("%d",&n);
// 打印
// 打印n+1行
for (int i = 0; i <= n; i ++) {
// 每行先打印 n - i 个空格
for (int j = 0; j < n - i; j ++) {
printf(" ");
}
// 每行再打印 2i +1 个*
for (int k = 0; k < 2*i +1; k ++) {
printf("*");
}
// 打印完一行进行换行操作
printf("\n");
}
}
// 实现 9 * 9 乘法表
void test5(){
// 打印9行
for (int i = 1; i <= 9; i ++) {
// 每行打印的内容
for (int j = 1; j <= i; j ++) {
printf("%d*%d=%d ", j, i, j * i); // 第i行乘以第j列
}
// 打印完一行进行换行操作
printf("\n");
}
}
break语句可用于switch语句和循环语句中,可以使程序跳出switch或循环语句,而执行后面的语句:
void test1(){
// break用于跳出当前循环
for (int i = 1; i <= 10; i ++) {
if (i == 5) { // 当i = 5 时,跳出循环
break;
}
printf("%d\t",i);
}
}
例:计算r=1到r=10时的圆面积,直到area大于100为止:
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义变量
double area = 0; // 圆面积
// 计算圆面积
for (int r = 1; r <= 10; r ++) {
area = 3.14 * r * r; // 计算半径为r的圆面积
if (area > 100) { // 当圆面积大于100时跳出循环
// 输出结果
printf("半径为%d的圆的面积为:%.2f",r, area);
break;
}
}
return 0;
}
continue语句的作用是跳过循环体中剩余的语句而继续下一次。continue语句只用在for、while、do—while等循环体中,常与if条件语句一起使用,用来加速循环:
void test1(){
// continue作用:结束本次循环的语句,继续下一次循环
for (int i = 1; i <= 10; i ++) {
if (i % 2 == 0) {
continue;
}
printf("%d ",i);
}
}
例:把100~200之间不能被3整除的数输出
#include <stdio.h>
int main(int argc, const char * argv[]) {
for (int i = 100; i <= 200; i ++) {
if (i % 3 == 0) {
continue;
}
printf("%d ",i);
}
return 0;
}