C语言易错点常考点总结

  • 格式:doc
  • 大小:92.50 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
include <stdio.h>
include <process.h>
void main(){
FILE *fp;
int i;
char c,b[10];
struct student{
int num;
char name[16];
}stu[5];
if(fp=(fopen(“ma.txt”,”r”))==NULL)printf(“Can’t open this file!\n”);
k=(int)sqrt(n)+1;
if(n==2)//打印是素数
if(n!=2){
for(i=2;i<=k;i++){
j=n%i;
if(j==0) break;}
if(i<k+1) //打印不是素数
else}//打印是素数
3.交换两变量的值
int x,y;
int *pa=&x,*pb=&y;
swap(pa,pb);
if(head->num==num){
p=head;
head=p->next;
free(p);
return head;
}
q=p=head;
while(p!=NULL&& p->num!=num){
q=p;
p=p->next;}
if(p!=NULL){
q->next=p->next;
free(p);
return head;
exit(0);
}//此时文件已经打开
2)关闭文件(!!!在程序终止前关闭!!!)
fclose(fp);
3)打开文件
fp=fopen(“ma.txt”,”w”);
4)将数据写入文件
fprintf(fp,“%s”,b);
fwrite(&stu[0],sizeof(struct student),1,fp);
int *P(); //返回值为整型指针的函数
int *(*p)(); //指向返回值为整型指针的函数的指针
1
[ ]
下标运算符
双目
左结合
( )
圆括号
左结合
->
指向结构体成员运算符
左结合
.
结构体成员运算符
左结合
++
后缀
单目
左结合
--
后缀
单目
左结合
2
!
逻辑非
单目
右结合
++
前缀
单目
右结合
--
前缀
单目
右结合
-
取负
单目
右结合
+
取正
单目
右结合
(类型)
类型转换
单目
右结合
*
指针运算符
单目
右结合
&
取地址
单目
右结合
sizeof
int i,j;
struct student *t;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(p[j+1]->num>p[j]->num){//升序:只需p[j+1]->num<p[j]->num即可
t=p[j];
p[j]=p[j+1];
p[j+1]=t;}
}
}
3)插入结点
插入的结点为struct student *ps
q->next=ps;ps->next=p;
4)删除结点
struct student *delete(struct student *head,int n){ //要删除学号为n的人的信息
struct student *p,*q;
q=p=head;
int low=0, mid, high=n-1;
for(;low<=high;){
mid=(low+high)/2;
if(key<a[mid]) high=mid;
else if(key==a[mid]) return(mid);
else low=mid;
}
}
12.文件
1)判断文件是否能打开(!!!先打开后使用!!!)
for(j=1;j<i;j++)
*(*(a+i)+j)=*(*(a+i-1)+j)+*(*(a+i-1)+j-1);}
void main(){
int i=0,j=0,a[30][30]={0},n,m;
printf("Please input n:\n");
scanf("%d",&n);
triangle(a,n);
void main(){
struct student stu[5]={{1},{6},{2},{4},{3}},*ps[5];
int i;
for(i=0;i<5;i++) ps[i]=&stu[i];
sort(ps,5);
for(i=0;i<5;i++) printf("%d ",ps[i]->num);
4.排序
1)选择排序法(降序)
#include <stdio.h>
struct student{
int num;};
void main(){
void sort(struct student *p[],int n);
struct student stu[5],*ps[5];
inti;
for(i=0;i<5;i++) ps[i]=&stu[i];
fseek(fp,-10L,SEEK_CUR);//以当前位置为起点,向文件头移动10个字节
fseek(fp,-10L,SEEK_END);//以文件尾为起点,向文件头移动10个字节
8)ftell
ftell(fp);//获取文件位置指针当前位置(字节位移数)
13.标准流指针(程序开始运行时系统自打开,程序结束运行时系统自动关闭)
fputc(c,fp);(fputc(‘\n’,fp);)
fputs(b,fp);
5)从文件中读取数据
fscanf(fp,”%d”,&i);//格式化从文件中读取数据,类似scanf
fread(&stu[0],sizeof(struct student),1,fp);//数组元素形式从文件中读取数据
}
printf(“Not found!\n”);
return head;
}
8.比较字符串大小(#)
intstrcmp(char *s,char *t){
for(;*s==*t;s++,t++)
if(*s==’\0’) return(0);
return(*s-*t);
}
9.连接两字符串
void strcat(char *s,char *t){
struct student *p=NULL,*q=NULL;
p=(struct student *)malloc(sizeof(struct student));
head=p;
printf(“Please input information:\n”);
scanf(“%d %lf”,&p->num,&p->grade);
}
5.矩阵转置
a[i][j]=a[j][i]
6.杨辉三角
#include <stdio.h>
void triangle(int (*a)[30],int n){
int i,j;
for(i=0;i<n;i++){
*(*(a+i)+0)=1;
*(*(a+i)+i)=1;}
for(i=2;i<n;i++)
swap(int *p1,int *p2){
int t;
t=*p1;*p1=*p2;*p2=t;}
(swap函数中如果int *t;t=p1;p1=p2;p2=t;是错误的,因为实参与形参只遵循值传递规则,p1,p2的值分别是pa,pb,函数中交换的是p1,p2的值而不是pa,pb的值,交换完后函数调用结束,p1,p2的值均被回收,未实际改变任何实参的值)
scanf函数返回值:输入的字符个数
1)格式控制字符
%x:无符号十六进制数
%l:长整型/双精度转换(如本为float型,输出时”%lf”,则会转换为double型再输出)
%o:无符号八进制数
%%:打印百分号
%*:跳过该数据项不读
%m.nf:保留n位小数(四舍五入),按列宽m输出,以float型(!!!输入不可以!!!)(市及数据位大于m,按实际数据位输出)
c=fgetc(fp);//字节为单位从文件中读取数据
fgets(b,4,fp);//与gets的区别是fgets需要指定被读取的字符数
6)rewind
rewind(fp);//把当前文件位置指针移到文件头
7)文件随机读写
fseek(fp,10L,SEEK_SET);//以文件头为起点,向文件尾移动10个字节
sort(ps,5);
for(i=0;i<5;i++) printf(“%d”,ps[i]->num);}
void sort(struct student *p[],int n){
int i,j,k;
struct student *t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if(p[j]->num>p[k]->num)k=j;//升序:只需p[j]->num<p[k]->num即可
if(k!=i){
t=p[i];p[i]=p[k];p[k]=t;}
}
2)冒泡排序法(降序)
#include <stdio.h>
struct student{
int num;};
void sort(struct student *p[],int n){
}
p->next=NULL;
free(q);free(p);
return(head);
}
2)打印链表
void output(struct student *head){
struct student*p=NULL;
for(p=head;p->next!=NULL;p++)
printf(“%d: %lf”,p->num,p->grade);
长度运算符
单目
右结合
3
*

双目
左结合
/

双目
左结合
%
取余
双目
左结合
4
+

双目
左结合
-

双目
左结合
6
< <= > >=
关系运算符
双目
左结合
7
==
等于(关系)
双目
左结合
!=
不等于
双目
左结合
11
&&
逻辑与
双目
左结合
12
||
逻辑或
双目
左结合
13
? :
条件运算符
三目
右结合
14
= += -= *= /= %= &= |= ^= <<= >>=
标准输入(键盘)stdin
标准输出(显示器)stdout
标准出错输出(显示器)stderr
14.常见ASCII码值范围
数字:48-57
大写字母:65-90
小写字母:97-122(与大写差32)
控制符:34个(0-32,127)
15.输入输出格式串与函数
printf函数返回值:输出的字符个数(含’,’,’”’,’;’等)
for(;*s!=’\0’;s++);
for(;*t!=’\0’;s++) *s=*t;
}
10.字符串赋值
void strcpy(char *s,char*t){
for(;*t!=’\0’;s++,t++)*s=*t;
}
11.折半查找法(前提是数组已经是有序的,此处设为升序数组)
intsearch(int a[], int nwenku.baidu.com int key){//字符串数组也可,但需先按字典顺序排序
17.结构体相关
!!!结构体定义时不可在定义中赋初值!!!
18.指针类型定义
int **p;//指向int型指针的指针
int *p; //指向int型变量的指针
int *p[5]; //指向含有5个int型变量的一维数组的指针
int (*p)[5]; //含有5个指向int型变量的指针的指针数组
int (*p)(); //指向返回值为整型的函数的指针
数据输入结束标志:遇到空格、回车、制表符(Tab)等非法输入
!!!特别注意:使用”%c”时,输入数据不需要间隔标志!!!
-:输出结果左对齐
+:输出结果右对齐
2)转义字符
\\:输出反斜杠
\...整体是一个字符
\后只能跟单个字母或整型常量(整型常量形式:0…/x…/…)
16.标识符
标识符可由数字、字母、下划线组成,首字符必须为字母或下划线
赋值
双目
右结合
15
,
逗号
左结合
C语言易考点易错点总结
运算符的优先级及结合方向:
常见算法:
1.最大公约数,最小公倍数(x,y)
intm=x,n=y;
int r;
r=m%n;
while(r!=0){
m=n;
n=r;
r=m%n;}此时n为最大公约数,(x*y)/n为最小公倍数
2.判断是否为素数(n)
int i,j,k;
if(p->num==0) printf(“error!\n”);
while(p->num!=0){
q=p;
p=(struct student *)malloc(sizeof(struct student));
q->next=p;
scanf(““%d %lf”,&p->num,&p->grade”);
for(i=0;i<n;i++){
m=0;
for(j=0;j<i+1;j++){
do{printf("%c",' ');m++;}
while(m<n-i);
printf("%d",*(*(a+i)+j));}
printf("\n");}
}
7.链表
1)创建链表
strcut student *creat(struct student *head, int n){