题目内容:
无线电台的RS制信号报告是由三两个部分组成的:
R(Readability) 信号可辨度即清晰度.
S(Strength) 信号强度即大小.
其中R位于报告第一位,共分5级,用1—5数字表示.
1---Unreadable
2---Barely readable, occasional words distinguishable
3---Readable with considerable difficulty
4---Readable with practically no difficulty
5---Perfectly readable
报告第二位是S,共分九个级别,用1—9中的一位数字表示
1---Faint signals, barely perceptible
2---Very weak signals
3---Weak signals
4---Fair signals
5---Fairly good signals
6---Good signals
7---Moderately strong signals
8---Strong signals
9---Extremely strong signals
现在,你的程序要读入一个信号报告的数字,然后输出对应的含义。如读到59,则输出: Extremely strong signals, perfectly readable.
输入格式:
一个整数,信号报告。整数的十位部分表示可辨度,个位部分表示强度。输入的整数范围是
[11,59],这个范围外的数字不可能出现在测试数据中。
输出格式:
一句话,表示这个信号报告的意义。按照题目中的文字,先输出表示强度的文字,跟上逗号和空格,然后是表示可辨度的文字,跟上句号。注意可辨度的句子的第一个字母是小写的。注意这里的标点符号都是英文的。
输入样例:
33
输出样例:
Weak signals, readable with considerable difficulty.
时间限制:500ms内存限制:32000kb
#include <stdio.h>
int main()
{
int R ,S , n1 ;
scanf("%d", &n1);
R=n1/10;
S=n1-R*10;
switch(S){
case 1:
printf("Faint signals, barely perceptible");
break;
case 2:
printf("Very weak signals");
break;
case 3:
printf("Weak signals");
break;
case 4:
printf("Fair signals");
break;
case 5:
printf("Fairly good signals");
break;
case 6:
printf("Good signals");
break;
case 7:
printf("Moderately strong signals");
break;
case 8:
printf("Strong signals");
break;
case 9:
printf("Extremely strong signals");
break;
}
switch(R)
{
case 1:
printf(", unreadable .");
break;
case 2:
printf(", barely readable, occasional words distinguishable ."); break;
case 3:
printf(", readable with considerable difficulty.");
break;
case 4:
printf(", readable with practically no difficulty .");
break;
case 5:
printf(", perfectly readable ."); break;
}
}
第二篇:C程序设计习题部分
习题
第1部分 表达式及三种基本结构
1、单项选择题
1)在C语言中,int、char和float三种类型数据所占用的内存 。
A、均为2个字节 B、分别为1、2、4个字节
C、分别为2、1、4个字节 D、由变量的大小决定
2)在C语言中,错误的int类型的常数是 。
A、32768 B、 -32766 C、 037 D、 0xAF
3)下列可以表示字符型常数的是 。
A、 "a" B、 '\t' C、 "\n" D、 297
4)下列错误的转义字符是 。
A、 '\\' B、 '\"' C、 '\81' D、 '\0'
5)已知char a; int b; float c; double d; 执行语句c=a+b+c+d;后,变量c的数据类型是: 。
A、 int B、 char C、 float D、 double
6)已知 int i=5; 执行语句i+=++i; 后,i的值是 。
A、6 B、 10 C、 12 D、 11
7)若w=1,x=2,y=3,z=4; 则条件表达式w>x?w:y<z?y:z的结果为 。
A、4 B、 3 C、 2 D、 1
8)已知int x; 则使用逗号运算符的表达式(x=4*5,x*5),x+25的结果为 。
A、20 B、 100 C、 125 D、 45
9)已知a=b=c=1且均为int 类型变量,则执行以下语句:++a||++b&&++c; 变量b的值为 。
A、1 B、 2 C、3 D、 0
10)若要求在if后一对圆括号中表示条件“a不等于0成立”,则能正确表示这一关系的表达式是 。
A、a<>0 B、 !a C、a=0 D、 a
11)C语言对嵌套if语句的规定是:else总是和 配对。
A、其之前最近的if B、第一个if
C、缩进位置相同的if D、其前面最近的且尚未配对的if
12)为了判断两个字符串s1和s2是否相等,应当使用 。
A、if(s1==s2) B、 if(s1=s2)
C、if(strcpy(s1,s2)) D、if(strcmp(s1,s2)==0)
13)已知x,a,b均为整型变量,则下列选项中错误的if语句是 。
A、if(a=b) x++; B、if(a=<b) x++; C、if(a-b) x++; D、if(x) x++;
14)下列关于switch语句和break语句的结论中,正确的是 。
A、break语句只能用于switch语句中
B、在switch语句中可以根据需要,使用或不使用break语句
C、在switch语句中必须使用break语句
D、break语句不能用于switch语句
15)在C语言中,判断一个量是否为"真"时,通常这个量必须是 才表示逻辑值"真"。
A、1 B、非0整数 C、大于0的整数 D、非0值
16)以下四条语句中,有语法错误的是 。
A、if(a>b) m=a; B、if(a=b) m=b; C、if((a=b)>=0) m=a; D、if((a=b;)>=0) m=a;
17)程序main() {int x=5; if(x++>10) printf("%d",x);else printf("%d",x--);}的输出是 。
A、4 B、5 C、6 D、7
18)在下面的条件语句中(其中s1和s2表示是C语言的语句),只有一个在功能上与其它三条语句不等价,它是 。
A、if (a) s1; else s2; B、if (a==0) s2; else s1;
C、if (a!=0) s1; else s2; D、if (a==0) s1; else s2;
19)在循环语句的循环体中使用break和continue语句的作用分别是 。
A、都是结束循环 B、结束本次循环和结束循环
C、都是结束本次循环 D、结束循环和结束本次循环
20)设i,s是整型变量,执行如下的语句:
for (i=0,s=0;i<10;i++,s++);
printf("%d,%d\n",i,s);
输出的i和s的值为 。
A、0,0 B、10,0 C、10,10 D、9,9
21)语句while(!x);中的条件等价于 。
A、x==0 B、x!=0 C、~x D、x!=1
22)在while(x)语句中的x与下面条件表达式等价的是 。
A、x==0 B、x==1 C、x!=1 D、x!=0
23)若int x=3; 且有下面的程序片段,则输出结果是 。
do
{ printf ("%d",x-=2);
} while (!(--x));
A、1 B、3 0 C、1 -2 D、死循环
24)若i,j均为整型变量,则关于循环for(i=0,j=-1;j==1;i++,j++)printf("%d,%d\n",i,j);正确的说法是 。
A、循环体只执行一次 B、循环体一次也不执行
C、判断循环结束的条件不合法 D、是无限循环
25)以下不是死循环的语句为 。
A、for ( ; ; x+=i ); B、while (1) {x++;}
C、for (i=10; ; i--) D、for ( ; (c=getchar())!='\n';)
sum+=i; printf("%c",c);
26)设有如下程序段,则以下叙述中正确的是 。
int x=2002,y=2003;
printf("%d\n",(x,y));
A、输出语句中格式说明符的个数少于输出项的个数
B、输出语句中格式说明符必须再增加一个%d
C、输出值为2002
D、输出值为2003
2、填空题
1)设有如下说明: int i=3,j=5,m;
执行语句m=(i++)-(--j);后,m的值是 ,j的值是 。
2)设有如下程序:void main()
{ int a=3,b=3,c;
c=a++ +b;printf("%d %d\n",a,c);
c=a- --b;printf("%d %d\n",b,c);/*减号之间有无空格结果是不同的*/
c=a+++b; printf("%d %d\n",a,c);}
该程序执行后的三行输出分别是 , , 。
3)设x=2.5,a=7,y=4.7,则表达式x+a%3*(int)(x+y)%2/4的值为 。
4)以下程序运行的结果是 。
#include <stdio.h>
void main()
{int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf ("%d,%d,%d,%d",i,j,m,n);
}
5)strlen("ab\034\\\x79")的值是 。
6)若int x=600; 则执行下列程序后,变量y的值是 。
if (x>400)
if (x<500)
y=0.5*(x-400);
else
y=x-400;
else
y=0;
7)若int i=10;则执行下列程序后,变量i的正确结果是 。
switch (i)
{case 9: i+=1;
case 10: i+=1;
case 11: i+=2;
default: i+=2;
}
8)以下程序的输出为 。
void main()
{int a=9,b=7,c=11;
if (a>b)
if (a>c) printf("%d",a); else printf("%d",b);
printf("end"); }
9)完善程序:企业根据月销售额为销售人员发奖金。销售额小于1万元,奖金为销售额的20%;销售额大于或等于1万元而小于2万元,低于1万元的部分按20%,高于1万元的部分按15%发奖金;销售额大于2万元而小于4万元的,低于2万元的部分仍按上述方法发奖金,高于2万元的部分按10%发奖金;销售额大于4万元而低于6万元时,高于4万元的部分按6%发奖金;销售额大于6万元而低于10万元时,高于6万元的部分按3%发奖金;当销售额大于10万元时,高于10万元的部分按2%发奖金。
#include <stdio.h>
void main()
{ float sales;
double price;
int n;
printf("请输入月销售额:\n");
scanf("%f" ,&sales);
if (sales>=100000)
n=10;
else
;
switch( n )
{ case 0: price= sales*0.2; break;
case 1: price= 2000+(sales-10000)*0.15; break;
case 2:
case 3: price= 3500+(sales-20000)*0.1; break;
case 4:
case 5: price= 5500+(sales-40000)*0.06; break;
case 6:
case 7:
case 8:
case 9: price= 6700+(sales-60000)*0.03;break;
case 10: price= 7900+(sales-100000)*0.02; break;
}
printf("奖金是:%f\n",price );
}
10)执行下列程序段后,x和i的值分别是10和 。
int x,i;
for(i=1,x=1;i<=50;i++)
{if(x>=10) break; if(x%2==1) {x+=5;continue;} x-=3;}
11)完善程序:程序用于求100~200之间的全部素数。程序中n的作用是累计素数的个数,该程序要求控制每行输出10个数据。
#include "math.h"
void main()
{int m,k,i,n=0 ;
for (m= 101 ;m<=200;m=m+2)
{if ( n%10==0 ) printf("\n");
k=sqrt(m);
for (i=2;i<=k;i++)
if (m%i==0) ;
if (i>=k+1) {printf("%d ",m); n=n+1;}
}
}
12)完善程序:已知任意一个正整数的立方都可以写成一串连续奇数的和。例如:
13×13×13=2197=157+159+ … +177+179+181,下列程序可以验证上述定理。
void main()
{ long int n,i,k,j,sum;
printf("Enter n=");
scanf("%ld",&n);
k=n*n*n;
for(i=1;i<k/2;i+=2)
{ for(j=i,sum=0;sum<k ;j+=2)
sum+=j;
if( sum==k )
printf("%ld*%ld*%ld=%ld=from %ld to %ld\n",n,n,n,sum,i,j);
}
}
13)完善程序:下面程序的功能是打印100以内个位数为6且能被3整除的所有数。
#include "stdio.h"
void main()
{int i,j;
for(i=0; i<10 ;i++)
{j=i*10+6;
if( ) continue;
printf("%d ",j);}
}
14)阅读程序,写出程序的输出结果 。
#include <stdio.h>
void main()
{ int k=1; char c='A';
do
{ switch(c++)
{ case 'A': k++; break;
case 'B': k--;
case 'C': k+=2; break;
case 'D': k=k%2; continue;
case 'E': k=k*2; break;
default: k=k/3;
}
k++;
} while(c<'F');
printf("k=%d\n",k);
}
15)写出程序的输出结果 。
#include <stdio.h>
void main()
{ int i=1;
while (i<=15)
if (++i%3 !=2)
continue;
else
printf("%d ",i); /*该语句是否在循环中?*/
printf("\n"); /*该语句是否在循环中?*/
}
16)编程将一个键盘输入的正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
17)猴子吃桃问题:几个猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第10天早上想再吃时,见只剩下一个桃子了。编程求第一天共摘了多少桃子。(提示:采取逆向思维的方法,从后往前推断。)
第2部分 数组
1、单项选择题
1)以下对数组的初始化方法中,正确的是: 。
A、int a[ ]='A','B','C'; B、int a[5]={0,1,2,3,4,5};
C、char a={'A','B','C'}; D、int a[ ]= {0,1,2,3,4,5};
2)若要判断两个字符串str1和str2是否相等,应选用的函数是 。
A、strcat(str1,str2) B、strcpy(str1,str2)
C、strcmp(str1,str2) D、strstr(str1,str2)
3)以下对字符数组初始化的方法中,错误的是: 。
A、 char str[ ]={"Hello"}; B、 char str[ ]="Hello";
C、 char str[ ]={Hello}; D、 char str[ ]={'H','e','l','l','o','\0'};
4)若给出以下定义,则正确的叙述为 。
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};
A、数组x和数组y等价 B、数组x和数组y的长度相同
C、数组x的长度大于数组y的长度 D、数组x的长度小于数组y的长度
5)若二维数组a有m列,则在a[i][j]前的元素个数为 。
A、 j*m+i; B、 i*m+j; C、 i*m+j-1; D、 i*m+j+1;
6)若已定义:int w[10];则在下面表达式中不能表示w[2]的地址的是 。
A、w+2 B、&w[2] C、&w[0]+2 D、w+=2
7)以下对二维数组a的正确说明是 。
A、int a[3][ ]={3,4,2,6,9,2}; B、float a(3, 4);
C、int a[ ][4]={3,4,2,6,9,2}; D、int a[10]={10*1};
8)不正确的字符串赋值或赋初值方式是 。
A、char str[ ]={'s', 't', 'r', 'i', 'n', 'g', '\0'}; B、char str[7]={'s', 't', 'r', 'i', 'n', 'g'};
C、char str1[10]; str1="string"; D、char str1[ ]="string",str2[ ]="12345678";
9)若有以下说明和语句,则输出结果是 。
char s[12]="a book! ";
printf("%.4s",s);
A、a book! B、a bo
C、a book!□□□(□代表空格) D、因格式描述不正确,没有确定的输出
10)若有以下说明和语句,则输出的结果是 。
char sp[ ]="\x69\082\n";
printf("%d",strlen(sp));
A、3 B、1 C、5 D、4
11)若两个静态数组A和数组B进行如下初始化,则 。
static char A[ ]="ABCDEF";
static char B[ ]={'A','B','C','D','E','F’};
A、A和B完全相同 B、A和B只是长度相等
C、A和B不相同,A是字符串,不是数组 D、A数组长度比B数组长
12)下列程序的输出结果是 。
void main()
{int k=3,a[2];
a[0]=k;k=a[1]*10;
printf("%d\n",k);
}
A、10 B、30 C、33 D、不定值
13)要定义一个连续10个字节的存储空间,以下定义正确的是 。
A、char ss[10]; B、int ss[10]; C、float ss[10]; D、double ss[10];
14)有一数组int num[][4]={11,12,13,14,15,16,17,9,8,7,6,5},执行语句scanf("%d", &num[2][3])后,数组中的值应为: (键盘输入值为0)。
A、11,12,13,14,0,0,0,0,0,0,0,0 B、11,12,13,14,15,16, 17,9,8,7,6,0
C、11,12,13,14,15,16, 17,0,8,7,6,5 D、11,12,13,14,15,16, 17,9,8,7,6,5
15)有一数组如下定义
int a[6]={1,2,3,4,5};
执行for (i=0; i<6;i++)
printf ("%d ",a[i]); 输出的结果是 。
A、1 2 3 4 5 6 B、1 2 3 4 5 随机值 C、1 2 3 4 5 0 D、1 2 3 4 5 5
16)执行以下程序,若输入数据为:abcd1234 efgh,则程序的输出结果是 。
void main()
{ char str [13];
scanf("%s",str);
printf("%s\n",str);
}
A、abcd B、abcd1234 C、efgh D、abcd1234efgh
17)若有声明语句“int M[10],N[3][3];”,则以下对数组元素赋值的操作中,未出现越界访问的是 。
A、N[0][3]=0 B、M[10]=0 C、N[3][0]=0 D、M[-1]=0
18)已定义一个数组str存放字符串,要从键盘上接收一串字符到str中,正确的方法是 。
A、gets(str); B、gets(&str); C、scanf("%c",str); D、scanf("%s",&str);
19)有一数组char str[60],要将windows存放到此数组的正确语句是 。
A、get(str); B、scanf("%s", str); C、scanf("%s", &str); D、puts(str);
20)C语言中,存储字符串“ABC”占用的字节数(即函数sizeof(a)的值)和字符串长度(即函数strlen("ABC")的值)分别是 。
A、3、4 B、4、3 C、3、3 D、4、4
21)设有说明:“char str1[100];”,并假设已输入一个字符串至str1数组中,则输出该字符串的printf函数调用语句的格式为 。
A、printf("%d\n",&str); B、printf("%c\n",str);
C、printf("%s\n",str); D、printf("%s\n",&str);
22)下列描述正确的是 。
A、数组名就是本数组在存储空间中的起始地址
B、数组名就是一个符号,在程序中没有实际的意义
C、数组名就是存放数组中的第一个元素的存储单元
D、在程序中数组不能单独使用,必须带[]使用
23)命题“当两个字符串s1和s2相等时为真,否则为假”的C语言表达式为 。
A、s1==s2 B、s1=s2 C、!strcmp(s1,s2) D、strcmp(s1,s2)
24)有一数组int a[8]={1,2,3,4,5,6,7,8},在执行scanf(“%d”, &a[a[5]%3+1]),数组中的值为 。(键盘输入值为0)
A、1 2 0 4 5 6 7 8 B、1 2 3 0 5 6 7 8
C、1 2 3 4 0 6 7 8 D、1 0 3 4 5 6 7 8
25)若有以下说明和语句,则输出结果是 。
char str[ ]="\"c:\\abc.dat\"";
printf("%s",str);
A、符串中有非法字符 B、\"c:\\abc.dat\" C、"c:\abc.dat" D、"c:\\abc.dat
26)有以下语句:int b;char c[10];则正确的输入语句是 。
A、scanf("%d%s",&b,&c); B、scanf("%d%s",&b,c);
C、scanf("%d%s",b,c); D、scanf("%d%s",b,&c);
27)以下程序运行后的输出结果是 。
void main()
{int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while( i++<7)
if(p[i]%2) j+=p[i];
printf("%d\n",j);
}
A、42 B、45 C、56 D、60
28)以下程序运行后的输出结果是 。
void main()
{
char a[7]="a0\0a0\0";
int i,j;
i=sizeof(a); /* sizeof()是求a数组存储空间的库函数*/
j=strlen(a);
printf("%d %d\n",i,j);
}
A、2 2 B、7 6 C、7 2 D、6 2
29)以下能正确定义一维数组的选项是 。
A、int a[5]={0,1,2,3,4,5} B、char a[]={0,1,2,3,4,5};
C、char a={'A','B','C'}; D、int a[5]="0123";
30)以下叙述中错误的是 。
A、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
B、数组名代表的是数组所占存储区的首地址,其值不可改变
C、当程序执行中数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
D、可以通过赋初值的方式确定数组元素的个数
31)以下能正确定义一维数组的选项是 。
A、int num[]; B、#define N 100
int num[N];
C、int num[0…100]; D、int N=100;
int num[N];
32)若有定义语句"static char str[4][12]={"thank","you","very","much!"};"则str数组中存储'\0'的数组元素有 个。
A、4 B、1 C、31 D、27
2、填空题
1)执行以下程序段后,b[0]、b[1]、b[2]的值为 。
int b[3]={0,1,2}; b[2]=b[(b[0]=2)+b[1]-1]-2;
2)下面程序的输出结果为 。
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
void main()
{ int i;
for(i=0;i<3;i++)
printf("%d ",a[i][2-i]);
}
3)以下程序输出的结果是 。
void main()
{ char w[ ][10]={"ABCD","EFGH","IJKL","MNOP"},k;
for (k=1;k<3;k++) printf("%s ",&w[k][k]);
}
4)请读程序:
# include <string.h>
void main()
{ char s[20],t[20],min[20];
scanf("%s\n",s);
scanf("%s\n",t);
if(strcmp(s,t)<0) strcpy(min,s);
else strcpy(min,t);
printf("%s\n",min);
}
若分别输入candy和ann,则上面程序的输出结果是: 。
5)下面程序执行时输出的结果是: 。
void main()
{ int a[3][3]={1,2,3,4,5,6,7,8,9},m,k,t;
for(m=0;m<3;m++)
for(k=0;k<=m;k++)
if((m+k)%2) t=a[m][k],a[m][k]=a[k][m],a[k][m]=t;
for(m=0;m<3;m++)
{ for(k=0;k<3;k++)
printf("%d ",a[m][k]); }
printf("\n");
}
6)运行以下程序时,若输入:1 2 3 3 2 1 2 1 3↙输出结果是: 。
#include <stdio.h>
void main()
{ int a[4][4],i,j;
for (i=1;i<4;i++)
for (j=1;j<4;j++)
scanf("%d",&a[i][j]);
for (i=1;i<4;i++)
for (j=1;j<4;j++)
a[i][j]=a[(a[i][j]+1)%3+1][(a[j][i]+2)%3+1];
for (i=1;i<4;i++)
printf("a[%d,%d]=%d ",i,i,a[i][i]);
}
7)下面程序的功能是检查一个二维数组是否对称(即a[i][j]==a[j][i]),请填空。
void main()
{ int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,4,7};
int i,j,found=1;
for(i=0;i<4&&found;i++)
for( j=0 ;j<i;j++)
if(a[i][j]!=a[j][i]) { ;break; }
if( ) printf("NO"); else printf("YES");
}
8)已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列
void main()
{ int a[10]={0,12,17,20,25,28,30}; /*a[0]为工作单元,从a[1]开始存放数据*/
int x,i,j=6; /*j为元素个数*/
printf("Enter a number: ");
scanf("%d",&x);
a[0]=x;
i=j; /*从最后一个单元开始*/
while(a[i]>x)
{ a[ ]=a[i]; ; } /*将比x大的数往后移动一个位置*/
a[++i]=x;
; /*插入x后元素总个数增加*/
for(i=1;i<=j;i++) printf("%8d",a[i]);
printf("\n");
}
9)以下程序运行的结果是: 。
void main()
{char a[][6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVW"}
int i;
for(i=0;i<4;i++)
printf(“%s”,a[i]);
printf(“\n”);}
10)编写一个程序,求1~9之间的随机整数构成的4×5矩阵每一行与每一列之和。
11)假定在一个包含16个元素的数组中,每一个元素都是不超过两位的正整数,试编程统计该数组全部元素中数字0,1,2,……,9各出现多少次。
第3部分 函数和预处理命令
1、单项选择题
1)对于C程序的函数, 的叙述是正确的。
A、C语言程序的函数中必须有return语句
B、C程序中,函数的类型必须进行显式说明
C、函数中,return语句必须放在函数体的最后
D、return语句中表达式的类型应该与函数的类型一致
2)设有宏定义#define A(m) 5*m,则表达式A(2+3)/3的值为 。
A、15 B、4 C、8 D、11
3)对于C程序的参数, 会发生“类型不匹配”的错误。
A、实参和形参均为实型 B、实参为字符型而形参为整型
C、实参为整型而形参为字符型 D、实参为整型而形参为实型
4)一个函数返回值的类型是由 决定的。
A、return语句中表达式的类型 B、在调用函数时临时指定
C、定义函数时指定的函数类型 D、调用该函数的主调函数的类型
5)以下叙述中正确的是 。
A、构成C程序的基本单位是函数 B、可以在一个函数中定义另一个函数
C、void main()函数必须放在其它函数前 D、所有被调用函数一定要在调用之前定义
6)以下程序的输出结果是 。
#include "stdio.h"
int power(int x,int y);
void main()
{ float a=2.6,b=3.4; int p;
p=power((int)a,(int)b);
printf("%d\n",p);
}
int power(int x,int y)
{ int i,p=1;
for(i=y;i>0;i--) p=p*x;
return p;
}
A、8 B、9 C、27 D、81
7)以下是一个自定义函数的头部,其中正确的是 。
A、int fun(int a,b) B、int fun(int a,int b) C、int fun(int a,int b); D、int fun(int a;int b)
8)以下程序执行时输出结果是: 。
int f(int x,int y)
{ return x/y+x%y; }
void main()
{ float a=1.5,b=3.0,c=f(a,b);
printf("%.2f",c);
}
A、0.50 B、0.00 C、1.00 D、1.50
9)有如下程序
int func(int a,int b)
{ return(a+b); }
void main()
{ int x=2,y=5,z=8,r;
r=func(func(x,y),z);
printf("%\d\n",r);
}
该程序的输出的结果是: 。
A、12 B、13 C、14 D、15
10)有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是: 。
A、3 B、4 C、 5 D、 有语法错
11)C提供的编译预处理功能包括: 。
A、文件包含、宏定义和条件编译 B、构造工程文件
C、语句注释 D、包含以上各功能
12)以下叙述中正确的是 。
A、全局变量的作用域一定比局部变量的作用域范围大
B、静态(static)类别变量的生存期贯穿于整个程序的运行期间
C、函数的形参都属于全局变量
D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值
13)以下所列的各函数首部中,正确的是 。
A、void play(int a,b); B、void play(int a,b)
C、void play(int a,int b) D、void play(int a;int b)
14)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是 。
A、地址传递 B、单向值传递
C、由实参传给形参,再由形参传回实参 D、传递方式由用户指定
15)若有以下程序,则以下叙述中不正确的是 。
#include <stdio.h>
void f(int n);
void main()
{ void f(int n);
f(5);}
void f(int n)
{ printf("%d\n",n); }
A、若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
B、若在主函数前对函数f进行说明,则在主函数和其后其它函数中都能调用函数f
C、对于以上程序,编译时系统会提示出错信息:提示对f函数重复说明
D、函数f无返回值,所以可用void将其类型定义为无值型
16)C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是 。
A、void B、int C、float D、double
17)若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 。
A、函数调用可以作为独立的语句存在
B、函数调用可以作为一个函数的实参
C、函数调用可以出现在表达式中
D、函数调用可以作为一个函数的形参
18)有以下函数定义:
void fun(int n, double x) { …… }
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是 。
A、fun(int y,double m); B、k=fun(10,12.5); C、fun(x,n); D、void fun(n,x);
19)对于C程序的函数, 的叙述是正确的。
A、函数不能嵌套定义,但可以嵌套调用 B、函数可以嵌套定义,但不能嵌套调用
C、函数的定义和调用均不能嵌套 D、函数的定义和调用均可以嵌套
20)以下叙述中不正确的是 。
A、一个变量的作用域完全取决于变量说明语句的位置
B、外部变量可以在函数以外的任何位置定义
C、内部变量的生存期只限于本次函数调用,无法将内部变量的值保存至函数的下一次调用
D、用static说明一个外部变量是为了限制其他编译单位的引用
21)若有以下变量和函数说明,以下合法的函数调用语句是 。
int a=4,b=6,c,k;
char ch='*';
float x,y,z;
sub(int x,int y,char ch,float *z)
{switch(ch)
{case '+':*z=x+y;break;
case '-':*z=x-y;break;
case '*':*z=x*y;break;
case '/':*z=x/y;break;}
}
A、sub(10,20,ch,y); B、sub(1.2+3,2*2, '+',&z);
C、sub(sub(1,2, '+',&y),sub(3,4, '+',&x), '-',&y); D、sub(a,b,&x,ch);
22)以下叙述中不正确的是: 。
A、在函数中通过return语句传回函数值
B、在函数中可以有多条return语句
C、主函数main后的一对圆括号中也可以带有形参
D、调用函数必需在一条独立的语句中完成
23)以下叙述中不正确的是 。
A、在不同的函数中可以使用相同名字的变量
B、函数中的形式参数是局部变量
C、在一个函数内定义的变量只在本函数范围内有效
D、在一个函数内的复合语句中定义的变量在本函数范围内有效
24)以下对C语言函数的有关描述中,正确的是 。
A、调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B、C函数既可以嵌套定义又可以递归调用
C、函数必须有返回值,否则不能使用函数
D、C程序中有调用关系的所有函数必须放在同一个源程序文件中
25)以下是一个自定义函数的头部,其中正确的是 。
A、int fun(int a[],b) B、int fun(int a[],int a)
C、int fun(int a,int b) D、int fun(char a[][],int b)
2、填空题
1)static型变量是在 时赋初值。
2)假设有宏定义:#define MA(x) x*(x-2),则表达式MA(2+3+1)的值为 。
3)以下函数调用语句中,含有的实参个数是 。
fun(a+b,(y=10,y),fun(n,k,d));
4)C语言中,形参与实参之间的数据传递方式是,可以按 传递也可以按 传递。
5)在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内, 不起作用。
6)假设有宏定义,则表达式Z(4)的值为 。
#define X 5
#define Y X+1
#define Z(m) Y*X/m
7)下面程序执行后,x、y、z的结果分别是: 、 、 。
void main()
{ int x,y,z;
x=50; y=500; z=0;
xyz(x,y,z);
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
xyz(int x,int y,int z)
{ int temp;
temp=x; x=y; y=temp;
x=x*x; y=y*y; z=x-y;
}
8)请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。
( double,double);
void main()
{ double x,y;
scanf("%lf%lf",&x,&y);
printf("%lf\n",max(x,y));
}
double max(double a,double b)
{ return(a>b ? a:b);
}
9)以下程序的输出结果是: 。
unsigned fun(unsigned num)
{ unsigned k=1;
do{
k*=num%10;
num/=10;
}while(num);
return(k);
}
void main()
{ unsigned n=26;
printf("%d\n",fun(n));
}
10)以下程序的输出结果是: 。
char cchar(char ch)
{ if(ch>='A'&&ch<='Z') ch=ch-'A'+'a';
return ch;
}
void main()
{ char s[]="ABC+abc=defDEF";
int j;
while(s[j]!= '\0')
{ s[j]=cchar(s[j]);
j++;
}
printf("%s\n",s);
}
11)以下函数的功能是计算s=1+1/2!+1/3!+……+1/n!,请填空。
double fun(int n)
{ double s=0.0,fac=1.0; int i;
for(i=1;i<=n;i++)
{ fac=fac ;
s=s+fac;
}
return ;
}
12)以下程序验证一个猜想:任意一个十进制正整数与其反序数相加后得到一个新的正整数,重复该步骤最终可得到一个回文数(所谓反序数是指将原数从右向左读所得到的数,如123的反序数是321;所谓回文数是指一个数从左向右读的值与从右向左读的值相等,如12321、234432都是回文数),请将程序补充完整。
#include <stdio.h>
long invert(long x);
void main()
{ long n,c=0;
printf("input a number: ");
scanf("%ld",&n);
while( )
{ printf("input a number: ");
scanf("%ld",&n);
}
n=n+ ; /*将十进制正整数n与其反序数相加*/
c++; /*c统计相加次数*/
while( )
{ n=n+invert(n); c++; }
printf("%ld,count=%ld",n,c);
}
long invert(long x) /*生成并返回x的反序数*/
{ long s;
for(s=0;x>0; )
s=s*10+x%10;
return s;
}
13)用6~100间的偶数验证哥德巴赫猜想:比6大的偶数均可表示为两个素数之和。
void main()
{int m,k;
for(m=6; ;m=m+2)
for(k=3;k<m;k=k+2)
if(pr(k)&&pr(m-k))
{ printf("%d=%d+%d\n",m,k, );
break;
}
}
pr(int n)
{int i,yes=1;
for(i=2;i<n;i++)
if(n%i==0){ ;break;}
return yes;
}
14)函数g的功能是计算级数的值,当通项的绝对值小于eps时计算停止,请完善程序。
#include<math.h>
float g(float x,float eps);
void main()
{ float x,eps;
scanf("%f%f",&x,&eps);
printf("\n%f,%f",x,g(x,eps));
}
float g(float x,float eps)
{ int n=1;float s,t;
s=1;t=1;
do
{ t=t* ;
s=s+(n*n+1)*t;
;
} while( );
return s;}
15)编程计算(n+1)!+(n+2)! +……+(n+m)!的值,程序运行后,从键盘输入整数m和n。
16)函数void yhui (int y[][N],int x[][N],int n)生成n行杨辉三角形数据构成的矩阵,并将其存放到y指向的二维数组中,再将y数组中的矩阵顺时针旋转90度后存储到x指向的二维数组中。主函数中分别输出n行杨辉三角形及顺时针旋转90度后的n行杨辉三角形。测试数据与运行结果如下,n=4时应输出:
1
1 1
1 2 1
1 3 3 1
1 1 1 1
3 2 1
3 1
1
第4部分 指针
1、单项选择题
1)设char a[10]; int k;,以下正确的表达式是 。
A、[k+2] B、 *(a+k) C、(&s+k) D、 *((a++)+k)
2)若px为指针变量名,y为变量名,则y=*px++;等价于 。
A、y=*px;++px; B、y=(*px)++; C、y=px;px++; D、y=*(++px);
3)设char a[10],*p=a;,以下不正确的表达式是 。
A、p=a+5; B、a=p+a; C、a[4]=p[2]; D、*p=a[0];
4)设有 char *p,*q;选择正确的语句 。
A、p*=3; B、p=&q; C、p+=3; D、p+=q;
5)设有语句:int a[5]={0,1,2,3,4},*p=a;,以下对a数组元素的错误引用是 。
A、a[p-a] B、*&a[1] C、p[1] D、*(*a (a+1))
6)设有说明int x,*p=*&x;要实现x的内容加5,则下面的语句 是错的。
A、*p=*&x+5 B、x=*p+5 C、*p=*p+5 D、*p=&x+5
7)设char *st;,以下正确的表达式是 。
A、*st='good' B、 st='good' C、*st="good" D、 st="good"
8)以下程序的运行结果为 。
void main()
{int a[10],i,*ap,*aq;
float b[10],*bp,*bq;
for(i=0;i<10;i++)
{a[i]=1; b[i]=10; }
ap=&a[2];
aq=&a[8];
bp=&b[2];
bq=&b[8];
printf("%d,%d\n",ap-aq,bp-bq);
}
A、6,6 B、–6,-6 C、0,0 D、1,10
9)在二维数组中,以下 不能正确表示数组元素a[1][2]。
A、 *(a+1)[2] B、 *(a[1]+2) C、 *(*(a+1)+2) D、 *(1+a[2])
10)已知:char s[20]= "programming", *ps=s;则不能引用字母o的表达式是 。
A、ps+2 B、s[2] C、ps[2] D、ps+=2, *ps
11)设有变量说明:char a[6],*p=a;下面表达中,正确的赋值语句是 。
A、a[6]= "Hello"; B、a="Hello"; C、*p="Hello" D、p="Hello";
12)设有如下说明语句: “int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a, i=5;”,则下列选项中,对a数组元素引用不正确的是 。
A、a[10] B、*(a+i) C、a[p-a] D、p[i]
13)设有如下定义:char *aa[2]={ "abcd","ABCD"};则以下说法中正确的是 。
A、aa数组元素的值分别是"abcd"和"ABCD"
B、aa是指针变量,它指向含有两个数组元素的字符型一维数组
C、aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D、aa数组的两个元素中存放了字符'a'的地址
14)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序,程序运行后的输出结果是 。
void sort(int a[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;}
}
void main()
{int b[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&b[4],4);
for(i=0;i<10;i++) printf("%d,",b[i]);
printf("\n");
}
A、1,2,3,4,5,6,7,8,9,10, B、10,9,8,7,6,5,4,3,2,1,
C、1,2,3,8,7,6,5,4,9,10, D、1,2,3,4,8,7,6,5,9,10,
15)有以下程序,程序运行后的输出结果是 。
int f(int n)
{if (n= =1) return 1;
else return f(n-1)+1;
}
void main()
{int i,j=0;
for(i=1;i<3;i++) j+=f(i);
printf("%d\n",j);
}
A、4 B、3 C、2 D、1
16)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。程序运行后的输出结果是 。
void reverse(int a[],int n)
{int i,t;
for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
void main()
{int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
reverse(b,8);
for(i=6;i<10;i++) s+=b[i];
printf("%d\n",s);
}
A、22 B、10 C、34 D、30
17)有以下程序,程序运行后的输出结果是 。
int a=3;
void main()
{int s=0;
{int a=5; s+=a++; }
s+=a++; printf("%d\n",s);
}
A、8 B、10 C、7 D、11
18)以下程序运行后的输出结果是 。
void fun(int x,int y)
{x=x+y;y=x-y;x=x-y;
printf("%d,%d,",x,y);}
void main()
{int x=2,y=3;
fun(x,y);
printf("%d,%d\n",x,y);
}
A、-1,-1,2,3 B、3,2,3,2 C、3,2,2,3 D、5,2,3,2
19)有以下程序,程序运行后的输出结果是 。
fun(int a, int b)
{ if(a>b) return(a);
else return(b);}
void main()
{ int x=3, y=8, z=6, r;
r=fun(fun(x,y), 2*z);
printf("%d\n", r);
}
A、3 B、6 C、8 D、12
20)以下程序运行后的输出结果是 。
int a=5;
fun(int b)
{ static int a=10;
a+=b++;
printf("%d ",a);
}
void main()
{ int c=20;
fun(c);
a+=c++;
printf("%d\n",a);
}
A、30 25 B、31 30 C、25 31 D、26 25
21)以下程序的输出结果是 。
void main()
{int p(int);
printf("%d ",p(3));
printf("%d ",p(3));
printf("%d ",p(3));
}
p(int x)
{int y=1;
static int z=2;
y++; z++;
return x+y+z;}
A、7 7 7 B、9 10 11 C、8 8 8 D、8 9 10
2、填空题
1)定义int a[]={0,1,2,3,4},*p=a;表达式(*++p)++的值是 。
2)swap(int *pt1,int *pt2)
{int temp;
temp=*pt1; *pt1=*pt2; *pt2=temp;
}
exchange(int *q1,int *q2,int *q3)
{if (*q1<*q2) swap(q1,q2);
if (*q1<*q3) swap(q1,q3);
if (*q2<*q3) swap(q2,q3); }
void main()
{int a,b,c,*p1,*p2,*p3;
p1=&a; p2=&b; p3=&c;
*p1=1; *p2=4; *p3=7;
exchange(p1,p2,p3);
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
以上程序的输出结果是 。
3) void main()
{int *p,a[]={6,5,4,3,2,1};
p=a;
*(p+3)+=2;
printf("n1=%d,n2=%d\n",*p,*(p+3));}
以上程序的输出结果是 。
4) void main()
{int i,j,k,t,*p,a[5]={16,-5,9,0,3};
p=a;
for (i=0;i<4;i++)
{for (j=i+1;j<5;j++)
if (*(p+i)>*(p+j)) {t=*(p+i);*(p+i)=*(p+j);*(p+j)=t;}
for (k=0;k<5;k++) printf("%d ",a[k]);
printf("\n");}
}
以上程序的输出结果的第三行是: 。
5) void main()
{int a[]={1,2,3,4,5};
char *s="morning";
printf("%d %d %d %d\n",*a,a[1],*(a+1),*a+1);
}
以上程序的输出结果是? 。
6) #include <stdio.h>
#include <string.h>
void main()
{static char a[50]="test";
char b[40],*p;
p=a; *(p+3)+=1;
strcpy(b,"abcdefg"); strcat(a,"string"); strcpy(b,a,5);
printf("n1=%c,n2=%c\n",*p,*(p+3));
printf("a=%s,b=%s\n",a,b);
}
以上程序的输出结果是?
7)下面的函数index()用于确定字符串t是否为s的子串,如果t不是s的子串,函数返回0,否则返回字符串t在s中第一次出现时的序号(序号从1开始计)。例如:s="abcdefbcd";t="bc";则调用函数index(t,s)返回值为2;若t="ab";则调用函数index(t,s)返回值为1;若t="aaa";则调用函数index(t,s)返回值为0。阅读完善下列程序。
index(char t[],char s[])
{ int i=0,j=0;
while(t[i]!= '\0'&& s[j]!='\0')
if (t[i++]!=s[j++])
{ j-=i-1; i=0; }
if (t[i]=='\0') return ;
return 0;
}
8)设有以下定义:
int a[4][3]={0,2,7,8,5,6,7,8,9,10,11,12};
int (*prt)[3]=a,*p=a[0];
*(p+3) 的值是_________,*(*prt+2))的值是________。
9)设有以下定义的语句:
int a[3][2]={10,20,30,40,50,60}, (*p)[2];
p=a;
则*(*(p+2)+1)值为_______________。
10)用指针编程将键盘上输入的八进制转换为十进制后输出。
11)用指针编程从键盘上输入主字符串和子串,计算主字符串中子串出现的次数。
第5部分 结构体、共用体和文件
1、单项选择题
1)以下程序的输出是 。
#include "stdio.h"
void main()
{printf("%d",NULL);}
A、 \0 B、 1 C、 0 D、 无定义
2)在说明一个结构体变量时系统分配给它的存储空间是 。
A、该结构体中第一个成员所需存储空间
B、该结构体中最后一个成员所需存储空间
C、该结构体中占用最大存储空间的成员所需存储空间
D、该结构体中所有成员所需存储空间的总和
3)使用共用体的目的是 。
A、将一组数据作为一个整体,以便于其中的成员共享同一存储空间
B、将一组具有相同数据类型的数据作为一个整体,以便其中的成员共享同一存储空间
C、将一组相关数据作为一个整体,以便在程序中使用
D、将一组具有相同数据类型的数据作为一个整体,以便在程序中使用
4)若有以下程序说明和语句,则以下引用方式不正确的是 。
struct student
{int no;
char name[10];
}stu,*p=stu;
A、stu.no B、 stu->no C、p->no D、(*p).no
5)以下程序执行后的正确结果是 。
struct node
{int a;
char *s;
} x;
son(struct node x)
{x.a=0;
x.s="cgy";
}
void main()
{x.a=1;
x.s="czgxy";
son(x);
printf("%d,%s\n",x.a,x.s);
}
A、 0,czgxy B、 0,cgy C、 1,cgy D、 1,czgxy
6)有如下定义:
struct date
{int year,month,day; };
struct
{char name[10];
struct date birthday;
}stu;
对结构体变量stu的出生年份进行赋值时,下面正确的赋值语句是 。
A、year=1984 B、birthday.year=1984 C、stu.year=1984 D、stu.birthday.year=1984
7)在如下结构体中,不正确的是 。
A、struct student B、struct stu[5] C、struct student D、struct
{char name[10]; {char name[10]; {char name[10]; {char name[10];
float score; float score; float score; float score;
}; }; } stu[5]; } stu[5];
8)以下程序的输出结果是 。
void main()
{union
{int x;
char a[2];
}u;
u.x=0x1357;
printf("%x,%x\n",u.a[0],u.a[1]);
}
A、 13,00 B、 57,00 C、 13,57 D、 57,13
9)设有以下语句,则值为6的表达式是 。
struct st { int n; struct st *next; };
static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0];
A、 ++p->n B、 p->n++ C、 (*p).n++ D、 p++->n
10)设有说明,则变量s在内存中所占字节数为 。
union data
{int x;
struct{int a; char b}y ;
float z;
}s;
A、 1 B、 2 C、 3 D、 4
11)文件指针实际上是 。
A、文件缓冲区的内存空间的首地址 B、文件缓冲区的内存空间的末地址
C、磁盘文件的首地址 D、磁盘文件的末地址
12)在一个程序中,要打开n个文件,应设 个文件指针。
A、 1 B、 n C、 n-1 D、n+1
13)若执行fopen函数时发生错误,则函数的返回值是 。
A、 1 B、 0 C、 地址值 D、 EOF
14)若要用fopen函数打开一个新的二进制文件,该文件既能读也能写,则文件方式字符串应是 。
A、 "ab+” B、 "rb+” C、 "ab” D、 "wb+”
15)fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是 。
A、 只写 B、 追加 C、 读或读写 D、追加或只读
16)若调用fputc函数输出字符成功,则其返回值是 。
A、 EOF B、 1 C、 0 D、输出的字符
17)若有以下定义,则值为's'的表达式是 。
struct aa
{int a;
char b[5];
}x[2]={100,"Jack",200,"Rose"};
A、x.b[2] B、x[1].b C、x[1].b[2] D、 x[1].b[3]
18)已知:struct sk
{int a; float b;
}data, *p;
若有p=&data,则对data中的成员a的正确引用是 。
A、(*p).data.a B、(*p).a C、 p->data.a D、p.data.a
19)要为结构体struct st定义一个新类型名STUDENT,将定义补充完整的选项是 。
struct st
{char num[8],name[16],sex;
float score;
};
typedef STUDENT;
A、struct st B、struct C、st D、 st struct
20)以下有关枚举类型叙述 是正确的。
A、枚举元素是变量,可以赋值 B、枚举元素是常量,他们是有值的
C、一个整数能直接赋给一个枚举变量 D、枚举元素不能赋给一个枚举变量
2、填空题
1)下面程序的输出结果为 。
union abc
{ char c[2];
int a;
}un;
void main( )
{ un.a=16961;
printf("%d,%c,%d,%c \n",un.c[0],un.c[0] ,un.c[1],un.c[1]);
}
2)设有以下结构类型说明和变量定义,变量a在内存所占字节数是24。
struct stud
{ char num[ ];
int s[4];
double ave;
}a,*p;
3)现有如下说明和定义,若需建立如图9-1所示的数据结构,填写所需语句。
struct ww
{int data;
struct ww *next;
}*p,a,b;
p=&a;
;
4)变量root有如图9-2所示有存储结构,其中sp是指向字符串的指针域,next是指向该结构的指针域,data用以存放整型数,请填空完成此结构的类型说明和变量root的定义。
struct list
{ char *sp;
;
int data;
}root;
5)以下程序的输出结果是 。
enum week{SUN=7,MON=1,WED,TUS,THS,FRI,SAT };
void main( )
{ printf("%d",hour(FRI,SUN));}
hour(int x, int y)
{ if(y>x) return 24*(y-x);
else return -1;
}
6) struct node
{int x,*y;} *p;
int s[]={10,20,30,40};
struct node a[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};
void main()
{p=a;
printf("%d,",p->x);
printf("%d,",(++p)->x);
printf("%d,",*(++p)->y);
printf("%d\n",++(*(++p)->y));
}
以上程序的输出结果是? 。
7) void main()
{union {int count[2]; char ch[4];} un;
int i;
char letter=6;
for(i=0;i<4;i++) un.ch[i]=letter++;
for(i=0;i<2;i++) printf("%d:%x,",i,un.count[i]);
}
以上程序的输出结果是 。
8)如果在程序中要定义一个文件型指针fp,应该使用定义语句“FILE *fp;”。其中的“FILE”是在头文件“ ”中定义的。
9)feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为 。
10)设有以下说明和定义:
typedef union
{ long i; int k[5]; char c; }DATE;
struct date
{ int cat; DATE cow; double dog; } too;
DATE max;
则下列语句的执行结果是_____。
printf ("%d",sizeof(struct date ) + sizeof(max));
11)函数调用语句:fgets(buf,n,fp);是从fp指向的文件中读入 个字符放到buf字符数组中,并在最后加一个字符'\0'。
12)设有以下结构类型说明和变量定义,变量a在内存所占字节数是 。
struct stud
{ char num[6];
int s[4];
double ave;
}a,*p;
13)下面程序的输出结果为 。
void main( )
{ enum color{ RED=5,BLUE,WHITE=0,BLACK};
char *colorname[ ]={"red","blue","white","black"};
printf("%s",colorname[BLACK]);
}
14)假设磁盘上有三个文本文件,其文件名和内容分别为:
文件名 内容
f1.txt aaa!
f2.txt bbb!
f3.txt ccc!
磁盘上还有以下C语言源程序,经编译、连接后生成可执行文件,文件名为ex12.exe。
#include<stdio.h>
void main(int argc, char *argv[])
{FILE *fp;
void sub( );
int i=1;
while (--argc>0)
if((fp=fopen(argv[i++],"r"))==NULL)
{ printf("cannot open file !\n");
exit(1);
}
else
{sub(fp);fclose(fp);}
}
void sub(FILE *fp)
{char c;
while ((c=getc(fp))!= '! ')putchar(c+1);
}
若在DOS提示符下键入:ex12 f1.txt f2.txt f3.txt<回车>,则程序的运行结果是 。
15)现有如下定义,则:表达式++p->x和表达式(++p)->x的结果分别是 和 ;
struct
{int x,y;}a[2]={{1,5},{6,8}},*p=a;
16)“->”称为 运算符。
17)有两个磁盘文件a.txe和b.txt,各存放一行字母,编程把这两个文件中的信息合并,且按字母顺序排列,然后输出到一个新文件c.txt中。
18)编程在给定范围内查找并输出所有由两个不同数字组成的六位回文数。一个整数如果有与其反序相等,则称该整数为回文数。例如,112211是回文数并且112211是由两个不同的数字1和2组成的,因此112211是符合上述条件的数。编写函数 int palin(long m1,long m2,long x[]),在m1~m2范围内查找所有由两个不同数组组成的回文数并依次保存到x指向的数组中。函数返回x数组中回文数的个数。编写main函数,调用palin函数查找100000~120000范围内所有由两个不同数字组成的六位回文数并将这些数保存到一维数组中,将该一维数组的数据输出到屏幕并保存到文件myf2.out中。最后将本人的学号字符串保存到文件myf2.out中。输出结果:
100001 101101 11011 112211 113311 114411 115511 116611 117711 118811 119911
My student number is:08021608