范文一:【2017年整理】c语言时间设置函数
一、tm结构在time.h中的定义如下:
#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* 秒 – 取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
};
#define _TM_DEFINED
#endif
二、time函数
1、计时:clock()
Clock_t clock(void);
在time.h中,我们可以找到队clock的定义:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000) 可以看到可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:
void elapsed_time()
{
printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC);
}
当然,你也可以用clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:
#include “stdio.h”
#include “stdlib.h”
#include “time.h”
int main( void )
{
long i = 10000000L;
clock_t start, finish;
double duration;
/* 测量一个事件持续的时间*/
printf( "Time to do %ld empty loops is ", i );
start = clock();
while( i-- ) ;
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "%f seconds\n", duration );
system("pause");
}
在笔者的机器上,运行结果如下:
Time to do 10000000 empty loops is 0.03000 seconds
上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变CLOCKS_PER_SEC的定义,通过把它定义的大一些,从而使计时精度更高呢,通过尝试,你会发现这样是不行的。在标准C/C++中,最小的计时单位是一毫秒。
2、获得日历时间
time_t time(time_t * timer);
在time.h中,我们也可以看到time_t是一个长整型数:
#ifndef _TIME_T_DEFINED
typedef long time_t; /* 时间值 */
#define _TIME_T_DEFINED /* 避免重复定义 time_t */ #endif
3、获得日期和时间
3、1gmtime函数或localtime函数将time_t类型的时间日期转换为struct tm类型:
使用time函数返回的是一个long值,该值对用户的意义不大,一般不能根据其值
确定具体的年、月、日等数据。gmtime函数可以方便的对time_t类型数据进行转
换,将其转换为tm结构的数据方便数据阅读。
gmtime函数的原型如下:
struct tm *gmtime(time_t *timep); localtime函数的原型如下:
struct tm *localtime(time_t *timep); 将参数timep所指的time_t类型信息转换成实际所使用的时间日期表示方法,将结果返回到结构tm结构类型的变量。
gmtime函数用来存放实际日期时间的结构变量是静态分配的,每次调用gmtime函数都将重写该结构变量。如果希望保存结构变量中的内容,必须将其复制到tm结构的另一个变量中。
gmtime函数与localtime函数的区别:
gmtime函数返回的时间日期未经时区转换,是UTC时间(又称为世界时间,即格林尼治时间)。
localtime函数返回当前时区的时间,
转换日期时间表示形式time_t类型转换为struct tm类型示例:
#include
#include
int main()
{
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};/*指针字符数组*/
time_t t;
struct tm *p;
t=time(NULL);/*获取从1970年1月1日零时到现在的秒数,保存到变量t中*/
p=gmtime(&t); /*变量t的值转换为实际日期时间的表示格式*/
printf("%d年%02d月%02d日",(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);
printf(" %s ", wday[p->tm_wday]); printf("%02d:%02d:%02d\n", p->tm_hour, p->tm_min, p->tm_sec);
return 0;
}
注意:p=gmtime(&t);此行若改为p=localtime(&t);则返回当前时区的时间
3、2 使用mktime函数将struct tm类型的时间日期转换为time_t类型: 表头文件
#include
定义函数
time_t mktime(strcut tm * timeptr); 函数说明
mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0
时0分0 秒算起至今的UTC时间所经过的秒数。
返回值
返回经过的秒数。
换为秒数示例:
#include
#include
int main()
{
time_t t;
struct tm stm;
printf("请输入日期时间值(按yyyy/mm/dd hh:mm:ss格式):");
scanf("%d/%d/%d %d:%d:%d",&stm.tm_year,&stm.tm_mon,&stm.tm_mday,
&stm.tm_hour,&stm.tm_min,&stm.tm_sec);
stm.tm_year-=1900; /*年份值减去1900,得到tm结构中保存的年份序数*/
stm.tm_mon-=1; /*月份值减去1,得到tm结构中保存的月份序数*/
t=mktime(&stm); /* 若用户输入的日期时间有误,则函数返回值为-1*/
if(-1==t)
{
printf("输入的日期时间格式出错!\n");
exit(1);
}
printf("1970/01/01 00:00:00~%d/%02d/%02d %02d:%02d:%02d共%d秒\n",
stm.tm_year+1900,stm.tm_mon,stm.tm_mday,
stm.tm_hour,stm.tm_min,stm.tm_sec,t);
return 0;
}
3、3原型:
char *asctime(const struct tm *tblock); 功能说明: 将tm结构类型时间日期转换为ASCII码。
头文件:time.h
参数说明:语法:asctime[必要参数]
必要参数的具体说明如下:
tblock:待转换的时间指针,tblock为一tm结构型指针。
返回值:返回由tm结构中的日期和时间转换成的字符串的地址,该字符串的形式定义如下:
DDD MMM dd hh:mm:ss YYYY
各字符的意义:
DDD 一星期的某一天,如Mon
MMM 月份,如Jan
dd 月中一天(1,2,……,31)
hh 小时(1,2,……,24)
mm 分钟(1,2,……,59)
ss 秒数(1,2,……,59)
YYYY 年
范例: 转换日期和时间为ASCII码
#include
#include
int main()
{
time_t t;
struct tm *p;
t=time(NULL);
p=localtime(&t);
printf("%s\n", asctime(p));
return 0;
}
char * ctime(const time_t *timer);
功能说明:通过日历时间来生成时间字符串。
头文件:time.h
4、计算持续的时间长度
有时候在实际应用中要计算一个事件持续的时间长度,比如计算打字速度。在第1节计时部分中,我已经用clock函数举了一个例子。Clock()函数可以精确到毫秒级。同时,我们也可以使用difftime()函数,但它只能精确到秒。该函数的定义如下:
double difftime(time_t time1, time_t time0);
虽然该函数返回的以秒计算的时间间隔是double类型的,但这并不说明该时间具有同double一样的精确度,这是由它的参数觉得的(time_t是以秒为单位计算的)。比如下面一段程序:
#include “time.h”
#include “stdio.h”
#include “stdlib.h”
int main(void)
{
time_t start,end;
start = time(NULL);
system("pause");
end = time(NULL);
printf("The pause used %f seconds.\n",difftime(end,start));//<->->
system("pause");
return 0;
}
运行结果为:
请按任意键继续. . .
The pause used 2.000000 seconds. 请按任意键继续. . .
可以想像,暂停的时间并不那么巧是整整2秒钟。其实,你将上面程序的带有“//<-”注释的一行用下面的一行代码替换:>-”注释的一行用下面的一行代码替换:>
printf("The pause used %f seconds.\n",end-start);
其运行结果是一样的。
5、自定义时间格式
我们可以使用strftime()函数将时间格式化为我们想要的格式。它的原型如下:
size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr
);
我们可以根据format指向字符串中格式命令把timeptr中保存的时间信息放在strDest指向的字符串中,最多向strDest中存放maxsize个字符。该函数返回向strDest指向的字符串中放置的字符数。
函数strftime()的操作有些类似于sprintf():识别以百分号(%)开始的格式命令集合,格式化输出结果放在一个字符串中。格式化命令说明串strDest中各种日期和时间信息的确切表示方法。格式串中的其他字符原样放进串中。格式命令列在下面,它们是区分大小写的。
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天 %F 年-月-日
%g 年份的后两位数字,使用基于周的年 %G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
) %U 第年的第几周,把星期日做为第一天(值从0到53%V 每年的第几周,使用基于周的年 %w 十进制表示的星期几(值从0到6,星期天为0) %W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99) %Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号
如果想显示现在是几点了,并以12小时制显示,就象下面这段程序:
#include “time.h”
#include “stdio.h”
int main(void)
{
struct tm *ptr;
time_t lt;
char str[80];
lt=time(NULL);
ptr=localtime(<);>);>
strftime(str,100,"It is now %I %p",ptr);
printf(str);
return 0;
}
其运行结果为:
It is now 4PM
而下面的程序则显示当前的完整日期:
#include
#include
void main( void )
{
struct tm *newtime;
char tmpbuf[128];
time_t lt1;
time( <1 );="">1>
newtime=localtime(<1);>1);>
strftime( tmpbuf, 128, "Today is %A, day %d of %B in the year %Y.\n", newtime);
printf(tmpbuf); }
运行结果:
Today is Saturday, day 30 of July in the year 2005.
范文二:[考试]c语言减少程序运行时间
(1)、求余运算。
如:a=a%8;可以改为:a=a&7;
说明:位操作只需一个指令周期即可完成,而大部分的C编译器的"%"运算均是调用子程序来完成,代码长、执行速度慢。通常,只要求是求2n方的余数,均可使用位操作的方法来代替。
(2)、平方运算
如:a=pow(a,2.0);可以改为:a=a*a;
说明:在有内置硬件乘法器的单片机中(如51系列),乘法运算比求平方运算快得多,因为浮点数的求平方是通过调用子程序来实现的,在自带硬件乘法器的AVR 单片机中,如ATMega163中,乘法运算只需2个时钟周期就可以完成。既使是在没有内置硬件乘法器的AVR单片机中,乘法运算的子程序比平方运算的子程序代码短,执行速度快。
如果是求3次方,如:a=pow(a,3.0);更改为:a=a*a*a;
则效率的改善更明显。
(3)、用移位实现乘除法运算
如:a=a*4;b=b/4;可以改为:a=a《2;b=b》2;
说明:通常如果需要乘以或除以2n,都可以用移位的方法代替。在ICCAVR中,如果乘以2n,都可以生成左移的代码,而乘以其它的整数或除以任何数,均调用乘除法子程序。用移位的方法得到代码比调用乘除法子程序生成的代码效率高。实际上,只要是乘以或除以一个整数,均可以用移位的方法得到结果,如:a=a*9可以改为:a=(a《3)+a
6、循环
(1)、循环语
对于一些不需要循环变量参加运算的任务可以把它们放到循环外面,这里的任务包括表达式、函数的调用、指针运算、数组访问等,应该将没有必要执行多次的操作全部集合在一起,放到一个init的初始化程序中进行。
(2)、延时函数:
通常使用的延时函数均采用自加的形式:
两个函数的延时效果相似,但几乎所有的C编译对后一种函数生成的代码均比前一种代码少1~3个字节,因为几乎所有的MCU均有为0转移的指令,采用后一种方式能够生成这类
指令。在使用while循环时也一样,使用自减指令控制循环会比使用自加指令控制循环生成的代码更少1~3个字母。但是在循环中有通过循环变量"i"读写数组的指令时,使用预减循环时有可能使数组超界,要引起注意。
(3)while循环和do…while循环
用while循环时有以下两种循环形式:
在这两种循环中,使用do…while循环编译后生成的代码的长度短于while循环。
7、其它
比如使用在线汇编及将字符串和一些常量保存在程序存储器中,均有利于优化。
范文三:c语言考试大纲
基本要求
1.熟悉 Visual C++ 6.0集成开发环境。
2.掌握结构化程序设计的方法,具有良好的程序设计风格。
3.掌握程序设计中简单的数据结构和算法并能阅读简单的程序。
4.在 Visual C++ 6.0集成环境下, 能够编写简单的 C 程序, 并具有基本的 纠错和调试程序的能力。
考试内容
一、 C 语言程序的结构
1.程序的构成, main 函数和其他函数。
2.头文件,数据说明,函数的开始和结束标志以及程序中的注释。
3.源程序的书写格式。
4.C语言的风格。
二、数据类型及其运算
1.C的数据类型(基本类型,构造类型,指针类型,无值类型)及其定义 方法。
2.C运算符的种类、运算优先级和结合性。
3.不同类型数据间的转换与运算。
4.C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式, 条件表达式,逗号表达式)和求值规则。
三、基本语句
1.表达式语句,空语句,复合语句。
2.输入输出函数的调用,正确输入数据并正确设计输出格式。
四、选择结构程序设计
1.用 if 语句实现选择结构。
2.用 switch 语句实现多分支选择结构。
3.选择结构的嵌套。
五、循环结构程序设计
1.for循环结构。
2.while和 do-while 循环结构。
3.continue语句 break 语句。
4.循环的嵌套。
六、数组的定义和引用
1.一维数组和二维数组的定义、初始化和数组元素的引用。
2.字符串与字符数组。
七、函数
1.库函数的正确调用。
2.函数的定义方法。
3.函数的类型和返回值。
4.形式参数与实在参数,参数值的传递。
5.函数的正确调用,嵌套调用,递归调用。
6.局部变量和全局变量。
7.变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存 期。
八、编译预处理
1.宏定义和调用(不带参数的宏,带参数的宏)。
2.“文件包含”处理。
九、指针
1.地址与指针变量的概念,地址运算符与间址运算符。
2.一维。二维数组和字符串的地址以及指向变量、数组、字符串、函数、 结构体的指针变量的定义。通过指针引用以上各类型数据。
3.用指针作函数参数。
4.返回地址值的函数。
5.指针数组,指向指针的指针。
十、结构体(即“结构”)与共同体(即:“联合”)
1.用 typedef 说明一个新类型。
2.结构体和共用体类型数据的定义和成员的引用。
3.通过结构体构成链表, 单向链表的建立, 结点数据的输出、 删除与插入。
十一、位运算
1.位运算符的含义和使用。
2.简单的位运算。
十二、文件操作
只要求缓冲文件系统 (即高级磁盘 I/O系统) , 对非标准缓冲文件系统 (即 低级磁盘 I/O系统)不要求。
1.文件类型指针(FILE 类型指针)。
2.文件的打开与关闭(fopen , fclose )。
3.文件的读写(fputc , fgetc , fputs , fgets , fread , fwrite , fprintf , fscanf 函数的应用),文件的定位(rewind , fseek 函数的应用)。
考试方式
1.笔试:90分钟,满分 100分,其中含公共基础知识部分的 30分。
2.上机:90分钟,满分 100分。
上机操作包括:
(1)填空。
(2)改错。
(3)编程。
上一篇:全国计算机等级考试三级网络技术考试大纲(08年版) 下一篇:全国计算机等级考试一级 B 考试大纲(08版)
范文四:c语言考试题库
开平方函数
#include #include void main() { double m,n; scanf( printf( N 的 m 次方 #include #include void main() { double m,n,q; scanf( printf( 不大于输入数的最大整数 #include #include void main() { double m,n; scanf( printf( 小写字母变成大写 #include #include void main() { char m,n; scanf( printf( 输入半径求面积 #include #include void main() { double r,s; scanf( s=3.14*r*r; printf( } 至三边求面积 #include #include void main() { double a,b,c,s,d; scanf( s=sqrt(d*(d-a)*(d-b)*(d-c)); printf( } 输入周长求面积 #include #include void main() { double c,s,d; scanf( d=c/2; s=sqrt(d*(d-c/3)*(d-c/3)*(d-c/3)); /* d=c/3; s=d*d*sin(3.14*60/180/2);*/ printf( } 输入一个三位数就各位数字之和 #include #include void main() { inta,b,c,d,s; scanf( a=d%10; c=d/100; b=(d/10)%10; s=a+b+c; printf( } 检查输入的数是不是水仙花数 #include #include void main() { inta,b,c,d; scanf( a=d%10; c=d/100; b=(d/10)%10; if(d==a*a*a+b*b*b+c*c*c) printf( printf( 检查输入数据的最大值 #include #include void main() { inta,b,c,max; scanf( if(b>max)max=b; if(c>max)max=c; printf( 调整两值是前面的小于等于后面的 #include //#include void main() { intm,n,t; scanf( if(m>n) { t=m; m=n; n=t; } printf( 循环求和 #include //#include void main() { inti,n,sum=0; scanf( for(i=1;i<> sum=sum+i; printf( N !分之一的和 #include //#include void main() { inti,n,f=1; double sum=0; scanf( for(i=1;i<> { f=f*i; sum=sum+1.0/f; } printf( N 分之一的各项和 #include //#include void main() { inti,n,sign=-1; double sum=0; scanf( for(i=1;i<> { sign=-sign; sum=sum+(sign*1.0)/i; } printf( } 数组中所有数的平均值 #include //#include { int a[20],sum=0,i; double ave; for(i=0;i<> scanf( 求数组中所有素数之和 #include //#include intisprime(int n) { int j; if(n==1)return 0; for(j=2;j if(n%j==0) return 0; } return 1; } void main() { int a[20],sum=0,i; for(i=0;i<> scanf( if(isprime(a[i])==1) sum=sum+a[i]; } printf( 数组中数字字符的个数 #include #define N 50 int main() { char a[N],count=0,i; scanf( for(i=0;a[i]!='\0';i++) if(a[i]>='0'&&a[i]<> count++; printf( 删除右面的所有 *号 #include #include #define N 50 int main() { char a[N],count=0,i,j; scanf( for(i=strlen(a)-1;a[i]=='*';i--); // for(j=i,i=0;a[i]!='\0';j++,i++) // a[i]=a[j]; a[i+1]='\0'; printf( 删除所有的 *号 #include #include #define N 50 void main() { char a[N],count=0,i,j; scanf( for(i=0;a[i]!='*';i++); for(j=i+1;a[i]!='\0';j++) { if(a[j]!='*') { a[i]=a[j]; i++; } } a[i]='\0'; printf( 删除第一个值为 n 的结点 #include #include #define LEN sizeof(struct node) struct node { int data; struct node *next; }; int n; struct node *creat() { struct node *head; struct node *p1,*p2; n=0; p1=p2=(struct node*)malloc(LEN); scanf( head=NULL; while(p1->data) { n=n+1; if(n==1)head=p1; else p2->next=p1; p2=p1; p1=(struct node*)malloc(LEN); scanf( } p2->next=NULL; return(head); } void del(struct node *head,int n) { struct node *p,*q; p=head; while(p->next) { if(p->next->data==n) { q=p->next; p->next=q->next; free(q); break; } p=p->next; } } void print(struct node *head) { struct node *p; p=head; if(head!=NULL) do { printf( }while(p!=NULL); } void main() { struct node *head; head=creat(); del(head,4); print(head); } c语言考试重点——复习必备 总体上必须清楚的: 1)程序结构是三种: 顺序结构 , 循环结构(三个循环结构), 选择结构(if 和 switch) , 然后从最上面顺序往下读(碰到循环做循环,碰到2)读程序都要从main()入口 选择做选择)。 3)计算机的数据在电脑中保存是以 二进制的形式. 数据存放的位置就是 他的地址. 4)bit是位 是指为0 或者1。 byte 是指字节, 一个字节 = 八个位. 5)一定要记住 二进制 如何划成 十进制。 概念常考到的: ,、编译预处理不是C语言的一部分,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 ,、每个C语言程序中main函数是有且只有一个。 ,、在函数中不可以再定义函数。 ,、算法的是一定要有输出的,他可以没有输入。 ,、break可用于循环结构和switch语句。 ,、逗号运算符的级别最低。 第一章 1)合法的用户标识符考查: 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了。 关键字不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。 2)实型数据的合法形式: 2.333e-1 就是合法的,且数据是2.333×10-1。 考试口诀:e前e后必有数,e后必为整数。. 3)字符数据的合法形式: '1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。 '0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。 4) 整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节: 考试时候一般会说,在16位编译系统,或者是32位系统。碰到这种情况,不要去管,一样做题。掌握整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节就可以了。 5)转义字符的考查: 在程序中 int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x必须存在。 在程序中 int a = 06d, 是一个八进制的形式。 在转义字符中,’\x6d’ 才是合法的,0不能写,并且x是小写。 ‘\141’ 是合法的, 0是不能写的。 ‘\108’是非法的,因为不可以出现8。 6)算术运算符号的优先级别: 同级别的有的是从左到右,有的是从右到左。 7)强制类型转换: 一定是 (int)a 不是 int(a),注意类型上一定有括号的。 )和(int)a+b 的区别。前是把a+b转型,后是把a转型再加注意(int)(a+b b。 8)表达式的考查: 是表达式就一定有数值。 赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。 自加、自减表达式:假设a=5,++a(是为6), a++(为5); 运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这 个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6, 再放到变量a中。 进行了++a和a++后在下面的程序中再用到a的话都是变量a 中的6了。 考试口诀:++在前先加后用,++在后先用后加。 逗号表达式:优先级别最低;表达式的数值逗号最右边的那个表达式的数值。 (2,3,4)的表达式的数值就是4。 9)位运算的考查: 会有一到二题考试题目。 总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。 例1: char a = 6, b; b = a<2; 这种题目的计算是先要把a的十进制6化成二进制,再做位运算。="">2;> 例2: 一定要记住, 例3: 在没有舍去数据的时候,<左移一位表示乘以2;>>右移一位表示除以2。 10)018的数值是非法的,八进制是没有8的,逢8进1。 11)%符号两边要求是整数。不是整数就错了。 12) 三种取整丢小数的情况: ,、int a =1.6; ,、(int)a; ,、 第二章 1)printf函数的格式考查: %d对应整型;%c对应字符;%f对应单精度等等。宽度的,左对齐等修饰。 %ld对应 long int;%lf 对应double。 2)scanf函数的格式考察: 注意该函数的第二个部分是&a 这样的地址,不是a; Scanf(“%d%d%*d%d”,&a,&b,&c); 跳过输入的第三个数据。 3)putchar ,getchar 函数的考查: char a = getchar() 是没有参数的,从键盘得到你输入的一个字符给变量a。 putchar(‘y’)把字符y输出到屏幕中。 4)如何实现两个变量x ,y中数值的互换(要求背下来) 用中间变量 t=x;x=y;y=t。 不可以把 x=y ,y=x; 要 5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来) 这个有推广的意义,注意 x = (int)x 这样是把小数部分去掉。 第三章 特别要注意:c语言中是用非0表示逻辑真的,用0表示逻辑假的。 1)关系表达式: 表达式的数值只能为1(表示为真),或0(表示假) 当关系的表达是为真的时候得到1。如 9>8这个是真的,所以表达式的数值就是1; 2)逻辑表达式: 只能为1(表示为真),或0(表示假) ~ 三种逻辑运算符号。 a) 共有&& || b) ~>&&>|| 优先的级别。 c) 注意短路现象。考试比较喜欢考到。 d) 要表示 x 是比0大,比10小的方法。0<><> 3),f 语句 else 是与最接近的if且没有else的相组合的。 4)条件表达式: 表达式1 ,表达式2 :表达式3 注意是当非0时候是表达式2的数值,当为0是就是表达式2的数值。 考试口诀:真前假后。 5)switch语句: a)一定要注意 有break 和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。 b)switch只可以和break一起用,不可以和continue用。 第四章 1)三种循环结构: a)for() ; while(); do- while()三种。 b)for循环当中必须是两个分号,千万不要忘记。 c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。 d) do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错) 2) break 和 continue的差别 记忆方法: break:是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。 continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。 3)嵌套循环 就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一 般记住两层是处理二维数组的。 =getchar())!=’\n’) 和 while(c=getchar() !=’\n’)的差4) while((c 别 先看a = 3 != 2 和 (a=3)~=2 的区别: (~=号的级别高于=号 所以第一个先计算 3~=2) 第一个a的数值是得到的1; 第二个a的数值是3。 考试注意点: 括号在这里的重要性。 第五章 函数:是具有一定功能的一个程序块; 1) 函数的参数,返回数值(示意图): main() { int a = 5,b=6,c; c = add(a,b); printf(“%d”,c); } 调用函数 a,b是实参 整个函数得到一个数值就是 Add函数的返回数值。 int add ( int x, int y) { int z; z=x+y; return z; } 被调用函数 x,y是形式参数 函数返回数值是整型 z就是这个add函数计算后得到的结果,就是函数返回给主程序的返回数值。 程序是在从上往下顺序执行,当碰到了函数add后,把a,b的数值穿给调用函 数,程序暂时中断等待返回数值。当得到了返回数值后,再顺序的往下执行 2)一定要注意参数之间的传递 实参和形参之间 传数值,和传地址的差别。(考试的重点) 传数值的话,形参的变化不会改变实参的变化。 传地址的话,形参的变化就会有可能改变实参的变化。 3)函数声明的考查: 一定要有:函数名,函数的返回类型,函数的参数类型。 不一定要有:形参的名称。 第六章 指针变量的本质是用来放地址,而一般的变量是放数值的。 *p和p的差别: int *p 中 *p可以当做变量来用;*的作用是取后面地址p里面的数值 p是当作地址来使用。 *p++ 和 (*p)++的之间的差别:改错题目中很重要 *p++是 地址会变化。 (*p)++ 是数值会要变化。 三名主义:(考试的重点) 数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次) 函数名:表示该函数的入口地址。 字符串常量名:表示第一个字符的地址。 第七章 1一维数组的重要概念: 对a[10]这个数组的讨论。 ,、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。 ,、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。 ,、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。 对a[3][3]的讨论。 ,、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。 ,、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。 ,、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。 ,、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。 ,、注意a和a[0] 、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。 二维数组做题目的技巧: 如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。 步骤一:把他们写成: 第一列 第二列 第三列 a[0]à 1 2 3 ,>第一行 a[1]à 4 5 6 —>第二行 a[2]à 7 8 9 ,>第三行 步骤二:这样作题目间很简单: *(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是,。 *(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a[1][2]元素,所以是6。 一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。 数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写 int a[]={1,2} 合法。 int a[][4]={2,3,4}合法。 但int a[4][]={2,3, 4}非法。 二维数组中的行指针 int a[1][2]; 搭配(*)p[2]指针 其中a现在就是一个行指针,a+1跳一行数组元素。 a[0],a[1]现在就是一个列指针。a[0]+1 跳一个数组元素。搭配*p[2]指针数组使用 还有记住脱衣服法则: a[2] 变成 *(a+2) a[2][3]变成 *(a+2)[3]再可以变成 *(*(a+2)+3) 这个思想很重要~ 转载请注明出处范文大全网 » 【2017年整理】c语言时间范文五:c语言考试重点