循环与分支语句练习
1、计算n的阶乘
代码如下:
#include<stdio.h>
int main()
{
int n,i,s=1;
printf("输入一个整数计算它的阶乘:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s*=i;
}
printf("%d!=%d\n",n,s);
return 0;
}
2、计算 1!+2!+3!+……+10!
代码如下:
#include <stdio.h>
int main()
{
int n=0;
int i=0;
int s = 1;
int sum = 0;
for (n = 1; n <= 10; n++)
{
s *= n;
sum += s;
}
printf("sum=%d\n",sum);
return 0;
}
3、九九乘法表
代码如下:
#include <stdio.h>
int main()
{
int i = 0;
//控制行数
for(i=1; i<=9; i++)
{
//打印每一行内容,每行有i个表达式
int j = 0;
for(j=1; j<=i; j++)
{
printf("%d*%d=%2d ", i, j, i*j);
}
printf("\n");
}
return 0;
}
4、求10个数最大值
代码如下:
int main()
{
int arr[10] = {
0};
int i = 0;
int max = 0;
for(i=0; i<10; i++)
{
scanf("%d", &arr[i]);
}
//
max = arr[0];
for(i=1; i<10; i++)
{
if(arr[i]>max)
max = arr[i];
}
printf("max = %d\n", max);
return 0;
}
5、计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
代码如下:
#include <stdio.h>
int main()
{
int i = 0;
double sum = 0.0;
int flag = 1;
for(i=1; i<=100; i++)
{
sum += flag*1.0/i;
flag = -flag;
}
printf("%lf\n", sum);
return 0;
}
6、编写程序数一下 1到 100 的所有整数中出现多少个数字9
代码如下:
#include <stdio.h>
int main()
{
int i = 0;
int count = 0;
for(i=1; i<=100; i++)
{
if(i%10==9)
count++;
if(i/10==9)
count++;
}
printf("%d\n", count);
return 0;
}
7、二分查找
代码如下:
#include <stdio.h>
int main()
{
int arr[] = {
1,2,3,4,5,6,7,8,9,10};
int key = 3;
int left = 0;
int right = sizeof(arr)/sizeof(arr[0]); // right位置的数据取不到
while(left<right) // right位置没有数据,此处不需要添加=
{
int mid = left+(right-left)/2;
if(arr[mid]>key) // key小于中间位置数据,说明key可能在左半侧,需要改变右边界
{
right = mid; // right位置的数据取不到,因此right=mid,不需要减1
}
else if(arr[mid]<key)// key大于中间位置数据,说明key可能在右半侧,需要改变左边界
{
left = mid+1; // left位置的数据可以取到,因此left=mid+1
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if(left>=right)
printf("找不到\n");
return 0;
}
8、编写代码,演示多个字符从两端移动,向中间汇聚。
代码如下:
#include <stdio.h>
int main()
{
char arr1[] = "welcome world...";
char arr2[] = "################";
int left = 0;
int right = strlen(arr1) - 1;
printf("%s\n", arr2);
//while循环实现
//while (left <= right)
//{
// Sleep(1000);
// arr2[left] = arr1[left];
// arr2[right] = arr1[right];
// left++;
// right--;
// printf("%s\n", arr2);
//}
//for循环实现
for (left = 0, right = strlen(arr1) - 1;
left <= right;
left++, right--)
{
Sleep(1000);
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
}
return 0;
}
9、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序)
代码如下:
int main()
{
char psw[10] = "" ;
int i = 0;
int j = 0;
for (i = 0; i < 3 ; ++i)
{
printf( "please input:");
scanf("%s", psw);
if (strcmp(psw, "password" ) == 0)
break;
}
if (i == 3)
printf("exit\n");
else
printf( "log in\n");
}
10、猜数字游戏
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("**********************************\n");
printf("*********** 1.play **********\n");
printf("*********** 0.exit **********\n");
printf("**********************************\n");
}
//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{
int random_num = rand()%100+1;
int input = 0;
while(1)
{
printf("请输入猜的数字>:");
scanf("%d", &input);
if(input > random_num)
{
printf("猜大了\n");
}
else if(input < random_num)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择>:");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新输入!\n");
break;
}
}while(input);
return 0;
}
11、关机恶搞小程序
goto写法
代码如下:
#include <stdio.h>
int main()
{
char input[10] = {
0};
system("shutdown -s -t 60");
again:
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if(0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
循环写法
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char input[10] = {
0};
system("shutdown -s -t 60");
while(1)
{
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if(0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
break;
}
}
return 0;
}