激光脉冲延迟是什么意思出现网络超时怎么处理?

..DOC资料.省计算机二级试题汇总———————–作者:———————–日期:更多企业学院:《中小企业管理全能版》183套讲座+89700份资料《总经理、高层管理》49套讲座+16388份资料《中层管理学院》46套讲座+6020份资料?《国学智慧、易经》46套讲座《人力资源学院》56套讲座+27123份资料《各阶段员工培训学院》77套讲座+ 324份资料《员工管理企业学院》67套讲座+ 8720份资料《工厂生产管理学院》52套讲座+ 13920份资料《财务管理学院》53套讲座+ 17945份资料?《销售经理学院》56套讲座+ 14350份资料《销售人员培训学院》72套讲座+ 4879份资料选择题综合以下关于C源程序的叙述中正确的是
(21)
。C(10年秋21)注释只能出现在程序的开始位置或语句后面一行中不能写多条语句一条语句可以分写在多行中一个源程序只能保存在一个文件中以下定义和声明中,语法均有错误的是__________。(09年春21)①int _f(int x){}
② int f(int f){}
③ int 2x=1;
④ struct
for{int x;};A.②③
B.③④
C.①④
D.①②③④数据类型、运算符与表达式已有声明“int x=5,y;float z=2;”,以下表达式语确的是
(24)
。D
(10年秋24)y=x%zx>0?y=x:y=-xy=x/2=zy=x=z/2已知字母A的ASCII码是65,字母a的ASCII码是97,变量c中存储了一个大写字母的编码。若要求将c写字母编码转换成对应小写字母编码,则以下表达式中不能实现该功能的是
(25)
。D
(10年秋25)c=tolower(c)c=c+32c=c-‘A’+’a’c=(c+’A’)%26-‘a’以下选项中,()是C语言的关键字(10年春 22)A.printf
B.include
C.fun
D.default已知有声明“int a=3,b=4,c;”,则执行语句“c=1/2*(a+b);”后,c的值为()(10年春23)A.0
B.3
C.3.5
D.4已知有声明“int a=3,b=4;”,下列表达式中合法的是()((10年春 25)A.a+b=7
B.a=∣b∣
C.a=b=0
D.(a++)++已知有声明“int n;float x,y;”,则执行语句“y=n=x=3.89;”后,y的值为()(10年春 28)A.3
B.3.0
C.3.89
D.4.0以下选项中,不能用作C语言标识符的是(
)(09年秋22)A.print
B.FOR
C.&a
D._00已知有声明”long x,y;”且x中整数的十进制表示有n位数字(4<n<10),若要求去掉整数x十进制表示中的最高位,用剩下的数字组成一个新的整数并保存到y中,则以下表达式中能正确实现这一功能的是(
)(09年秋25)A.y=x/(10*(n-1))
B.y=x%(10*(n-1))C.
y=x%(long)pow(10,n-1)
D.y=x%(10^(n-1))顺序结构以下语句中有语法错误的是
(23)
。B(10年秋23)printf("%d",0xAB);printf("%f",3.45E2.5);printf("%d",037);printf("%5c",'\\');已知int类型数据在存中存储长度为2个字节,以下语句中能正确输出整数32768的是(
)(09年秋23)printf(“%d”,32768);
B.printf(“%ld”,32768);printf(“%f ”,32768);
D.printf(“%c ”,32768);以下语句中有语法错误的是__________。(09年24)A.printf("%d",0e);
B.printf("%f",0e2);C.printf("%d",0x2);
D.printf("%s","0x2");选择结构一元二次方程ax2+bx+c=0有两个相异实根的条件是a≠0且b2-4ac>0,以下选项中能正确表示该条件的C语言表达式
(26)
。C
(10年秋 26)a!=0,b*b-4*a*c>0a!=0
b*b-4*a*c>0a&&b*b-4*a*c>0!a&&b*b-4*a*c>0已知有声明”int
a=3,b=4,c=5;”,以下表达式中值为0的是(
)(09年秋24)a&&b
B.a<=b
C.a
b&&c
D.!(!c
1)已知有声明“int a=12,b=15,c;”,则执行表达式“c=(a
(b-=a))”后,变量b和c的值分别为()(10年春 29)A.3 , 1
B.15 , 12
C.15 , 1
D.3 , 12已知有声明”long x,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则y取值-1”A.if(x>=0)y=1;else y=-1;
B.y=x>=0? 1:-1;C.switch()
D.switch(x-abs(x)){ case x>=0:y=1;
break;
{
case 0:y=1;
break;default: y=-1;
default: y=-1;}
}1
x>0以下选项中,不能表示函数sign(x)=
0
x=0
功能的表达式是__________。(09年春23)-1
x<0A.s=(x>0)?1:(x<0)?-1:0
B.s= x<0 ? -1:(x>0? 1:0)C.s= x<=0? -1:(x==0? 0:1)
D.s= x>0?1: x==0? 0: -1循环结构以下关于break和continue语句的叙述中正确的是
(27)
。B
(10年秋27)break和continue语句都可以出现在switch语句中break和continue语句都可以出现在循环语句的循环体中在循环语句和switch语句之外允许出现break和continue语句执行循环语句中的break和continue语句都将立即终止循环数组已知有声明“char s[20]=”hello”;”,在程序运行过程中,若要想使数组s中的容修改为”Good”,则以下语句中能够实现此功能的是() (10年春 26)A.s=”Good’;
B.s[20]=”Good”;C.strcat(s,”Good”);
D.strcpy(s,”Good”);已知有声明”int m[]={5,4,3,2,1}, i=0;”,下列对m数组元素的引用中,错误的是(
)(09年秋27)A.m[++i]
B.m[5]
C.m[2*2]
D.m[m[4]]已知有声明”char s[80];”,若需要将键盘输入的一个不含空格的字符串保存到s数组中,则下列语句中正确的是(
)(09年秋28)A.scanf(“%s”,s);
B.scanf(“%s”, s[0]);
C.s=gets();
D.s=getchar();设有声明“int p[10]={1,2},i=0;”,以下语句中与“p[i]=p[i+1],i++;”等价的是__________。(09年春27)A.p[i]=p[i++];
B.p[++i]=p[i];C.p[++i]=p[i+1];
D.i++, p[i-1]=p[i];函数C语言规定,在一个源程序中main函数的位置()(10年春21)A.必须在最开始
B.必须在在最后C.必须在预处理命令的后面
D.可以在其他函数之前或之后以下叙述中正确的是(
)(09年秋21)C语言系统以函数为单位编译源程序main函数必须放在程序开始用户定义的函数可以被一个或多个函数调用任意多次在一个函数体可以定义另外一个函数若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是(
)(09年秋29)实参和其对应的形参占用同一个存储单元形参不占用存储单元同名的实参和形参占用同一存储单元形参和实参占用不同的存储单元以下函数定义中正确的是__________。(09年春25)A.double fun(double x, double y){}B.double fun(double x; double y){}C.double fun(double x, double y);{}D.double fun(double x, y){}若需要通过调用f函数得到一个数的平方值,以下f函数定义中不能实现该功能的是__________。(09年春26)A.void f(double *a){*a=(*a)*(*a);}B.void f(double a, double *b){*b=a*a;}C.void f(double a, double b){b=a*a;}D.double f(double a){return a*a;}递归预处理C源程序中的命令#include与#define是在
(22)
阶段被处理的。A(10年秋22)预处理编译连接执行设有定义和声明如下:(09年春22)#define d 2int x=5; float y=3.83; char c='d';以下表达式中有语法错误的是__________。A.x++
B.y++
C.c++
D.d++指针设指针变量占2个字节的存空间,若有声明“char *p=”123”;int c;”,则执行语句“c=sizeof(p);”后,c的值为()(10年春24)A.1
B.2
C.3
D.4指针数组已知有声明“char a[]=”program”,*p=a+1;”则执行以下语句不会输出字符a的是(29)。A(10年秋29)putchar(*p+4)putchar(*(p+4));putchar(a[sizeof(a)-3]);putchar(*(a+5));已知有声明“int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};”,若需要引用值为12的数组元素,则下列选项中错误的是() (10年春27)A.*(a+2)+3
B.*(*(a+2)+3)
C.*(a[2]+3)
D.a[2][3]已知有声明”int i, a[10], *p=a;”,现需要将1~10保存到a[0]~a[9]中,以下程序段中不能实现这一功能的是(
)(09年秋30)A.for (i=0;i<10;i++) a[i]=i+1;
B.for(i=0;i<10;i++) p[i]=i+1;C.i=1; while(p<a+10) *p++=i++;
D.i=1; while(p<a+10) *a++=i++;已知有声明“char a[ ]="It is mine", *p= "It is mine";”,下列叙述中错误的是__________。(09年春28)A.strcpy(a, "yes")和strcpy(p, "yes")都是正确的B.a="yes"和p="yes"都是正确的C.*a等于*pD.sizeof(a)不等于sizeof(p)已知有声明“int a[3][3]={0}, *p1=a[1], (*p2)[3]=a;”,以下表达式中与“a[1][1]=1”不等价的表达式是__________。(09年春29)A.*(p1+1)=1
B.p1[1][1]=1C.*(*(p2+1)+1)=1
D.p2[1][1]=1指针函数若有一函数定义为“int f(int x,int *y){return x/*y} ”,声明该函数的正确形式是(28)。D(10年秋28)void f(int,int);int *f(int,int *);int f(int *,int *);int f(int,int *);结构体已有定义和声明:struct student{int no;char name[20];struct{int year,month,day;}birth;}s;若要求将日期“1989年11月12日”保存到变量s的birth成员中,则能实现这一功能的程序段是
(30)

D
(10年秋30)year=1989; month=11; day=12;s.year=1989; s.month=11; s.day=12;birth.year=1989; birth.month=11; birth.day=12;s.birth.year=1989; s.birth.month=11; s.birth.day=12;设有结构定义及变量声明如下:(09年春30)struct product{char code[5];float price;}y[4]={"100",100};以下表达式中错误的是__________。A.(*y).code[0]= '2';
B.y[0].code[0]= '2' ;C.y->price=10;
D.(*y)->price=10;位运算文件下列叙述中,正确的是() (10年春30)A.C语言中的文件是流式文件,因此只能顺序存取文件中的数据。B.调用fopen函数时若用“r”或“r+”模式打开一个文件,该文件必须在指定存储位置或默认存储位置处存在。C.当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到该文件中的第1个数据。D.无论以何种模式打开一个已存在的文件,在进行了写操作后,原有文件中的全部数据必定被覆盖。填空题数据类型、运算符与表达式若有声明“double n;”则数学公式“n(4n2-1)”对应的C语言表达式正确形式是
(1)
。(10年秋1)
1.0/3*n*(4*n*n-1)数学式所对应的C语言表达式为pow(x,
(1)
)。1.0/3
(10年春 1)已知有声明“char ch=’g’;”,则表达式ch=ch-‘a’+’A’的值为字符
(2)
的编码。G(10年春
2)在C语言系统中,如果一个变量能正确存储的数据围为整数-32768~32767,则该变量在存中占
(3)
个字节。2(10年春 3)数学表达式所对应的C语言表达式为
。(09年秋3)sqrt(abs(x))!=(4*a)/(b*c)若有声明“int x;”且sizeof(x)的值为2,则当x值为__________时“x+1>x”为假。32767 (09年春2)若有声明“float y=3.14619; int x;”,则计算表达式“x=y*100+0.5, y=x/100.0”后y的值是__________。3.15
(09年春3)顺序结构已知有声明“char ch;int a;”,执行语句“scanf(“%c%d”,&ch,&a);”时如果从键盘输入的数据是“123”,则变量a得到的值是
(2)
。(10年秋2)23已知有声明和语句“int a;scanf(“a=%d”,&a);”,欲从键盘上输入数据使a中的值为3,则正确的输入应是
(5)
。a=2
(10年春 5)以下程序运行时输出到屏幕的结果是
(7)
。2,1
(10年春 7)#include<stdio.h>void main(){ int a=1,b=2;a+=b;b=a-b;a-=b;printf(“%d,%d\n”,a,b);}若有声明”int r=2;”,则执行语句”printf(“%d”, sizeof(2*3.14*r));”时输出
。8(09年秋2)选择结构若有声明“int a=0,b=1,c=2;”,执行语句“if(a>0&&++b>0)c++;else c- -;”,变量a、b、c的值分别是
(3)
。0
1
1
(10年秋3)C语言中有!、&&、
三个逻辑运算符,其中优先级高于算术运算符的是
。!(09年秋1)以下程序运算时输出到屏幕的结果是
。2 (09年秋7)#include<stdio.h>void main(){
int i=1,m=0;switch(i){
case 1:case 2:
m++;case 3:
m++;}printf(“%d”, m);}解析:本题switch中没有break,所以当i=1,case1,2,3依次执行,m初值为0,自增两次,值为2以下程序运行时输出结果是__________。2
3
5
6
(09年春6)#include<stdio.h>void main(){int k=5,n=0;while(k>0){switch(k){case 1:case 3: n+=1;k–;break;default: n=0;k–;case 2:case 4: n+=2;k–;break;}printf("%3d",n);}}循环结构以下程序运算时输出到屏幕的结果中第一行是
,第二行是
。(09年秋12)#include<stdio.h>void main(){
int a[3][3]={{3,8,12},{4,7,10},{2,5,11}},i,j,k,t;for(j=0;j<3;j++)for(k=0;k<2;k++)for(i=0;i<2-k;i++)if(a[i][j]>a[i+1][j])t=a[i][j],a[i][j]=a[i+1][j],a[i+1][j]=t;for(i=0;i<3;i++){
for(j=0;j<3;j++)printf(“%3d”,a[i][j]);printf(“\n”);}}2
5
104
8
12数组以下程序运行时输出到屏幕的结果为
(6)
。our
(10年秋6)#include<stdio.h>enum{A,B,C,D}x;void main(){char s[]="your";for(x=B;x<=D;x++)putchar(s[x]);}以下程序运行时输出到屏幕的结果为
(7)
。4332
(10年秋7)#include<stdio.h>void main(){int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i,j;for(i=0;i<12;i++){
j=s[i];c[j]++;}for(i=1;i<5;i++)printf("%d",c[i]);}以下程序运行时输出到屏幕的结果第二行是
(13)
1
1
,第四行是
(14) 1 3 3 1
。(10年春 11)#include<stdio.h>#define N 6void main(){ int i,j,a[N+1][N+1];for (i=1;i<=N;i++){ a[i][i]=1;a[i][1]=1; }for(i=3;i<=N;i++)for (j=2;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<=N;i++){
for(j=1;j<=i;j++)printf(“%4d”,a[i][j]);printf(“\n”);}}以下程序运行时输出到屏幕的结果中第一行是
(14)
,第二行是
(15)
,第三行是
(16)
。算法提示:将Fibonacci数列(1,1,2,3,5,8,13,….)前6个数填入a数组。
(10年秋12)#include<stdio.h>#define N
3void main(){int i,j,a[N][N]={1},f1=0,f2=1,temp;for(i=1;i<N;i++)for(j=0;j<=i;j++){if(j<=i){a[i][j]=f1+f2;temp=f1;f1=f2;f2=f1+temp;}}for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%5d",a[i][j]);printf("\n");}}1
0
01
2
03
5
8以下程序运行时输出结果中第一行是__________,第三行是__________。(09年春9)第一行
33333第三行
3
3#include<stdio.h>#define N 5void main(){static char a[N][N];int i,j,t,start=0,end=N-1;char str[]="123",ch;for(t=0;t<=N/2;t++){ch=str[t];for(i=j=start;i<end;i++)a[i][j]=ch;for(j=start;j<end;j++)a[i][j]=ch;for(i=end;i>start;i–)a[i][j]=ch;for(j=end;j>start;j–)a[i][j]=ch;if(start==end) a[start][end]=ch;}for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%c",a[i][j]);printf("\n");}}以下程序中函数float fun(int m)的功能是计算s=s1+s2+s3+s4的值,其中s1、s2、s3、s4用下列公式计算。请完善程序以达到要求的功能。(10年秋14)S1=1++++. . .+S2=1++++. . .S3=1++++. . .+S4=1++++. . .+算法提示:S=1+1+1+1+ +++++++++. . . +++#include<stdio.h>float fun(int m ){ int i,n;float s=0,t;for(n=1;n<=m;n++){t=
(19)
; 1.0for(i=1;i<5;i++){ t=
(20)
; t/ns+=t;}}return s;}main(){printf("%f",fun(50));}函数声明局部变量时若缺省存储类别,该变量的存储类别是
。auto(09年秋5)在一个C语言源程序中,必不可少的是__________。
主函数
(09年春1)以下程序运行时输出到屏幕的结果为
(8)
。13 11 12(10年 春8)#include<stdio.h>void swap(int a,int b){ int t;if (a>b) t=a,a=b,b=t;}void main(){ int x=13,y=11,z=12;if(x>y) swap(x,y);if(x>z) swap(x,z);if(y>z) swap(y,z);printf(“%d\t%d\t%d\n”,x,y,z);}以下程序运行时输出到屏幕的结果第一行是
(9)
5
,第二行是
(10)
7
,第三行是
(11) 8
。 (10年春9)#include<stdio.h>int g(int x,int y){ return x+y;}int f(int x,int y){{static int x=2;if (y>2){ x=x*x;y=x;}else y=x+1;}return x+y;}void main(){ int a=3;printf(“%d\n”,g(a,2));printf(“%d\n”,f(a,3));printf(“%d\n”,f(a,2));}以下程序运行时输出结果是__________。7
(09年春8)#include<stdio.h>int f(int x ,int y){return x+y ;}void main(){double a=5.5,b=2.5;printf("%d", f(a,b));}以下程序运算时输出到屏幕的结果是
。(09年秋10)#include<stdio.h>long f(int n){
static long s;if(n==1) return s=2;else return ++s;}void main(){
long i,sum=0;for(i=1;i<4;i++) sum+=f(i);printf(“%ld”, sum);}解析:本题考点static,s为静态局部变量,函数调用结束后不消失保留原值,第一次f(1),s值为2,第二次f(2),s=3,第三次f(3),s=3,sum=2+3+4=9以下程序运行时输出到屏幕的结果为
(8)

13
(10年秋8)#include<stdio.h>int fun(int x){static int c,y;if(c==0)y=1;else y=y+x;c++;return y;}void main(){int i;for(i=0;i<2;i++)printf("%d",fun(2));}以下程序将同时出现在数组a和b中的数据复制到数组c中。例如,如果数组a中的数据是{8,5,7,1,6,4,9},数组b中的数据是{2,9,3,7,4,5,10},则数组c中的结果数据位{5,7,4,9}。以下程序中,in函数判断x中存储的整数是否在a指向的数组前n个元素中出现,如果出现则函数返回1,否则返回0。请完善程序以达到要求的功能。
(10年秋15)#include<stdio.h>int in(int a[],int n,int x){int i;for(i=0;i<n;i++)if( (21) ) return 1;
x==a[i]return 0;}void main(){int a[7]={8,5,7,1,6,4,9},b[7]={2,9,3,7,4,5,10},c[7]={0},i,j=0;for(i=0;i<7;i++)if(
(22)
)
in(b,6,a[i])c[j++]=a[i];for(i=0;
(23) ;i++)
i<jprintf("%d\t",c[i]);}递归以下程序运行时输出到屏幕的结果为
(11)

6
(10年秋10)#include<stdio.h>int f(int x){if(x==0
x==1)
return
3;return x*x-f(x-2);}void main(){printf("%d\n",f(3));}以下程序运行时输出到屏幕的结果是
(12)
。2 2 1 (10年春10)#include<stdio.h>void fun(int m,int n){ if (m>n)printf(“%d”,m);elsefun(m+1,n);printf(“%d”,m);}void main(){ fun(1,2);
}以下程序运算时输出到屏幕的结果是
。(09年秋9)#include<stdio.h>int fun(int *x,int n){
if(n==0) return x[0];else return x[0]+fun(x+1,n-1);}void main(){
int a[]={1,2,3,4,5,6,7};printf(“%d\n”,fun(a,2));}解析:本题为递归,解决递归分两步递推+回推递推:
fun(a,2) a[0]+fun(a+1,1)a[1]+fun(a+1+1,0) 注意此时指针的地址不a,而是a+1,返回的是a[1]+fun(a+1+1,0)而不是a[0]+fun(a+1+1,0) ,当n=0时fun(a+1+1,0)值为a[2],再依次回推
a[2]+a[1]+a[0]=6以下程序在3~50围验证:大于等于3的两个相邻素数的平方之间至少有4个素数。例如,3和5是相邻素数,32~52之间有素数11、13、17、19、23。试完善程序以达到要求的功能。(09年秋16)#include<stdio.h>#include<stdlib.h>#include<math.h>int prime(int n){
int i;for(i=2;i<=sqrt(n);i++)if(
n%i==0
)return 0;return 1;}void main(){
int i,j,k=0,m,n,c,a[30]={0};for(i=3;i<50;i++)if(prime(i))
a[k++]=i
;for(i=0;i<k-1;i++){
m=a[i]*a[i];n=a[i+1]*a[i+1];c=
0
;for(j=m+1;j<n;j++)if(
prime(j)
) c++;if(c>=4)printf(“\n
%d*%d-%d*%d: %d”,a[i],a[i],a[i+1],a[i+1],c);else {printf(“Error”);exit(0);}}}预处理若有以下宏定义:#define M(a,b)
-a/b则执行语句“printf(‘%d”,M(4+3,2+1));”后输出结果为
(4)
。-2
(10年秋4)以下程序运行时输出到屏幕的结果为
(6)
。10(10年春6)#include<stdio.h>#define MAX(A,B)
A>B?2*A:2*Bvoid main(){ int a=1,b=2,c=3,d=4,t;t=MAX(a+b,c+d);printf(“%d\n”,t);}以下程序运算时输出到屏幕的结果中第一行是
,第二行是
。(09年秋11)#include<stdio.h>#define f(x,y) y=x*xvoid g(int x, int y){
y=x*x;
}void main(){
int a=2,b=0,c=2,d=0;f(a,b);g(c,d);printf(“%d\n%d”,b,d);}40解析:f(a,b)为宏替换,b值为4,g(c,d)为函数调用,但是函数中没有返回值,所以d保持原值0执行以下程序段中的语句“k=M*M+1;”后 k的值是__________。6
(09年春4)#define N 2#define M N+1k=M*M+1;指针若有以下声明:(09年秋4)char *p=”%d,%d\n”;
int a=1,b=2;则执行语句”printf(p,a,b);”时输出
。1,2指针数组已知有声明“int a[3][2]={{1,2},{3,4},{5,6}},*p=a[0];”,则执行语句“printf(“%d\n”,*(p+4));”后的输出结果为
(4)
。5 (10年春4)以下程序运算时输出到屏幕的结果是
。(09年秋13)#include<stdio.h>#include<string.h>void main(){
int i=0,n=0;char s[80],*p;strcpy(s,”It is a book.”);for(p=s;*p!=’\0’if(*p==’ ’)i=0;elseif(i==0){
n++;i=1;
}printf(“%d\n”,n);}4解析:本题功能是求一句英文中单词的个数。当i=0,表示新单词开始,同时i变为1,n来统计单词个数,遇到空格表示单词结束,又表示下一个单词的开始,i置0。指针函数以下程序运行时输出到屏幕的结果中第一行是
(9)
6 ,第二行是
(10)
3
。(10年秋9)#include<stdio.h>void fun(int *a,int b){while(b>0){ *a+=b;b–;}}void main(){int x=0,y=3;fun(&x,y);printf("%d\n%d\n",x,y);}以下程序运行时输出到屏幕的结果中第一行是
(12)
1,第二行是
(13)
19。 (10年秋11)#include<stdio.h>#include<ctype.h>void compute(char *s){int t,r;char op;for(r=0;isdigit(*s);s++)/*isdigit(*s)判断s指向的字符是否为数字字符*/r=r*10+*s-'0';while(*s){op=*s++;for(t=0;isdigit(*s);s++)t=t*10+*s-'0';switch(op){case '+': r=r+t;break;case '-': r=r-t;break;case '*': r=r*t;break;case '/': if(t) r=r/t ;else{puts("devide error");return;}}}printf("%d\n",r);}void main(){compute("12+6-19+2");compute("12/6*19/2");}以下程序运行时输出结果是__________。x=18,y=27,z=18
(09年春7)#include<stdio.h>void change(int x,int y,int *z){int t;t=x; x=y; y=*z; *z=t;}void main(){int x=18,y=27,z=63;change(x,y,&z);printf("x=%d,y=%d,z=%d\n",x,y,z);}以下程序运行时输出到屏幕的结果第一行是
(15) 3 2 1
,第二行是
(16)
1 4 3 2 5
,(10年春12)#include<stdio.h>void fun(char *p1,char *p2);void main(){ int i; char a[]=”54321”;puts(a+2);fun(a,a+4);puts(a);}void fun(char *p1,char *p2){ char t;while(p1<p2){
t=*p1;*p1=*p2;*p2=t;p1+=2,p2-=2;}}以下程序运行时输出结果中第一行是__________,第二行是__________。(09年春10)第一行
1
3
9第二行
3#include<stdio.h>void fun(int x,int p[],int *n){int i,j=0;for(i=1;i<x/2;i++)if(x%i==0)p[j++]=i;*n=j;}void main(){int x,a[10],n,i;fun(27,a,&n);for(i=0;i<n;i++)printf("%5d",a[i]);printf("\n%5d",n);}以下程序运行时输出结果是__________。
4
(09年春11)#include<stdio.h>#include<ctype.h>int count(char s[]){int i=0;if(s[i]=='\0') return 0;while(isalpha(s[i]))i++;while(!isalpha(s[i])&&s[i]!='\0')i++;return 1+count(&s[i]);}void main(){char line[]="one world,one dream.";printf("%d",count(line));}以下程序运行时输出结果中第一行是__________,第二行是__________。(09年春12)第一行
5第二行
yesno#include<stdio.h>int fun(char *a,char *b){int m=0,n=0;while(*(a+m)!='\0')m++;while(b[n]){*(a+m)=b[n];m++;n++;}*(a+m)='\0';return m;}void main(){char s1[20]="yes",s2[5]="no";printf("%d\n",fun(s1,s2));puts(s1);}以下程序运行时输出结果中第一行是________,第二行是________,第三行是________。(09年春13)第一行
1,2第二行
2,3第三行
2,4#include<stdio.h>typedef struct{int x;int y;}S;void fun(S pp[],int n){int i,j,k; S t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if((pp[j].x<pp[k].x)
(pp[j].x==pp[k].x&&pp[j].y<pp[k].y))k=j;if(k!=i){t=pp[i];pp[i]=pp[k];pp[k]=t;}}}void main(){S a[5]={{3,2},{3,1},{1,2},{2,4},{2,3}};int i,n=5;fun(a,n);for(i=0;i<n;i++)printf("%d,%d\n",a[i].x,a[i].y);}以下程序求一组整数的最大公约数。试完善程序以达到要求的功能。(09年春14)#include<stdio.h>int gcd(int a,int b){int r;while(__________)
r!=0{r=a%b;a=b;____________;} b=rreturn a;}void main(){int x,i,a[6]={12,56,48,32,16,24};x=_________; a[0]for(i=1;i<6;i++)x=gcd(_________,a[i]); gcd(x,a[i])printf("(%d,",a[0]);for(i=1;i<5;i++)printf("%d,",a[i]);printf("%d)=%d\n",a[5],x);}以下程序的功能是:统计一个字符串中数字字符“0”到“9”各自出现的次数,统计结果保存在数组count中。例如,如果字符串为“1enterschar79ffgh”,则统计结果为:1:2
2:1
3:2
4:3
5:2
6:1
7:1
8:1
9:1。试完善程序以达到要求的功能。(10年春14)#include<stdio.h>void fun(char *t,int count[]){ char *p=t;while(
(19)
)
*p!=’\0’{ if (*p>=’0’&&*p<=’9’)count[
(20)
]++;
*p-‘0’p++;}}void main(){ char s[80]=” 1enterschar79ffgh”; int count[10]={0},i;fun(s,count);for(i=0;i<10;i++)if (count[i])
printf(“%d:%d
”,i,count[i]);}以下程序运算时输出到屏幕的结果中第一行是
,第二行是
。(09年秋8)#include<stdio.h>void fun(int a[], int b[], int *x){
int i,j=0;for(i=0;a[i];i++){
if(i%2==0) continue;if(a[i]>10)b[j++]=a[i];}*x=j;}void main(){
int a[10]={3,15,32,23,11,4,5,9}, b[10];int i=0,x=0;fun(a,b,&x);for(i=0;i<x;i++)printf(“%d\t”,b[i]);printf(“\n%d”,x);}15
232解析:本题的含义是当a数组元素下标为奇数而且元素值大于10,将元素值赋给数组b,x用来记录b中数组元素个数,要注意的是打印b[i]时格式是\t制表符,要隔8位。下列程序的功能是对a数组a[0]~a[n-1]中存储的n个整数从小到大排序。排序算法是:第一趟通过比较将n个整数中的最小值放在a[0]中,最大值放在a[n-1]中;第二趟通过比较将n个整数中的次小值放在a[1]中,次大值放在a[n-2]中;……,依次类推,直到待排序序列为递增序列。试完善程序以达到要求的
开篇介绍由于项目中需要使用到STM32H7系列的芯片,且该系列无法移植ST的标准库,只能使用ST的HAL库,通过STM32Cube生成HAL库的基本代码。在项目开发中需要使用到STM32板载的ETH口,在简化的四层模型中充当着数据链路层的角色,我们只需添加PHY并配置好IP,即可实现基本的TCP主从机通信、UDP通信等等。一、激光雷达3i-T1由于使用了一款只具有网口通信的单线激光雷达,其具有TCP和UDP方式的通信方式,为了避免进行TCP中的socket报文解析和繁琐的通信握手过程,我们首先将雷达配置成UDP通信的模式,也就是网线直连通信,从比特层面进行数据交互。3i-T1激光雷达的OOB协议如下图所示:3i-T1激光雷达的数据帧解析如下:接着,在电脑上使用LVS2D上位机对激光雷达进行数据格式的配置,3i-T1激光雷达出厂默认IP是192.168.10.160,端口号为2105,必须配置同一网段(即192.168.10.XXX)后,才能与雷达通信;于是先将PC配置成静态IP——192.168.10.4,子网掩码为255.255.255.0:然后使用LVS2D上位机将激光雷达设置为UDP通信模式(也即Out of-band模式):从上位机中查看激光雷达的点云图大致如下:至此,激光雷达的配置结束,接下来要调试STM32H7的ETH外设与LWIP了。二、STM32CubeMX之ETH、LWIP配置跳过STM32CubeMX的设备选型,进入可视化配置界面,首先,打开CORTEX-M7中的CPU ICache和DCache,若不打开此项,中间件Middleware中的LWIP中将无法打开!:随后,配置系统时钟,PRVS设置为0,先将系统时钟调到最大值480MHz:然后,使能ETH的RMII功能,将各个IO配置成Speed为High的模式,要注意其中还有三个管脚的重映射要更改,一切遵循着原理图进行!其他按照默认设置,同时使能UART3口作为板载串口调试,波特率115200bps,其他一切默认:接着,配置Middleware中间件,由于我们使用的是静态IP,无需使用LWIP_DHCP模式,使其失能后,自己手动设置需要的静态IP、掩码和网关,其他一切按照默认配置进行:最后,选取自己的IDE,点击Generate Code,生成HAL库代码,编译成功:三、问题出现在生成代码后,发现HAL库里成功将PHY芯片LAN8720A初始化成功了,但尝试与PC机进行Ping,提示无法访问目标主机。因此,目前为了逐步查错,先把STM32H7使用静态IP的情况下与PC机Ping成功,再与激光雷达模块进行通信。(2020-04-12)重新调整思路以及学习LWIP一、回顾TCP/IP分层在计算机网络里,TCP/IP是一个协议族,包含着众多协议,包括ARP、IP、ICMP、UDP、TCP、DNS、HTTP、FTP、MQTT等。这些协议按照功能,可以划分为几个不同的层次:TCP/IP协议栈各层的报文封装与拆封如下:在本项目中,①STM32H7为我们提供了以太口接口,充当于五层模型中的数据链路层,通过STM32Cube配置其物理地址(在Cube上是6个字节),以太口模式 (在嵌入式平台中,一般使用RMII以减少GPIO占用数量)以及收发的缓存区大小和中断相关开启等操作。注:在一个网络里面,各种设备物理地址都是不同的。②然后,我们采用PHY芯片LAN8720、网络接口HR911105A(里含变压器电路)以及网线,这些部分共同组成我们的物理层,负责比特字节层面的传输,其中PHY芯片LAN8720可配置10Mbp/s或100Mbp/s的半双工、全双工通信模式。在STM32Cube的HAL库中,由于版本的迭代和更新,最新版本下已采用了LAN8742作为PHY芯片的底层驱动,LAN8742与LAN8720比较看,两者管脚兼容,LAN8742是LAN8720 的升级版,多了一个MCO管脚,其他的芯片特性一样,寄存器配置完全一样。注:LAN8720物理芯片的配置在STM32Cube中的中间层LWIP中。③在STM32等中端嵌入式平台中,一般采用的是轻量化的TCP/IP协议——LwIP(Light weight IP),这是瑞典计算机科学院(SICS)的Adam Dunkels开发的一个小型开源的TCP/IP协议栈。其目的是以最低的系统开销实现“完整”的TCP/IP协议栈,减少RAM资源的占用。此外LwIP即可在裸机上移植,亦可在操作系统上移植。注:截至博客发布时,目前HAL库上采用LwIP的迭代2.12版本。二、LwIP的网络接口管理1.网卡抽象层为了于底层硬件网络接口衔接,LwIP作为轻量级的TCP/IP,为了兼容各种物理层芯片和底层硬件,其对网卡进行了抽象,网卡的抽象层都在netif.c和netif.h中,其中涵盖了许多关于网卡的操作,如网卡的注册和删除、启用与禁用、网卡IP设置等等。在网卡初始化过程中,通过调用网卡抽象层的函数主要有:1.netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, &ethernetif_init, &ethernet_input);
其中,gnetif是LwIP中定义的网卡抽象的结构体,HAL库在网卡初始化之前先往gnetif结构体填充好数据。ipaddr、netmask和gw分别设置为我们所需的stm32的静态IP、子网掩码和网关,这里我们设置成与雷达IP的同一网段,前三个地址字节是一样的,即可。2.netif_set_default(&gnetif);
在经过步骤1的网卡抽象结构体填充后,通过步骤2来进行网卡注册,将网卡注册到网卡链表当中。
3.if (netif_is_link_up(&gnetif)){/* When the netif is fully configured this function must be called */netif_set_up(&gnetif);}else{/* When the netif link is down this function must be called */netif_set_down(&gnetif);}
接着调用netif_is_link_up(&gnetif)检查netif是否配置好,当配置好之后,一切就绪,调用netif_set_up(&gnetif);启动网卡,可以开始数据传输了。2.网卡驱动层网卡驱动层作为底层接口,为网卡抽象层提供注册操作,给每个netif接口提供访问硬件的支持。在实际开发移植中,我们往往需要根据自己实际网卡特性去完善修改底层驱动的函数即可。与网卡驱动密切相关的函数有3个,分别是low_level_init()、low_level_output()和low_level_input()。1.low_level_init()为网卡初始化函数,主要完成网卡的复位和参数初始化,根据实际的网卡属性配置netif中与网卡相关的字段,如网卡的MAC地址、长度、最大发送单元等等2.low_level_output()为网卡的发送函数,主要将内核的数据包发送出去,数据包的封装采用pbuf数据结构进行描述,而pbuf数据结构专门用了pbuf.c和pbuf.h进行定义。3.low_level_input()是网卡的数据接收函数,同样将接收到的数据采取pbuf的形式进行各层之间的递交,保持收发的一致性且方便LwIP内核处理。三、亲手实践过程由于采用硬石提供的整套Demo,我们是可以跑通整个过程的,远端设备能够Ping通。因此我把硬石官方代码中的ethernetif.c和ethernetif.h移植到了我自己的CubeMX工程中,把底层网卡驱动部分直接替换掉。在调用新版LwIP的网卡抽象层进行注册和初始化网卡。发现还是存在问题-_-!!(绝望)底层硬件驱动部分:结果发现Ping不通,还是显示主机无法访问。直接调用硬石模板能Ping通。四、最终解决在开发板Demo移植很多次后,几乎丧失了信心,在同样的代码上,只换了底层驱动,仍然不行。于是在五一期间歇了一下,重新调整,最后尝试着直接用Cube生成的HAL库进行网口开发,因为细想到,STM32是开源的大社区,全球的开发者都在共同维护和做贡献,我能做的也就相信Cube的官方库,具体细节再去微调。重新配置STM32CubeMX情况如下:1.配置CPU-Dcache和MPU,这里配置多了一个MPU Region,大小为16KB:2.采用以太口中断接收数据,通过ethernet_input()接收数据并交给lwip内核处理:3.其余配置按照之前进行,基本保持不变,生成代码后进行代码修改:(1)在LAN8742初始化之前,先对其进行硬件复位:(2)对以太口底层输入,去掉宏定义,令以太口接收缓存Cache失效:(3)在定时检测ETH是否断线的函数中,在检测到断线时,取消掉HAL_ETH_Stop_IT():(4)开启SRAM3的时钟,涉及了MPU那边的使用:(5)在主函数中添加MX_LWIP_Process(),把ethernet_input()去掉,改在ETH_IRQHandler中添加,在中断里将以太数据传给lwip内核处理,同时清楚相关的中断;其中sys_check_timeouts是lwip内部的超时处理函数,在主函数里面都是必须的;Ethernet_Link_Periodic_Handle是每100ms检测以太口是否断开或者重新连上,使网线热插拔后,网口都能重新自动连接和自动失效:4.一切就绪后,在Keil5上编译并烧录到板子上,一切运作正常,在使用静态IP的情况下设备两端能正常ping通,说明物理层、数据链路层、网络层一切正常且就绪,接下来可以进行tcp或udp通信。五、总结lwip的网卡部分,其实HAL方面移植得已经非常不错,总体过程大致如下:1.lwip内核初始化,lwip_init();2.设置静态本地IP、子网掩码和网关或者采用DHCP方法分配本地一个动态IP、子网掩码和网关;3.分配好IP、子网掩码和网关等本地设置后,调用lwip接口进行网口注册,若注册成功且网线已经接好,启动网卡,若注册失败或网线没接上,关闭网卡。4.注册断线检测和网线重连函数,在回调函数中进行网线启停处理。
原因:1、人为因素。飞秒光纤激光器主要是外部的光路发电机维修保养。长时间工作后,向下功率是不可避免的,当功率下降影响运作效果,它需要部光路的维护,当维修完成时,工作能力将被恢复。2、激光器因素。激光器是有生命的,不同的品质的激光器有不同的使用期限,所以用户在选购激光器时要清楚其使用期限,方便做好维护工作。3、环境因素。另外,激光器对使用环境的空气质量要求也很高。尽量将激光器置于环境空气质量较高的环境下使用。计算公式:峰值功率=脉冲能量除以脉宽 ,平均功率=脉冲能量*重复频率(每秒钟脉冲的个数)脉冲激光的能量和功率是不一样的,一般连续激光器用功率做参数,脉冲激光器用能量做参数,而对于连续激光器,一般用平均功率做参数。

我要回帖

更多关于 激光脉冲延迟是什么意思 的文章

 

随机推荐