2021年安徽省宣城市全国计算机等级考试C语言程序设计预测试题(含答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2021年安徽省宣城市全国计算机等级考试C语言程序设计预测试题(含答案) 学校:________ 班级:________ 姓名:________ 考号:________
一、单选题(12题)
1.有以下程序:
#include<stdiO.h>
main()
{ FILE*fp;
int k,n,i,a[6]={1,2,3,4,5,6};
fp=fopen("d2.dat","w");
for(i=0;i<6;i++) fprintf(fp,"%d\n",a[i]);
fclose(fp);
fp(i=0;i<3;i++) fscanf(fp,"%d%d",&k,&n);
fclose(fp);
printf("%d\n,%d\n,k,n);
}
程序运行后的输出结果是()。
A.1, 2 B.3,4 C.5,6 D.123,456
2.有以下程序:
#include <stdio.h>
int add(int a,int b) { return (a+b); }
main()
{int k, (*f)( ), a=5, b=10;
f=add;
…
}
则以下函数调用语句错误的是()。
A.k=f(a,b);
B.k=add(a,b);
C.k=(*f)(a,b);
D.k=*f(a,b);
3.已知大写字母A的ASCII码是65,小写字母a的ACSII码是97。
下列能将变量C中的大写字母转换为对应小写字母的语句是( )。
A.c=(c-'A')%26+'A'
B.c=c+32
C.c=c-'A'+'A'
D.c=('A'+C)%26-'a'
4.若有定义:int*p[3];,则以下叙述中正确的是()。
A.定义了一个基类型为int的指针变量p,该变量具有三个指针
B.定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C.定义了一个名为*p的整型数组,该数组含有三个int类型元素
D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
5.以下关于链式存储结构说法错误的是()
A.比顺序存储结构的存储密度小
B.每个节点是由数据域和指针域组成
C.查找结点时链式存储比顺序存储快
D.逻辑上不相邻的节点物理上可能相邻
6. 有定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,
x的值不为3的是
A.if(c<a) x=1;else if(b<a) x=1;else x=3;
B.if(a<3)x=3;else if(a<2)x=2;else x=1;
C.if(a<3)x=3;if(a<2)x=2;if(a<1)x=1;
D.if(a<b) x=b;if(b<c) x=c;if(c<a) x=a;
7. 若有定义:“int a,b;”,通过语句“scan[("%d;%d".,&a,&b);”,能把整数3赋给变量a,5赋给变量b的输入数据是()。
A.3 5
B.3,5
C.3;5
D.35
8. fgetc函数的作用是从指定文件读入—个字符,该文件的打开方式必须是______。
A.只读
B.追加
C.读或读写
D.以上均正确
9. 设有以下程序段int x=0,s=0;while(!x!=0)s+=++x;printf("%d",s);则
A.运行程序段后输出0
B.运行程序段后输出1
C.程序段中的控制表达式是非法的
D.程序段执行无限次
10. 有以下程序:
程序执行后的输出结果是()。
A.45
B.50
C.60
D.55
11.具有n个结点的连通图至少有()条边。
A.n-1
B.n
C.n(n-1)/2
D.2n
12.
二、2.填空题(12题)
13. 以下程序运行后的输出结果是______。
fun(int a)
{ int b=0; static int c=3;
b++; c++;
return(a+b+c);
}
main()
{ int i,a=5;
for(i=0;i<3;i++) printf("%d %d",i,fun(a)); printf("\n");
}
14. x、y、x均为int型变量,描述“x、y和z中至少有两个为正数”的表达式是______。
15. 以下程序的输出结果是【】。
#include <string.h>
main()
{printf("%d\n",strlen("IBM\n012\1\\"));}
16. mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。
请填空。
int mystrlen(char *str)
{ int i;
for(i=0;【】!='\0';i++);
return(【】);
}
17. 以下程序通过函数SunFun 求。
这里f(x) =x2+l, 由F函数实现。
请填空。
main()
{
printf("The sum=%d\n", SunFun(10));
}
SunFun(int n)
{
int x, s = 0;
for (x = 0; x <= n; x++)
S += F(______);
return s;
}
F(int x)
return (______);
}
18. 下面的程序可对指定字符串进行从大到小排序,请将程序填完整。
(注:程序采用了冒泡排序算法)
#include<stdio.h>
#include<string.h>
main()
{ char*str="ABCDabcd",temp;
int n,i;
n=strlen(str);
while(n->1)
for(i=0;i<n;i++)
if(str[i]<str[i+1])
{ temp=【】;
str[i]=str[i+1];
【】=temp;
}
printf(【】);
}
19. 有以下程序:
#include <stdio.h>
main()
{ char ch1,ch2;int n1,n2;
ch1=getchar();ch2=getehar();
n1=ch1-'0'; n2=n1*10+(ch2-'0');
printf("%d\n",n2);
程序运行时输入:12<回车>,执行后的输出结果是【】。
20. 注释说明了程序的功能,它分为【】注释和功能性注释。
21. 设有下列宏定义:
#define A 2
#define B (A+3)
则执行赋值语句“k=B*20;”(k为int型变量)后,k的值是______。
22. 有以下语句段
int n1=10,n2=20;
printf(" 【】",n1,n2);
要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。
n1=10
n2=20
23. 以下程序的输出结果是【】。
#include <stdio.h>
main()
{ int a=1234;
float b=123.456;
double c=12345.54321;
printf("\n%2d,%2.1f,%2.11f",a,b,C);
}
24. 以下程序的运行结果是【】。
#include <stdio.h>
long fib (int g)
{ switch (g)
{ case 0: return 0;
case 1: case2: return 1;
}
return (fib(g-1)+fib(g-2));
}
main()
{ long k;
k=fib(5);
printf("k=%d\n",k);
}
三、3.程序设计题(10题)
25. 请编写函数fun,其功能是:计算并输出3~n之间(含3和n)所有素数的平方根之和。
例如,在主函数中从键盘为n输入100后,输出为:sum=148.874270。
[注意] 要求n的值大于2但不大于100。
[注意] 部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
[试题源程序]
#include<math.h>
#include<stdio.h>
double fun(int n)
{
}
main()
{
int n;
double sum;
printf("\n\nInput n:");
scanf("%d", &n);
sum=fun(n);
printf("kn\nsum=%f\n\n", sum);
}
26. 请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。
例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270。
注意:要求n的值大于2但不大于100。
部分源程序在文件PROGl.C 中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
27. 编写函数fun(),它的功能是;根据以下公式求p的值,结果由函数值带回。
m与n为两个正数且要求m>n。
P=m!/n!(m-n)!),例如:m=12,n=8时,运行结果为495.000000。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
float fun (int m, int n)
{
}
main()
{
clrscr() ;
printf ("p=%f\n", fun (12,8) ) ;
}
28. 请编写函数fun(),它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。
例如,若输入字符串123412132,输入字符1,则输出3。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<coio.h>
#include<stdio.h>
#define M 81
int fun(char *ss,char c)
{
}
main()
{ char a[M],ch;
clrscr();
printf("\nPlease enter a string:");
gets(a);
printf("\nPlease enter a char:");
ch=getchar();
printf("\nThe number of the char is:%d \n",fun(a,ch));
}
29. 请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。
例如,若输入abc4Efg,则应输出aBc4EFg。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun(char *ss)
{
}
main()
{
char tt[81];
clrscr();
printf("\nPlease enter an string within 80 characters:\n");
gets(tt);
printf("\n\nAfter changing, the string\n \%s", tt);
fun(tt);
printf("\nbecomes\n\%s\n",tt);
}
30. 请编写函数fun(),该函数的功能是:将两个两位数的正整数a,b合并形成一个整数放在c中。
合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。
例如,当a=45时,b=12,调用到该函数后,c=5142。
注意:部分源程序给出如下.
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
#include<conio.h>
void fun(int a ,int b, long *c)
{
}
main ( )
{
int a,b;
long c;
clrscr();
printf("Input a ,b:");
scanf(,%d%d",&a,&b);
fun(a,b,&c);
printf("The result is :%ld\n",c);
}
31. 请编写函数fun(),其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。
例如,当s所指字符串中的内容为ABCDEFGHIJK,则在t所指数组中的内容应是BDFHJ。
注意:部分源程序给出如下。
请勿改动主函数main口其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio. h>
#include<stdio .h>
#include<string.h>
void fun(char *s,char t[])
{
}
main ()
char s[l00] ,t[l00];
clrscr ();
printf("%nPlease enter string S: ");
scanf("%s ",s);
fun(s,t);
prlntf("\nThe result is:%s\n ",t);
}
32. 编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。
例如,分别输入下面两个字符串:
FirstString--
SecondString
程序输出:
FirtString--SecondStdng
注意:部分源程序在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
33. 请编写函数fun( ),其功能是:将所有大于1小于整数m的素数存入xx所指数组中,素数的个数通过k传回。
例如,输入25,则应输出2 3 5 71113 17 19 23。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
void fun(int m,int *k,int xx[ ])
{
}
main( )
{
int m,n,zz[100];
clrscr( );
printf("/nPlease enter an integer number between 10 and 100:");
scanf("%d",&n);
fun(n,&m,zz);
printf("\n\nThere are%d prime numbers
less than %d:",m,n);
for(n=0;n<m;n++)
printf("\n %4d",zz[n]);
}
34. 请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中“a”到“ z”26个字母各自出现的次数,并依次放在pp所指数组中。
例如:当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:
33322110000000000000000000
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
void fun (char*tt, int pp[])
{
}
main()
{
char aa[1000];
int bb[26], k, n;
clrscr();
printf("\nPlease enter a char string: ") ;
scanf("%s",aa);
fun(aa,bb);
for (k=0 ;k<26 ; k++)
printf("%d ",bb[k]) ;
printf("\n ");
}
四、单选题(0题)
35.下列叙述中正确的是
A.C语言中既有逻辑类型也有集合类型
B.C语言中没有逻辑类型但有集合类型
C.C语言中有逻辑类型但没有集合类型
D.C语言中既没有逻辑类型也没有集合类型
五、单选题(0题)
36.以下叙述中错误的是( )。
A.C程序在运行过程中所有计算都以二进制方式进行
B.C程序在运行过程中所有计算都以十进制方式进行
C.所有C程序都需要编译链接无误后才能运行
D.C程序中整型变量只能存放整数,实型变量只能存放浮点数
六、单选题(0题)
37.在一个有头结点的链队列中,假设f和r分别为队首和队尾指针,则队头出队的运算是()。
A.q=f->next;f->next=f->next->next;free(q);
B.q=f;f->next=f->next->next;free(q);
C.f->next=f->next->next;q=f->next;free(q);
D.q=f->next->next;f=f->next;free(q);
参考答案
1.C
此题是考查fprintf和fscanf,其中fprintf是向文件输出,文件为
da2.dat文件,fscanf是向文件输入,所以根据程序循环写入和写出.可知答案为C。
2.D运算符“()”的优先级高于运算符“*”。
“(*f)()”定义函数指针,f是
指向函数的指针。
执行语句“f=add;”,将函数add的首地址赋给指针f,所以调用函数add可以写为f。
函数的返回值是整型,不是指针类型,不能用运算符,故*f(a,b);”的调用方式错误。
故本题答案为D选项。
3.B
根据ASCII码可知大写字符A与小写字符a的ASCIl码相差32,而D 中应该是加上'a',选项A和C 左侧的表达式都是大写字符C与大写字符A的差与'a'的ASCIl代码的和就是小写字符c的ASCII代码。
4.B解析:当一个数组中的元素均为指针类型数据时,该数组就称为指针数组。
int *p[3]表示此数组是指针类型的,每个数组元素(指针变量)都是指向一个整型的指针变量。
5.C
6.C解析:选项A首先判断if语句条件中表达式的值“3<1”为假,然后执行最近的else后面的语句,该else后面又为if-else语句,在这个if-else语句中首先判断该if语句条件中表达式的值“2<1”为假,程序执行其最近的else后面的语句,将3赋值给x。
选项B中首先判断if语句条件中表达式的值“1<3”为真,然后执行最近的else后面的语句“x=3”,后面的else不再执行,最后x的值为3。
选项C中,首先执行第一条if语句,由于“1<3”为真,执行此if后面的语句“x=3”,接着执行第二条if语句,由于“1<2”为真,执行此if后面的语句“x=2”,接着执行第三条if语句,由于“1<1为假,后面的语句不执行,所以最后的x值为2不为3。
选项D中;首先执行第一条if语句,由于“a<b”为真,执行此if后面的语句“x=b”;接着执行第二条if语句,由于“b<c”,为真,执行此if后
面的语句“x=c”,接着执行第三条if语句,由于“c<a”为假,后面的语句不执行,所以最后的x值为c即为3。
7.C\n在输入时必须遵守scanf函数中的格式才能正确地赋值给相应的变量,由于scanf函数为“%d;%d”,所以在输入时要输入3;5,答案为C。
\n
8.D解析:fgetc 函数是指从指定的文件读入—个字符,该文件必须是以读或读写方式打开的。
fgetc 函数的调用形式为:ch=fgetc(fp);。
9.B解析:本题考查while语句的使用。
本题考查逻辑非运算符和不等于运算符的区别,逻辑非运算符'!'的优先级大于不等于运算符'!='的优先级。
10.C
内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会
保存数据,再次调用该函数时,以前调用时的数值仍然保留着。
Fun(a,5)的值是l5,再次调用后slim=15,所以Fun(b,4)=45,
s=45+15=60。
11.A
12.D
13.0 10 1 11 2 120 10 1 11 2 12 解析:本题考查的是静态局部变量的运用。
静态局部变量的作用域与普通局部变量一样,但它的生存期将延长到程序运行结束。
本题的主函数中使用一个for循环输出循环变量i和fun(a)的值,由于a的值一直没被修改过,所以三次调用的都是fun(5)。
第1次调用,b=0,c=3,所以返回值为5+1+4=10;第2次调用,因为c 是静态局部变量,它仍然保存着上次调用结束时的值4,而b重新被创建和初始化为0,所以返回值为5+1+5=11;同理,第3次调用返回的是12。
所以,程序最终输出为:010111212。
14.((x>0)&&<y>0))‖(x>0)&&(z>0)‖y>0)&&(z>0))((x>0)&&<y>0))‖(x>0)&&(z>0)‖y>0)&&(z>0)) 解析:题目要求“x、y和z中至少有两个为正数”,即x、y和x这3个数中必须有两个是正数,且这3个数中的哪两个数都有可能是正数,所以它们之间是或的关系。
15.99 解析:本题的字符串中共有9个字符,它们分别是\'I\'、\'B\'、\'M\'、\'\\n\'、\'0\'、\'1\'、\'2\'、\'\\1\'、\'\\\\\',其中,'\\n'表示换行,'\\\\'表示反斜杠字符'\\',所以本题的最后输出结果为9。
16.str[i]或str+i istr[i]或str+i\r\ni
17.x X*X+1或1+x*xx\r\nX*X+1或1+x*x 解析:题目中要求从x=0开始将f(x)的值累加起来,直到x=10。
在SunFun()函数中用了一个for循环,每循环一次将f(x)累加到s中,所以在本题的第一个空格处我们应该填x,,然后x+1,共循环10次。
F()函数的功能应该是求数学表达式f(x)得值,所以其返回值应该为x*x+1。
18.str[i] str[i+1] "%s"strstr[i]\r\nstr[i+1]\r\n'%s',str 解析:本题要求将字符串str中的字符用冒泡排序算法从大到小排列,其实现过程是将相邻两个字词进行比较,如果当前字符小于下一个字符,则通过中间变量temp将字符两两交换,所以第一空应填:str[i],第二空应填:str[i+1]。
最终打印输出得到的字符串str,所以第三空应填:'%s',str。
19.1212 解析:程序中的ch1与ch2为字符型变量,输入12后,ch1得到字符'1',ch2得到字符'2'。
n1 =ch1-'0'将字符1,转换为数值1,同理,n2为1*10+2=12。
程序执行后输出十进制整数12。
20.序言性序言性解析:注释一般分为序言性注释和功能性注释。
21.100100 解析:本题考查带参数的宏定义及相关运算。
运算过程为:k=B*20=(A+3)*20=(2+3)*20=100。
22.n1=%d\nn2=%d\n或n1=%d\nn2=%d或n1=%2d\nn2=%2d\n 或n1=%2d\nn2=%2dn1=%d\\nn2=%d\\n或n1=%d\\nn2=%d或n1=%2d\\nn2=%2d\\n 或n1=%2d\\nn2=%2d 解析:printf函数有两种参数:格式控制参数和输出项参数,其中格式控制参数由两种成分组成:格式说明和普通字符,普通字符将被简单地复制显示,格式说明项将引起一个输出参数项的转换与显示,它是由“%”引出并以一个类型描述符结束的字符串。
本题中,n1=和n2=就是普通字符,可以直接显示,又因为n1,n2为整数,所以格式说明项为% d,也可以在%与d之间加上域宽,另外还要在每行输出结束时加转义字符\\n进行换行。
所以,应填写n1=%d\\nn2=%d\\n或n1=%d\\nn2=%d或n1=%2d\\nn2=%2dn或n1 =%2d\\nn2=%2d。
23.1234123.512345.51234,123.5,12345.5 解析:在primf()函数的格式控制符中:'%2d'表示输出一个有符号整数,如果输出长度小于2,则左端补以空格,否则按实际长度输出。
所以本题中的a按原样输出为1234:'%2.1尸表示输出一个单精度实数,只输出小数点后1位,后面若有小数则四舍五入,如果输出长度小于2,则左端补以空格,否则按实际长
度输出。
所以本题中的b四舍五入到小数点后1位再输出为123.5;'%2.11f'除了表示输出一个双精度实数外,其余参数和'%2.1f'一样。
所以本题中的c四舍五入到小数点后1位再输出为12345.5。
故输出结果是:1234,123.5,12345.5。
24.k=5k=5 解析:由题可知fib(0)的值为0,fib(1)和fib(2)的值为1,因此,fib(3)=fib(2)+fib(1) =2;fib(4)=fib(3)+fib(2)=3;fib(5)=fib(4)+fib(3)=5。
25.double fun(int n) { int i j=0; double s=0; for (i=3; i<=n;i++) { for(j=2; j <i; j++) if(i%j==0) break; if(j==i) s=s+sqrt(i); } return s; }double fun(int n)\r\n {\r\n int i, j=0;\r\n double s=0;\r\n for (i=3; i<=n;i++)\r\n {\r\n for(j=2; j<i; j++)\r\n if(i%j==0)\r\n break;\r\n if(j==i)\r\n s=s+sqrt(i);\r\n }\r\n return s;\r\n }
26.解析:函数fun的功能是计算并输出3到n之间(含3和n)所有素数的平方根之和,首先根据题干中的要求找出3到n之间的素数,并求出素数的平方根,然后求得这些平方根的和。
27.float fun (int m int n) { int i; double p=1.0; for(i=1;i<=m;i++) p=p*i; /*求m!*/ for(i=1;i<=n;i++) p=p/i; /*求m!/n!*/ for(i=1;i<=m-n;i++) p=p/i; /*求m!/(n!(m-n)!)*/ return p; }float fun (int m, int n)\r\n {\r\n int i;\r\n double p=1.0;\r\n for(i=1;i<=m;i++) p=p*i; /*求m!*/\r\n for(i=1;i<=n;i++) p=p/i;
/*求m!/n!*/\r\n for(i=1;i<=m-n;i++) p=p/i; /*求m!/(n!(m-n)!)*/\r\n return p;\r\n } 解析:本题中,欲求P的值,需要先求m,n,m-n的阶乘值,可用循环语句实现。
注意阶乘值应当是double类型,若定义x,y,z为整型变量,则p=x/(y*z)中的除法为整数除法。
28.int fun(char *sschar c) { int i=0;for (;*ss!='\0';ss++) if(*ss==c) i++; /*求出ss所指字符串中指定字符的个数*/ return i; }int fun(char *ss,char c)\r\n {\r\n int i=0;\r\n for (;*ss!='\\0';ss++)\r\n if(*ss==c)\r\n i++; /*求出ss 所指字符串中指定字符的个数*/\r\n return i;\r\n } 解析:从字符串ss中找出子字符串的方法是:从第1个字符开始,对字符串进行遍历:若ss 串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串的结尾,则跳出循环;若“串的字符和c串的字符不对应相同,则继续对,s串的下一个字符进行处理。
本程序是采用逐一比较的方式找出出现的次数。
循环的作用是在串中从左到右逐一走动,if()的作用是进行判断是否相同,若与c相同则表示又出现一次.
29.void fun(char *ss) { int i;for(i=0;ss[i]!='\0';i++) /*将ss所指字符串中所有下标为奇数位置的字母转换为大写*/ if(i%2==1&&ss[i]>='a' &&SS[i]<='z') ss[i]=ss[i]-32;}void fun(char *ss)\r\n {\r\n int i;\r\n for(i=0;ss[i]!='\\0';i++) /*将ss所指字符串中所有下标为奇数位置的字母转换为大写*/\r\n if(i%2==1&&ss[i]>='a' &&SS[i]<='z')\r\n ss[i]=ss[i]-32;\r\n } 解析:从C语言的学习中我们知道,只要将小写字母减去32则转成大写字母,将大写字母加上32则转成小写字母。
该程序是用if语句实现
该功能转化的。
30.void fun(int a iht b long *c) { *c=a%10* i 000+b/10* l00+a/10* 10+b% 10; /*将a数的十位和个位数依次放在c数的十位和千位上b数的十位
和个位数依次放在c数的百位和个位上*/ }void fun(int a ,iht b, long *c)\r\n {\r\n *c=a%10* i 000+b/10* l00+a/10* 10+b% 10; /*将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和\r\n 个位数依次放在c数的百位和个位上*/\r\n } 解析:本题中主要的问题是怎么取出a 和b的个位数和十位数,取出后怎么表示成c中相应的位数。
由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。
如45/10结果为4而不是4.5(这是由于两个数都为整型,所以结果出为整型),45%10结果为5。
若a为45,则a/10*10的结果为40而非45。
乘1000,乘100和乘10的作用是分别使其胶面的数成为*c的千位数、百位数。
注意要使用c时要注意进行指针运算,即*c,不能少了*号。
31.void fun(char *schar t[]) { int i j=0k=strlen(s); /*k为字符串的长度*/ for
(i=l; i<k; i=i+2) /*将s所指字符串中下标为奇数的字符存入t所指字符
串中*/ t [j++]=s [ii; t[j]='\0'; /*在字符申最后加上结束标志*/ }void
fun(char *s,char t[])\r\n {\r\n int i, j=0,k=strlen(s); /*k为字符串的长度*/\r\n
for (i=l; i<k; i=i+2) /*将s所指字符串中下标为奇数的字符存入t所指字
符串中*/\r\n t [j++]=s [ii;\r\n t[j]='\\0'; /*在字符申最后加上结束标志*/ \r\n }
解析:本题使用了一种泳远是奇数的循环方法,即for(i=1; i<k;i=i+2),
因为开始时的值为1,当i+2循环时,此值永远是奇数。
32.解析:该程序功能是实现两个字符串的连接。
本题要把串2连接到串1之后,则需要把串2的第一个字符放到串1的尾符的位置上,把串2的后面的字符放到串1的后面的位置。
33.void fun(int mint *kint XX[]) { int ijtn=0;for(i=2;i<m;i++) /*找出大于1小于整数m的素数*/ { t=l;for(j=2;j<i;j++) if(i%j==0) { t=0;break;} if(t==1) xx[n++]=i;} *k=n;/*返回素数的个数*/ }void fun(int m,int *k,int XX[])\r\n {\r\n int i,j,t,n=0;\r\n for(i=2;i<m;i++) /*找出大于1小于整数m的素数*/\r\n { \r\n t=l;\r\n for(j=2;j<i;j++) \r\n if(i%j==0)\r\n {\r\n t=0;\r\n break;\r\n } \r\n if(t==1)\r\n xx[n++]=i;\r\n }\r\n *k=n;/*返回素数的个数*/\r\n } 解析:这道题是考查一个数是不是素数,只要掌握了判断素数的方法,问题便能顺利解决,请以此题为例,掌握判断素数的方法。
34.void fun(char*ttint pp[] ) { int i; fori=0;i<26;i++) pp[i]=0; /*初始化pp 数组各元素为0*/ for(;*tt!='\0';tt++) if(*tt>='a'&&*tt<='z') pp[*tt-'a']++; /*将tt字符串中'a'到'z'26个字母各自出现的次数依次放在pp数组中任一个小写字母减去'a'后所得结果正好是它对应的下标*/ }void fun(char*tt,int pp[] )\r\n {\r\n int i;\r\n fori=0;i<26;i++)\r\n pp[i]=0; /*初始化pp数组各元素为0*/\r\n for(;*tt!='\\0';tt++)\r\n if(*tt>='a'&&*tt<='z')\r\n pp[*tt-'a']++; /*将tt字符串中'a'到'z'26个字母各自出现的次数,依次放在pp数组中,任一个小写字\r\n 母减去'a'后所得结果正好是它对
应的下标*/\r\n } 解析:第1个循环的作用是初始化数组pp,未经赋值变量的量为一个不确定数字。
由于它要将'a'到'z'26个字母的个数依次放到数组pp中。
即'a'的个数存于pp[0]中,'b'的个数存于pp[1]中,'c'的个数存于pp[2]中,…,依次类推。
而'a'-'a'的值正好为0,'b'-'a'的值为1,'c'-'a'的值为2,…,依此类推。
即任一个小写字母减去'a'后所得结果正好是它对应的下标,所以就有了pp[*tt-'a']++。
但*tt必须是小写字母即if()不应省略。
35.D解析:在C语言中没有逻辑类型,逻辑类型用整型来表示,故选项A和选项C不正确,C语言中没有集合类型,故选项B不正确。
所以,D选项为所选。
36.B
所有的C程序都必须经过编译链接无误之后才能运行。
在运行过程中,由计算机完成程序中的所有运算。
由于计算机只能识别二进制,
所以所有的运算都以二进制方式进行,而不是十进制。
37.A。