目录:1. 有关C的一点补充;
2.while 与do-while的循环语句(中间插有验证与调试)
001.利用循环语句计算数的位数
002.借用循环语句做简单的对数运算
003.通过“借尸还魂”的手段来保存原始值以待后续使用——将一个三位数倒序输出
004.利用循环语句进行火箭倒计时
005.绝对不能一次就猜中的猜数游戏!
006.猜数游戏
007.算平均数
008.利用循环进行逆序重排(以数的形式呈现)
009.逆序重排(以字符串形式呈现)
3。随机数
4.for循环
001.只能计算偶数阶乘的程序。。。
002.超麻烦的阶乘运算程序
为解决上一页笔记中提到的局限——学习循环:
2.while 与do-while
001.利用循环语句计算数的位数
#include<stdio.h>
int main()
{
int x;
printf("请输入一个整数:");
scanf_s("%d", &x);
int n = 0;
while (x > 0) {
x /= 10;
++n;
}
printf("%d", n);
return 0;
}
有关验证与调试
从while到do-while:
002.借用循环语句做简单的对数运算
#include<stdio.h>
int main()
{
int x;
int y = 0;
printf("请输入一个整数:");
scanf_s("%d", &x);
int t = x;
while (x > 1) {
y++;
x /= 2;
}//如果判断条件是x>0,则y的初始值应该为-1
x = t;
printf("log2 的 %d 是%d", x, y);
return 0;
}
003.通过“借尸还魂”的手段来保存原始值以待后续使用——将一个三位数倒序输出(011中就是通过引入新的变量t来保存x的初始值从而使得输出的x为原始值而非始终为1!)
#include<stdio.h>
int main()
{
int x;
printf("请输入一个三位的整数:");
scanf_s("%d", &x);
int a = 0, b = 0, c = 0;
a = x;
b = x;
c = x;
a /= 100;
c %= 10;
b /= 10;
b %= 10;
int t = 0;
t = c * 100 + b * 10 + a;//将其变为一个数能避免出现如007的现象
printf("这个数的逆序排序是%d", t);
return 0;
}
004.利用循环语句进行火箭倒计时
#include<stdio.h>
int main()
{
int n;
scanf_s("%d", &n);
while (n >= 0) {
printf("%d\n", n);
n--;//循环体内的两行不能调换,否则先输出n-1,最后输出-1
}
printf("发射!\n");
return 0;
}
005.绝对不能一次就猜中的猜数游戏!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(0));
int a = rand()%10;
int n = 0, m = 0;
int x;
printf("请输入一个个位数:");
scanf_s("%d", &x);
do {
n++;
if (x > a) {
printf("你猜的数大啦\n");
}
else if (x < a) {
printf("你猜的数小捏\n");
}
printf("再输入一个个位数:\n");//如果一次猜中,也会让你再输入一个值!
scanf_s("%d", &x);
} while (x != a);
printf("Congratulation!\n");
printf("你猜的次数是:%d\n", n);
return 0;
}
006.猜数游戏(可以一次猜中)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(0));
int a = rand() % 10;
printf_s("猜数咯!\n");
int x = 0;
int count = 0;
do {
printf("请输入一个个位数:");
scanf_s("%d", &x);
count++;
if (x > a) {
printf("你猜的数大啦\n");
}
else if (x < a) {
printf("你猜的数小捏\n");
}
} while (x != a);
printf("Congratulation!\n");
printf("你猜的次数为%d\n", count);
return 0;
}
007.算平均数
#include<stdio.h>
int main()
{
printf("请输入一个不为-1的非负数:");
int n = 0;
double sum = 0;
double number = 0;
scanf_s("%lf", &number);
while (number != -1) {
n++;
sum += number;
printf("请再输入一个不为-1的非负数:");
scanf_s("%lf", &number);
}
printf("%f", sum/n);
return 0;
}
008.利用循环进行逆序重排(以数的形式呈现)
#include<stdio.h>
int main()
{
printf("请输入一个正整数:");
int x;
int a = 0;
int b = 0;
scanf_s("%d", &x);
while (x > 0) {
a = x % 10;
b = a+b*10;
x /= 10;
}printf("逆序重排后变为:%d", b);
return 0;
}
009.逆序重排(以字符串形式呈现)
#include<stdio.h>
int main()
{
printf("请输入一个正整数:");
int x;
int a = 0;
scanf_s("%d", &x);
while (x > 0) {
a = x % 10;
printf("%d", a);//不能换行!
x /= 10;
}
return 0;
}
3.引入随机数
4.for循环
001.只能计算偶数循环的程序。。。
#include<stdio.h>
int main()
{
int n;
printf("请输入一个正整偶数:");
scanf_s("%d", &n);
int factor = 0;
int i = 1;
while (n > 0) {
factor = n * (n - 1);
n -= 2;
i *= factor;
}printf("这个数的阶乘是:%d",i);
return 0;
}
002.通过分类讨论进行阶乘运算(麻烦)
#include<stdio.h>
int main()
{
int n=0;
printf("请输入一个正整数:");
scanf_s("%d", &n);
int i = 1;
if(n%2==0){
while (n > 0) {
i *= n * (n - 1);
n -= 2;
}
}
else {
i *= n;
n--;
while (n > 0) {
i*= n*(n-1);
n -= 2;
}
}
printf("这个数的阶乘是:%d", i);
return 0;
}
003.阶乘运算(n!=n*(n-1)*…2*1)
#include<stdio.h>
int main()
{
int n;
printf("请输入一个正整数:");
scanf_s("%d", &n);
int i = 1;
while (n > 0) {
i *= n;
n--;
}printf("这个数的阶乘是:%d", i);
return 0;
}
004.阶乘运算(n!=1*2*…(n-1)*n)
#include<stdio.h>
int main()
{
int n;
printf("请输入一个正整数:");
scanf_s("%d", &n);
int i = 1;
int factor = 1;
while (i<=n) {
factor *= i;
i++;
}printf("%d!=%d", n,factor);
return 0;
}
005.利用for循环算阶乘(递增)
#include<stdio.h>
int main()
{
int n;
printf("请输入一个正整数:");
scanf_s("%d", &n);
int factor = 1;
for (int i = 1; i <= n; i++) {
factor *= i;
}printf("%d!=%d", n, factor);
return 0;
}
006.利用for循环算阶乘(递减)
#include<stdio.h>
int main()
{
int n;
printf("请输入一个正整数:");
scanf_s("%d", &n);
int t = n;
int factor = 1;
for (n; n>0; n--) {
factor *= n;
}printf("%d!=%d", t, factor);
return 0;
}