|
楼主 |
发表于 2010-7-29 11:47:13
|
显示全部楼层
第四章 流程控制
1 P97:判断是否闰年的程序中引出:格式化设置时的%起什么作用?
2 三种基本流程控制结构:顺序结构、选择结构、循环结构。
3 选择结构的五种控制语句:if,if…else,if …else if,条件运算符(?:),switch。
4 条件运算符是C语言中唯一一个三元运算符,只允许单行表达式。
5 事实上,C语言中并没有if…else if这种语法,它只是将if…else接在else之后。
6 switch语句的“失败经过”现象,通常加break;来避免。
7 switch条件表达式的结果必须是整数或者字符。
8 循环结构有三种控制语句:for,while,do…while。
9 for语句的嵌套。
10 while语句必须自行加入变量初始值及设置一个变量作为计数器。
11 do…while后面需加上分号;此语句会先执行循环语句,后判断条件是否成立。
12 break语句会立刻跳出最近的一层循环体,并将控制权交给循环体外的下一行程序;continue语句则只是忽略之后未执行的语句,但并不跳离循环。
13 goto语句尽量不用,注意标签语句的设置。
14 kbhit()函数。
15 判断奇偶数的方法:
int x;
if(x&1)
printf("x为奇数");
else
printf("x为偶数");
16 课后题第二大题第7题,注意答案中printf("%*s",i," ");的用法。意为:若i=5,则该语句为printf("%5s"," ");。
但是程序:
#include<stdio.h>
int main()
{
int i;
scanf("%d",i); //此处应为&i。
printf("%*s\n",i,"*");
return 0;
}
运行后,程序会无限循环。为何?原因又找到了,又把&忘了!
17 条件运算符(?:)的用法。
18 程序(1):
#include<stdio.h>
int main()
{
int a,b,t;
scanf("%d%d",a,b); //此处忽略了&a,&b!
a<=b?t=a:t=b;
printf("%d\n",t);
return 0;
}
为何不能输出正确结果?原因找到了!而程序(2):
#include<stdio.h>
int main()
{
int a=1,b=2,t;
a<=b?t=a:t=b; //或t=a<=b?a:b;
printf("%d\n",t);
return 0;
}
19 如果用的是scanf("%d,%d\n",&i,&j);输入参数时得在i,j之间用","号;如果用的是scanf("%d%d\n",&i,&j);就得在i,j之间用空格。
20 这个最大公因数的问题,我考虑了一天多,最终写成下面这样了。目前除了只能解决正整数以外,在输入两个数完毕之后,必须再输入一个字符如“d”,才能求出最大公约数。为何?明白了,原来如此。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b,i;
printf("只能输入正整数:");
scanf("%d,%d\n",&a,&b); //%d后多加了一个\n。
if(a<=b)
i=a;
else
i=b; //本段可利用条件运算符简化为:i=a<=b?a:b;
for(;i>=1;i--)
{
if(a%i==0&&b%i==0)
break;
}
printf("%d\n",i);
return 0;
}
21 需要学习数论中的辗转相除法求最大公因子。
22 课后第27题,解答:
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
while(n!=0)
{
i=n%10;
printf("%d",i);
n=n/10; //while循环用于不知道循环次数的情况。此句为计数器。
}
return 0;
}
|
|