内容正文:
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《C语言程序设计》高教版第五版
高频考点冲刺卷(八)原卷版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 以下选项中,不能用作C语言标识符的是( )
A. print B. _123 C. 123 D. abc
2. 以下关于C语言数据类型的叙述中,正确的是( )
A. float类型数据在内存中占4个字节
B. 所有类型的变量都可以进行自增运算
C. 字符型常量用单引号括起来,字符串常量用双引号括起来
D. 定义变量时必须指定其类型,但变量在内存中存储的是其值,与类型无关
3. 设有定义:int a = 5, b = 2;float c = 2.0;double d = 2.0;则以下表达式的值及其类型匹配不正确的是( )
A.a / b的值是 2.5,类型为 double B.a / c的值是 2.5,类型为 float
C.a / d的值是 2.5,类型为 double D.a / b + 0.0的值是 2.0,类型为 double
4. 设有定义:inta=1,b=2,c=3;以下语句中执行效果与其它三个不同的是( )
A.if(a>b)c=a;a=b;b=c; B.if(a>b){c=a;a=b;b=c;}
C.if(a>b)c=a,a=b,b=c; D.if(a>b){c=a,a=b,b=c;}
5. 以下程序的输出结果是( )
#include<stdio.h>
intmain()
{
int i,sum=0;
for(i=1;i<=3;sum++)sum+=i;
printf("%d
",sum);
}
A.6 B.3 C.死循环 D.4
6. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int i=0,s=0;
do{
if(i%2)
{i++;continue;}
i++;
s+=i;
}while(i<7);
printf("%d
",s);
}
A.16 B.12 C.28 D.21
7. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int i,s=0;
for(i=0;i<3;i++)s+=a[i][i];
printf("%d
",s);
}
A.15 B.45 C.6 D.24
8. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int i,j,s=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i+j==1||i+j==3)s+=a[i][j];
printf("%d
",s);
}
A.10 B.20 C.30 D.40
9. 以下程序的输出结果是( )
#include<stdio.h>
int f(int x)
{
return x*2;
}
main()
{
int a=1,b=2,c=3,d;
d=f(a+b+c);
printf("%d
",d);
}
A.6 B.12 C.3 D.9
10.以下程序的输出结果是( )
#include<stdio.h>
int f(int x)
{
static int y=1;
y+=x;
return y;
}
main()
{
int i,s=0;
for(i=1;i<=3;i++)s+=f(i);
printf("%d",s);
}
A.10 B.11 C.12 D.13
11. 以下程序的输出结果是( )
#include<stdio.h>
void fun(int*x,int*y)
{
*x=*x+*y;
*y=*x-*y;
*x=*x-*y;
}
main()
{
int a=5,b=3;
fun(&a,&b);
printf("%d,%d
",a,b);
}
A.3,5 B.5,3 C.5,5 D.3,3
12. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int a[5]={1,3,5,7,9},*p=a;
printf("%d",*p++);
printf("%d",(*p)++);
printf("%d
",*p);
}
A.134 B.123 C.133 D.234
13. 设有定义:int a[3][4]={0},(*p)[4]=a;则以下表示中,不能正确访问数组元素的是( )
A.(a+2) B.*(a[1]+2) C.p[1][2] D.*(p+1)+2
14. 以下程序的输出结果是( )
#include<stdio.h>
intmain()
{
char s[]="12345";
s[2]='\0';
printf("%d
",strlen(s));
}
A.5 B.2 C.1 D.0
15. 以下程序的输出结果是( )
#include<stdio.h>
#include<string.h>
void fun(char*s,int m,int n)
{
char t,*p=s+m;
s=s+n;
while(s>p)
{
t=*s;*s=*p;*p=t;
s--;p++;
}
}
main()
{
char str[]="ABCDEFG";
fun(str,2,4);
puts(str);
}
A.ABEDCFG B.ABCDEFG C.ABFEDCG D.ABEDCGF
16. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
char str[]="SSSWLIA",c;
int k;
for(k=2;(c=str[k])!='\0';k++)
{
switch(c)
{
case'I':++k;break;
case'L':continue;
default:putchar(c);continue;
}
putchar('*');
}
}
A.SSW* B.SW* C.SW*A D.SW
17. 设有定义:int a[5]={1,3,5,7,9},p=&a[2];则值为7的表达式是( )
A.*(++p) B.++p C.p++ D.(*p)++
18. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
const char*a[]={"abcd","efgh","ijkl","mnop"};
const char**p;
p=a;
printf("%c
",*(p[1]+1));
}
A.a B.e C.f D.b
19. 以下程序的输出结果是( )
#include<stdio.h>
void fun(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;
}
}
main()
{
int k[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(k+2,5);
for(i=0;i<10;i++)
printf("%d,",k[i]);
}
A.1,2,3,4,5,6,7,8,9,10, B.1,2,7,6,5,4,3,8,9,10,
C.1,2,7,6,5,8,9,10,3,4, D.1,2,9,8,7,6,5,4,3,10,
20. 以下程序的输出结果是( )
#include<stdio.h>
f(int*x,int*y)
{
*x=*y;
*y=*x;
}
main()
{
int a=3,b=5;
f(&a,&b);
printf("%d%d",a,b);
}
A.35 B.55 C.33 D.53
21. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int a[3][3];
int*p,i;
p=&a[0][0];
for(i=0;i<9;i++)
p[i]=i+1;
printf("%d
",a[1][2]);
}
A.2 B.3 C.6 D.9
22. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
char s[]="12345",*p=s;
printf("%c%c%c
",*p+2,*(p+2),p[3]);
}
A.345 B.334 C.335 D.以上都不对
23.下面说明不正确的是( )。
A.char a[10] = "china"; B.char a[10],*p = a; p = "china";
C.char *a; a = "china"; D.char a[10],*p; p = a = "china";
24. 在Dev C++中,以下程序的输出结果是( )
#include<stdio.h>
main()
{
const char*p="abcdefgh",*r;
long*q;
q=(long*)p;
q++;
r=(char*)q;
printf("%s
",r);
}
A.defgh B.cdefgh C.gh D.efgh
25.下面程序输出的结果是( )
#include<stdio.h>
main()
{ int i,j,x=0;
static int a[6]={1,2,3,4,5,6};
for(i=0,j=1;i<5;++i,j++) x+=a[i]*a[j];
printf("%d
",x);
}
A. 数组a中首尾的对应元素的乘积 B. 数组a中首尾的对应元素的乘积之和
C. 数组a中相邻各元素的乘积 D. 数组a中相邻各元素的乘积之和
二、简答题(共3小题,每题5分,共15分)
1. 阅读以下程序,写出运行结果。
#include<stdio.h>
main ()
{ int a[5][5], i, j, n=1;
for (i = 0; i< 5; i++)
for (j = 0; j< 5; j++)
a[i][j] = n++;
printf ("The result is :
");
for (i =0; i < 5; i++)
{ for (j =0;j<=i; j++)
printf ("%4d", a[i][j]);
printf ("
");
}
}
2. 阅读以下程序,写出运行结果。
#include<stdio.h>
void fun(int*a,int b)
{
int c;
c=*a;*a=b;b=c;
}
main()
{
int x=1,y=2;
fun(&x,y);
printf("%d,%d
",x,y);
}
3. 程序改错。
#include<stdio.h>
struct student
{
int num;
char name[20];
float score;
}
main()
{
struct student stu={101,"Zhang",85.5};
printf("%d,%s,%.1f
",stu.num,stu.name,stu.score);
}
三、案例分析题(共3小题,每题5分,共15分)
1. 下面程序的功能是:输入一个正整数n,输出n行由大写字母组成的三角形图案。请将程序补充完整。
#include<stdio.h>
main()
{
int i,j,n;
char ch='A';
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
printf("%c", ① );
②
}
}
2. 下面程序功能:统计整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1、c2、c3返回主函数。
例如,当n=123114350时,结果应该为:c1=3 c2=1 c3=2。请将程序补充完整。
#include <stdio.h>
int c1,c2,c3;
void fun(long n)
{
c1 = c2 = c3 = 0;
while (n)
{
switch( ① )
{
case 1: c1++; ②
case 2: c2++;break;
case 3: c3++;
}
③
}
}
main()
{
int n=123114350;
fun(n);
printf("
n=%d c1=%d c2=%d c3=%d
",n,c1,c2,c3);
}
3.下面程序功能:打印出1至1000中满足其个位数字的立方等于其本身的所有整数。请将程序补充完整。
#include <stdio.h>
main()
{
int i,g;
for(i=1;i<1000;i++)
{
g= ① ;
if( ② )
printf("%4d",i);
}
printf("
");
}
四、综合应用题(共2小题,每题10分,共20分)
1. 编写程序,输入一个正整数n(1<=n<=10),然后输入n个整数存入数组a,再输入一个整数x,在数组a中查找x,如果找到则输出其下标(若有多个,输出第一个的下标),否则输出"NotFound"。要求使用指针操作数组。
2. 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①输入10个数;②进行处理;③输出10个数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《C语言程序设计》高教版第五版
高频考点冲刺卷(八)解析版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 以下选项中,不能用作C语言标识符的是( )
A. print B. _123 C. 123 D. abc
答案:C
解析:标示符的命名原则:由数字、字母、下划线组成,并且第一个字符不能是数字。
2. 以下关于C语言数据类型的叙述中,正确的是( )
A. float类型数据在内存中占4个字节
B. 所有类型的变量都可以进行自增运算
C. 字符型常量用单引号括起来,字符串常量用双引号括起来
D. 定义变量时必须指定其类型,但变量在内存中存储的是其值,与类型无关
答案:C
解析:数据类型所占内存数与编译器有关;自增运算要求操作数是可修改的算术类型或指针类型,结构体、数组、常量等类型不能进行自增运算;C语言语法明确规定,字符常量使用单引号,字符串常量使用双引号;变量在内存中的存储方式完全依赖于其类型,类型决定了如何存取该内存区域的值。
3. 设有定义:int a = 5, b = 2;float c = 2.0;double d = 2.0;则以下表达式的值及其类型匹配不正确的是( )
A.a / b的值是 2.5,类型为 double B.a / c的值是 2.5,类型为 float
C.a / d的值是 2.5,类型为 double D.a / b + 0.0的值是 2.0,类型为 double
答案:A
解析:a / b是整数除法,结果为 2(int),A 错;a / c中a转为 float 计算,5.0 / 2.0 = 2.5(float),B 对;a / d结果 2.5(double),C 对;a / b + 0.0中a/b先算得 2(int),再加 0.0 变为 2.0(double),D 对。
4. 设有定义:inta=1,b=2,c=3;以下语句中执行效果与其它三个不同的是( )
A.if(a>b)c=a;a=b;b=c; B.if(a>b){c=a;a=b;b=c;}
C.if(a>b)c=a,a=b,b=c; D.if(a>b){c=a,a=b,b=c;}
答案:A
解析:A选项if只控制c=a;这一条语句,当a>b为假时,c=a不执行,a=b;b=c;顺序执行。当a>b时B、C、D后边的语句不执行,所以a、b、c的值不变。
5. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int i,sum=0;
for(i=1;i<=3;sum++)sum+=i;
printf("%d
",sum);
}
A.6 B.3 C.死循环 D.4
答案:C
解析:i 的值为1一直不变,所以次循环为死循环。
6. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int i=0,s=0;
do{
if(i%2)
{i++;continue;}
i++;
s+=i;
}while(i<7);
printf("%d
",s);
}
A.16 B.12 C.28 D.21
答案:A
解析:求1+3+5+7的和。
7. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int i,s=0;
for(i=0;i<3;i++)s+=a[i][i];
printf("%d
",s);
}
A.15 B.45 C.6 D.24
答案:A
解析:求数组a中对角线上值的和
8. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int i,j,s=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i+j==1||i+j==3)s+=a[i][j];
printf("%d
",s);
}
A.10 B.20 C.30 D.40
答案:B
解析:求下标之和为1的元素和下标之和为3的元素的和。
9. 以下程序的输出结果是( )
#include<stdio.h>
int f(int x)
{
return x*2;
}
main()
{
int a=1,b=2,c=3,d;
d=f(a+b+c);
printf("%d
",d);
}
A.6 B.12 C.3 D.9
答案:B
解析:函数调用f(6),返回值为12,所以d的值为12。
10.以下程序的输出结果是( )
#include<stdio.h>
int f(int x)
{
static int y=1;
y+=x;
return y;
}
main()
{
int i,s=0;
for(i=1;i<=3;i++)s+=f(i);
printf("%d",s);
}
A.10 B.11 C.12 D.13
答案:D
解析:第一次函数调用f(1),y=2,返回值为2,第二次调用f(2) y=4,返回值4,第三次调用f(3) y=7,返回值为7。因为y为静态变量,所以在调用结束后不释放内存单元,值保留。
11. 以下程序的输出结果是( )
#include<stdio.h>
void fun(int*x,int*y)
{
*x=*x+*y;
*y=*x-*y;
*x=*x-*y;
}
main()
{
int a=5,b=3;
fun(&a,&b);
printf("%d,%d
",a,b);
}
A.3,5 B.5,3 C.5,5 D.3,3
答案:A
解析:函数调用传递的是a、b的地址,所以x指向变量a,y指向变量b,在函数fun中完成了x和y的值交换。所以a和b中的值交换。
12. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int a[5]={1,3,5,7,9},*p=a;
printf("%d",*p++);
printf("%d",(*p)++);
printf("%d
",*p);
}
A.134 B.123 C.133 D.234
答案:A
解析:第一个printf中,*和++优先级相同,优先级为从右向左,所以*p++相当于*(p++),但p++是后自增,所以先使用p的值,再+1,所以输出为1,此时p指向元素a[1]。第二个printf要先读p所指向的元素,再对次元素进行后自增,所以输出的值为3,a[1]的值变为4。第三个printf输出此时p所指向的元素的值,为4。
13. 设有定义:int a[3][4]={0},(*p)[4]=a;则以下表示中,不能正确访问数组元素的是( )
A.(a+2) B.*(a[1]+2) C.p[1][2] D.*(p+1)+2
答案:A
解析:A选项是指数组的第二行的首地址。
14. 以下程序的输出结果是( )
#include<stdio.h>
intmain()
{
char s[]="12345";
s[2]='\0';
printf("%d
",strlen(s));
}
A.5 B.2 C.1 D.0
答案:B
解析:库函数strlen()是求字符串的长度,即首次出现’\0’之前的字符个数。
15. 以下程序的输出结果是( )
#include<stdio.h>
#include<string.h>
void fun(char*s,int m,int n)
{
char t,*p=s+m;
s=s+n;
while(s>p)
{
t=*s;*s=*p;*p=t;
s--;p++;
}
}
main()
{
char str[]="ABCDEFG";
fun(str,2,4);
puts(str);
}
A.ABEDCFG B.ABCDEFG C.ABFEDCG D.ABEDCGF
答案:A
解析:fun函数的作用是将子串CDE进行逆序处理。
16. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
char str[]="SSSWLIA",c;
int k;
for(k=2;(c=str[k])!='\0';k++)
{
switch(c)
{
case'I':++k;break;
case'L':continue;
default:putchar(c);continue;
}
putchar('*');
}
}
A.SSW* B.SW* C.SW*A D.SW
答案:B
解析:程序从数组的第三个元素进行遍历。k=2,字符'S':执行default分支,输出'S',continue跳过putchar('*'),k++后k=3。k=3,字符'W':default输出'W',continue跳过'*',k++后k=4。
k=4,字符'L':case 'L'执行continue直接跳至循环末尾,k++后k=5。k=5,字符'I':case 'I'先执行++k使k=6,break跳出switch后执行putchar('*')输出'*',然后循环体结束执行k++使k=7。k=7时str[7]为'\0',循环结束。
17. 设有定义:int a[5]={1,3,5,7,9},p=&a[2];则值为7的表达式是( )
A.*(++p) B.++p C.p++ D.(*p)++
答案:A
解析:*(++p):先将 p 自增,使其指向 a[3](值为 7),然后得到 7。
++p:将 p 自增,表达式结果为自增后的地址(指向 a[3]),不是值 7。
p++:表达式结果为自增前的地址(指向 a[2]),然后 p 自增,不是值 7。
(*p)++:先取 p 当前指向的值 5,然后对该值自增(变为 6),但表达式结果为自增前的值 5,不是 7。因此,值为 7 的表达式是 A。
18. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
const char*a[]={"abcd","efgh","ijkl","mnop"};
const char**p;
p=a;
printf("%c
",*(p[1]+1));
}
A.a B.e C.f D.b
答案:C
解析:a是指针数组,a[1] 指向字符串"efgh",p[1] + 1 指向"efgh"中的'f'字符,*(p[1] + 1) 解引用得到字符'f'。程序输出:f。
19. 以下程序的输出结果是( )
#include<stdio.h>
void fun(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;
}
}
main()
{
int k[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(k+2,5);
for(i=0;i<10;i++)
printf("%d,",k[i]);
}
A.1,2,3,4,5,6,7,8,9,10, B.1,2,7,6,5,4,3,8,9,10,
C.1,2,7,6,5,8,9,10,3,4, D.1,2,9,8,7,6,5,4,3,10,
答案:B
解析:调用fun函数从a[3]到a[6]逆序输出。
20. 以下程序的输出结果是( )
#include<stdio.h>
f(int*x,int*y)
{
*x=*y;
*y=*x;
}
main()
{
int a=3,b=5;
f(&a,&b);
printf("%d%d",a,b);
}
A.35 B.55 C.33 D.53
答案:B
解析:调用函数f传递的是a、b的地址,f函数中将y所指向的变量b赋值给x指向的变量a。再将a的值赋值给b,所以a、b的值都为5。
21. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
int a[3][3];
int*p,i;
p=&a[0][0];
for(i=0;i<9;i++)
p[i]=i+1;
printf("%d
",a[1][2]);
}
A.2 B.3 C.6 D.9
答案:C
解析:指针p指向数组的第一个元素,通过循环给数组的每一个元素赋值,所以a[1][2]的值为6。
22. 以下程序的输出结果是( )
#include<stdio.h>
main()
{
char s[]="12345",*p=s;
printf("%c%c%c
",*p+2,*(p+2),p[3]);
}
A.345 B.334 C.335 D.以上都不对
答案:B
解析:指针p指向字符串“12345”的首地址,*p+2是对p所指向的元素+2,*(p+2)是先让指针p+2再取值,p[3]等价于s[3]。
23.下面说明不正确的是( )。
A.char a[10] = "china"; B.char a[10],*p = a; p = "china";
C.char *a; a = "china"; D.char a[10],*p; p = a = "china";
答案:D
解析:在 C 语言中,数组名a是常量指针,不能被重新赋值。因此,a = "china"是非法的。
24. 在Dev C++中,以下程序的输出结果是( )
#include<stdio.h>
main()
{
const char*p="abcdefgh",*r;
long*q;
q=(long*)p;
q++;
r=(char*)q;
printf("%s
",r);
}
A.defgh B.cdefgh C.gh D.efgh
答案:D
解析:指针p为指向字符常量的指针,初始值为字符串“abcdefgh”的首地址,q为指向long的指针。q = (long *)p;将p的值(字符指针)强制转换为long *类型,并赋值给q。此时q指向的内存位置与p相同(即字符串开头),但*q将读取一个long大小的数据。q++后,q往后移动4个字节的位置,指到字符串中’e’的位置。赋值给r后,指针r指向’e’。所以输出为“efgh”。
25.下面程序输出的结果是( )
#include<stdio.h>
main()
{ int i,j,x=0;
static int a[6]={1,2,3,4,5,6};
for(i=0,j=1;i<5;++i,j++) x+=a[i]*a[j];
printf("%d
",x);
}
A. 数组a中首尾的对应元素的乘积 B. 数组a中首尾的对应元素的乘积之和
C. 数组a中相邻各元素的乘积 D. 数组a中相邻各元素的乘积之和
答案:D
解析:求数组a中相邻各元素的乘积之和
二、简答题(共3小题,每题5分,共15分)
1. 阅读以下程序,写出运行结果。
#include<stdio.h>
main ()
{ int a[5][5], i, j, n=1;
for (i = 0; i< 5; i++)
for (j = 0; j< 5; j++)
a[i][j] = n++;
printf ("The result is :
");
for (i =0; i < 5; i++)
{ for (j =0;j<=i; j++)
printf ("%4d", a[i][j]);
printf ("
");
}
}
答案:
运行结果:
The result is :
1
6 7
11 12 13
16 17 18 19
21 22 23 24 25
2. 阅读以下程序,写出运行结果。
#include<stdio.h>
void fun(int*a,int b)
{
int c;
c=*a;*a=b;b=c;
}
main()
{
int x=1,y=2;
fun(&x,y);
printf("%d,%d
",x,y);
}
答案:2,2
3. 程序改错。
#include<stdio.h>
struct student
{
int num;
char name[20];
float score;
}
main()
{
struct student stu={101,"Zhang",85.5};
printf("%d,%s,%.1f
",stu.num,stu.name,stu.score);
}
答案:
结构体类型定义后的“}”后要加“;”。
结构体变量定义后不能整体赋值struct student stu={101,"Zhang",85.5};。
三、案例分析题(共3小题,每题5分,共15分)
1. 下面程序的功能是:输入一个正整数n,输出n行由大写字母组成的三角形图案。请将程序补充完整。
#include<stdio.h>
main()
{
int i,j,n;
char ch='A';
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
printf("%c", ① );
②
}
}
答案:①:ch++,②:printf("
");
2. 下面程序功能:统计整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1、c2、c3返回主函数。
例如,当n=123114350时,结果应该为:c1=3 c2=1 c3=2。请将程序补充完整。
#include <stdio.h>
int c1,c2,c3;
void fun(long n)
{
c1 = c2 = c3 = 0;
while (n)
{
switch( ① )
{
case 1: c1++; ②
case 2: c2++;break;
case 3: c3++;
}
③
}
}
main()
{
int n=123114350;
fun(n);
printf("
n=%d c1=%d c2=%d c3=%d
",n,c1,c2,c3);
}
答案:
①:n%10
②:break;
③:n/= 10;
3.下面程序功能:打印出1至1000中满足其个位数字的立方等于其本身的所有整数。请将程序补充完整。
#include <stdio.h>
main()
{
int i,g;
for(i=1;i<1000;i++)
{
g= ① ;
if( ② )
printf("%4d",i);
}
printf("
");
}
答案:
①:i%10
②:g*g*g==i
四、综合应用题(共2小题,每题10分,共20分)
1. 编写程序,输入一个正整数n(1<=n<=10),然后输入n个整数存入数组a,再输入一个整数x,在数组a中查找x,如果找到则输出其下标(若有多个,输出第一个的下标),否则输出"NotFound"。要求使用指针操作数组。
参考程序:
#include<stdio.h>
main()
{
int n,a[10],x,i,flag=0;
int*p=a;
printf("请输入n:");
scanf("%d",&n);
printf("请输入%d个整数:",n);
for(i=0;i<n;i++)
scanf("%d",p+i);
printf("请输入要查找的x:");
scanf("%d",&x);
for(i=0;i<n;i++)
if(*(p+i)==x)
{
printf("%d
",i);
flag=1;
break;
}
if(!flag)
printf("NotFound
");
}
2. 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①输入10个数;②进行处理;③输出10个数。
参考程序:
#include <stdio.h>
void input( int *a)
{
int n ;
printf("input 10 numbers:
");
for(n=0 ; n<10 ; n++)
scanf("%d" , a+n) ;
}
void process( int *a)
{
int min , temp , max , n1 , n2 , i ;
min=max=*a ; n1=n2=0 ;
for(i=1 ; i<10 ; i++)
{ if( *(a+i) < min )
{min=*(a+i) ; n1= i ; }
if( *(a+i) > max )
{max=*(a+i) ; n2= i ; }
}
temp=a[0] , a[0] = a[n1] , a[n1] = temp ;
temp=a[9] , a[9] = a[n2] , a[n2]= temp ;
}
void output( int *a)
{
int n ;
printf("result:
");
for(n=0 ; n<10 ; n++)
printf("%5d" , *(a+n));
}
main( )
{
int a[10] , *pa ;
pa=a ;
input(pa);
process(pa) ;
output( pa ) ;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$