2016蓝桥杯c-c++省赛试题及答案解析
蓝桥杯第七届cc初赛试题及答案

蓝桥杯第七届cc初赛试题及答案蓝桥杯第七届CC初赛试题及答案1. 选择题1.1 以下哪个选项是C语言中定义数组的正确方式?A) int array[10];B) int array[];C) int [10] array;D) int array=10;答案:A1.2 以下哪个关键字用于定义一个结构体?A) structB) unionC) enumD) typedef答案:A1.3 在C语言中,哪个运算符用于取地址?A) *B) &C) %D) #答案:B2. 填空题2.1 在C语言中,关键字________用于定义一个函数。
答案:void2.2 如果一个变量的值是10,那么表达式sizeof(&variable)的结果是________。
答案:4(或根据系统不同,可能是8)2.3 在C语言中,________运算符用于定义一个指针。
答案:*3. 编程题3.1 编写一个C语言程序,计算并输出100以内所有偶数的和。
答案:```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}printf("Sum of even numbers from 1 to 100 is: %d\n", sum);return 0;}```3.2 编写一个C语言程序,实现字符串的反转。
答案:```c#include <stdio.h>#include <string.h>void reverseString(char *str) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}}int main() {char str[] = "Hello, World!";reverseString(str);printf("Reversed string: %s\n", str);return 0;}```4. 简答题4.1 请解释C语言中指针和引用的区别。
2016-蓝桥杯-省赛-C语言大学A组全部真题

第七届蓝桥杯大赛个人赛省赛真题(软件类)C/C++ 大学A组考生须知:●考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题。
●考试时间为4小时。
时间截止后,提交答案无效。
●在考试强制结束前,选手可以主动结束考试(需要身份验证),结束考试后将无法继续提交或浏览答案。
●选手可浏览自己已经提交的答案。
被浏览的答案允许拷贝。
●对同一题目,选手可多次提交答案,以最后一次提交的答案为准。
●选手切勿在提交的代码中书写“姓名”、“考号”,“院校名”等与身份有关的信息或其它与竞赛题目无关的内容,否则成绩无效。
●选手必须通过浏览器方式提交自己的答案。
选手在其它位置的作答或其它方式提交的答案无效。
●试题包含三种类型:“结果填空”、“代码填空”与“程序设计”。
结果填空题:要求选手根据题目描述直接填写结果。
求解方式不限。
不要求源代码。
把结果填空的答案直接通过网页提交即可,不要书写多余的内容。
代码填空题:要求选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。
把代码填空的答案(仅填空处的答案,不包括题面已存在的代码或符号)直接通过网页提交即可,不要书写多余的内容。
使用ANSI C/ANSI C++ 标准,不要依赖操作系统或编译器提供的特殊函数。
程序设计题目:要求选手设计的程序对于给定的输入能给出正确的输出结果。
考生的程序只有能运行出正确结果才有机会得分。
注意:在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。
选手的程序必须是通用的,不能只对试卷中给定的数据有效。
对于编程题目,要求选手给出的解答完全符合ANSI C++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。
代码中允许使用STL类库。
注意: main函数结束必须返回0注意: 所有依赖的函数必须明确地在源文件中#include <xxx>,不能通过工程设置而省略常用头文件。
所有源码必须在同一文件中。
2016蓝桥杯C语言算法题

