期末上提纲
合法的标识符
标识符由字母(A-Z,a-z)数字 (0-9)、下划线“_”组成
首字符不能是数字,但是可以是字母或者下划线
标识符对大小写敏感,即严格区分大小写。
/和%
1/2=0
1.0/2=0.5
%的两个操作符必须是整数
例:6.0%4是错误的
余数符号与被余数的符号相同
例:4%(-3)=1,-4%3=-1
字母和数字的判别
1、用isalpha()函数来监测一个字符是否是字母
(头文件cctype)
若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0
2、用ascii码判断
第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母。
#include <stdio.h>
int main() {
char c;
c = getchar();//读取一个字符
if (c >= '0' && c <= '9')
printf("是数字\n");
else if (c >= 'a' && c <= 'z')
printf("是小写字母\n");
else if (c >= 'A' && c <= 'Z')
printf("是大写字母\n");
return 0;
}
大小写字母的转换
大小写字母在ascii码上相差32,因此小写字母转换为大写字母的方法就是将小写字母的 ASCII 码值减去 32,便可得到与之对应的大写字母。同理大写字母转换小写字母就是将大写字母的ASCII码加上32。
#include <stdio.h>
int main()
{
char a, b;
printf("输入一个小写字母:\n");
a = getchar();
b = a - 32;
printf("转换后的字母为:%c,%d\n", b, b);
return 0;
}
类型强制转换
整型类型级别从低到高依次为:
int -> unsigned int -> long -> unsigned long -> long long -> unsigned long long
浮点型级别从低到高依次为:
float -> double
一个表达式中出现不同类型间的混合运算,较低类型将自动向较高类型转换。
#include<stdio.h>
int main() {
int n;
n = (int)10.9 + (int)12.7 + (int)11.8;
printf("%d", n);
return 0;
}
这里n的值为33。
#include<stdio.h>
int main() {
int n = 10.9 + 12.7 + 11.8;
printf("%d", n);
return 0;
}
这里n的值为35。
运算符
运算符 | 描述 |
---|---|
++ | 自增运算符,整数值增加 1 |
– | 自减运算符,整数值减少 1 |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 |
关系运算符
C 语言提供的关系运算符有: >(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)和 !=(不等于)6 种二元关系运算符。
例如:
int a=3,b=5;
则有:
a>b:逻辑假,其值为 0;
a>=b:逻辑假,其值为 0;
a<b:逻辑真,其值为 1;
a<=b:逻辑真,其值为 1;
a==b:逻辑假,其值为 0;
a!=b:逻辑真,其值为 1;
#include<stdio.h>
int main (void)
{
int a=0,b=1,c;
c=a>=b||b++>1;
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
代码分析:
根据运算符的优先级,表达式 a>=b||b++>1 等价于 (a>=b)||(b++>1)。a>=b 为假,其值为 0,逻辑或 || 不会发生“短路”。
接着计算逻辑或 || 的右操作数 b++>1,由于是后缀加 1,故先取 b 的原值 1 与 1 比较大小,由于 1>1 为假,故逻辑或 || 的右操作数也为假,假 || 假 = 假,故 c 的值为 0。执行了一次 b++ 运算,故 b 的自身值增了 1,变为 2。
运行结果为:
a=0,b=2, c=0
(此代码和分析参考自此网站)
逻辑运算符
&& 与运算,双目,对应数学中的“且”
|| 或运算,双目,对应数学中的“或”
! 非运算,单目,对应数学中的“非”
参考
条件运算符
格式:条件?表达式1:表达式2
int max(int a,int b){return a>b?a:b;}//找两个数最大值
switch语句(注意break)
switch(表达式)
{
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
…
case 常量表达式n: 语句n;
default:语句n+1;// 没有识别到任何命令}
三个数找最大值、最小值
#include<stdio.h>
int main()
{
int a, b, c, max, min;
printf("请输入三个整数\n");
scanf("%d%d%d", &a, &b, &c);
max = (a > b) ? a : b;
max = (max > c) ? max : c;
min = ( a<b ) ? a:b ;
min = ( min<c ) ? min:c ;
printf("三个数中最大值为:%d,最小值为:%d\n", max, min);
return 0;
}
将百分制成绩输出为相应的等级
输入一个百分制的成绩t,将其转换成对应的等级然后输出,具体转换规则如下:
90~100为A
80~89为B
70~79为C
60~69为D
0~59为E
要求:如果输入数据不在0~100范围内,请输出一行:“Score is error!”。
#include<stdio.h>
int main()
{
int score;
printf("Input the score:");
scanf("%d", &score);
if (score >= 90 && score <= 100)
printf("The level is A.\n");
else if (score >= 80 && score < 90)
printf("The level is B.\n");
else if (score >= 70 && score < 80)
printf("The level is C.\n");
else if (score >= 60 && score < 70)
printf("The level is D.\n");
else if (score >= 0 && score < 60)
printf("The level is E.\n");
else printf("Score is error!\n");
return 0;
}
判断闰年
判断任意年份是否为闰年,需要满足以下条件中的任意一个:
① 该年份能被 4 整除同时不能被 100 整除;
② 该年份能被400整除。
#include<stdio.h>
int main()
{
int year;
scanf("%d", &year);
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
printf("%d此年是闰年\n", year);
else
printf("%d此年非闰年\n", year);
return 0;
}
奇偶数
#include<stdio.h>
int main()
{
int a;
scanf("%d", &a);
if (a % 2 != 0)
printf("%d是奇数",a);
else
printf("%d是偶数",a);
return 0;
}
水仙花数
“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13 + 53 + 33。
求1000以内的水仙花数
#include<stdio.h>
#include<math.h>
int main()
{
int sum,a,b,c;
for (int i = 100; i < 1000; i++)
{
a = i / 100;
b = (i - a * 100) / 10;
c = i % 10;
if (i == pow(a, 3) + pow(b, 3) + pow(c, 3))
printf("%d ", i);
}
return 0;
}
求解一元二次方程
#include<stdio.h>
#include<math.h>
int main()
{
float a, b, c, x1, x2;
printf("输入方程的abc:");
scanf("%f%f%f", &a, &b, &c);
if (b * b - 4 * a * c < 0)//判断方程是否有实根
{
printf("方程无实根!");
}
else//如果有解就打印出方程的根
{
x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
printf("输出为:x1=%.2f,x2=%.2f", x1, x2);
}
return 0;
}
99乘法表
#include <stdio.h>
int main() {
int i,j;
for(i=1;i<=9;i++) {
for(j=1;j<=9;j++)
printf("%d*%d=%2d\t", i, j, i*j);
printf("\n");
}
return 0;
}
输出各种三角形
参考
正三角
#include <stdio.h>
int main() {
int i, j,n;
scanf("%d", &n);//输入行数
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i - 1; j++)
printf(" ");
for (j = n - i - 1; j < n + i; j++)
printf("*");
printf("\n");
}
return 0;
}
倒三角
#include <stdio.h>
int main() {
int i, j,n;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
for (j = 0; j < i; j++)
printf(" ");
for (j = 0; j < 2 * n - 2 * i - 1; j++)
printf("*");
printf("\n");
}
return 0;
}