全国高校计算机能力挑战赛C语言组真题

全国高校计算机能力挑战赛C语言组真题,第1张

竞赛官网: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("%s\n",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=61%4=1

分析:

#include
int main(){
	int n;
	int num[1000][3];
	scanf("%d",&n);
	for(int i=0;i<n;i++){//输入 
		scanf("%d %d %d",&num[i][0],&num[i][1],&num[i][2]);
	}
	for(int i=0;i<n;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("NO\n");
		}else{//flag==1表示前面的条件其中之一满足了 
			printf("YES\n");
		}
	}
	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<n;p++){
		int lenth=get_lenth(str);
		int i,j,flag=0;
		scanf("%d %d",&i,&j);
		for(int x=i-1;x<j;x++){
			if(str[x]==ch){
				for(int h=x;h<lenth;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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1296052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存