上课笔记(P41-P96)
运算符
算术运算符
'+' - * /(除) %(取余数 )
关系运算符
> >= < <= !=(不等于) ==(等于)
逻辑运算符
!(非) &&(并且) ||(或)
真是1表示
假是0表示
&&左边表达式为假,不执行右边表达式
||左边表达式为真,不执行右边表达式
赋值运算符
= += -= /= *=
优先级别
算数 > 关系 > 逻辑 > 赋值
除法与取模运算符
1.除法的运算结果和运算对象的数据类型有关,两个数都是int,商就是int,若商有小数,则截取小
数部分;被除数 和除数中只要有一个或两个都是浮点型数据,则商也是浮点型,不截取小数部分。
eg:
16/5==3 16/5.0==3.20000 -13/4==-4
-13/-3==4 3/5==0 5/3==1
2.
取余的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同
eg:
13%3 == 1 13%-3 == 1 -13%3 == -1
-13%23 == -13 3%5 == 3
取模代码如下
#include <stdio.h>
int main (void)
{
printf ("%d %d %d %d %d %d\n",3%3,13%-3,-13%3,-13%-3,-13%23,3%5);
return 0 ;
}
流程控制
顺序
选择
定义
某些代码可能执行,也可能不执行,有选择的执行某些代码
分类
if
1.if最简单的用法
格式:if(表达式)
语句
功能:如果表达式为真,执行语句。
如果表达式为假,语句不执行。
2.if的范围问题
1.
if (表达式)
语句A;
语句B;
解释:if默认只能控制语句A的执行与不执行
if午法控制语句B的执行
2.
if (表达式)
{
语句A;
语句B;
}
3.if...else...的用法
4.if...else if...else...的用法
5.C语言对真假的处理
非零即真
零就是假
真用1表示
假用0表示
6.if举例--求 分数的等级
7.if常见问题的解析
switch
循环
if最简单的用法 1.
#include <stdio.h>
int main (void)
{
if(3>2)
printf ("AAAA\n");
return 0 ;
}
2
#include <stdio.h>
int main (void)
{
if (3)
printf ("AAAA\n");
if (0)
printf ("BBBB\n");
if (0 == 0)
printf ("CCCC\n");
return 0 ;
}
if的范围问题
#include <stdio.h>
int main (void)
{
if(1>2)
printf ("AAAA\n");
printf ("BBBB\n");
return 0;
}
if……else的用法 1.
#include <stdio.h>
int main (void)
{
int i,j ;
scanf ("%d,%d",&i,&j);
if (i>j)
printf ("i大于j\n");
else
printf ("i小于j\n");
return 0;
}
2.(错误示范)
#include <stdio.h>
int main (void)
{
if(1>2)
printf ("AAAA\n");
else
printf ("BBBB\n");
printf ("CCCC\n"); /*不属于if语句,是个错误示范*/
return 0;
}
3.
#include <stdio.h>
int main (void)
{
double delta = 3;
if (delta > 0)
printf ("有两个解!\n");
else if (delta == 0)
printf ("有一个解\n");
else
printf ("无解\n");
return 0;
}
if等级举例 1.
#include <stdio.h>
int main (void)
{
int score;
printf ("请输入您的成绩");
scanf ("%d", &score);
if (score >= 100)
printf ("你在做梦\n");
else if ( 90 <= score && score <= 100 )
printf ("你做的不错\n");
else if ( 80 <= score && score <=90)
printf ("良好");
else if (60 <= score && score <= 80)
printf ("及格\n");
else if ( 0 <= score && score <= 60)
printf ("不及格");
return 0;
}
前面几次输出错误是因为我对score在scanf中 写成了%d但是定义的是float
3.
互换两个数字
#include <stdio.h>
int main (void)
{
int i = 3;
int j = 5;
int t;

t = i;
i = j;
j = t;
printf ("%d, %d",i,j );
return 0;
}
4.
对任意三个数字排序
#include <stdio.h>
int main (void)
{
int a,b,c;
int t;
printf ("请输入三个整数:");
scanf ("%d %d %d",&a,&b,&c);
if (a<b)
t = a;
a = b;
b = t;
else if (a < c)
t = a;
a = c;
c = t;
printf ("%d,%d,%d",a,b,c);
return 0;
}
为什么需要循环的例子
#include <stdio.h>
int main (void)
{
int i;
int sum = 0;
for (i=1;i<=100;i++)
sum = sum +i;
printf ("sum = %d",sum);
return 0 ;
}
计算1到1/100的和
#include <stdio.h>
int main (void)
{
int i;
float sum = 0;
for (i=1;i<=100;i++)
sum = sum + 1/ (float)(i) ;
printf ("sum = %f",sum);
return 0 ;
}
强制转化类性
格式:
(数据类型)(表达式)
功能:
把表达式的值强制转化为前面所执行的数据类型
例子
(int)(4.5+2.2) 最终值是 6
(float)(5) 最终值是 5.000000
浮点数存储所带来的问题
float和double都不能保证可以准确的存储一个小数
举例:
有一个浮点数x如何判断x的值是否为零
if (|x-0.0000001| < 0.0000001)
是零
else
不是零
求1到100之间的奇数的和
#include <stdio.h>
int main (void)
{
int i;
int sum = 0;
for (i=1;i<101;i++)
{
if (i%2 == 1)
sum += i;
}
printf ("sum = %d",sum);
return 0 ;
}
求1到100之间的奇数个数
#include <stdio.h>
int main (void)
{
int i;
int cnt = 0;
for (i=1;i<101;i++)
{
if (i%2 == 1)
++cnt;
}
printf ("cnt = %d",cnt);
return 0 ;
}
求1到100之间的奇数的平均数
#include <stdio.h>
int main (void)
{
int i;
int cnt = 0;
int sum = 0;
float avg ;
for (i=1;i<101;i++)
{
if (i%2 == 1)
{
++cnt;
sum += i;
}
}
avg = 1.0*sum / cnt;
printf ("cnt = %d\n",cnt);
printf ("sum = %d\n",sum);
printf ("avg = %f\n",avg);
return 0 ;
}
for的用法
for
1.格式:
for (1,2,3)
语句 A;
2.执行的流程【重点】
单个for循环的使用
多个for循环的嵌套使用
for(1,2,3)
for(4,5,6)
A;
B;
3.范围问题
while
1.执行顺序
2.与for比较
3.举例
4.什么时候用while
do……while……
运算符的知识
自增(或自减)
分类:
前自增 ---- ++i
后自增 ---- i++
三目运算符
#include <stdio.h>
int main (void)
{
int i;
i = (0>2 ? 5 : 1);
printf ("%d\n",i);
return 0 ;
}
求回文数
#include <stdio.h>
int main (void)
{
int m ;
int val;
int sum = 0;
printf ("请输入您需要判断的数字");
scanf ("%d",&val);
m=val;
while (m)
{
sum=sum*10+m%10;
m/=10;
}
if (sum=val)
printf ("Yes\n");
else
printf ("No\n");
return 0 ;
}
斐波那契数列
#include <stdio.h>
int main (void)
{
int n;
int f1,f2,f3;
int i;
f1=1;
f2=2;
printf ("请输入数列");
scanf ("%d",&n);
if (1==n)
{
f3=1;
}
else if (2==n)
{
f3=2;
}
else
{
for (i=3;i<=n;++i)
{
f3=f1+f2;
f1=f2;
f2=f3;
}
}
printf ("%d\n",f3);
return 0 ;
}
电梯问题
#include <stdio.h>
int main (void)
{
int val;
printf ("输入楼层");
scanf ("%d",&val);
switch (val)
{
case 1:
printf ("1开\n");
break;
case 2:
printf("2开\n");
break;
}
return 0 ;
}
#include <stdio.h>
int main (void)
{
int val;
printf ("输入楼层");
scanf ("%d",&val);
switch (val)
{
case 1:
printf ("1开\n");
break;
case 2:
printf("2开\n");
break;
}
return 0 ;
}
课后作业
创建一个电杭账号
5.10-7
结果为:SOS:4,4.00
5.10-13
结果是:
a. --x
b. m=n%k
c. p=1.0*q/b-a
d. x=1.0*(a+b)/(c*d)
5.11-3
5.11-8
#include <stdio.h>
int main (void)
{
int first_operand,m;
const int second_operand;
printf ("This program computers moduli\n");
printf ("Enter an integer to serve as the second_operand :");
scanf ("%d",&second_operand);
printf ("Now enter first_operand :");
scanf ("%d",&first_operand);
m = first_operand % second_operand;
printf ("%d %% %d is %d\n",first_operand, second_operand, m);
while (first_operand > 0)
{
printf ("Enter next number for first_operand(<=0 to input):");
scanf ("%d",first_operand);
m = first_operand % second_operand;
printf ("%d %% %d is %d\n",first_operand, second_operand, m);
}
printf ("Done");
return 0;
}
自己写的程序
6.16-5
#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-12
#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 %ld partial sum for series1 is: %.5f\n",limit,series1);
printf ("The %ld partial sum for series2 is: %.5f\n",limit,series2);
return 0 ;
}
7.11-2
a.number > 90 || number = 90 && number<100
b.'a'=<ch && ch <= 'j'&& 'l'=<ch && ch <='o'&& ch <='z'
c.number>=1 && number<=4 && number >=4 && number <=9
d.number<1&&number>10
7.11-10
q
c
h
b
#include <stdio.h>
int main (void)
{
char ch;
while ((ch = getchar()) !='#')
{
switch (ch)
{
case (ch == '\n')
printf("Step 1\n");
case (ch =='c')
case (ch == 'b')
break
case (ch == 'h')
printf("Step 3\n");
default:
printf ("Step 2\n");
break;
}
printf ("Done\n");
return 0 ;
}
}