资源描述
《C次序 方案 》期末复习练习 题及参考答案 (1)
一、单项选择 题
1. 以下不克不迭 对二维数组a停顿精确 初始化的语句是
A〕int a[2][3]={0};
B〕int a[][3]={{1,2},{0}};
√C〕int a[2][3]={{1,2},{3,4},{5,6}};
D〕int a[][3]={1,2,3,4,5,6};
2.有以下次序 片断
float fun(int x,int y〕
{ return(x+y);}
main(){
int a=2,b=5,c=8;
printf〔"%3.0f\n",fun((int)fun(a+c,b),a-c)〕;
}
次序 运行 后的输出结果是:
A)编译出错 √B)9 C)21 D)9.0
3.假设 有以下调用 语句,那么不精确 的fun函数的函数原型是
main()
{ …
int a[50],n;
…
fun(n, &a[9]);
…
}
A〕void fun〔int m, int x[]〕; B〕void fun〔int s, int h[41]〕;
C〕void fun〔int p, int *s〕; √D〕void fun〔int n, int a〕;
4.下面次序 片断 的实行 结果是:
#define MAX 10
int a[MAX], i;
main( )
{ printf("\n");
sub1( );
sub3(a);
sub2( );
sub3(a);
}
sub2( )
{int a[MAX], i, max=5;
for(i=0; i<max; i++) a[i]=i;
}
sub1( )
{for(i=0; i<MAX; i++) a[i]=i+i;}
sub3(int a[ ])
{ int i;
for(i=0; i<MAX; i++)printf("%d",a[i]);
printf("\n");
}
A) 0 2 4 6 8 10 12 14 16 18
0 1 2 3 4 10 12 14 16 18
B) 0 1 2 3 4
0 2 4 6 8 10 12 14 16 18
C) 0 1 2 3 4 5 6 7 8 9
0 1 2 3 4
√D) 0 2 4 6 8 10 12 14 16 18
0 2 4 6 8 10 12 14 16 18
5. 以下次序 实行 后的输出结果是
#include <stdio.h>
main()
{ int a[3][3], *p, i;
p = &a[0][0];
for (i=1; i<9; i++){p[i]=i+1;}
printf("%d\n",a[1][2]);
}
A〕3 √B〕6 C〕9 D〕随机数
6. 以下关于 C语言 次序 的描画精确 的选项是〔 〕。
√A)main〔〕函数可以 在任何所在 出现。
B)main〔〕函数必须 出现在次序 的结实 位置。
C)main〔〕函数必须 出现在所欲函数之前。
D)main〔〕函数必须 出现在所有 函数之后。
7. 用C语言 编写的C次序 称为〔 〕。
√A) 源次序 B) 目标 次序 C) 汇编次序 D) 命令 次序
8. 设有定义 int a = 5, b; 实行 以下语句后,b的值不为2的是〔 〕。
√A) b=a%2; B) b=a/2; C) b=6-(--a); D) b=2;
9. 以下次序 实行 后的输出结果是〔 〕。
#include <stdio.h>
int main()
{ int x = 0, a = 10, b = 20, c = 15;
if(a > b)
if(b < c) x = 1;
else x = 2;
printf("%d\n",x);
return 0;
}
√A) 0 B) 1 C) 2 D) 3
10. 已经清楚 字母'b'的ASCII码值为98,如ch为字符型变量,这表达 式ch='b'+'5'-'2' 的值是〔 〕。
A) 'd' √B) 'e' C) 100 D) 102
11. 有以下次序
#include<stdio.h>
main()
{ static char a[ ]="language",b[ ]="programe";
char *p1,*p2;
int k;
p1=a;
p2=b;
for(k=0;k<=7;k++)if(*(p1+k) == *(p2+k)) printf("%c",*(p1+k));
}
次序 的输出结果是〔 〕。
√A) gae B) gue C) gua D) gam
12. 有以下次序
#include <stdio.h>
void main()
{ int i,j=4;
for (i=j; i<=2*j; i++)
switch(i/j)
{
case 0:
case 1:printf("*");break;
case 2:printf("#");
}
}
次序 的输出结果是〔 〕。
√A) ****# B) *#**# C) #**# D) **##
13. 有以下次序
main()
{ int i,j,x =0;
for(i=0;i<2;i++)
{ x++;
for(j=0;j<3;j++)
{if(j%2) continue;
x++;
}
x++;
}
printf("x=%d\n",x);
}
次序 的输出结果是〔 〕。
√A) x=8 B) x=5 C) x=7 D) x=6
14. 以下次序 实行 后的输出结果是〔 〕。
#include <stdio.h>
int main()
{ int x = 1, y = 0, a = 0, b = 0;
switch (x)
{ case 1:
switch(y)
{
case 0: a++; break;
case 1: b++; break;
}
case 2: a++; b++; break;
case 3: a++; b++;
}
printf("a = %d,b = %d\n",a,b);
return 0;
}
A) a = 1,b = 0 B) a = 2,b = 2 C) a = 1,b = 1 √D) a = 2,b = 1
15. 假设 有下面的语句,那么精确 的说法是〔 〕。
int a[10] = {6, 7, 8, 9, 10};
A) 将5个初值依次赋给a[1]至a[5]。
√B) 将5个初值依次赋给a[0]至a[4]。
C) 将5个初值依次赋给a[6]至a[10]。
D) 因为 数组长度与初值的个数纷歧 样,因而 此语句不精确 。
16. 有以下函数定义 ,那么以下差错 的函数调用 是〔 〕。
int Mul(int a, int b)
{ return a*b;}
A) if(Mul(x,y)); B) z= Mul( Mul(x,y), Mul(x,y) );
√C) z= Mul( Mul(x,y), x, y ); D) Mul(x, y);
17. 以下次序 的运行 结果是〔 〕。
#include <stdio.h>
float fun(int x, int y)
{return x+y; }
int main()
{ int a = 2, b = 5, c = 8;
printf("%3.0f\n",fun( (int)fun(a + c, b), a -c) );
return 0;
}
A) 编译出错 √B) 9 C) 21 D)9.0
18. 以下次序 的运行 结果是
int k=0;
void fun(int m)
{m+=k;k+=m;printf("m=%d k=%d ",m,k++);}
main()
{int i=4;
fun(i++); printf("i=%d k=%d\n",i,k);
}
A)m=4 k=5 i=5 k=5 √B)m=4 k=4 i=5 k=5
C)m=4 k=4 i=4 k=5 D)m=4 k=5 i=4 k=5
19. 有以下次序
main()
{ int i,s=1;
for (i=1;i<50;i++)
if(!(i%5)&&!(i%3)) s+=i;
printf("%d\n",s);}
次序 的输出结果是
A)409 B)277 C)1 √D)91
20. 假设 变量已正判定 义,有以下次序 段
int a=3,b=5,c=7;
if(a>b) a=b; c=a;
if(c!=a) c=b;
printf("%d,%d,%d\n",a,b,c);
其输出结果是
A)次序 段有语法错 √B)3,5,3 C)3,5,5 D)3,5,7
21. 假设 有定义 :float x=1.5;int a=1,b=3,c=2;,那么精确 的switch语句是
A)switch(x)
{case 1.0:printf("*\n");
case 2.0:printf("**\n");}
B)switch((int)x);
{case 1:printf("*\n");
case 2:printf("**\n");}
√C)switch(a+b)
{case 1:printf("*\n");
case 2+1:printf("**\n");}
D)switch(a+b)
{case1:printf(**\n);}
casec:printf(**\n);}
22. 以下次序 的输出结果是
#include "stdio.h"
main()
{ int i,a=0,b=0;
for(i=1;i<10;i++)
{ if(i%2==0)
{a++;
continue;}
b++;}
printf("a=%d,b=%d",a,b); }
A)a=4,b=4 √B)a=4,b=5 C)a=5,b=4 D)a=5,b=5
二、填空题
1、C语言 中全然 的数据典范 有: 整型 、 实型 、 字符型 。
2、在次序 方案 中,需要 用到常量Pi,其中 为结实 值3.14。假设将Pi定义 为标志 常量,其代码为: #define Pi 3.14 ;假设将Pi定义 为常变量,其代码为:
const float Pi=3.14; 。
3、设a是一维数组,p是指向数组元素的指针变量,且初始化为p = a;假设要通过指针p引用数组a的下标为i的那个 元素,其代码为: *(p+i) 。
4、实行 以下语句int a=8; a+=a-=a*a; 后,a的值是 - 112 。
5、有如下语句:char A[ ]={〞I am a student〞}; 该字符串的长度是 14 ,A[3]= ’m’ 。
6、标志 〞a〞跟 ’a’的区不是 〞a〞是字符串常量,而’a’是字符常量。
7、所谓“指针〞的确是 所在 。
“&〞运算符的感染 是 取运算东西 的所在 。
“*〞运算符的感染 是 取指针变量所指的内容。 。
三、次序 运行 结果分析题
1.#include <stdio.h>
struct STU
{ char num[10];
float score[3];
};
main()
{ struct STU s[3]={{"20021",90,95,85},
{"20022",95,80,75},
{"20023",100,95,90}}, *p=s;
int i;
float sum = 0;
for (i=0; i<3; i++)
{sum = sum + p->score[i]; }
printf("%6.2f\n",sum);
}
次序 的运行 结果是:270.00
2.#include <stdio.h>
main( )
{ char s[100];
char c, i;
scanf("%c", &c);
scanf("%d", &i);
scanf("%s", s);
printf("%d,%c,%s\n", c, i, s);
}
已经清楚 字符’a’的ASCII码值为97,那么当次序 输出:a<空格>97<空格>123<回车>,次序 运行 结果是:97,a,123
3.#include <stdio.h>
int a=13, b=8;
int max(int a, int b)
{ int c;
c=a>b?a: b;
return(c);
}
main( )
{ int a=5;
printf("Max=%d\n", max(a, b));
}
次序 运行 结果是:Max=8
4.以下次序 的输出结果是______________。
#include <stdio.h>
int main()
{
int i,j;
for(i = 0; i < 4; i++)
{
for(j = 0; j < i; j++)
putchar('#');
for(j = 0; j < 4; j++)
putchar('*');
printf("\n");
}
return 0;
}
次序 运行 结果是:
5. 当运行 以下次序 时,运行 结果是____3628800_____。
#include <stdio.h>
int main()
{ int fun(int n);
int n = 10, y;
y = fun(10);
printf("%d\n",y);
return 0;
}
int fun(int n)
{ int f;
if(n < 0) {f = 0;printf("error!");}
else if( n == 0 || n == 1) f = 1;
else f= fun(n -1) * n;
return f;
}
6.以下函数int strcmp(char *p1,char *p2)比较输出字符串是否 相当 ,假设 相当 那么前去 0,否那么前去 其他 值。当运行 以下次序 时,运行 结果是___-7_____。
#include <stdio.h>
#define N 10
int strcmp(char *p1,char *p2)
{ int k;
if(p1 == NULL || p2 == NULL) return -1; //揣摸 p1跟 p2是否 为空指针
while(1)
{if( k = *p1 - *p2)break;
else if (*p1 == 0 ||*p2 == 0) break;
p1++ ;
p2++ ;
}
return k;
}
int main()
{ char a[]="China";
char b[]="Japan";
printf("%d", strcmp(a, b));
return 0;
}
7.以下次序 的功能 为:已经清楚 数组array中以保存 num个有效整数,并按从小到大年夜 排序,现在再输出一个整数x,并拔出到数组中,保持 数组的数有序,同时更新num的值。假设 输出要拔出的数:70
那么拔出一个数后的数组包含 5个数,次序 运行 结果是:24 55 70 99 110
#include <stdio.h>
void fun(int *w, int x, int *n)
{ int i, p;
p = 0;
w[*n] = x;
while(x > w[p]) p++;
for(i = *n; i > p; i --) w[i] = w[i-1] ;
w[p] = x;
++ *n ;
}
int main()
{ int array[60] = {24, 55, 99, 110};
int num = 4,x,i;
printf("请输出要拔出的数:");
scanf("%d",&x);
fun(array,x,&num);
printf("拔出一个数后的数组包含 %d个数,分不为:\n",num);
for(i = 0; i < num; i++) printf("%d ", array[i] );
printf("\n");
return 0;
}
8.下面次序 的输出结果是__ xyabcABC __。
#include<stdio.h>
#include<string.h>
main()
{ char str1[20]="abc", *p1=str1,*p2="ABC", str[50]= "xyz";
strcpy(str+2, strcat(p1,p2));
printf("%s\n", str);
}
9. 当运行 以下次序 时,运行 结果是____________。
#include <stdio.h>
void search_s(int (*p)[5],int n,int m,int re[4][2]);
void main()
{ int score[4][5]={ {60,90,92,66,55}, {75,40,58,40,90}, {60,80,66,90,55}, {78,45,56,90,57} };
int result[4][2]={0}; //第一列表示 称心 条件 ,第二列表示 平均分数
search_s(score,4,5,result);
for(int i=0;i<4;i++)
if(result[i][0] == 1)
printf("No.%d has selected, The average is %d\n",i+1,result[i][1]);
}
void search_s(int (*p)[5],int n,int m,int re[4][2])
{ int i,j; int flag; int sum,temp;
for(i=0;i<n;i++)
{ sum = 0; flag = 0;
for(j=0;j<m;j++)
{ temp = *(*(p+i)+j);
sum = sum + temp;
if( temp < 60)
{ if(flag == 1) { re[i][0] = 1; }
else flag = 1;
}
}
re[i][1] = sum/m;
}
}
四、次序 填空题
1.阅读 次序 ,在标有下划线的空白 处填入适当 的表达 式或语句,使次序 残缺并符合 题目 恳求 。由键盘输出一个班的某课程的后生成 果,打算 其平均分,然后 输出。〔注:应用 静态数组实现 〕
#include <stdio.h>
#include <stdlib.h>
main()
{ int *p=NULL,n,i,sum;
printf("please enter array size: ");
scanf("%d", &n );
p=(int *)malloc(n* sizeof(int));
if (p==NULL)
{ printf("no enough memory!\n");
exit(0); //或者 return ;
}
printf("please enter the score: ");
for(i=0;i<n;i++)
{ scanf("%d",p+i); }
sum=0 ;
for(i=0;i<n;i++)
{ sum=sum+*(p+i) ; }
printf("aver=%d\n",sum/n);
free(p);
}
2.输出一个字符数小于100的字符串string,然后 在string所保存 字符串中的每个字符间加一个空格。
#include<stdio.h>
#define MAX 100
void CopyString(char c[],char s[]);
void Insert(char s[]);
main()
{ char string[MAX];
scanf("%s",string);
Insert(string);
printf("%s",string);
}
void CopyString(char c[], char s[])
{ int i;
for (i=0; s[i]!='\0'; i++)
{ c[i] = s[i]; }
c[i] = '\0';
}
void Insert(char srcStr[])
{ char strTemp[MAX];
int i = 0, j = 0;
CopyString(strTemp, srcStr);
while (strTemp[j] != '\0')
{ srcStr[i] = strTemp[j];
i++;
j++;
srcStr[i] = ' ';
i++;
}
srcStr[i] = '\0';
}
3.以下次序 从键盘上输出整数n,输出2到n之间的所有 素数。其中 函数getprime求解2到n之间〔包含 2与n〕的所有 素数并保存 在数组a中,同时前去 素数的个数。揣摸 整数m是否 为素数可以 采用以下方法:依次揣摸 m是否 为2到m-1之间各个素数的倍数,假设都不克不迭 整除,那么m是素数。
#include <stdio.h>
int main()
{ int getprime(int a[],int n);
int a[100],n,k,i;
scanf("%d",&n);
k=getprime(a,n);
for (i=0;i<k;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
int getprime(int a[],int n)
{/*求解2到n之间的所有 素数,保存 到数组a中,并前去 其个数*/
int m,i,k=0;
for ( m=2; m<=n ; m++ )
{ /*依次揣摸 m是否 为素数*/
for ( i=0; i<k; i++ ) /*对已求解素数停顿循环 */
if ( m%a[i]==0 ) /*揣摸 是否 为已求解素数的倍数*/
break ; /*假设整除,那么m不是素数*/
if (i==k) a[k++] = m; /*m为素数,保存 到数组a中*/
}
return k ; /*前去 素数个数*/
}
/*假设输出20,那么输出2 3 5 7 11 13 17 19*/
精选可编辑
展开阅读全文