分支和循环结构,分支和循环程序设计实验报告
Yyds干货库存
人生有三种语言结构。
(1)序列结构
(2)选择结构——分支语句:if开关
(3)循环结构3354循环语句:while for do while goto
在C中,0表示假,非0表示真。(假设-1为真)
如果语句
语法结构:
If(表达式)语句;
If(表达式)语句1;
其他
2;
If(表达式1)语句1;
Elseif(表达式2)
2;
Else //省略最后一个Else语句,根据需要编写。
声明3;
如果or else想要控制多个语句,就必须用花括号括起来,整体形成一个代码块。
上面程序的输出结果既不是“哈哈哈”也不是“呵呵呵”,结果是什么都不输出。Else匹配最近的if,所以它是属于第一个if的所有代码块内容。
如果不匹配,Else是与最近的一对。
如果常数和变量比较,我们可以把常数写在前面,这样可以避免诸如:5=5==num等错误;
练习
1.确定一个数是否是奇数?
#包含stdio.h
int main()
{
int num=0;
Printf(请输入一个数字:\ n );
scanf(num=%d\n ,num);
if(数字%2==1)
{
Printf(这个数是奇数);
}
其他
{
Printf(这个数是偶数);
}
返回0;
}
2.并输出1-100之间的奇数。
#包含stdio.h
int main()
{
int a=1;
而(a=100)
{
if(a%2==1)
{
printf(%d\n ,a);
a;
}
其他
a;
}
返回0;
}
交换语句
Switch语句的一般形式:
开关(语句1)
{
案例(陈述2):
内容;
打破;
案例(陈述3):
内容;
打破;
案例(陈述4):
内容;
打破;
……
违约;//可选
内容;
打破;
}
Switch语句从case进入并突围,只有当case后的语句与Switch后的语句匹配时才会执行。
注意:Switch语句必须是整数表达式,case后面必须跟一个整数常量表达式。
While循环
While语法结构:
While(表情)
循环语句;
只有当表达式为真时,才会执行循环语句。当发现表达式为假时,将不再执行该表达式,从而结束循环。
continue的作用是终止这个循环,也就是说continue之后的代码不再执行,可以直接跳转到while的判断部分,判断是否需要进入下一个循环。只要在循环中遇到break,后面的所有循环都会停止,循环会直接终止,所以:break in while用于永久终止循环。Getchar是输入字符,putchar()是输出字符。putchar(变量名)的意思和printf ("%c ",变量名)差不多;
由EOF——表示的文件结束是文件的结束标记。
intmain()
{
int ch=0;
while((ch=getchar()!=EOF)
{
putchar(ch);
}
返回0;
}
当你输入EOF时,循环不会结束,只有当你输入Ctrl Z时。
getchar和scanf的区别:
Scanf是把你的输入放入一个缓冲区,最后的回车键作为结束标记,最后显示的时候不会显示\ n .但是getchar先去输入缓冲区看看有没有内容,里面的内容是不是你需要的,就会被读走。所以我们用getchar()输入的时候,一般会在前面加一个getchar();不需要给他返回值,因为我们此时的目的是清空数据缓冲区,让getchar得到我们想要的。
Getchar函数逐位读取字符。
#包含stdio.h
int main()
{
while ((ch=getchar())!=EOF)
{
if(ch 0ch 9 )
继续;
putchar(ch);
}
返回0;
}
上面的代码表示只输出输入字符0-9之间的字符,包括0和9,否则不输出。
For循环
语法:for(表达式1;表情2;3)表达
{
循环语句;
}
表达式1是初始化部分,用来初始化循环变量。表达式2是条件判断部分,用来判断循环何时终止。表达式的3位调整部分用于调整循环条件。
“break continue”和“break continue”的用法与while语句中的一致。
有一个小小的区别:
#包含stdio.h
int main()
{
int I=0;
for(I=1;我我)
{
如果(i==5)
继续;
printf(%d ,I);
}
返回0;
}
这个结果的输出是1 2 3 4 6 7 8 9 10。因为我在i=5的时候遇到了continue,直接跳到了变量调整部分I,所以这个时候,变量的值变成了6,输出继续。
#包含stdio.h
intmain()
{
int I=1;
while (i=10)
{
如果(i==5)
继续;
printf(%d ,I);
我;
}
}
这段代码的结果是1 2 3 4。最后是一个死循环,因为i=5的时候遇到了continue,后面的部分没有执行,所以直接跳过了变量调整部分,一直判断i=5。
关于for语句循环控制变量的一些建议:
不能在for循环内部修改循环变量,以防止for循环失控。建议将for语句的循环控制变量的值写成“先关后开”的形式。当for循环的表达式2,也就是判断语句没有写出来的时候,意味着这个判断条件始终为真,然后进入无限循环。
请问代码循环了几次?
#包含stdio.h
int main()
{
int I=0;
int k=0;
for (i=0,k=0;k=0;我,k)
k;
返回0;
}
答案是循环是0次,也就是根本不进入循环,因为判断语句是赋值语句,赋值表达式的结果是0,为假,所以不进入循环。
Do while循环
语法:do
{
流通;
}
while()
练习
1.从键盘输入一个数字N,找到N!
#包含stdio.h
int main()
{
int n=0;
int I=1;
int sum=1;
Printf(请输入n:\ n );
scanf(%d ,
while (i=n)
{
sum=sum * I;
我;
}
printf(sum=%d\n ,sum);
返回0;
}
2.求1!2!3!4!……n!
[x]
#包含stdio.h
int main()
{
int n=0;
int I=1;
int sum=1;
int get=0;
Printf(请输入n:\ n );
scanf(%d ,
for(n=1;n n)
{
sum=1;
while (i=n)
{
sum=sum * I;
我;
}
get=获取总和;
}
printf(get=%d\n ,get);
返回0;
}
[x]
#包含stdio.h
int main()
{
int n=0;
int I=1;
int sum=1;
int get=0;
Printf(请输入n:\ n );
scanf(%d ,
for(n=1;n n)
{
sum=sum * n;
get=获取总和;
}
printf(get=%d\n ,get);
返回0;
}
3.在有序数组中找到一个特定的数n,写出int binsearch(intx,int v[],int n);函数:在v [0]=v [1]=v [2]=… v [n-1]的数组中求x。
[x]
#包含stdio.h
int main()
{
int I=1;
int k=7;
int arr[]={1,2,3,4,5,6,7,8,9,10 };
int lgth=sizeof(arr)/sizeof(arr[0]);
for(I=0;i lgth我)
{
if(k==arr[i])
{
Printf (found,下标%d\n ,I);
打破;
}
}
如果(i==lgth)
Printf(未找到);
返回0;
}
[x]二分搜索法方法
#包含stdio.h
int main()
{
int k=7;
int arr[]={1,2,3,4,5,6,7,8,9,10 };
int I=0;
int legth=sizeof(arr)/sizeof(arr[0]);
int right=legth-1;
int left=0;
while(左=右)
{
int米德=(右左)/2;
if(k arr[米德])
{
左=米德1;
}
else if(k arr[米德])
{
右=米德-1;
}
其他
{
Printf (found,下标% d \ n ,middle);
打破;
}
}
如果(左/右)
{
Printf(未找到);
}
返回0;
}
4.编写代码来演示多个字符从两端移动并汇聚到中间。
# includes dio . h//这是printf所在的库函数
#include string.h //这是strlen所在的库函数。
#include windows.h //这是sleep驻留的库函数。
#include stdlib.h //这是系统所在的库函数
int main()
{
char arr1[]=欢迎来到东华!;
char arr 2[]= # # # # # # # # # # # # # # # # # ;
int left=0;
int right=strlen(arr 1)-1;
同时(左/右)
{
arr 2[left]=arr 1[left];
arr 2[右]=arr 1[右];
printf(%s\n ,arr 2);
睡眠(1000);//表示输出时停留1000毫秒。
系统(“cls”);//表示输出一次结果后屏幕清空。
左;
右-;
}
返回0;
}
5.写一个代码模拟用户登录场景,只登录三次。(您只允许输入三次密码。如果密码正确,系统会提示您成功登录。如果三次都错了,你就退出程序。)
STMP (A,B)比较字符串A和字符串B,如果字符串A B,它将返回一个大于0的数字,如果字符串A B,它将返回一个小于0的数字。
# includes dio . h//这是printf所在的库函数
#include string.h //这是strlen所在的库函数。
int main()
{
int I=0;
char password[20]={ 0 };//不能写成password[]={0}。如果这样定义,你就不知道数组的长度是多少,就会得到一个错误。
for(I=0;我我)
{
Printf(请输入密码:\ n );
scanf(%s ,密码);
If (strcmp (password, 123456 )==0)//比较两个字符串是否相等时,不能直接用==来判断。而是应该使用strcmp函数,它在string.h函数库中。
{
Printf(密码正确,登录成功\ n );
打破;
}
其他
{
Printf(密码错误\ n );
}
}
如果(i==3)
{
Printf(三次密码错误,退出程序\ n );
}
返回0;
}
Goto语句
一般写程序的时候很少使用goto语句,因为它会破坏程序的逻辑,它使用的场景是跳出多层循环嵌套。
分支和循环作业和练习
1.输入三个数字,按降序输出。
# includes dio . h//这是printf所在的库函数
int main()
{
int a=0;
int b=0;
int c=0;
Printf(请输入三个数字:\ n );
scanf(%d%d%d ,a,b,
如果(a b)
{
int temp=a;//这里注意B不能直接赋给A,因为那样A的值很容易丢失。
a=b;
b=温度;
}
如果(交流)
{
int temp=a;
a=c;
c=温度;
}
如果(公元前)
{
int temp=b;
b=c;
c=温度;
}
Printf(降序为:%d %d %d\n ,a,b,c);
返回0;
}
2.编写一个代码,打印1到100之间的所有3的倍数的数字。
#包含stdio.h
int main()
{
int I=0;
for(I=0;我我)
{
如果(i%3==0)
{
printf(%d ,I);
}
}
返回0;
}
3.给定两个数,求这两个数的最大公倍数。
比如24和18是按相位划分的。首先看24的余数是不是0。如果不是0,用除数除它,直到余数为0。这时,最后的除数是一个公倍数。
#包含stdio.h
int main()
{
int a=0;
int b=0;
int temp=0;
Printf(请输入两个数字:\ n );
scanf_s(%d %d ,a,
While(temp=a% b)//只要结果不为0,就进入循环。
{
a=b;
b=温度;
}
Printf(公倍数为:%d ,b);
返回0;
}
4.打印1000年和2000年之间的闰年
#包含stdio.h
int main()
{
int year=0;
for(年份=0;年份=2000年;年份)
{
//确定年份是否是闰年。
//1.能被4整除,不能被100整除
//2.这是能被400整除的闰年。
if(年份% 4==0年份% 100!=0)
{
Printf(闰年是:%d\n ,年);
}
else if(year@0==0)
{
Printf(闰年是:%d\n ,年);
}
}
返回0;
}
5.打印100到200之间的质数
#包含stdio.h
int main()
{
int count=0;
int I=0;
for(I=100;i=200我)
{
int j=0;
for(j=2;j j)
{
如果(i%j==0)
{
打破;
}
}
如果(j==i)
{
数数;
printf(%d\n ,I);
}
}
printf(count=%d\n ,计数);
返回0;
}
优化方案:首先偶数肯定不是质数,所以先生成100到200之间的奇数。根据c=a*b,那么a或b必须小于C平方根.
#包含stdio.h
# include math.h //sqrt函数在这个库中。
int main()
{
int count=0;
int I=0;
for(I=101;i=200i 2)
{
int j=0;
for(j=2;j=sqrt(I);j)
{
如果(i%j==0)
{
打破;
}
}
if (j sqrt(i))
{
数数;
printf(%d\n ,I);
}
}
printf(count=%d\n ,计数);
返回0;
}
6.写一个程序来计算在1到100之间的所有整数中有多少位数字9出现。
#包含stdio.h
int main()
{
int count=0;
int I=0;
for(I=1;i=100我)
{
if (i % 10==9)
{
数数;
}
如果(i/10==9)
{
数数;
}
}
printf(%d\n ,count);
返回0;
}
7.计算1/1-1/2 1/3 1/4 1/5的值.1/99 1/100并打印出结果。
#包含stdio.h
int main()
{
int I=0;
双和=0.0;
int flag=1;
for(I=1;i=100我)
{
sum=flag *(1.0/I);//这里必须是1.0,否则结果都是错的。
flag=(-flag);
}
printf(%lf\n ,sum);
返回0;
}
8.找出10个整数中的最大值。
#包含stdio.h
int main()
{
int I=0;
int arr[]={ 1,2,3,4,5,6,7,8,9,10 };
int SZ=sizeof(arr)/sizeof(arr[0]);
int max=arr[0];
for(I=0;i=10我)
{
if(max arr[i])
max=arr[I];
}
printf(%d\n ,max);
返回0;
}
输入10个数字,找出最大值。
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
int main()
{
int I=0;
int arr[10]={ 0 };
Printf(请输入一个数字:);
for(I=0;我我)
{
scanf(%d ,arr[I]);//不要忘记添加地址获取操作符。
}
int max=arr[0];
for(I=1;我我)
{
if (arr[i] max)
{
max=arr[I];
}
}
printf(max=%d\n ,max);
返回0;
}
9.输出乘法公式表。
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
int main()
{
int I=0;
int j=0;
for(I=1;我我)
{
for(j=1;j I 1;j)
{
printf(%d*%d=-,I,j,I * j);//Output as-表示输出是两个字符。如果少于两个字符,将自动填充一个空格。%-2d是输出的左对齐。
}
printf( \ n );
}
返回0;
}
10.设计一个猜谜游戏。
# define _ CRT _ secure _ no _ warnings//scanf所在的头文件
# includes dio . h//srand函数所在的头文件
#include time.h //time函数所在的头文件
# includestdlib . h//rand函数所在的头文件。
无效菜单()
{
printf( * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n );
printf( * * * 1 . play 0 . exit * * * \ n );
printf( * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n );
}
无效游戏()
{
//时间戳:当前时间-1970年1.1 0:0:0时差换算成秒后的数字。
int ret=0;
int guess=0;
Printf(猜测数字\ n );
ret=rand()0 1;//生成一个随机数。生成的随机数的范围是0-0x7fff,也就是换算成十进制是32767。取100的余数,输出1-100之间的随机数。
while (1)
{
scanf(%d ,猜测);
如果(猜ret)
{
Printf(猜小\ n );
}
else if(猜ret)
{
Printf(猜大\ n );
}
else if (guess==ret)
{
Printf(恭喜你猜对了\ n );
打破;
}
}
}
int main()
{
//猜数字游戏
//1.电脑会产生一个随机数
//2.猜数字
int input=0;
srand((无符号int)time(NULL));//设置时间的起点
做
{
menu();
Printf(请选择:);
scanf(%d ,输入);
开关(输入)
{
案例1:
Printf(开始游戏\ n );
game();
打破;
案例0:
Printf(退出游戏\ n );
打破;
默认值:
Printf(您输入错误,请重新输入\ n );
打破;
}
} while(输入);
返回0;
}
11.关闭程序。
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
# include stdlib . h//系统函数所在的头文件
# include string . h//strcmp函数所在的头文件
int main()
{
char input[20]={ 0 };
系统(关闭-s-t60 );//这里一定要注意,命令和空格键的格式不能打错。
再次重申:
Printf(提示!您的计算机将在1分钟后关闭。如果输入“我是猪”,可以取消关机\ n’);
scanf(%s ,输入);
If (strcmp(输入,我是猪)==0)
{
系统(“关断-a”);
}
其他
{
再次转到;
}
返回0;
}
喜羊羊
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。