数组
1.假设有定义如下: int array[10]; 则该语句定义了一个数组array。其中array的类型是整型指针(即: int * )。
F array是指向int array[0]的地址的指针
2.假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是__。
A,char s[5]={“ABCDE”}; puts(s);
B,char s[5]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’}; puts(s);
C,char *s; scanf("%s", s); puts(s);
D,char *s; s=“ABCDE”; puts(s);
D
错选c,char * s不是字符串,不能用%s
3,如果变量定义如下,则正确的语句是( )。
int i, j, tab[3][4];
A,tab[0][ ] = 0;
B,tab[ ][3] = 3;
C,tab = 100;
D,for(i = 1; i <= 3; i++){
for(j = 1; i <= 4; j++){
scanf(“%d ”, &a[i][j];
}
}
E,for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++){
printf("%4d", tab[i][j]);
}
printf("\n");
}
E
错选D,二维数组行列均从0开始
4,在以下描述中,( )是正确的。
A,int a[5] = {1, 2, 3, 4, 5};
定义了数组a,并对数组元素赋初值。此时,a[0]为1,a[1]为2,a[2]为3,a[3]为4,a[4]为5。
B,static int b[10];
定义了静态数组b,且10个数组元素的初值都为0。
C,int fib[45] = {1, 1};
定义了数组fib,并对数组 fib 的前2个元素赋初值,其余元素的值都为0。
D,static int week[7] = {1, 2, 3};
定义了静态数组week,并对数组 week 的前3个元素week[0]~week[2]赋初值,week[3]~week[6]值都是不确定的。
AB
c,没有static,fib后几个元素的值是不确定的
5,在以下描述中,( )是正确的。
A,int a[3][3] = {1};
定义了数组a,并对数组a赋初值。此时,a[0][0]的值为1,而其余元素的值都是不确定的。
B,static int b[4][3] = {{ }, { }, { },{9}};
定义了静态数组b,并对数组赋初值。此时,b[3][0]的值为9,而其余元素的值都为0。
C,int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
和
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
等价。
D,static int b[4][3] = {{1, 2, 3}, { }, {4, 5}};
和
static int b[4][3] = {1, 2, 3, 0, 0, 0, 4, 5};
等价。
E,int a[3][3] = {{},{4},{}};
定义了数组a,并对数组a赋初值。此时,a[1][1]的值为4,而其余元素的值都是不确定的。
ABCD
E,a[1][0]和a[1][2]都是0
6,选择法排序:本题要求将给定的n个整数从小到大排序后输出。输出时相邻数字中间用一个空格分开,行末不得有多余空格。
#include <stdio.h>
# define MAXN 10
int main()
{
int i, index, k, n, temp;
int a[MAXN];
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%d", &a[i]);
}
for(k = 0; k < n-1; k++){
index = ;
for
{
if
{
index = i;
}
}
}
for(i = 0; i < n; i++) {
if
{
printf("%d", a[i]);
}else{
printf(" %d", a[i]);
}
}
printf("\n");
return 0;
}
答案
#include <stdio.h>
# define MAXN 10
int main()
{
int i, index, k, n, temp;
int a[MAXN];
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%d", &a[i]);
}
for(k = 0; k < n-1; k++){
index = k; //index做擂主下标
for(i = k + 1; i < n; i++)//从k+1个数组开始打擂
{
if( a[index]>a[i] )//比较擂主与打雷人的大小
{
index = i; //如果擂主小,index记下标
}
}
if(index != k){temp=a[k];a[k]=a[index];a[index]=temp;}//擂主与打擂人交换数值
}
for(i = 0; i < n; i++)
{
if(i == 0)
{
printf("%d", a[i]);
}
else{
printf(" %d", a[i]);
}
}
printf("\n");
return 0;
}
7.大小写字母转换。以下程序段A和B的功能都是:将字符串中的小写字母全部转换成大写字母,大写字母全部转换成小写字母,其他字符不变。
/* 程序段A */
int k;
char str1[81];
k = 0;
while (str1[k] != '\0') {
if (str1[k] >= 'a' && str1[k] <= 'z'){
}
else if (str1[k] >= 'A' && str1[k] <= 'Z'){
}
k++;
}
/* 程序段B */
int k;
char str1[81], str2[81];
k = 0;
while (str1[k]!='\0') {
if (str1[k]>='a' && str1[k]<='z'){
}
else if (str1[k]>='A' && str1[k]<='Z'){
}
else{
}
k++;
}
答案
/* 程序段A */
int k;
char str1[81];
k = 0;
while (str1[k] != '\0') {
if (str1[k] >= 'a' && str1[k] <= 'z'){
str1[k]=str1[k]-32;
}
else if (str1[k] >= 'A' && str1[k] <= 'Z'){
str1[k]=str1[k]+32;
}
k++;
}
/* 程序段B */
int k;
char str1[81], str2[81];
k = 0;
while (str1[k]!='\0') {
if (str1[k]>='a' && str1[k]<='z'){
str2[k]=str1[k]-32;
}
else if (str1[k]>='A' && str1[k]<='Z'){
str2[k]=str1[k]+32;
}
else{
str2[k]=str1[k];
}
k++;
}
str2[k] = '\0';
文件流
8.随机操作只适用于二进制文件。
F
9.如果二进制文件a.dat已经存在,现在要求写入全新数据,应以()方式打开。
A,“w”
B,“wb”
C,“w+”
D,“wb+”
B
改写二进制文件要加b
错选A
10.定义FILE * fp; 则文件指针fp 指向的是()。
A,文件在磁盘上的读写位置
B,文件在缓冲区上的读写位置
C,整个磁盘文件
D,文件类型结构体
B
错选A
11.缓冲文件系统的文件缓冲区位于()。
A,磁盘缓冲区中
B,磁盘文件中
C,内存数据区中
D,程序文件中
C
错选A
12.按存储介质划分,文件可以分为:
A,记录文件和流式文件
B,普通文件和设备文件
C,文本文件和二进制文件
D,程序文件和数据文件
B
错选D
13.函数fgetc的作用是从指定文件读入一个字符,该文件的打开方式必须是( )。
A,只写
B,追加
C,读或读写
D,答案B和C都正确
D
fgetc函数是指从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。fgetc的调用形式为ch=fgetc(fp);
错选C
14.关于C语言中的函数,下列说法正确的是
A,函数应该以它们调用的顺序来定义。
B,return 语句可以出现在函数的任何地方。
C,函数定义可以在主函数前面也可以在主函数后面。
D,函数总是返回一个整型数据。
BC
错选AC,函数定义顺序随意
15.设变量已正确定义,以下()是合法的C语句。
A,if ( n <= 10 );
B,switch ( k ) {
case 1: printf(“one”); break;
case 2: printf(“two”); break;
case 1: printf(“one”); break;
default: printf(“zero”); break;
}
C,switch ( k%2 ) {
default: printf(“zero”); break;
case 1: printf(“one”);
case 1+1: printf(“two”);
}
D,n = 10;
switch ( k ) {
case n%3: printf(“one”);
case n%4: printf(“two”);
default: printf(“zero”);
}
AC
错选CD,D中case后必须是常量
16.只能向指定文件写入一个字符的函数是 __ 。
fputc
17.判断文件指针是否已经到了文件尾部的函数是 __ 。
feof
18.有穷状态自动机识别手机号码
本题目要求读入1个手机号码,然后判断手机号码是否合法。合法的手机号码判断有如下要求:
要求一:手机号码必须是11位。
要求二:手机号码开头三个字符必须是151|153|180|173|198开头,其他的开头判断不符合要求。
(注:对于刚学C语言的大一学生可以无视该要求)要求三:【不满足该要求视为0分】读入手机号码时一次只能读入1位数字,并且只能1位1位地判断,不允许同时使用手机号码中的多位数字进行联合逻辑运算(即不允许使用类似“a[0]‘1’&&a[1]‘5’"或者"a==‘1’&&b==‘5’”的表达式)。
(注:对于刚学C语言的大一学生可以无视该要求)要求四:【不满足该要求视为0分】在判断手机号码状态时,只允许遍历1次手机号码即可获取四种状态值,不允许回溯。
输入格式:
直接输入11位十进制。
输出格式:
测试输入的字符串 is ok/short/long/illegal
ok状态:表示完全符合手机号码正确,输出ok
short状态:表示当输入字符串位数为1、位数为2以及位数为3时,满足【要求二】中规定的前三位字符要求且由0~9字符串构成,但是位数不满11位,输出short
long状态:表示前三位满足了【要求二】中规定的前三位字符要求且所有位的字符都由0~9字符串构成,但位数超过11位,输出long
illegal状态:未满足【要求二】中规定的前三位字符要求,或者字符串中含有除0~9之外的字符构成,输出illegal
输入样例:
19843239892
1984323989
198432398922
198a32398922
输出样例:
19843239892 is ok
1984323989 is short
198432398922 is long
198a32398922 is illegal
#include <stdio.h>
#include<string.h>
int main()
{
char a[20];
int count=0,i;
while(~scanf("%s",&a))
{
if(a[0]=='1'&&a[1]=='5'&&a[2]=='1'||
a[0]=='1'&&a[1]=='5'&&a[2]=='3'||
a[0]=='1'&&a[1]=='8'&&a[2]=='0'||
a[0]=='1'&&a[1]=='7'&&a[2]=='3'||
a[0]=='1'&&a[1]=='9'&&a[2]=='8')
{
for( i = 0 ; i < strlen(a) ; i++)
{
if(a[i]<'0'||a[i]>'9')
{
count=1;
}
}
if(count==1)
{
printf("%s is illegal\n",a);
}
else
{
if(strlen(a)==11)
{
printf("%s is ok\n",a);
}
if(strlen(a)<11)
{
printf("%s is short\n",a);
}
if(strlen(a)>11)
{
printf("%s is long\n",a);
}
}
}
else
{
printf("%s is illegal\n",a);
}
}
return 0;
}
指针
19.int ( * p)[4]它表示p是一个指针数组,它包含4个指针变量元素。 (1分)
F
20.p为指向包含4个元素的一维数组的指针变量
以下结构类型可用来构造链表的是()。
A,struct aa{ int a;int * b;};
B, struct bb { int a;bb * b;};
C,struct cc{ int * a;cc b;};
D, struct dd{ int * a;aa b;};
B
错选A
21.若程序中有下面的说明和定义
struct abc
{ int x;
char y;
}
struct abc s1,s2;
A,编译出错,结构体定义完要加分号。
B,程序将顺利编译连接执行
C,能顺利通过编译连接但不能执行
D,能顺利通过编译但连接出错
A
错选B
22.设变量已正确定义,以下()是合法的C语句。
A,if ( n <= 10 );
B,switch ( k ) {
case 1: printf(“one”); break;
case 2: printf(“two”); break;
case 1: printf(“one”); break;
default: printf(“zero”); break;
}
C,switch ( k%2 ) {
default: printf(“zero”); break;
case 1: printf(“one”);
case 1+1: printf(“two”);
}
D,n = 10;
switch ( k ) {
case n%3: printf(“one”);
case n%4: printf(“two”);
default: printf(“zero”);
}
AC
错选AD,case后面必须是常量
23.如果变量定义如下,则正确的语句是( )。
int k, a[10];
A,a[-1] = -1;
B,a[0] = 23;
C,k = 3; a[k - 2] = a[9] + 1;
D,for(k = 1; k <= 10; k++){
printf(“%d ”, a[k]);
}
E,for(k = 0; k < 10; k++){
scanf(“%d ”, &a[k]);
}
BCE
错选BDE
24.下面函数用于求出两个整数之和,并通过形参传回两整数相加之和值。请填空。
void add(int x, int y, __ z )
{
__= x + y;
}
int * * z
25.下面程序可以逐行输出由language数组元素所指向的5个字符串。请填写程序中相应语句。
#include<stdio.h>
int main(void)
{
char *language[] = {“BASIC”, “FORTRAN”, “PROLOG”, “JAVA”, “C++” } ;
char __ ;
int k ;
for(k = 0 ; k < 5 ; k++) {
q= __ ;
printf("%s\n", *q);
}
return 0;
}
**q language+k
以下程序的输出结果是__。
void swap(int *a, int *b)
{
int *t;
t=a; a=b; b=t;
}
Int main()
{
int i=2,j=5,*p=&i,*q=&j;
swap(p,q);
printf("%d %d\n",*p,*q)
}
2 5

7961

被折叠的 条评论
为什么被折叠?



