1.程序结构: 顺序结构 、选择结构(分支结构)、循环结构。
2.bit:位 ,是指为0 或者1;byte :字节, 一个字节 = 八个位。
3.编译预处理不是C语言的一部分,不占运行时间,不要加分号。
4.#define PI 3.1415926; ,这个写法是错误的,一定不能出现分号。
5.每个C语言程序写完后,都是先编译(.c),后链接(.obj),最后运行(.exe)。
6.标识符:是由字母,数字,下划线组成,并且第一个必须为字母或下划线。
7.进制转化代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int TenNum(char a[],int B); //将输入的数字转换成10进制数
void Numchange(int m, int B); //将转换好了的10进制数转换为所需进制数
int TenNum(char a[], int B)
{
int len, i, num;
int sum = 0;
len = strlen(a); //求得字符串长度
for (i = 0; i < len; i++)
{
if (a[i] >= '0' && a[i] <= '9')
num = a[i] - '0';
else if (a[i] >= 'A' && a[i] <= 'F')
num = a[i] - 'A' + 10;
sum = sum * B + num;
}
return sum;
}
void Numchange(int m, int B)
{
int n;
if (m)
{
Numchange(m / B, B);
n = m % B;
if (n < 10)
printf("%d", n); //小于10直接输出
else
printf("%c", n + 55); //大于10转换成字符输出
}
}
int main()
{
int B, b,m;
char a[20];
printf("请输入待转换数的进制(2-16):");
do {
scanf_s("%d", &B);
} while (B < 2 && B > 16);
printf("请输入待转换数:");
getchar(); //将输入数据存入缓冲区,然后用后面的gets_s函数将缓冲区中的数据存在数组中
gets_s(a,19); //将输入的n进制数存放在数组a中
//gets(buffer) //函数对输入长度不加以限制
//gets_s(buffer,size) //其中第二参数就是允许的输入长度
m = TenNum(a, B); //将输入的数字转换成十进制数
printf("请输入需要转成几进制数(2-16):");
do {
scanf_s("%d", &b);
} while (b < 2 && b > 16);
printf("%d进制数%s转换为%d进制数的结果为:",B,a,b);
Numchange(m, b); //将十进制数转换为所需进制数
printf("\n");
system("pause");
return 0;
}
8.C语言中的八进制规定要以0开头、十六进制规定要以0x开头。
9.整型一般是4个字节, 字符型是1个字节,双精度一般是8个字节。
10.“/” 两边都是整型的话,结果就是一个整型。 3/2的结果就是1;
“/” 如果有一边是小数,那么结果就是小数。 3/2.0的结果就是1.5;
“%”符号请一定要注意是余数,%符号两边要求是整数。
11.int x=y=10: 错啦,定义时,不可以连续赋值。
int x,y;x=y=10; 定义完成后,可以连续赋值。
12.自加自减:++a表示将a先加上1后再使用;a++ 表示a先使用后再加上1;
13.逗号表达式:z=(2,3,4)(整个是赋值表达式) 这个时候z的值为4。(等于括号中最右边的值)
z= 2,3,4 (整个是逗号表达式)这个时候z的值为2。
14.强制类型转换:
一定是 (int)a 不是 int(a),注意类型上一定有括号的。
注意(int)(a+b) 和(int)a+b 的区别。前是把a+b转型,后是把a转型再加b。
15.字符与字符串:
'1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。
'0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。
字符是可以进行算术运算的,记住: '0'-0=48
大写字母和小写字母转换的方法: 'A'+32='a' 相互之间一般是相差32。
16.使用printf和scanf函数时,要在最前面加上#include“stdio.h”。
17.格式说明:
(其中带前导表示:八进制带0,十六进制带0x)
18.输入格式scanf(“%d,%d”,&x,&y)。
19.putchar ,getchar 函数的考查:
char a = getchar() 是没有参数的,从键盘得到你输入的一个字符给变量a。
putchar(‘y’)把字符y输出到屏幕中。
20.switch语句:判断其中ap等于多少时执行相应语句:
21.循环语句:for() ; while(); do- while()
22.输入123,输出321逆序输出数据
int i=123;
while(i!=0)
{
printf(“%d”,i%10);
i=i/10;}
23.如何判断a是否为质数:
void iszhishu( int a )
{ for(i=2;i<a/2;i++)
if(a%i==0) printf(“不是质数”);
printf(“是质数!”);
}
24.求n!
int fun(int n)
{ int p=1;
for(i=1;i<=n;i++) p=p*i;
return p;
}
25.int *p 中 *p和p的差别:简单说*p是数值,p是地址!
*p可以当做变量来用;*的作用是取后面地址p里面的数值
p是当作地址来使用。
26. *p++是 地址会变化。 口诀:取当前值,然后再移动地址!
(*p)++ 是数值会要变化。 口诀:取当前值,然后再使数值增加1。
27.指针变量两种初始化
方法一:int a=2,*p=&a;(定义的同时初始化)
方法二:int a=2,*p; (定义之后初始化)
p=&a;
28.int x=5,int a[x]; 不合法,因为个数是x,是个变量,非法的,
define P 5 int a[P] 合法,define 后的的P是符号常量,只是长得像变量
29.int a[2][]={1,2,3,4,5,6}; 不合法,不可以缺省列的个数。
int a[][3]={1,2,3,4,5,6}; 合法,可以缺省行的个数。
30.一维数组a[10]:a是地址常量,也就是元素a[0]的地址,a+1是跳一列。
二维数组a[3][3]:a是地址常量,是元素a[0][0]的地址,a+1是跳一行,其中a[0]、a[1]、a[2]也都是地址常量,a[0]+1, a[1]+1,a[2]+1都是跳一列。
31.strlen 和 sizeof的区别:sizeof求的是数据类型所占空间的大小,而strlen是求字符串的长度。
char *c="abcdef";
char d[]="abcdef";
printf("%d%d/n",sizeof(c),strlen(c));
printf("%d%d/n",sizeof(d),strlen(d));
输出结果:
4 6
7 6
32.char a[]={‘a’,’b’,’c’}; 数组长度为3,字符串长度不定。sizeof(a)为3。
char a[5]={ ‘a’,’b’,’c’} 数组长度为5,字符串长度3。sizeof(a)为5。
33.数据输入:good good study!
scanf(“%s”,a); 只会接收 good.不可以接收空格。
gets(a); 会接收good good study!可以接收空格。