竞赛官网:http://www.ncccu.org.cn/
1、模拟时间:90分钟
2、单选题15题(每题3分),编程题5题(共55分)
3、每题在交卷前都可以修改,交卷后将无法修改
4、模拟练习题均为往届真题,仅做赛前练习使用,编程题由系统自动评判
1.已定义x为字符型变量,则下列选项中正确的是
A. x = ‘101’
B. x = “101”
C. x = 101
D. x = “c”
2.下列运算符中,属于双目运算符的是
A. !
B. +
C. ++
D. ?:
3.从键盘输入两个整型数据,则下列输入语句中正确的是
A. scanf("%d%d",&m,&n);
B. scanf("%d%d",m,n);
C. scanf(" %f%f",&m,&n);
D. input m,n;
4.语句while(!a)中的条件!a等价于
A. a==0
B. a!=1
C. a!=0
D. ~a
5.若有数组int a[10]={1,3,5,2,4,6,7,3,8,6},i=2则a[a[i]]元素的数值是
A. 3
B. 4
C. 5
D. 6
6.字符串"I love you"在C语言中占()个字节
A. 8
B. 10
C. 11
D. 12
7.在32位系统中,定义以下结构体类型
struct p {
char name[20];
long int n;
short int number[4];
}a;
则a占用的字节大小是
A. 28
B. 30
C. 32
D. 46
8.有如下函数调用语句
fun1(math1,math2+ math3,(math4,math5));
则该函数调用语句中,实参的个数是
A. 3
B. 4
C. 5
D. 有语法错误
9.若有int * const p;则下列说法正确的是
A. p指向的变量数值不能更改
B. p保存的地址不能更改
C. p保存的地址和指向的变量数值都不能更改
D. p保存的地址和指向的变量数值都可以更改
10.有以下程序段:
int a[10] = {1,2,3,4,5,6,7,8,9};
int *p = a;
则以下表达式值为8的是
A. p+8
B. *p+=7
C. *(p+8)
D. *(p+7)
11.下列不是C语言标准库中文件操作的函数选项是
A. fopen
B. fread
C. fgets
D. fabs
12.若有以下说明和定义语句,则变量vh在内存中所占的字节数是
nion hh {char ch[6];float a; float b;};
struct xx {double w;union hh u;float v[5] ;}vh;
A. 44
B. 34
C. 32
D. 36
13.判定一个顺序栈S(最多容纳MAXSIZE个元素)为空的条件是
A. s->top == -1
B. s->top == 0
C. s->top == MAXSIZE
D. s->top == MAXSIZE+1
14.具有256个叶结点的二叉树中有()个度为2的结点
A. 127
B. 196
C. 255
D. 511
15.下列选项中错误的是
A. unsigned和void在C中都是保留字
B. 树形结构中元素之间存在一对多的关系
C. C语言程序的基本组成单位是函数
D. 在C语言程序中,注释说明只能位于一条语句的后面
16A.有一组均由字符A ~ Z和a ~ z组成的字符串,其中要求将字符串中各字符按如下要求进行转换:
A<->z、B<->y、C<->x、… 、X<->c、Y<->b、Z<->a
输入说明: 输入1行,待处理的字符串(长度<=10000)
输出说明: 输出1行,为输出转换之后的字符串
输入样例:
Algorithm Hello
输出样例:
zOTLIRGSN sVOOL
分析:
#include#include #include int main() { char s[10000]; int i; gets(s); for (i = 0;i < strlen(s);++i) { s[i] = 187 - s[i]; } printf("%sn",s); return 0; }
17A.输入正整数A、B、C(0<=A,B,C<=10000),若用’+’、’-’、’*’、’/’、’%'之一组成等式(即A@B=C,@是上述运算符之一,),则输出“YES”,否则输出“NO”
输入说明: 第1行:一个正整数N(1<=N<=1000),表示有N组数据,
第2-N+1行:非零整数A、B、C
输出说明: 输出1行,为输出转换之后的字符串
输入样例:
5 2 3 6 3 5 1 5 3 1 1 4 1 6 2 7
输出样例:
YES NO NO YES NO
样例说明:
输入样例中2*3=6,1%4=1
分析:
#includeint main(){ int n; int num[1000][3]; scanf("%d",&n); for(int i=0;i //输入 scanf("%d %d %d",&num[i][0],&num[i][1],&num[i][2]); } for(int i=0;i int flag=0;//逻辑标志初始化,当不能组成等式时,标志才不会发生改变 if(num[i][0]+num[i][1]==num[i][2]){ flag=1; } if(num[i][0]-num[i][1]==num[i][2]){ flag=1; } if(num[i][0]*num[i][1]==num[i][2]){ flag=1; } if(num[i][1]!=0){//除数不能为0 if(double(num[i][0])/num[i][1]==num[i][2]){ flag=1; } if(num[i][0]%num[i][1]==num[i][2]){ flag=1; } } if(flag==0){//标志相应 printf("NOn"); }else{//flag==1表示前面的条件其中之一满足了 printf("YESn"); } } return 0; }
18A. 若有一个正整数A1A2…An==A1^1 + A2^2 + … + An^n,则称这个数是特殊数
输入说明: 输入1行,一个正整数N(N<1e8)
输出说明: 一行:从小到大输出0-N之间的所有特殊数,每个数之间用一个空格间隔
输入样例:
3
输出样例:
0 1 2 3
分析:
#include#include #include #include int main() { int N, n, A; int i, j; char s[100]; int b, sum = 0; scanf("%d",&N); for (i = 0;i <= N;++i) { sprintf(s, "%d", i); n = strlen(s); A = i; sum = 0; do { b = A%10; A /= 10; sum += pow((double)b,(double)n); n--; } while (A != 0); if(sum == i) { printf("%d ",i); } } printf("n"); return 0; }
19A. 给定一个字符串s,先要对字符串第i个到第j个字符中查找是否存在字符ch,若存在,则删除其中第一个字符ch,若不存在,则在第j个字符后插入字符ch
输入说明: 第一行输入字符串s(长度len<1000)。
第二行输入正整数N和字符ch,N表示其后有N次操作(N<100)。
从第三行开始,其后N行每行有两个正整数i和j(1<=i<=j<=len)
输出说明: 输出N次操作之后的字符串
输入样例:
abcdefg 2 d 1 3 2 6
输出样例:
abcdefg
样例说明:
abcdefg-->abcddefg-->abcdefg
分析:
#include "stdio.h"
int get_lenth(char a[]){//获取数组长度的函数
int i;
for(i=0;a[i]!=0;i++){
}
return i;
}
void insert(char a[],int j,char ch){//插入操作
int lenth=get_lenth(a);
for(int i=lenth;i>j;i--){
a[i]=a[i-1];
}
a[j]=ch;
}
int main(){
char str[1000]={0};//初始化为全零
scanf("%s",str);
char ch;
int n;
scanf("%d %c",&n,&ch);
for(int p=0;p
int lenth=get_lenth(str);
int i,j,flag=0;
scanf("%d %d",&i,&j);
for(int x=i-1;x
if(str[x]==ch){
for(int h=x;h//删除运算
str[h]=str[h+1];
}
str[lenth-1]=0;
flag=1;
break;
}
}
if(flag==0){
insert(str,j,ch);//插入运算
}
}
for(int i=0;str[i]!=0;i++){//结果查看
printf("%c",str[i]);
}
return 0;
}