return -1;
}
//判断是否有某个学生的学号或名字等于data,如果有,函数返回该学生在student数组中的序号,否则返回-
for(i=0;i<n;i++)
{
if(!strcmp(data,student[i].name)||!strcmp(data,student[i].num))
return i;
输入输出样例
样例输入
769
样例输出
7 6 9
*/
#include <stdio.h>
void getResult(int num)
{
//出口
if(num<10)
{
printf("%d ",num);
return ;
}
//递归
getResult(num/10);
printf("%d ",num%10);
}
main()
{
int n;
scanf("%d",&n);
getResult(n);
printf("\n");
return 0;
}
/*
算法训练 薪水计算
问题描述
编写一个程序,计算员工的周薪。薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么他/她的总收入等于工作时间乘以每小时的薪水。如果员工工作的时间在40 到50 个小时之间,那么对于前40 个小时,仍按常规方法计算;而对于剩余的超额部分,每小时的薪水按1.5 倍计算。如果员工工作的时间超过了50 个小时,那么对于前40 个小时,仍按常规方法计算;对于40~50 个小时之间的部分,每小时的薪水按1.5 倍计算;而对于超出50 个小时的部分,每小时的薪水按2 倍计算。请编写一个程序,输入员工的工作时间和每小时的薪水,然后计算并显示他/她应该得到的周薪。
2016蓝桥杯c语言c组试题及答案

2016蓝桥杯c语言c组试题及答案2016蓝桥杯C语言C组试题及答案一、选择题(每题2分,共10题,满分20分)1. 下列关于C语言的描述中,错误的是()。
A. C语言是一种高级编程语言B. C语言可以直接操作硬件C. C语言具有可移植性D. C语言支持面向对象编程答案:D2. 在C语言中,用于定义一个结构体的关键字是()。
A. structB. unionC. enumD. typedef答案:A3. 下列关于数组的描述中,正确的是()。
A. 数组的下标从1开始B. 数组的下标从0开始C. 数组的元素类型必须相同D. 数组的大小在定义后不能改变答案:C4. 在C语言中,用于实现循环结构的关键字有()。
A. for, while, do-whileB. for, if, switchC. for, while, switchD. if, while, do-while答案:A5. 下列关于指针的描述中,错误的是()。
A. 指针可以存储地址B. 指针可以存储值C. 指针可以作为函数的参数D. 指针可以指向函数答案:B6. 在C语言中,用于定义函数的关键字是()。
A. intB. voidC. returnD. function答案:B7. 下列关于C语言预处理指令的描述中,错误的是()。
A. #include用于包含头文件B. #define用于定义宏C. #if用于条件编译D. #else用于定义变量答案:D8. 在C语言中,用于实现文件操作的函数库是()。
A. stdio.hB. stdlib.hC. string.hD. math.h答案:A9. 下列关于C语言中变量作用域的描述中,正确的是()。
A. 全局变量可以被所有函数访问B. 局部变量可以被所有函数访问C. 静态变量的生命周期是程序的整个运行过程D. 静态变量的作用域是整个程序答案:A10. 在C语言中,用于实现字符串操作的函数库是()。
蓝桥杯c语言历年试题及答案

蓝桥杯c语言历年试题及答案蓝桥杯C语言历年试题及答案1. 题目:求两个整数的最大公约数(GCD)。
答案:可以使用辗转相除法(欧几里得算法)来求解两个整数的最大公约数。
2. 题目:编写一个函数,实现字符串的反转。
答案:可以使用双指针法,一个指针指向字符串的开头,另一个指向字符串的结尾,然后交换这两个指针所指向的字符,直到两个指针相遇。
3. 题目:计算一个整数数组中所有元素的和。
答案:遍历数组中的每个元素,并将它们累加到一个变量中。
4. 题目:判断一个整数是否是素数。
答案:如果一个数大于1,且除了1和它本身外,不能被其他自然数整除,则它是素数。
5. 题目:实现一个函数,计算一个整数的阶乘。
答案:可以使用递归或循环来实现。
递归方法中,n的阶乘等于n 乘以(n-1)的阶乘。
6. 题目:编写一个程序,实现字符串的去重。
答案:可以使用哈希表来存储已经出现过的字符,遍历字符串时,如果字符未出现过,则将其添加到结果字符串中。
7. 题目:实现一个函数,计算数组中每个元素出现的次数。
答案:可以使用哈希表来存储每个元素及其出现的次数。
8. 题目:编写一个程序,实现二分查找算法。
答案:二分查找算法的基本思想是将数组分为两部分,取中间元素与目标值比较,如果相等,则找到目标值;如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找。
9. 题目:实现一个函数,计算一个整数的各位数字之和。
答案:可以使用循环,每次取整数的最后一位数字,然后将其加到一个变量中,并将整数除以10。
10. 题目:编写一个程序,实现快速排序算法。
答案:快速排序算法是一种分治法策略,通过选择一个基准值,将数组分为两部分,一部分包含小于基准值的元素,另一部分包含大于基准值的元素,然后递归地对这两部分进行快速排序。
以上是蓝桥杯C语言历年试题及答案的示例。
蓝桥杯专科组c语言试题及答案

蓝桥杯专科组c语言试题及答案蓝桥杯专科组C语言试题及答案1. 单项选择题(1) 在C语言中,下列哪个选项是正确的字符串定义方式?A. char str[] = "Hello";B. char str[] = 'Hello';C. char str[] = {"Hello"};D. char str[] = "Hello";答案:A(2) 下列关于C语言函数的描述中,错误的是?A. 函数可以没有返回值。
B. 函数可以有多个返回值。
C. 函数可以有默认参数。
D. 函数可以有不定数量的参数。
答案:C2. 程序填空题请在空白处填入正确的代码,以实现以下功能:计算并输出1到100之间所有偶数的和。
#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}printf("Sum of even numbers from 1 to 100 is: %d\n", sum);return 0;}3. 编程题编写一个C语言程序,实现以下功能:接受用户输入的两个整数,输出它们的和。
#include <stdio.h>int main() {int num1, num2, sum;printf("Enter two integers: ");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("The sum is: %d\n", sum);return 0;}4. 简答题(1) 请简述C语言中指针的概念。
答案:在C语言中,指针是一种变量,它存储了另一个变量的内存地址。
蓝桥杯历年c语言试题及答案

蓝桥杯历年c语言试题及答案蓝桥杯历年C语言试题及答案1. 题目一:数组反转要求:编写一个函数,实现对整数数组的反转。
输入:一个整数数组及其长度。
输出:反转后的数组。
答案:```cvoid reverseArray(int arr[], int n) {int temp;for (int i = 0; i < n / 2; i++) {temp = arr[i];arr[i] = arr[n - i - 1];arr[n - i - 1] = temp;}}```2. 题目二:寻找最大数要求:给定一个整数数组,找出其中的最大数。
输入:一个整数数组及其长度。
输出:数组中的最大数。
答案:```cint findMax(int arr[], int n) {int max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > max) {max = arr[i];}}return max;}```3. 题目三:计算阶乘要求:编写一个函数,计算给定非负整数的阶乘。
输入:一个非负整数。
输出:该整数的阶乘。
答案:```clong long factorial(int n) {if (n == 0) return 1;long long fact = 1;for (int i = 1; i <= n; i++) {fact *= i;}return fact;}```4. 题目四:字符串反转要求:编写一个函数,实现对字符串的反转。
输入:一个字符串。
输出:反转后的字符串。
答案:```cvoid reverseString(char str[]) {int length = strlen(str);char temp;for (int i = 0; i < length / 2; i++) {temp = str[i];str[i] = str[length - i - 1];str[length - i - 1] = temp;}}```5. 题目五:判断素数要求:编写一个函数,判断给定的整数是否为素数。
2016蓝桥杯c-c++省赛试题及答案解析

2016蓝桥杯c-c++B组省赛试题及解析第一题煤球数目有一堆煤球,堆成三角棱锥形。
具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),。
.。
.如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字.答案:171700#include〈stdio。
h>int main(){int a[101]={0};for(int i = 1 ;i < 101 ; i ++)a[i] = a[i—1]+ i;int ans = 0;for(int j = 1 ; j 〈101 ; j ++)ans += a[j];printf("%d\n",ans);return 0;}第二题生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛.请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
答案:26#include<stdio。
h>int main(){int start,end;for(start = 1 ;start 〈236 ;start ++){for(end = start ;end 〈236 ;end ++ ){int sum = 0;for(int i = start;i <= end; i ++)sum += i;if(sum == 236){printf(”start :%d end : %d\n”,start,end);}}}return 0;}第三题凑算式B DEFA + ———+ -—-—--- = 10C GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2016蓝桥杯c-c++B组省赛试题及解析第一题煤球数目有一堆煤球,堆成三角棱锥形。
具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
答案:171700#include<stdio.h>int main(){int a[101] ={0};for(int i = 1 ; i < 101 ; i ++)a[i] = a[i-1] + i;int ans = 0;for(int j = 1 ; j < 101 ; j ++)ans += a[j];printf("%d\n",ans);return 0;}第二题生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
答案:26#include<stdio.h>int main(){int start,end;for(start = 1 ; start < 236 ; start ++){for( end = start ; end < 236 ; end ++ ){int sum = 0;for(int i = start; i <= end; i ++)sum += i;if( sum == 236){printf("start : %d end : %d\n",start,end);}}}return 0;}第三题凑算式B DEFA + --- + ------- = 10C GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
答案:29#include<stdio.h>int ans = 0;int num[10];bool visit[10];void Solve(){double sum = num[0] + (double)num[1] / num[2] + (double)(num[3]*100+num[4]*10+num[5])/(num[6]*100+num[7]*10+num[8]);if(sum == 10){ans ++;}}void dfs(int index){if(index == 9){Solve();return ;}for(int i = 1 ; i < 10 ; i ++){if(!visit[i]){visit[i] = true;num[index] = i;dfs(index+1);visit[i] = false;}}}int main(){dfs(0);printf("%d\n",ans);return 0;}第四题快速排序排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。
其思想是:先选一个“标尺”,用它把整个队列过一遍筛子,以保证:其左边的元素都不大于它,其右边的元素都不小于它。
这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
下面的代码是一种实现,请分析并填写划线部分缺少的代码。
#include <stdio.h>void swap(int a[], int i, int j){int t = a[i];a[i] = a[j];a[j] = t;}int partition(int a[], int p, int r){int i = p;int j = r + 1;int x = a[p];while(1){while(i<r && a[++i]<x);while(a[--j]>x);if(i>=j) break;swap(a,i,j);}______________________;return j;}void quicksort(int a[], int p, int r){if(p<r){int q = partition(a,p,r);quicksort(a,p,q-1);quicksort(a,q+1,r);}}int main(){int i;int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};int N = 12;quicksort(a, 0, N-1);for(i=0; i<N; i++) printf("%d ", a[i]);printf("\n");return 0;}注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
答案:swap(a,p,j)第五题抽签X星球要派出一个5人组成的观察团前往W星。
其中:A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
....那么最终派往W星的观察团会有多少种国别的不同组合呢?下面的程序解决了这个问题。
数组a[] 中既是每个国家可以派出的最多的名额。
程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBEFFFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF....(以下省略,总共101行)#include <stdio.h>#define N 6#define M 5#define BUF 1024void f(int a[], int k, int m, char b[]){int i,j;if(k==N){b[M] = 0;if(m==0) printf("%s\n",b);return;}for(i=0; i<=a[k]; i++){for(j=0; j<i; j++) b[M-m+j] = k+'A';______________________; //填空位置}}int main(){int a[N] = {4,2,2,1,1,3};char b[BUF];f(a,0,M,b);return 0;}仔细阅读代码,填写划线部分缺少的内容。
注意:不要填写任何已有内容或说明性文字。
答案f(a,k+1,m-j,b)或f(a,k+1,m-i,b)第六题方格填数如下的10个格子+--+--+--+| | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+(如果显示有问题,也可以参看【图1.jpg】)填入0~9的数字。
要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
图1.jpg答案是:1580#include <stdio.h>#include <math.h>int flag[3][4]; //表示哪些可以填数int mpt[3][4]; //填数bool visit[10];int ans = 0;void init() //初始化{int i,j;for(i = 0 ; i < 3 ; i ++)for(j = 0 ; j < 4 ; j ++)flag[i][j] = 1;flag[0][0] = 0;flag[2][3] = 0;}void Solve(){int dir[8][2] = { 0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1};int book = true;for(int i = 0 ; i < 3 ; i ++){for(int j = 0 ; j < 4; j ++){//判断每个数周围是否满足if(flag[i][j] == 0)continue;for( int k = 0 ; k < 8 ; k ++){int x,y;x = i + dir[k][0];y = j + dir[k][1];if(x < 0 || x >= 3 || y < 0 || y >= 4 || flag[x][y] == 0) continue;if(abs(mpt[x][y] - mpt[i][j]) == 1) book = false;}}}if(book) ans ++;}void dfs(int index){int x,y;x = index / 4;y = index % 4;if( x == 3){Solve();return;}if(flag[x][y]){for(int i = 0 ; i < 10 ; i ++){if(!visit[i]){visit[i] = true;mpt[x][y] = i;dfs(index+1);visit[i] = false;}}}else{dfs(index+1);}}int main(){init();dfs(0);printf("%d\n",ans);return 0;}第七题剪邮票如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
图1.jpg图2.jpg图3.jpg答案:116#include <stdio.h>#include <string.h>int mpt[3][4];int mpt_visit[3][4];int num[6];int have[13];int visit[13];int ans = 0;int Count = 0;void init(){int k = 1;for(int i = 0 ; i < 3 ; i ++)for(int j = 0 ; j < 4 ; j ++){mpt[i][j] = k;k ++;}}int dir[4][2] = {0,1,0,-1,-1,0,1,0};//判断五个数是否能连在一起void dfs_find(int x,int y){for(int i = 0 ; i < 4 ; i++){int tx,ty;tx = x + dir[i][0];ty = y + dir[i][1];if(tx < 0 || tx >= 3 || ty < 0 || ty >= 4) continue;if(have[mpt[tx][ty]] == 0 || mpt_visit[tx][ty])continue;mpt_visit[tx][ty] = 1;Count ++;dfs_find(tx,ty);}}void Solve(){int i;memset(have,0,sizeof(have));memset(mpt_visit,0,sizeof(mpt_visit));for(i = 1; i < 6 ; i ++) have[num[i]] = 1;for(i = 0 ; i < 12 ; i ++){int x,y;x = i / 4;y = i % 4;if(have[mpt[x][y]]){Count = 1;mpt_visit[x][y] =1;dfs_find(x,y);break;}}if(Count == 5){ans ++;}}//创建5个数的组合void dfs_creat(int index){if(index == 6){Solve();return;}for(int i = num[index-1] + 1; i < 13 ; i ++){if(!visit[i]){visit[i] = true;num[index] = i;dfs_creat(index+1);visit[i] = false;}}}int main(){init();dfs_creat(1);printf("%d\n",ans);return 0;}第八题四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。