1、C语言试题 一、基础知识填空题 1、一个C程序由若干函数构成,其中有且只能有一个 主 函数。 2、C语言中的基本数据类型有整形、字符型、 实型 和 枚举类型 。 3、若变量a是数字字符,将其转换成相应的数值用什么语句 a=a+48 。 4、C语言中的数据类型有基本类型、 构造类型 和 指针 以及 空类型 。 5、若变量a是小写字母,将其转换成相应的大写字母用什么语句 a=a-65 。 6、将数学表达式写成C语言表达式为 y=sin(a*x)+ln(a+x)+exp(a*
2、x) 。 7、若有定义union st{ char name[20]; float score; int age;}; 则sizeof (union st ) 为 20 。(在TC环境下) 8、有定义int td[10]={0,1,2,3,4,5,6,7,8,9}, *p, i=4; 若执行语句: p=td; printf(“%d”, *(p+i)); 输出结果是 4 。 1. 在C语言中,关键字都用( 大写 ){大写或小写};C语言是通过有且仅有一个( 主函数
3、
2. C语言中构造类型数据有哪三种:( 数组 )、( 结构体 )、( 公用体 )。
3. 若k=sizeof(int),I=sizeof(float),则k=( 2 ),I=( 4 )。
4. 符号’&&’是( 逻辑与 )运算符,&a是指( 取a的地址 )。
5. 能表述20 4、x=( 0 ),y=( 1 )。
7. 若有以下程序片段:
char str[] = “ab\\\n\0””;
printf(“%d”,strlen(str)); 则输出结果是( 6 )。
如果缺省函数的类型,编译器默认它为______int________类型。
3.当函数的类型和返回值的类型不一致是,则以____ 函数________类型为准。
5.已知x=3,y=2,循环while(x == y){x--; continue; } 执行 0 次。
6. 若有定义union student
{
5、char name[20];
float score;
};
则sizeof (union student ) 为 20 。
二、单选题
下面哪个是合法的变量名: A 。
(A)f_max (B)typedef (C)tr?ue (D)5ac
2、下列常数中哪个是不符合C语法规定的 B
(A)‘\’ (B)‘\101’ (C)0x1e (D)1.e5
3、C语言程序是由 C 组成的。
(A).子程序 6、 (B) .过程 (C) .函数 (D)主程序和子程序
4、C源程序中不能表示整形常数的数制是 A
(A)二进制 (B) 八进制 (C) 十进制 (D)十六进
当定义一个共用体变量时系统分配给它的内存是( A )。
A. 各成员所需内存的总和
B. 成员中占内存量最大者所需的容量
C. 结构中第一个成员所需内存量
D. 结构中最后一个成员所需内存量
判断char类型的变量cl是否为数字字符的正确表达式为( B )
A.(cl>=0)&&(c1<=9) B 7、c1>='0')&&(c1<=’9’)
C.'0'<=c1<=’9' D .(c1>='0')||(cl<='9’)
10. 设有如下枚举类型定义:
enum language{Basic,Assembly,Ada=100,COBOL,Fortran};
请问枚举变量Assembly的值是( A )。 若枚举类型定义中没有指定元素的值,则整型常量值从0开始依次递增,
(A)1 (B)0 (C)101 (D)99
执行语句for(i=0;i<1O;i++);后,变量i的值 8、为( A )
A. 1O B . 9 C . O D . 1
15.下列语句的循环次数为( A )
int x=5;
while(x){x--;break;}
A. 1; B .5 C .6 D .无限次
4、若对两个数组a和b进行初始化
char a[]=〞abc〞;char b[]={‘a’,’b’,’c’};
则下列叙述正确的是 D 。
(A)a与b数组完全相同 (B) a与b数组长度相同 9、
(C) a与b数组都存放字符串 (D) 数组a比数组b长度长
5、使下列程序段输出”123,456,78”由键盘输入数据,正确的输入是 C 。
int i,j,k;
scanf(“%d,%3d%d”,&i,&j,&k);
printf(“%d,%d,%d\n”,i,j,k);
A.12345678 B .123,456,78 C .123,45678 D .123,*45678
6、下列语句中,合法的定义是 C 。
(A)int a[]="string"; (类型不匹配) (B) int 10、a[5]={0,1,2,3,4,5};(个数有6个)
(C)char *s="string"; (D) char a[20];a=”string”;(a是地址)
7、有以下程序
int a[3][4],*p=a[0]; 则以下 D 不是对a数组中第i行,第j列元素值的正确引用。
(A) a[i][j] (B) *(*(a+i)+j) (C) *(p+(i*4+j)) (D)*(a+i)+j
三、程序阅读填空题
1、
#include “stdio.h”
void main()
{ int x,y,z;
11、
__ void fun(int i, int j, int k)__________;
x=4;y=12;z=6;
___ fun(x, y, z)_________;
printf(“%x=%d;y=%d;z=%d\n”,x,y,z);
}
void fun(int i, int j, int k)
{ int t;
t=(i+j+k)/2;
printf(“t=%d\n”,t);
}
2、这道题没题目,不知道题目的目的是干什么
#include “stdio.h”
#include “string.h”
void count(char a[ ])
{ 12、
int sun1=0,sum2=0,sum3=0;
int i;
for(i=0;a[i]!=’\0’;i++)
if(a[i]>=’a’&&a[i]<=’z’||a[i]>=’A’&&a[i]<=’Z’) sum1++;
else if(______________________) ____________________;
else _____________________;
printf(“sum1=%d,sum2=%d,sum3=%d\n”,sum1,sum2,sum3);
}
void main 13、)
{
char string[81];
printf(“input string:\n”);
_________________;
count(string);
}
10、下列程序的功能是将字符串s中所有的空格字符删去,请在______处填空。
main()
{ char *s = “Our teacher teaches C language” ;
int i , j ;
for ( i=j=0 ; s[i] !=’\0’ ; i++ )
if ( s[i] != ‘ ‘ ) s[j++] = s[i];
___s[j]=’\0’_ 14、 ;
printf (“%s\n”,s);
}
4. 从键盘中输入一个数,将其插入到一个升序数组中,保持数组任然按升序排列,将程序补充完整。
void main()
{ int data,temp,k;
static int a[9]={-10,2,4,8,10,15,25,50};
printf(“\nEnter a data:”);
scanf(“%d”,&data);
_____a[8]=data____________;
for(k=8;___k>0_________;k--)
if(a[k] 15、emp=a[k]_________;
a[k]=a[k-1];
a[k-1]=temp;
}
else _____ a[8]=data ____________;
for(k=0;____k<9__________;k++)
printf(“%7d”,a[k]);
}
下面程序运行的结果是_______________。//这道题讲过,一个变量在那个大括号内定义就在这括号内有效
static int x=5;
void main ()
{ void f1();
void f2();
int x=10;
f1();
f2();
printf(“x 16、1)=%d\n”,x);
}
void f1()
{ x+=20;
printf(“x(2)=%d,”,x);
}
void f2()
{ int x=100;
printf(“x(3)=%d,”,x);
}
1.求(函数mm用来求阶乘),请将程序补充完整:
void main()
{ long s=0,i,mm(int k);
for(i=1;i<11;i++)
s=s+mm(i);
printf(“%ld”,s);
}
long mm(int k)
{ long t=1,j;
for(j=1;j<=k;j++)
17、 t*=j ;
return t ;
}
程序实现给数组a赋值,并通过指针的方式输出数组a的值,请将程序补充完整。
void main()
{ int a[6],i;
__int *p___________;
for(i=0;i<6;i++)
scanf(“%d”,_____a[i]__________);
p=a;
for(i=0;i<6;i++)
printf(“%3d”,_____a[i]或者*(p+i)_________);
printf(“\n”);
四. 18、编程题
1.从键盘输入一个正整数n,求n!
2.输出100——999内的所有水仙花数。水仙花数是指3位数的各位数字的立方和等于这个位数本身。例如,153=1*1*1+5*5*5+3*3*3
3.一个数如果恰好等于它的因子之和,这个数就称为“完数”,编写程序找出
1—5000中的所有完数。
4. 有定义int a[10]={10,2,4,1,3,7,9,5,6,8};请用选择排序法将数组a中的元素按升序排列,并输出排序后的结果
5. 从键盘输入两个整数m和n,编程求m和n的最大公约数以及最小公倍数。
6. 请编写函数 sum(a,n), 求 sn=a+aa+aaa+....+aa. 19、aa(n个a) 的值,并在主函数中调用该函数。其中 a 是一个数字. 例如, 若a=2, n=5时: Sn=2+22+222+2222+22222, 其值应为24690. 根据下列已完成的部分, 完成未完成部分(注: 在函数 sum 中不能定义新的变量, 可不用已定义的某些变量).
long sum(int a, int n)
{ long sn, tn;
int count;
..........;
return(sn);
}
7.编程求一个学生n门课程的平均成绩。
8.求10以内的素数
9. 编写程序实现:求x的y次方。
10、输入任 20、意一个3位数,将其各位数字反序输出(例如:输入123,输出321)。
11、 定义函数int f(char *x) 判断x所指的字符串是否为回文,若是则函数返回1,否则
返回0。
说明:回文是指一个字符串顺序输出和逆序输出相同。例如:“abcddcba”就是一个回文。
课本:
1、 printf格式字符%d,%u,%f,%s,%c
2、带参数的宏定义及宏嵌套
3、数组元数的地址计算,数组元素的引用方式
4、C语言的基本类型
5、字符串函数(求长度、连接、比较等)
6、函数的反回值
7、不同类型的数据据相运算
8、结构体变量的存储空间的分配
9、指针的含义及间接引用
10、实参是传值与传地址
11、函数printf 和scanf 的使用
12、复合赋值
实验指导书:
P26-28、上机题1、7
P29-31、上机题2、3、7
P33-36、上机题3、9
P38、上机题3
P45、上机题7
实验二:第3,6题
实验三:第10题
实验四:第3题
实验五:第8题






