兰州财经大学C语言专升本练习

本试卷为兰州财经大学C语言专升本练习,题目包括:单项选择题,填空题,编程题。

覆盖的内容包括:理论题,基础知识,控制结构,循环结构,指针,数组/指针数组,字符串/字符串指针,函数/函数指针,结构体,程序题。

C语言专升本练习

一、单项选择题 (共20题,每题2分,共计40分)

(  C  )
1、合法的main()函数命令参数形式是________。
A、main(int a,char*c[])
B、main(int arc,char**arv)
C、main(int argc,char*argv)
D、main(int argv,char*argc[])
(  B  )
2、与"y=(x>0?1:x<0?-1:0)";的功能相同的if语句是________。
A、if(x>0)y=1;
B、if(x)
else if(x>0)y=1;
else y=0; else if(x%0)y=-1;
else y=0;
C、y=-1
D、y=0;
if(x) if(x>=0)
if(x>O)y=1; if(xi>=O)y=1;
else if(x==0)y=0; else y=-1;
else y=-1;
(  D  )
3、选出下列标识符中不是合法的标识符的是________。
A、hot_do
B、cat1
C、_pri
D、2ab
(  C  )
4、有以下程序 int a=2;
int f(int *a)
{
return (*a)++;
}
main( )
{
int s=0;
{
int a=5;
s+=f(&a);
}
s+=f(&a);
printf("%d\n",s);
}
执行后输出结果是________。
A、10
B、9
C、7
D、8
(  B  )
5、以下程序的输出结果是
#include <stdio.h>
main()
{
int i=0,a=0;
while(i<20)
{
for(;;)
{
if((i%10)==0) break;
else i--;
}
i+=11;
a+=i;
}
printh("%d\n",a);
}
A、21
B、32
C、33
D、11
(  D  )
6、有以下程序
#include <stdio.h>
struct tt
{
int x;
struct tt*y;
}
*p;
struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};
main()
{
int i;
p=a;
for(i=1;i<=2,i++)
{
printf("%d,",p->x);
p=p->y;
}
}
程序的运行结果是________。
A、20,30,
B、30,17
C、15,30,
D、20,15
(  C  )
7、下列四组选项中,正确的c语言标识符是________。
A、%x
B、a+b
C、a123
D、123
(  A  )
8、下列while循环的次数是________。 while (int i=0)i--;
A、0
B、1
C、5
D、无限
(  B  )
9、若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是________。
struct stu
{
int i;
int name;
} st,*p;
p=&st;
A、si
B、*i
C、(*.i
D、p->i
(  C  )
10、设有如下说明
typedef struct st
{
long a;
int b;
char c[2];
}
new;
则下面叙述中正确的是______。
A、以上的说明形式非法
B、ST 是一个结构体类型
C、NEW 是一个结构体类型
D、NEW 是一个结构体变量
(  A  )
11、以下选项中,不能正确赋值的是 ______。
A、char s1[10];s1="chest";
B、char s2[]='C','t','e','s','t';
C、char s3 [20]="Chest";
D、char * s4="Cest\n"
(  C  )
12、以下程序的输出结果是
typedef union {
long x[2];
int y[4];
char z[8];
} mytype;
mytype them;
main() {
printf("%d\n",sizeof(them));
}
A、32
B、16
C、8
D、24
(  C  )
13、顺序执行下列程序语句后,则b的值是 string a="hello"; string b=a.substring(0,2);
A、Hello
B、hello
C、He
D、null
(  B  )
14、有如下程序段int *p,a=6,b=2; p=&a; a=*p+b; 执行该程序段后,a的值为______。
A、6
B、8
C、7
D、编译出错
(  C  )
15、有以下程序
#include <string.h>
void f(char p[][10],int n) /* 字符串从小到大排序 */
{
char t[10];
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(p[i],p[j])>0)
{
strcpy(t,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],t);
}
}
main()
{
char p[5][10]={"abc","aabdfg","abbd","dcdbe","cd"};
f(p,5);
printf("%d\n",strlen(p[0]));
}
程序运行后的输出结果是______。
A、2
B、4
C、6
D、3
(  C  )
16、有以下程序
#include <stdio.h>
main()
{
char a=4;
printf("%d\n",a=a<<1);
}
程序的运行结果是______。
A、40
B、16
C、8
D、4
(  A  )
17、设有定义:int a=64,b=8; 则表达式(a&b)||(a&&b)和(a|b)&&(a||b)的值分别为
A、1 和 1
B、1 和 0
C、0 和 1
D、0 和 0
(  C  )
18、若有定义: int (*p)[4];
则标识符p 。
A、是一个指向整型变量的指针
B、是一个指针数组名
C、是一个指针,它指向一个含有四个整型元素的一维数组
D、定义不合法
(  D  )
19、int a[10];
合法的数组元素的最小下标值为____
A、10
B、9
C、1
D、0
(  C  )
20、c 语言提供的基本数据类型关键字是________。
A、integer
B、FLOAT
C、unsigned
D、Double

二、填空题 (共10题,每题2分,共计20分)

1、int *p 的含义是 ________ 。
2、以下sstrcpy( )函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。
void sstrcpy(char *s,char *t)
{
while(*s++= ________);
}
main( )
{
char str1[100],str2[]="abcdefgh";
sstrcpy(str1,str2);
printf("%s\n",str1);
}
3、宏定义必须写在______之外
4、以下程序的输出结果是________。#inlcude <stdio.h>
main()
{
int m=68;
putchar(m+30);
}
5、下面程序段中循环体的执行次数是________。
a=10;
b=0;
do
{
b+=2;
a-=2+b;
}
while(a>=0);
6、已知"float x=0.5;int y=13;",则算术表达式"x+y/5"的值是________。
7、若要定义一个单精度实型变量f,则应该使用的定义语句为________。
8、下列给定程序中,函数proc()的功能是计算正整数m 各位上数字的平方和。 例如,输入498,则输出应该是161。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h> long proc(10ng m)
{
long sum=1;
do
{
sum+=(m%10)*(m%10);
m/= 10;
}
while(m)
return(sum);
}
void main()
{
long n;
system("cls");
printf("please enter a number:");
scanf("%1d",&n);
printf("\n%ld\n",proc(n));
}
9、定义一个指针数组p,它有4个元素,每个指针指向一个整型数据,定义语句为______。
10、赋值语句是由______加上一个分号构成。

三、编程题 (共3题,每题0分,共计40分)

1、编写一个函数,从传人的m个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。 试题程序:
char*proc(char(*a)[81],int num)
{
}
void main()
{
char ss[l0][81],*max;
int n,i=0;
printf("输入若干个字符串:");
gets(ss[i]);
puts(ss[i]);
while(!strcmp(ss[i],"****")==0)
{
i++;
gets(ssei]);
puts(ss[i]);
}
n=i;
max=proe(ss,n);
printf("\nmax=%s\n",max);
}
2、编写程序: 输入三个整数x,y,z,请把这三个数由小到大输出。
3、输入某班30位学生的姓名及数学、英语成绩,计算每位学生的平均分然后输出平均分最高的学生的姓名及其数学和英语成绩,使用结构体实现.