大学生C语言设计模拟测试题
1、C 语言中的每条可执行语句和非执行语句最终都将被转化成二进制的机器指令。
参考答案:【错】
2、对于正确定义的字符型变量 ch1 和 ch2,利用语句 scanf("%c%c",&ch1,&ch2);
输入字符 A 和 B 作为变量值,运行时在输入的 A 和 B 之间可以用回车间隔。
参考答案:【错】
3、字符变量 ch 的值为„a‟,整型变量 k 的值为 12,则 printf("%c,%d,",ch,ch,k);
输出结果为“a,97,”
参考答案:【对】
4、只有实型数在允许范围内能精确无误的表示,整型数会有误差。
参考答案:【错】
5、能正确表达逻辑关系 2<a<4 并且 3<b<5 的表达式是(2<a<4)&&(3<b<5)
。
参考答案:【错】
6、if 语句的基本形式是:if(表达式)语句,其中“表达式”值必须是逻辑值。
参考答案:【错】
7、表达式 (exp!=0)
可以替换为表达式(exp),两者等价。
参考答案:【对】
8、do…while 语句的循环执行流程和 while 语句的循环执行流程是完全等价的,只是两种不同的循环语句表示形式。
参考答案:【错】
9、i 和 k 都是 int 类型变量,则 for 语句:for(i=0,k=-1;k=1;k++) printf("*****\n");
循环体执行两次。
参考答案:【错】
10、有定义语句:char s[10]="1234567\0\0";
,则 strlen(s)的值为 7。
参考答案:【对】
11、定义二维数组可以采用这样的方式进行定义:int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}
。
参考答案:【错】
12、对于二维字符数组进行了定义和赋初值:ch[3][5]={"AAAA","BBB","CC"}
,则执行 printf( "%s\n", ch[1] );
输出语句后,
输出结果为“BBBCC”
。
参考答案:【错 】
13、在 C 程序的同一函数中,各复合语句内可以定义变量,其作用域仅限于本复合语句内。
参考答案:【对】
14、C 语言编写的每个函数都可以进行独立的编译并执行。
参考答案:【错】
15、在函数调用中,修改被调函数中形参的值,不会改变其对应的主调函数实参的值。
参考答案:【对】
16、有定义:double x[10],*p=x;
,可以通过 scanf("%lf",p+6);
给数组 x 下标为 6 的元素读入数据。
参考答案:【对】
17、定义语句: double a,*p=&a;
中 * 号只是一个说明符,表示 p 是能存放 double 类型变量地址的指针变量。
参考答案:【对】
18、C 语言中预处理命令行必须位于 C 源程序的起始位置。
参考答案:【错】
19、用 typedef 可以为各种类型说明一个新名,但不能用来为变量说明一个新名。
参考答案:【对】
20、如果 fp 已正确定义,执行语句 fp=fopen("file","w");
后,可以在文件原有内容后进行追加写入。
参考答案:【错】
21、下列选项可以正确表示字符型常量的是()。
A、'\r'
B、'a'
C、'\897'
D、296
参考答案:A
22、若变量已正确定义为 int 型,要通过语句 scanf("%d,%d,%d",&a,&b,&c);
给 a 赋值 1、给 b 赋值 2、给 c 赋值 3,以下输入形式中错误的是()(□代表空格)。
A、□□1,2,3<回车>
B、12□3<回车>
C、1,□□2,□□□3<回车>
D、1,2,3<回车>
参考答案:B
23、若执行下面的程序时,从键盘输入 5 和 2,则输出结果是( )。
void main()
{ int a,b,k;
scanf("%d,%d ",&a,&b);
k=a;
if(a<b) k=a%b;
else k=b%a;
printf("%d\n",k);} 。
A、5
B、3
C、2
D、0
***参考答案:C ***
24、有以下程序:
#include"stdio.h"
void main()
{
int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++)
c[s[i]]++;
for(i=1;i<5;i++)
printf("%d",c[i]);
printf("\n");
}
程序的运行结果是( )。
A、1234
B、2344
C、4332
D、1123
参考答案:C
25、若变量已正确定义,有以下程序段
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
参考答案:B
26、有以下程序
#include"stdio.h" void main()
{
int x=1,a=0,b=0;
switch(x)
{
case 1: a++;b++;
case 2: a++; b++; break;
case 3: a++; b++;
}
printf("a=%d,b=%d\n",a,b);
}
程序的运行结果是( )。
A、a=1,b=0
B、a=2,b=2
C、a=1,b=1
D、a=2,b=1
参考答案:B
27、已知:
int t=0;
while (t=1)
{...}
则以下叙述正确的是( )。
A、循环控制表达式的值为0
B、循环控制表达式的值为1
C、循环控制表达式不合法
D、以上说法都不对
参考答案:B
28、有以下程序
#include "stdio.h"
void main()
{
unsigned char a=8,c;
c=a>>3;
printf("%d\n",c);
}
程序运行后的输出结果是()。
A、32
B、16
C、1
D、0
参考答案:C
29、有如下程序:
#include"stdio.h"
void main()
{
int n=9;
while(n>6)
{
n--;
printf("%d",n);
}
}
该程序的输出结果是 ( )。
A、987
B、876
C、8765
D、9876
参考答案:B
30、有以下程序:
#include"stdio.h"
main()
{
int i,j,m=55;
for(i=1;i<=3;i++)
for(j=3;j<=i;j++)
m=m%j;
printf("%d\n",m);
}
程序的运行结果是( )。
A、0
B、1
C、2
D、3
参考答案:B
31、若有定义:int a[2][3];,以下选项中对 a 数组元素正确引用的是( )。
A、a[2][!1]
B、a[2][3]
C、a[0][3]
D、a[1>2][!1]
参考答案:D
32、有以下程序:
#include"stdio.h"
#include"string.h"
void main( )
{
char a[5][10]={"china", "beijing", "you", "tiananmen", "welcome"};
int i,j;
char t[10];
for (i=0; i<4; i++)
for (j=i+1; j<5; j++)
if( strcmp(a[i], a[j])>0)
{
strcpy(t,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],t);
}
puts(a[3]);
}
程序运行后的输出结果是( )。
A、beijing
B、china
C、welcome
D、tiananmen
参考答案:C
33、下面的函数调用语句中 func 函数的实参个数是( )。
func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)));
A、3
B、4
C、5
D、8
参考答案:A
34、若有代数式
(其中 e 仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的 C 语言表达式是()。
A、sqrt(fabs(pow(n,x)+exp(x)))
B、sqrt(fabs(pow(n,x)+exp(x,e)))
C、sqrt(abs(n^x + e^x))
D、sqrt(fabs(pow(x,n)+exp(x)))
参考答案:A
35、有以下程序:
#include"stdio.h"
void fun(int p)
{
int d=2;
p=d++;
printf("%d",p);
}
void main()
{
int a=1;
fun(a);
printf("%d\n",a);
}
程序运行后的输出结果是( )。
A、32
B、12
C、21
D、22
参考答案:C
36、下面程序的输出结果是( )。
#include"stdio.h"
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));
}
A、3
B、4
C、1
D、2
参考答案:A
37、有以下程序(说明:字母 A 的 ASCII 码值是 65):
#include"stdio.h"
void fun(char *s)
{
while(*s)
{
if(*s%2)
printf("%c",*s);
s++;
}
}
void main()
{
char a[]="BYTE";
fun(a);
printf("\n");
}
程序运行后的输出结果是( )。
A、BY
B、BT
C、YT
D、YE
参考答案:D
38、有以下程序:
#include"stdio.h"
#include"string.h"
typedef struct
{
char name[9];
char sex;
float score[2];
}STU;
void f(STU a)
{
STU b={"Zhao",‟m‟,85.0,90.0};
int i;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++)
a.score[i]=b.score[i];
}
void main()
{
STU c={"Qian",‟f‟,95.0,92.0};
f(c);
printf("%s,%c,%2.0f,%2.0f\n",c.name,c.sex,c.score[0],c.score[1]);
}
程序的运行结果是( )。
A、Qian,f,95,92
B、Qian,m,85,90
C、Zhao,f,95,92
D、Zhao,m,85,90
参考答案:A
39、有以下程序:
#include "stdio.h"
#define S(x) 4*(x)*x+1
int main()
{
int k=5,j=2;
printf("%d\n",S(k+j));
return 0;
}
程序运行后的输出结果是( )。
A、197
B、143
C、33
D、28
参考答案:B
40、有以下程序:
#include"stdio.h"
void main()
{
FILE *fp;
int i=20,j=30,k,n;
fp=fopen("d1.dat","w");
fprintf(fp,"%d\n",i);
fprintf(fp,"%d\n",j);
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d%d",&k,&n);
printf("%d %d\n",k,n);
fclose(fp);
}
程序运行后的输出结果是( )。
A、20 30
B、20 50
C、30 50
D、30 20
参考答案:A
41、C语言的if语句嵌套时,if与else的配对关系不正确的是()。
A、每个else总是与它上面的最近的尚未配对的if配对
B、每个else总是与最外层的if配对
C、每个else与if的配对是任意的
D、每个else总是与它上面的if配对
参考答案:BCD
42、下列叙述中正确的是()。
A、在switch语句中,不一定使用break语句
B、在switch语句中必须使用default
C、break语句必须与switch语句中的case配对使用
D、break语句不但可以用于switch语句,还可以用在循环语句中
参考答案:AD
43、以下会构成无限循环的语句或语句组是( )。
A、
n=0;do{++n;}while(n<=0)
B、
n=0;while(1){n++;}
C、
n=10;while(n){n--;}
D、
for(n=0;i=1;i++) n+=i;
参考答案:BD
44、设变量已正确定义,以下能统计出一行中输入字符个数(不包含回车符)的程序段是( )。
A、
n=0;while((ch=getchar())!='\n') n++;
B、
n=0;while(getchar()!='\n') n++;
C、
for(n=0;getchar()!='\n';n++);
D、
n=0;for(ch=getchar();ch!='\n';n++);
参考答案:ABC
45、以下不能正确定义一维数组的选项是()。
A、int a[5]={0,1,2,3,4,5};
B、char a[]={'0','1','2','3','4','5','\0'};
C、char a[]={'A','B','C'};
D、int a[5]="0123";
参考答案:AD
46、有定义语句:char s[10];,若要从终端给 s 输入 5 个字符,能够实现的输入语句是()。
A、gets(&s[0]);
B、scanf("%s",s)
C、gets(s);
D、scanf("%s",s[1]);
参考答案:ABC
47、在 C 语言程序中,关于函数不正确的说法是()。
A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义不可以嵌套,但函数的调用可以嵌套
C、函数的定义和函数调用均可以嵌套
D、函数的定义和函数调用不可以嵌套
参考答案:ACD
48、以下选项中叙述正确的是( )。
A、C语言函数中定义的赋有初值的静态(static)变量,每调用一次函数,赋一次初值
B、在C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限于本复合语句内
C、C程序函数中定义的自动变量,系统不自动赋确定的初值
D、C程序函数的形参不可以说明为static型变量
参考答案:BCD
49、下面说明和使用正确的是( )。
A、
char a[10] ='china';char *p=a;
B、
char a[10],*p=a; strcpy(p,'china');
C、
char *a; a='china';
D、
char a[10] *a;a='china';
参考答案:ABC
50、设有以下语句:
typedef struct TEST {
int x;
int y;
}POINT;
则下列叙述不正确的是( )。
A、可以用TEST定义结构体变量
B、可以用POINT定义结构体变量
C、POINT是struct类型的变量
D、POINT是struct TEST类型的变量
参考答案:ACD
51、为了加强同学们的党史教育,张强在学校的党办的指导下组织学生进行学习效果测试,交上来的测试成绩都是百分制形式,张强觉得这种情况不利于对学生党史学习情况的统计,所以决定编写程序将百分制的成绩转换为等级制。下面是张强编写的程序,请根据如下百分制转换为等级制规则进行程序填空。
90 分以上(包括 90)到 100 分等级为 A;80 分以上(包括 80)小于 90 分等级为 B;70 分以上(包括 70)小于 80 等级为 C;60 分以上(包括 60)小于 70 分等级为 D;小于 60 分等级为 E。请填空。
#include"stdio.h" int main()
{
float score;
char ch;
int k;
printf("input score:\n");
scanf("%f",&score);
k=(int)score/10;
switch(k) {
case 10:
case 9: ch='A';break;
case 8: ch='B';break;
case 7: ch='C';break;
case 6: ch='D';break;
【第 1 空】: ch='E';
}
printf("score=%.1f,grade is %c\n",score,ch);
return 0;
}
参考答案
Default
52、小明开始上小学了,最近他迷上了进行数字相加,他总是不断的给自己加码,计算若干数的累加和,但是他没有办法看自己是不是计算对了。请你编写程序,帮他进行连加求和判断,小明所加的数据均为正整数,默认输入 0 时相加求和结束。
#include "stdio.h"
int main()
{
int sum=0;
int m;
printf("请输入待累加的值:\n");
scanf("%d",&m);
while(m!=0)
{
【第 2 空】+=m;
printf("请输入待累加的值:\n");
scanf("%d",&m);
}
printf("累加和为:%d\n",sum);
return 0;
}
参考答案
sum
53、“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我” 等。在数学中也有这样一类数字有这样的特征,称为回文数。下面是针对判断回文数设计的程序,请填空。
#include "stdio.h" #define N 10
int main()
{
long int num,temp;
int a[N];
int n=0,i;
printf("输入待判定的正整数:\n");
scanf("%ld",&num);
temp=num;
while(temp!=0)
{
a[n++]=temp%10;
temp=【第 3 空】;
}
for(i=0;i<n/2;i++)
if(a[i]!=a[n-i-1])
break;
if(i>=n/2)
printf("%d 是回文数!",num);
eltemp/10se
printf("%d 不是回文数!",num);
return 0;
}
参考答案
temp/10
54、小明的班级组织文艺展演,一共选择了 9 个同学,展演时 9 个同学按照身高从低到高进行了排列。为了表演效果更好,需要临时插入一个同学,使队列仍然保持从低到高的排列效果。请你根据排列的需求,完成程序填空,实现将新的成员按照身高值插入队列中保持队列仍然从低到高排列。
#include"stdio.h" #define N 10
int main()
{
double a[N],k;
int i,j;
printf("输入 9 个同学身高: ") ; //注意:从低到高
for(i=0;i<N-1;i++)
scanf("%lf",&a[i]);
printf("请输入要插入的学生身高:\n");
scanf("%lf",&k);
i=N-2;
while( i>=0 && a[i]>k )
i--;
for(j=N-2; j>i; j--)
【第 4 空】;
a[i+1]=k;
printf("打印插入后学生的身高序列:\n");
for(i=0;i<N;i++)
printf("%.2lf,",a[i]);
return 0;
}
参考答案
a[j+1]=a[j]
55、删除不需要的数值:要求在数据序列中,将指定的数据元素删除,有多少个删除多少个,最后输出删除数
值后的数组。比如数组数据为 23,45,67,34,48,67,89,91,54,12,这时想删除 67,则删除后数组为:23,45, 34,48, 89,91,54,12。请填空。
#include"stdio.h"
#define N 8
int main()
{
int a[N],i,j,k,n;
n=N;
printf("请输入数组元素:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("请输入要删除的值 k:\n");
scanf("%d",&k);
for(i=0;i<n;i++)
{
if(a[i]==k) /*当匹配成功时进行相应操作*/
{
【第 5 空】;
while(j<n-1)
{
a[j]=a[j+1];
j++;
}
n-=1;
i--;
}
}
printf("打印删除 k 值后的序列:\n");
for(i=0;i<n;i++)
printf("%d\t",a[i]);
printf("\n");
return 0;
}
参考答案
j=i
56、函数 fun 的功能是:统计形参 s 所指字符串中数字字符出现的次数,并存放在形参 t 所指的变量中,最后在主函数中输出。例如,形参 s 所指字符串为“abcdef35adgh3kjsdf7”,输出结果为 4。请在程序下划线处填入相应内容,保证运行程序得到正确结果。
#include"stdio.h"
void fun(char *s, int *t)
{
int i, n;
n=0;
for(i=0; s[i]!=0; i++)
if(s[i]>='0'&&s[i]<= '9')
n++;
【第 6 空】 ;
}
void main()
{
char s[80]="abcdef35adgh3kjsdf7";
int t;
printf("\nThe original string is : %s\n",s);
fun(s,&t);
printf("\nThe result is : %d\n",t);
}
*参考答案
t=n
57、小明最近学习了密码学的加密过程,他编写了一段代码对数字进行加密,加密方式:对数字字符„0‟~„9‟,将明文„0‟转换成密文„9‟,明文„1‟转换成密文„8‟,明文„2‟转换成密文„7‟,……明文„9‟转换成密文„0‟;若是其他字符则
保持不变。要求输入明文,将密文输出。程序如下,请填空:
#include"stdio.h"
char fun(char ch)
{
if (ch>='0' && ch<='9')
return '9'- ch+'0';
return 【第 7 空】 ;
}
void main() {
char c1, c2;
printf("\nThe result :\n");
c1='2';
c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='8';
c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='a';
c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
}
参考答案
ch
58、在“C 语言程序设计大赛”中,工作人员需要将学生的名字按照长度从短到长的顺序排序,请协助工作人员完成这一工作,程序如下:
#include"stdio.h"
#include"string.h"
#define M 5
#define N 20
void fun(char (*ss)[N]) {
int i,j,k,n[M];
char t[N];
for(i=0; i<M; i++)
n[i]=strlen(ss[i]);
for(i=0; i<M-1; i++) {
k=i;
for(j= i+1; j<M; j++)
if(n[k]>n[j])
k=j;
if(k!=i) {
【第 8 空】;
strcpy(ss[i],ss[k]);
strcpy(ss[k], t);
n[k]=n[i];
}
}
for(i=0;i<M;i++)
printf("%d\t",n[i]);
}
void main()
{
char ss[M][N]={"liugai","zhangfei","cuiwenwen","aijin","lidawei"};
int i;
printf("\nThe original strings are :\n");
for(i=0; i<M; i++) printf("%s\n",ss[i]);
printf("\n");
fun(ss);
printf("\nThe result :\n");
for(i=0; i<M; i++)
printf("%s\n",ss[i]);
}
参考答案
strcpy(t,ss[i])
59、小明最近在进行打字练习,每次打完他都将练习的字符序列留存下来,不过最近键盘总是不灵敏,在进行输入时偶尔就出现错误的„‟字符,请帮他编写程序把正确的练习的字符串保存下来。例如,错误的字符串为
"*****ab****“,保存的正确的字符串为"ab” 。请填空。
#include"stdio.h"
void fun(char *a,char *b) {
while(*a!='\0')
if(*a=='*')
a++;
else {
【第 9 空】;
b++;
a++;
}
}
void main()
{
char a[100]="*****a*b****",*s=a,t[100];
fun(s,t);
puts(t);
}
**参考答案
b=a
60、a 和 b 两个学生同时报名参加一场考试,结果考试当天 a 学生因特殊情况未参加考试,b 参加了考试,老师登记成绩时将 b 误作为缺考学生,而将其成绩登入了 a 的成绩列表中,编写程序将成绩修改过来。即 a 所指结构体中值赋给 b 变量,并修改 b 中的学号和姓名,然后将修改后的 b 数据输出。
例如:a 所指变量中的学号、姓名和 3 门课成绩依次是:1001、“tomy”、95、80、88,修改后输出 b 中的数据应该为:1002、“lisa”、95、80、88
#include"stdio.h"
#include"string.h"
struct student {
long sno;
char name[10];
float score[3];
};
int main()
{
struct student a={10001,"tomy", 95, 80, 88},b;
int i;
printf("\n\nThe original data :\n");
printf("\nNo: %ld Name: %s\nScores: ",a.sno, a.name);
for (i=0; i<3; i++)
printf("%6.2f ", a.score[i]);
printf("\n");
【第 10 空】;
b.sno = 10002;
strcpy(b.name, "lisa");
printf("\nThe data after modified :\n");
printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name);
for (i=0; i<3; i++)
printf("%6.2f ", b.score[i]);
printf("\n");
return 0;
}
参考答案
b=a