基本知识框架
课堂笔记
- 关于goto语句
-
- goto语句的实现,需要使用者事先设置标号,之后用goto+标号,来实现程序的跳转。它改变了程序原本的执行方向,容易引发一些莫名其妙的bug,所以一般来说不经常使用。goto语句一般使用在深度嵌套的循环语句中,比如有多个for循环语句嵌套,要想让程序一下子跳出循环,使用beak语句很难实现,或者实现起来比较麻烦,单如果使用goto语句的话,就能较快的跳出深度嵌套的循环
课后练习
猜测随机数游戏
题目要求:猜测一个系统生成的1~100的随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int game(int answer,int guess)
{
if(answer > guess)
{
printf("猜小了!\n");
return -1;
}
else if(answer < guess)
{
printf("猜大了!\n");
return 1;
}
else if(answer == guess)
{
printf("猜对了!\n");
return 0;
}
}
int main()
{
srand((unsigned int) time(NULL));//根据时间生成一个随机的种子,这样使用rand生成的随机数,才是真正的随机数
int answer = rand() % 100+1;
int guess = 0;
char choose = '0';
printf("******************************\n");
printf("** Number! **\n");
printf("******************************\n");
printf("是否要进行游玩?【Y是/N否】\n");
scanf("%c",&choose);
if(choose=='Y' || choose=='y')
{
while(1)
{
printf("请输入:\n");
scanf("%d",&guess);
if(game(answer,guess) == 0)
break;
}
}
printf("退出游戏\n");
return 0;
}
二分查找法
题目要求:在大小为十个数的有序数组中,找到需要的数,并打印其值
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};//定义有序数组
int left = 0;//定义左侧下标
int right = sizeof(arr)/sizeof(arr[0]) - 1;//定义右侧下标
int mid = 0;//定义中间下标
int key = 8;//定义要找的数,可以自己用scanf语句接收自己输入的数
for(; left <= right;)//循环检索有序数组,每次循环收缩左/右下标
{
mid = (left +right)/2;//中间下标计算
if(arr[mid] == key)//判断要找的数是否为中间下标,是的话终止循环
{
arr[mid] = key;
break;
}
else if(arr[mid] > key)//若中间下标大于要找的数,收缩右侧下标
{
right = mid - 1;
}
else if(arr[mid] < key)//若中间下标小于要找的数,收缩左侧下标
{
left = mid + 1;
}
}
if(left > right)//左侧如果大于右侧下标,说明数组检索完毕,要找的数不存在
printf("找不到该数字\n");
else
printf("要找的数字为%d\n",arr[mid]);
return 0;
}
打印闰年
题目要求:打印1000~2000年之间的闰年
#include <stdio.h>
/*闰年的定义:1、能被4整除的年份是闰年 2、遇到整百年,能被400整除的是闰年*/
int main()
{
int year = 0;//定义年份
for(year=1000; year<=2000; year++)//通过循环筛选符合闰年条件的年份
{
if((year%100!=0 && year%4==0) || year%400 == 0)//打印1.不是整百且能被4整除的年份2.能被400整除的年份
printf("%d ",year);
}
return 0;
}
求素数
题目:打印100~200内的素数
#include <stdio.h>
int main()
{
int num = 0;
int divisor = 0;//定义除数
int flag = 1;//定义标志,判断数字是否为素数
for(num=100; num<=200; num++)
{
flag = 1;
for(divisor=2; divisor<=num/2;divisor++)//设置循环判断num是否为素数
{
if(num % divisor == 0)//如果num除了1和它本身,还有其他数能被num整除,则它不是素数
{
flag = 0;
break;
}
}
if(flag == 1)
printf("%d ",num);
}
return 0;
}
求最大公约数
题目要求:求两个数的最大公约数
#include <stdio.h>
int main()
{
int num1 = 52;//定义两个数
int num2 = 84;
int tmp = 0;
if(num2 > num1)//如果num2比num1大,则进行互换
{
tmp = num1;
num1 = num2;
num2 = tmp;
}
for(;num1%num2 != 0;)//辗转相除法,当取模(余数)结果为0时,退出循环
{
tmp = num1%num2;
num1 =num2;
num2 =tmp;
}
printf("最大公约数是%d",num2);
return 0;
}
数9的个数
题目要求:求1~100内9的个数
#include <stdio.h>
int main()
{
int num = 1;
int count = 0;//定义计数总和
for(num=1; num<=100; num++)
{
if(num%10 == 9)//判断个位是不是9
count++;
if(num/10 == 9)//判断十位是不是9
count++;
}
printf("9的个数为%d\n",count);
return 0;
}
求和
题目要求:求1-1/2+1/3-1/4…+1/99-1/100的值
#include <stdio.h>
int main()
{
int n = 1;
float sum = 0.0;//定义浮点数作为求和变量
int flag = 1;//定义flag作为控制 + - 符号变量
for(n=1; n<=100; n++)
{
sum += flag*(1.0/n);//将flag看作分母的一部分,总体看作求和运算
flag = -flag;//每次循环都进行符号改变
}
printf("%lf\n",sum);
return 0;
}
乘法口诀
题目要求:打印9x9的乘法口诀表
#include <stdio.h>
int main()
{
int horizontal = 1;//定义行乘数
int vertical = 1;//定义列乘数
for(horizontal=1; horizontal<=9; horizontal++)
{
for(vertical=1; vertical<=horizontal; vertical++)//列数小于等于行数
{
printf("%d*%d=%-2d ",horizontal,vertical,vertical*horizontal);
}
printf("\n");//注意打印完一行后需要换行
}
return 0;
}
求最大值
题目要求:求十个整数中最大值
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int max = arr[0];
int num = 0;
for(num=0; num<=sizeof(arr)/sizeof(arr[0])-1; num++)//依次对比数组中的值,保存最大值
{
if(arr[num+1] > arr[num])
max = arr[num+1];
}
printf("%d\n",max);
return 0;
}
写一个自动关机程序
题目要求:开启程序后,60秒后关机,除非输入我是猪
#include <stdio.h>
#include <stdlib.h>
int main()
{
char input[10] = {0};
system("shutdown -s -t 60");
again: printf("电脑将在60秒后关机,出非你输入【我是猪】,请输入: ");
scanf("%s",&input);
if(0 == strcmp(input,我是猪));
system("shutdown -a");
else
goto again;
return 0;
}
基本知识框架Xmind资源下载
链接: 资源下载