内容
1.n阶乘
2.二分法
3.显示字符串
4.密码验证
5.猜数字
6.关机恶作剧
———————————————————————————————————
*1.n阶乘
n! = n*(n-1)(n-2) * … *1;
sum=1!+2!+…+n!;
实现:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int factor(int num){
int ret=1;
for(int i=0;i<n;i++){
ret=ret*i;
}
return ret;
}
int main(){
int n=0;
int sum=0;
printf("请输入一个整数\n");
scanf("%d",&n);
for (int i = 1; i <= n;i++) {
int factor = 1;//乘积
printf("%d的阶乘为:%d\n",i,factor(i));
sum=sum+factor(i);
}
printf("前n阶阶乘和为:%d\n",sum);
system("pause");
return 0;
}
结构为:
*2.二分法
二分法:在有序数组中实现快速查找的方法;
int s[]={1,2,3,4,5,6 } 查找数num=2
方法:首先设置两个变量,left和right表示第一个和最后一个数组元素下标;计算中间元素下标mid=(left+right)/2 ;比较num和s[mid],如果数num在s[mid]左侧则right值变为mid-1;反之在右侧更新left为mid+1;继续比较,直到s[mid]==num;返回下标mid。
实现:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int dichotomy(int arr[],int num, int len) { //定义一个函数:实现二分法查找数组元素
int left = 0;
int right = len - 1;
int mid = 0;
while(left<=right) {
mid = (left + right) / 2 ;
if (num > arr[mid]) {
left = mid + 1;
}
else if (num < arr[mid]) {
right = mid - 1;
}
else {
break;
}
}
if (left > right) {
return -1;
}
return mid;
}
int main()
{
//二分法查找数组元素,找到返回下标,找不到则输出 找不到
int arr[] = { 1,2,3,4,5,6,7,8,9 };
int len = sizeof(arr) / sizeof(arr[0]);
int num = 0;
printf("请输入一个需要查找的整数:\n");
scanf("%d", &num);
int ret = dichotomy(arr, num, len);
if (ret == -1) {
printf("找不到\n");
}
else {
printf("找到了,%d 在数组中的下标为:%d\n", num, ret);
}
system("pause");
return 0;
}
结果:
*3.显示字符串
演示多个字符(字符串“welcome to C!”),从两边移动并显示,向中间汇集。
实现:
#include<stdio.h>//包含打印输出函数
#include<stdlib.h>//包含system库函数
#include<string.h>//包含strlen函数,计算字符串长度
#include<Windows.h>//包含Sleep库函数
int main(){
char str1[]="welcome to C!";
char str2[]="#############";
int left=0;
int right =strlen(str1)-1;
while(left<=right){
str2[left]=str1[left];
str2[right]=str1[right];
left++;
right--;
printf("%s\n",str2);
//Sleep(500); 延迟时间
//system("cls"); 清屏操作
}
system("pause");//请按任意键继续!
return 0;
}
结果:
增加效果:让字符串从str2从两边向中间显示str1。
实现方法:通过清屏 system(“cls”) 操作,清除前几行显示的字符串,让其只显示最后一行,然后通过 Sleep() 库函数让程序进程放慢。
注意:要使用这两个函数,必须包含头文件
- #include<stdlib.h>//包含system库函数
- #include<Windows.h>//包含Sleep库函数
*4.验证密码
模拟用户登录,验证密码,允许用户 登录三次,若密码正确则显示登陆成功,错误则显示您已错误3次,退出登录!
实现:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main(){
char password[1024]={0};
printf("请输入登录密码:");
scanf("%s",password);//scanf输入字符串时不用加地址符&,输入整数时必须加&
int i = 0;
for(;i<3;i++){
if(strcmp(password ,1234)==0){
printf("登陆成功\n");
break;
}else{
printf("密码错误\n");
}
}
if(i>=3){
printf("您已错误3次,退出登录!\n");
}
system("pause");
return 0;
}
结果:
*5.猜数字
- 随机生成数,设置随机种子,避免每次生成的随机数时一样的:int random=rand()%100+1; srand((unsigned)time(NULL));
- 循环判断玩家输入猜测的数字和系统随机生成的数进行比较
- 定义菜单函数和猜测游戏函数
实现:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu(){
printf("****************************\n");
printf("*** 1.play guess game!\n ***\n");
printf("*** 2.exit! ****************\n");
printf("****************************\n");
printf("请选择功能:");
}
void guessGame(){
int input=0;
int random_num = rand()%100+1;
while(1){
printf("请输入你猜测的数字:\n");
scanf("%d",&input);
if(input<random_num){
printf("猜小了!\n");
}else if(input>random_num){
printf("猜大了!\n");
}else{
printf("猜对了!\n");
break;
}
}
}
int main(){
srand((unsigned)time(NULL));
int select=0;
menu();
printf("请选择功能:");
scanf("%d",&select);
while(1){
switch(select){
case 1: guessGame();
break;
case 0: printf("exit!\n");
system("cls");
break;
}
break;
}
system("pause");
return 0;
}
结果:
*6.关机恶作剧
命令操作:
- shutdown -s -t 60; //电脑将在10分钟内关机
- shutdown -a; //解锁,取消关机
#include<stdio.h>
#include<stdlib.h>
int main() {
//goto 跳转语句的使用
char input[] = { 100 };
system("shutdown -s -t 600");
while (1) {
printf("电脑将在10分钟内关机,如果输入:我是猪,就取消关机!\n请输入:");
scanf("%s", input);
if (0 == strcmp(input, "我是猪"))
{
printf("你真听话\n");
system("shutdown -a");
break;
}
printf("再给你一次机会,考虑清楚要不要输入\n");
}
system("pause");
return 0;
}
- C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的, 实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的, 最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
//goto 跳转语句的使用
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;
}
system("pause");
return 0;
}