课堂笔记
主要内容
1.运算符 算数运算符 关系运算符 逻辑运算符 赋值运算符 自增自减 三目运算符 运算符优先级 注:遇到优先级问题时,为提高代码可读性,尽量使用括号,不要写出有歧义的代码。 一行代码不要出现多个自增自减符号,这会被视作垃圾代码. 2.流程控制 if else语句 for语句 while语句 switch语句 do while语句 break与continue区别
细节分析
运算符 算术运算符:%(取余数) 关系运算符:> >= < <= !=(不等于) ==(等于) 逻辑运算符:!(非) &(并且) ||(或) 赋值运算符:= += *= /= -= 优先级别:算术>关系>逻辑>赋值
C语言对真假的处理 非零是真 零是真 真是1表示 假是0表示 &&左边的表达式为假,右边的表达式肯定不会执行 ||左边的表达式为真,右边的表达式肯定不会 流程控制 控制程序代码执行的顺序 流程控制的分类 定义:某些代码可能执行,也可能不执行,有选择的执行某些代码
1.1f最简单的用法
格式:if(表达式)
语句
功能:如果表达式为真,执行语句如果表达式为假,语句不执行
2.1f的范围问题
if(表达式)
语句A;
语句B
解释:f默认只能控制语句A的执行或不执行
f无法控制语旬B的执行或不执行
或者讲:语句B一定会执行
if默认只能控制一个语句的执行或不执行
如果想控制多个语句的执行或不执行就必须把这些语句用沿括起来
3.1f..else1f.else...的用法格式
if(1)
A;
else if (2)
B;
else if (3)
C;
else
D;
4.1f的常见问题解析
if(表达式1)
else if(表达式2)
else if(表达式3
else
即便表达式1和2都成立,也只会执行A语句
if(表达式1)
else if(表达式2)
else if(表达式3)
这样写语法不会出错,但逻辑上有漏洞
if(表达式1)
else if(表达式2)
else if(表达式3)
else(表达式4)//第七行
这样写是不对的,正确的写法是要么去掉(表达式4)要么在7行的else后面加if
for
定义:某些代码会被重复执行分类
1.格式: for(1;2;3)
2.执行的流程【重点】
单个for循环的使用多个for循环的嵌套使用
while
1.格式:
while(表达式)
语句;
2.与for的相互比较
for和while可以相互转换
for(1;2;3)等价于while (2)
但for的逻辑性更强,更不容易出错,推荐多使用for
break和 continue
break如果用于循环是用来终止循环,如果用于 switch,则是用于终止switch
break不能直接用于if,除非if属于循环内部的一个子句
例子:
for(1=0;1<3;++1)
{
if(3>2)
break;
printf(“嘿嘿!n);/永远不会输出/
}
在多层循环中, break只能终止最里面包裹它的那个循环
switch
1.格式:
{
case 常量表达式1:语句1;
case 常量表达式2:语句2;
default:
case 常量表达式3:语句3;
}
2.所有的case后面的常量表达式为便于描述我们姑且称之为标签
且标签只能为枚举常量,数值常量,字符常量,常变量,宏变量中的一种。
注意普通变量,枚举变量是不能作为标签使用的
3.switch后面的"表达式"允许是任何类型
重要程序
1.break用于多个for循环
# include<stdio.h>
int main(void)
{
int i, j;
for (i=0; i<3; ++i)
{
for (j=1; j<4; ++j)
break;
printf("同志们好!\n");
}
return 0;
}
2.求1~100之间的奇数之和
# include <stdio.h>
int maiin(void)
{
int i;
int sum = 0;
for (i=1; i<101; ++i)
{
if (i%2 ==1);
sum += i;
}
printf("sum = %d\n", sum);
return 0;
}
3.if常见的错误分析
# include <stdio.h>
int main(void)
{
if (3>2)
printf("哈哈!\n");
else
printf("嘿嘿!\n");
return 0;
}
4.if...else...的用法
# include <stdio.h>
int main(void)
{
double delta = -1;
if (delta > 0)
printf("有两个解!\n");
printf("哈哈!\n");
else if (delta == 0)
printf("有一个唯一的解!\n");
else
printf("无解!\n");
return 0;
}
5.scanf的用法
# include <stdio.h>
int main(void)
{
int i;
char ch;
scanf("%d", &i);
printf("i = %d \n",i);
scanf("%c",&ch);
printf("ch =%c\n",ch);
return 0;
}
# include <stdio.h>
int main(void)
{
int i=0, s=0;
do
{
if(i%2)
{
i++;
continue;
}
i++;
s+=i;
} while (i < 5);
printf("%d\n",s);
return 0;
}
课后习题
注册杭电oj账号
5.10第七题
SOS:4 4.00
5.10第十三题
a.x=x-1;
b.m=n%k;
c.p=q/b-a;
d.(a+b)/(c*d);
5.11第三题
int main(void)
{
int a, b, c;
scanf("%d", &a);
while( a > 0)
{
b = a / 7;
c = a % 7;
printf("%d days are %d weeks,%d days\n", a, b, c);
scanf("%d", &a);
}
return 0;
5.11第八题
#include <stdio.h>
int main (void)
{
int a,c;
const int b ;
printf ("This program computers moduli.\n");
printf ("Enter an integer to serve as the second_operand :");
scanf("%d",&b);
printf ("Now enter first_operand :");
scanf("%d",&a);
while (a > 0)
{
c = a % b;
printf ("%d %% %d is %d\n", a, b, c);
printf ("Enter next number for first_operand(<=0 to input):");
scanf ("%d",a);
}
printf ("Done");
return 0;
}
6.16第五题
这一题我不会写参照答案
# include <stdio.h>
void print_spaces(unsigned int n);
int main(void)
{
char uppercase_letter;
char c1, c2;
do
{
printf("Enter an uppercase letter: ");
scanf(" %c", &uppercase_letter);
} while (uppercase_letter < 'A' || 'Z' < uppercase_letter);
for(c1 = 'A'; c1 <= uppercase_letter; c1++)
{
print_spaces(uppercase_letter - c1);
for (c2 = 'A'; c2 < c1; c2++)
{
printf("%c", c2);
}
for (; 'A' <= c2; c2--)
{
printf("%c", c2);
}
print_spaces(uppercase_letter - c1);
printf("\n");
}
return 0;
}
void print_spaces(unsigned int n)
{
for(int i = 0;i<n;i++)
{
printf(" ");
}
}
6.16第十二题
这道也不会
#include <stdio.h>
int main(void)
{
long int limit;
float sign = 1.0f;
float series1 = 0, series2 = 0;
printf("Enter a number of terms to sum: ");
scanf("%ld", &limit);
for (long int i = 1; i <= limit; i++)
{
series1 += 1.0f/i;
series2 += (1.0f/i) * sign;
sign = -sign;
}
printf("The %ldth partial sum for series 1 is: %.5f\n", limit, series1);
printf("The %ldth partial sum for series 2 is: %.5f\n", limit, series2);
return 0;
}
6.16第十八题
这题也不会
#include <stdio.h>
int main(void)
{
const int DUNBARS_NUMBER = 150;
int friends = 5, week = 0;
printf("Week | Friends\n");
printf("-----+--------\n");
while (friends < DUNBARS_NUMBER)
{
printf("%4d | %7d\n", week, friends);
week++; friends -= week;
friends *= 2;
}
return 0;
}
7.11第二题
a.number>=90 && number<100;
b.ch!=q||ch!=k;
c.number>=1 && number<=9 && number!=5;
d.!(number>=1 && number<9);
7.11第十题
# include <stdio.h>
int main(void)
{
char ch;
ch = getchar();
if(ch !='\n')
{
printf("step1\n");
if(ch !='c')
{
while((ch=getchar()) !='#')
{
if(ch !='b')
break;
else if(ch=='h')
printf("step2\n");
printf("step3\n");
}
}
}
printf("Done\n");
return 0;
}