C语言大赛题目精选(带答案)
- 格式:docx
- 大小:35.65 KB
- 文档页数:15
C语言程序设计大赛题目和答案在这篇文章中,我们将介绍一些C语言程序设计大赛的题目和对应的答案。
希望通过这些题目和答案的展示,能够对大家在C语言程序设计方面的知识有所帮助。
题目一:计算圆的周长和面积编写一个C程序,计算给定半径的圆的周长和面积,并输出结果。
```c#include <stdio.h>int main() {double radius, perimeter, area;printf("请输入圆的半径:");scanf("%lf", &radius);perimeter = 2 * 3.14159 * radius;area = 3.14159 * radius * radius;printf("圆的周长为:%.2lf\n", perimeter);printf("圆的面积为:%.2lf\n", area);return 0;}```题目二:查找数组中的最大值编写一个C程序,从给定的整型数组中查找并输出最大的元素。
```c#include <stdio.h>#define MAX_SIZE 100int main() {int array[MAX_SIZE], size, i;int max;printf("请输入数组的大小:");scanf("%d", &size);printf("请输入数组的元素:");for(i = 0; i < size; i++) {scanf("%d", &array[i]);}max = array[0];for(i = 1; i < size; i++) {if(array[i] > max) {max = array[i];}printf("数组中的最大值为:%d\n", max);return 0;}```题目三:判断素数编写一个C程序,判断给定的整数是否为素数。
C语言程序设计竞赛题及其答案数学与统计学院第三届计算机程序设计竞赛题竞赛需知:1、答案必须写在答题纸上。
2、程序采用C/JAVA/VB/VFP语言实现均可。
3、考虑到各种因素,程序的键盘输入和结果输出可以用伪代码或者自然语言表示。
但是必须说明输入变量和输出变量。
4、题目最好能用完整、正确的语言程序来解决问题,如确实无法编写完整语言程序的,可以写出程序主要框架和流程,必要时可以用伪代码或者自然语言描述算法(程序)。
一、玫瑰花数(20分)如果一个四位数等于它的每一位数的4次方之和,则称为玫瑰花数。
例如:++1634+=,4^44^34^64^1编程输出所有的玫瑰花数。
#includevoid main(){int i,j,k,l,m;for(i=999;i<=9999;i++){j=i/1000;k=i%10;l=i/100-10*j;m=i/10-100*j-10*l;if(i==j*j*j*j+k*k*k*k+l*l*l*l+m*m*m*m) printf("%d\n",i);}}二、菱形图案(20分)对给定的奇数n,编程打印菱形图案。
输入样例:7输出样例:*************************#include#includevoid main(){int i,j,k;int n;scanf("%d",&n);for(i=0;i<n;i++)< p="">{for(j=0;j<="" p="">printf("");for(k=0;k<n-2*j;k++)< p="">printf("*");printf("\n");}}三、钻石奖励(20分)海盗们决定用“投环套物”的方式来奖励最近一次行动中贡献最大的人。
奥赛c语言题库及答案奥赛(奥林匹克竞赛,简称OI)中的C语言题库及答案通常包含了各种难度的编程题目,旨在测试参赛者的编程能力、算法设计能力以及问题解决能力。
以下是一些典型的C语言题目和相应的解题思路或答案。
# 题目1:求最大公约数题目描述:给定两个正整数a和b,求它们的最大公约数(GCD)。
解题思路:使用辗转相除法(欧几里得算法)来求解。
```c#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}int main() {int a, b;scanf("%d %d", &a, &b);printf("%d", gcd(a, b));return 0;}```# 题目2:字符串反转题目描述:给定一个字符串,编写一个程序来反转它。
解题思路:使用双指针法,从两端向中间遍历并交换字符。
```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[100];scanf("%s", str);reverseString(str);printf("%s", str);return 0;}```# 题目3:二分查找题目描述:在一个已排序的数组中,使用二分查找法找出一个特定元素的位置。
精选全文完整版(可编辑修改)c语言面试题目及最佳答案1、描述⼀下gcc的编译过程?gcc编译过程分为4个阶段:预处理、编译、汇编、链接。
预处理:头⼀件包含、宏替换、条件编译、删除注释编译:主要进⼀词法、语法、语义分析等,检查⼀误后将预处理好的⼀件编译成汇编⼀件。
汇编:将汇编⼀件转换成⼀进制⼀标⼀件链接:将项⼀中的各个⼀进制⼀件+所需的库+启动代码链接成可执⼀⼀件2、内存的最⼀存储单位以及内存的最⼀计量单位分别是?内存的最⼀存储单位为⼀进制位,内存的最⼀计量单位字节3、#include<> 与#include ""的区别?include<>到系统指定⼀录寻找头⼀件,#include ""先到项⼀所在⼀录寻找头⼀件,如果没有找再到系统指定的⼀录下寻找4、描述⼀下变量的命名规则变量名有字⼀、数值、下划线组成,但不能以数值开头5、变量的声明与定义有啥区别?声明变量不需要建⼀存储空间,变量的定义需要建⼀存储空间6、谈谈c语⼀中有符号和⼀符号的区别?有符号:数据的最⼀位为符号位,0表示正数,1表示负数⼀符号:数据的最⼀位不是符号位,⼀是数据的⼀部分7、谈谈计算机中补码的意义统⼀了零的编码将符号位与其他位统⼀处理将减法运算转换成加法运算8、谈谈数组的特点同⼀个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的9、数组的分类数组的分类主要是:静态数组、动态数组两类。
静态数组:类似int arr[5];在程序运⼀就确定了数组的⼀⼀,运⼀过程不能更改数组的⼀⼀。
动态数组:主要是在堆区申请的空间,数组的⼀⼀是在程序运⼀过程中确定,可以更改数组的⼀⼀。
10、描述⼀下⼀维数组的不初始化、部分初始化、完全初始化的不同点不初始化:如果是局部数组数组元素的内容随机如果是全局数组,数组的元素内容为0 部分初始化:未被初始化的部分⼀动补0完全初始化:如果⼀个数组全部初始化可以省略元素的个数数组的⼀⼀由初始化的个数确定11、谈谈数组名作为类型、作为地址、对数组名取地址的区别?数组名作为类型:代表的是整个数组的⼀⼀数组名作为地址:代表的是数组⼀元素的地址对数组名取地址:代表的是数组的⼀地址12、谈谈你对⼀维数组在物理上以及逻辑上的数组维度理解⼀维数组在逻辑上是⼀维的,在物理上是⼀维的13、描述⼀下函数的定义与函数的声明的区别函数定义:是指对函数功能的确⼀,包括指定函数名、函数类型、形参及其类型、函数体等,它是⼀个完整的、独⼀的函数单位。
C语言竞赛练习题11.求最大数问555555的约数中最大的三位数是多少?*问题分析与算法设计根据约数的定义,对于一个整数N,除去1和它自身外,凡能整除N的数即为N的约数。
因此,最简单的方法是用2到N-1之间的所有数去除N,即可求出N的全部约数。
本题只要求取约数中最大的三位数,则其取值范围可限制在100到999之间。
*程序说明与注释#include<stdio.h>void main(){long i;int j;printf("Please input number:");scanf("%ld",&i);for(j=999;j>=100;j--)if(i%j==0){printf("The max factor with 3 digits in %ld is:%d,\\n",i,j);break;}}*运行结果输入:555555输出:The max factor with 3 digits in 555555 is:7772.高次方数的尾数求13的13次方的最后三位数*问题分析与算法设计解本题最直接的方法是:将13累乘13次方截取最后三位即可。
但是由于计算机所能表示的整数范围有限,用这种“正确”的算法不可能得到正确的结果。
事实上,题目仅要求最后三位的值,完全没有必要求13的13次方的完整结果。
研究乘法的规律发现:乘积的最后三位的值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。
利用这一规律,可以大大简化程序。
*程序说明与注释#include<stdio.h>void main(){int i,x,y,last=1; /*变量last保存求X的Y次方过程中的部分乘积的后三位*/printf("Input X and Y(X**Y):");scanf("%d**%d",&x,&y);for(i=1;i<=y;i++) /*X自乘Y次*/last=last*x%1000; /*将last乘X后对1000取模,即求积的后三位*/ printf("The last 3 digits of %d**%d is:%d\\n",x,y,last%1000); /*打印结果*/}*运行结果Input X and Y(X**Y):13**13The last 3 digits of 13**13 is:253Input X and Y(X**Y):13**20The last 3 digits of 13**20 is:8013.借书方案知多少小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?*问题分析与算法设计本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。
c语言奥赛高中组试题及答案1. 题目一:字符串反转要求:编写一个C语言函数,实现字符串的反转。
```cvoid reverseString(char *str) {int length = 0;while (str[length] != '\0') {length++;}for (int i = 0; i < length / 2; i++) {char temp = str[i];str[i] = str[length - i - 1];str[length - i - 1] = temp;}}```答案:函数`reverseString`接受一个字符数组`str`作为参数,首先计算字符串的长度,然后使用一个循环交换字符串的首尾字符,直到中间位置。
2. 题目二:计算数组中的最大值要求:给定一个整数数组,编写一个C语言函数,找出并返回数组中的最大值。
```cint findMax(int arr[], int size) {int max = arr[0];for (int i = 1; i < size; i++) {if (arr[i] > max) {max = arr[i];}}return max;}```答案:函数`findMax`接受一个整数数组`arr`和数组的大小`size`作为参数,初始化最大值为数组的第一个元素,然后遍历数组,比较并更新最大值。
3. 题目三:判断回文数要求:编写一个C语言函数,判断一个整数是否是回文数。
```cint isPalindrome(int x) {int original = x;int reversed = 0;while (x > 0) {int digit = x % 10;reversed = reversed * 10 + digit;x /= 10;}return original == reversed;}```答案:函数`isPalindrome`接受一个整数`x`作为参数,通过反转整数的每一位来创建一个新的整数`reversed`,然后比较原始整数和反转后的整数是否相等。
c语言程序设计比赛试题及答案一、选择题(每题2分,共20分)1. 下列哪个选项是C语言中的合法整数常量?A. 0x1AB. 01AC. 0b1010D. 1.23答案:A2. C语言中,哪个关键字用于定义一个函数?A. structB. intC. voidD. return答案:B3. 下列哪个选项是C语言中正确的注释方式?A. // 这是注释B. /* 这是注释 */C. //* 这是注释D. /* 这是注释答案:B4. C语言中,哪个运算符用于求两个数的和?A. +B. -C. *D. /答案:A5. 在C语言中,哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A6. C语言中,哪个关键字用于定义一个枚举类型?A. structB. unionC. enumD. typedef答案:C7. 下列哪个选项是C语言中合法的变量名?A. 2variableB. variable2C. _variableD. variable$2答案:B8. 在C语言中,哪个关键字用于定义一个指针?A. intB. floatC. charD. *答案:D9. C语言中,哪个函数用于将字符串复制到另一个字符串?A. strcpyB. strcatC. strcmpD. strlen答案:A10. 在C语言中,哪个函数用于计算字符串的长度?A. strcpyB. strcatC. strcmpD. strlen答案:D二、填空题(每题2分,共20分)1. C语言中,用于定义一个整型数组的关键字是________。
答案:int2. C语言中,用于定义一个字符型数组的关键字是________。
答案:char3. C语言中,用于定义一个浮点型数组的关键字是________。
答案:float4. C语言中,用于定义一个双精度浮点型数组的关键字是________。
答案:double5. C语言中,用于定义一个字符串的关键字是________。
第一届全国软件专业人才设计与开发大赛题目选拔试题暨答案2010-12-29 22:58一、基础篇(50分)1、单选(每题1分,10小题共10分)1).执行下列程序中的输出语句后,x的值是______.main(){int x;printf(“%d\n”,(x=5*6,x*2,x+20));}A)30 B)60 C)50 D)802).在C语言中,下列选项属于合法的长整型常数的是_______.A)0L B)1234567 C)0.0234567 D)3.14159e33).若有定义:int a,b;char x,y;并有以下输入数据:14 22 XxYy(回车)则能给a赋整数14,给b赋整数22,给x赋字符x,给y赋字符y的正确程序段是________.A)scanf(“%d %d”,&a,&b);x=getchar();y=getchar();B)scanf(“%d%d %c %c”,&a,&b,&x,&x,&y,&y);C)scanf(“%d %d %c%c%c %c”,&a,&b,&x,&x,&y,&y);D)scanf(“%d%d %c %c”,&a,&b,&x,&y);4).当c的值不为0时,下列选项中能正确将c的值赋给变量a、b的是_______.A)c=b=a;B)(a=c)‖(b=c);C)(a=c)&&(b=c);D)a=c=b;5).语句printf(“%d\n”,strlen(“asd\n\x12\1\\”));的输出结果是______.A)9 B)11 C)7 D)86).下列程序的运行结果是________.main(){ int y=10;do { y- -;} while(- -y);printf(“%d\n”,y- -);}A)-1 B)1 C)8 D)07).阅读下面程序,该程序段的功能是_____.#include <stdio.h>main(){ int c[ ]={23,1,56,234,7,0,34},i,j,t;for(i=1;i<7;i++){ t=c[i];j=i-1;while(j>=0&&t>c[j]){ c[j+1]=c[j];j- -;}c[j+1]=t;}for(i=0;i<7;i++)printf(“%d ”,c[i]);putchar('\n');}A)对数组元素的升序排列B)对数组元素的降序排列C)对数组元素的倒序排列D)对数组元素的随机排列8).有如下程序:#define f(x)x*xmain(){ int i;i=f(4+4)/(2+2);printf(“%d\n”,i);}该程序执行后的输出结果是_______.A)28 B)21 C)16 D)49).下列程序的运行结果是_______.main(){ unsigned c1=0xff,c2=0x00;c1=c2|c1>>2;c2=c1^0236;printf(“%x,%x\n”,c1,c2);}A)0x3f,0XA1 B)3f,A1 C)ffff,61 D)3f,a110).有以下程序:#include <stdio.h>main(){ FILE *fp;int i=20,j=30,k,n;fp=fopen(“d1.dat”,“w”);fprintf(fp,“%d\n”,i);fprintf(fp,“%d\n”,j);fclose(fp);fp=fopen(“d1.dat”,“r”);fscanf(fp,“%d%d”,&k,&n);printf(“%d %d\n”,k,n);fclose(fp);}该程序运行后的输出结果是_______.A)20 30 B)20 50 C)30 50 D)30 20第一届全国软件专业人才设计与开发大赛题目选拔试题暨答案2010-12-29 23:002、多选(每题2分,共10题,共20分,错选,漏选均不得分)1).下列符号串中,不属于C语言合法标识符的有_____.A)_1_2_3 B)a-b-c C)int D)9cd2).下列选项中,没有构成死循环的程序段有_____.A)int i=100;B)for(;;)while(1){ i=i%100+1;if(i>=100)break;}C)int k=0;D)int s=36;do { ++k;} while(k>=0);while(s);——s;3).下列判断正确的是_______.(知识点10.3)A)char *a=“china”;等价于char *a;*a=“china”;B)char str[6]={“china”};等价于char str[ ]= {“china”};C)char *s=“china”;等价于char *s;s=“china”;D)char c[4]=“abc”,d[4]=“abc”;等价于char c[4]=d[4]=“abc”;4).设有如下定义:char *s[2]={“abcd”,“ABCD”};则下列说法正确的有_____.A)s数组元素的值分别是“abcd”和“ABCD”两个字符串的首地址B)s是指针数组名,它含有两个元素分别指向字符型一维数组C)s数组的两个元素分别存放的是含有四个字符的一维字符数组中的元素D)s数组的两个元素中分别存放了字符'a'和'A'的地址5).若有以下说明:int a[5][9];则下列选项中对数组元素a[i][j]的引用错误的有_______.(0<=i<4,0<=j<9)A)*(&a[0][0]+9*i+j)B)*(a+i)(j)C)*(*(a+i)+j)D)*(a[i]+j)6).若有定义:char *st=“how are you!”;下面程序段正确的有_____.(知识点:7.3)A)char a[11],*p;strcpy(p=a+1,&st[4]);B)char a[11];strcpy(++a,st);C)char a[11];strcpy(a,st);D)char a[ ],*p;strcpy(p=&a[1],st+2);7).设有以下说明语句:Struct stu{ int a;float b;}stutype;则下列叙述正确的有_______.A)struct是结构体类型的关键字B)struct stu是用户定义的结构体类型C)stutype是用户定义的结构体类型名D)a和b都是结构体成员名8).设有定义语句:int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,下列选项中能完成次操作的语句有_______.A)for(i=0;i<6;i++)printf(“%2d”,*(p++));B)for(i=0;i<6;i++)printf(“%2d”,*(p+i));C)for(i=0;i<6;i++)printf(“%2d”,*p++);D)for(i=0;i<6;i++)printf(“%2d”,(*p)++);9).下列叙述正确的有_____.A)函数可以嵌套定义,但不能嵌套调用B)函数可以嵌套调用,也可以嵌套定义C)函数不可以嵌套定义,但可以递归调用D)函数可以嵌套调用,但不能嵌套定义10).下列选项中可以将变量n清零的表达式有_______.A)n=n&~n B)n=n&0 C)n=n^n D)n=n|n第一届全国软件专业人才设计与开发大赛题目选拔试题暨答案2010-12-29 23:03二、智力题(30分)1、单选题:(每小题4分,5小题,共20分)1)给你8颗小石头和一架托盘天平。
c语言奥赛高中组试题及答案1. 阅读以下C语言程序代码,并回答后面的问题。
```c#include <stdio.h>int main() {int a = 5, b = 10, c;c = a + b;printf("%d", c);return 0;}```(1) 程序的输出结果是什么?(2) 如果将变量`a`的值改为`3`,程序的输出结果会如何变化?2. 以下C语言代码段中,函数`sum`的功能是什么?```cint sum(int x, int y) {return x + y;}```(1) 函数`sum`接受几个参数?(2) 函数`sum`的返回类型是什么?3. 考虑下面的C语言代码,分析并回答问题。
```c#include <stdio.h>int main() {int i;for (i = 0; i < 5; i++) {printf("%d ", i);}return 0;}```(1) 循环将执行多少次?(2) 每次循环中`printf`函数输出的值是什么?4. 阅读以下C语言代码,并回答问题。
```c#include <stdio.h>int main() {char ch = 'A';printf("%c", ch);return 0;}```(1) 程序的输出结果是什么?(2) 如果将字符变量`ch`的值改为小写字母`a`,程序的输出结果会如何变化?5. 以下C语言代码段中,`if`语句的作用是什么?```cint a = 10;if (a > 5)printf("a is greater than 5");```(1) 当变量`a`的值大于5时,会发生什么?(2) 如果将变量`a`的值改为`3`,`if`语句还会执行吗?答案:1. (1) 程序的输出结果是15。
c语言考试题及答案以及解析一、选择题1. 下列哪个选项是C语言中的关键字?A. intB. floatC. doubleD. string答案:A解析:在C语言中,关键字是保留的词汇,用于表示特定的语法结构。
int是C语言中用于声明整型变量的关键字。
2. C语言中,哪个运算符用于计算两个数的乘积?A. +B. -C. *D. /答案:C解析:在C语言中,乘法运算符是星号(*),用于计算两个数的乘积。
二、填空题1. 在C语言中,以下代码片段的输出结果是:```cint main() {int a = 5;printf("%d", a);return 0;}```输出结果为:_________答案:5解析:代码中的printf函数用于输出变量a的值,a被初始化为5,因此输出结果为5。
2. 下列代码段中,变量b的值是多少?```cint main() {int a = 10, b;b = a + 5;printf("%d", b);return 0;}```变量b的值为:_________答案:15解析:变量b被赋值为变量a加上5,由于a的值为10,所以b的值为15。
三、简答题1. 简述C语言中的数组是什么,并给出一个数组的声明和初始化的例子。
答案:C语言中的数组是一种数据结构,用于存储相同类型的多个元素。
数组的声明需要指定元素的类型和数组的长度。
数组的初始化可以在声明时完成。
解析:例如,声明一个整型数组并初始化:```cint numbers[5] = {1, 2, 3, 4, 5};```2. 解释C语言中的函数是什么,并给出一个简单函数的定义和调用的例子。
答案:C语言中的函数是一段具有特定功能的代码块,可以接收参数,并返回一个值。
函数的定义包括函数的返回类型、名称、参数列表和函数体。
函数的调用是使用函数名称和必要的参数来执行函数。
解析:例如,定义一个函数来计算两个数的和,并调用它:```cint add(int x, int y) {return x + y;}int main() {int result = add(5, 10);printf("%d", result);return 0;}```四、编程题1. 编写一个C语言程序,实现输入两个整数,输出它们的和。
C语言程序设计大赛题目和答案/*-------------------第一题某人到商店购物,身上有钱m元,商店里有商品n件,如果只能买1件或2件商品,且想一次性把钱花完,编程求是否可行?输入数据:第一行输入两个整数n和m(1≤n≤30000,1≤m≤10000),下面n行中每一行都是一个整数a,表示商店中商品的价格,1≤a≤10000。
输出数据:如果可以恰好用m元钱买到1件或者是2件东西,则第一行输出YES,随后的一行或两行输出所买商品的价格;否则输出NO。
输入样例:5 201371318输出样例:YES713-----------------------*/#include <stdio.h>#include <malloc.h>void main(){int m, n;int *a;int i,j;scanf("%d%d",&n,&m); //输入商品数及钱的多少a=(int*)malloc(n*sizeof(int));for(i=0;i<n;i++) scanf("%d",a+i); //输入每件商品的价格for(i=0;i<n;i++)if(a[i]==m) {printf("%s\n%d\n","YES",a[i]); break;}elsefor(j=i+1;j<n;j++)if(a[i]+a[j]==m){printf("%s\n%d\n%d\n","YES",a[i],a[j]); return;}if (i==n) printf("\nNO\n");}/*----------------------第二题写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。
5有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡是数到3的人退出圈子,问最后留下的是原来的几号的那个人。
#include <stdio.h> void main(){int n, i, k, m;int array[50], *p;printf(M please input the number of persons: n = \n H);scanf("%d", &n);p = array;for (i 二0; i v n; i++)*(p+i) = i+1;i = 0; //i为每次循环计数变量k = 0; // k为按1,2,3报数时的计数变量m = 0; // m为退岀人数计数变量while(m < n-l) 〃当退出人数比n-1少时执行循环体{if( *(p+i) != 0 )k++;if(k == 3) //对退出的人编号置为0{*(p+i) = 0;k 二0;m++;}i++;if(i == n)i = 0;}while(*p == 0)p++; printf("The last one isNo. %d\n",*p);6编写一个函数求字符串的长度。
并在main 函数中输入字符串,并输出其长度。
#include <stdio.h> void main(){int strLen(char *str);intlen;char string[20];printf("please input a string: \n M);scanf(”%s”, string);len = strLen(string);printf("The length of the string is: %2d\n", len);}int strLen(char *str){char *p;int count = 0;p = str;while(水p){P++; count++;}return (count);}7有一个字符串,包含n个字符。
C语言程序设计竞赛试题参考答案第七届“蓝桥杯”全国软件与信息技术专业人才大赛清远职业技术学院选拔赛《C语言程序设计》参考答案1.标题:年龄巧合(填空题,20分)答案: 19882.标题:海盗分金币(填空题,20分)答案: 31293.标题:啤酒和饮料(填空题,20分)答案: 114.标题:兔子繁殖(程序填空,20分)(1) i=1;i<=38;i++(2) f3=f1+f2(3) f1=f2(1) f2=f35.题目:杨辉三角(编程题 20分)代码如下:#include#includeint main(){int i,j,k,n;static int a[50][50];printf("Input lines\",&n);scanf("%d",&n);a[1][1]=a[2][1]=a[2][2]=1;for(i=3;i<=n;i++)for(j=1;j<=i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<=n;i++){for (k=1;k<=n-i;k++)printf(" ");for(j=1;j<=i;j++)printf("%2d ",a[i][j]);printf("\");}getch();return 1;}1-3题参考代码1、代码如下:#includeint main(void){int a, b, c, d;int age;int year;for(a=0; a<=2; a++){for(b=0; b<=9; b++){for(c=0; c<=9; c++){for(d=0; d<=9; d++){age = a+b+c+d;year = 2014-(a*1000+b*100+c*10+d);if(age == year){printf("%d%d%d%d ",a,b,c,d); }}}}}2、代码如下:#includeint main(void){for(int i=1; i<100000; i++){ int x = i;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if((x+1)%5 != 0) continue;x = (x+1)/5 * 4;if(x>=1000 &&x<=1999)printf("%d",i);}return 1;}return 1;}3、代码如下:#includeint main(void){int x,y;for(x=0; x<=100; x++){for(y=0; y<=100; y++){if(23*x + 19*y == 823)if(x<y)< bdsfid="173" p=""></y)<> printf("%d %d\",x, y);}}return 1;}。
c 竞赛试题及答案本文提供了 C 竞赛的试题及其对应的答案。
通过这些试题的学习和答案的分析,读者可以更好地理解 C 竞赛的考察内容和解题思路,提高自己的编程水平。
试题一:以下是一个 C 语言的函数,请写出该函数的功能和完整代码:```cint calculate(int a, int b) {int result = a * a + b * b;return result;}```答案一:上述函数的功能是计算两个整数的平方和。
下面是完整的代码:```c#include <stdio.h>int calculate(int a, int b) {int result = a * a + b * b;return result;}int main() {int a = 3;int b = 4;int sum = calculate(a, b);printf("The sum of squares is %d\n", sum);return 0;}```试题二:以下是一个 C 语言的代码,请写出该代码的输出结果:```c#include <stdio.h>int main() {int a = 5;int b = 10;int c = a + b;printf("a = %d\n", a);printf("b = %d\n", b);printf("c = %d\n", c);return 0;}```答案二:上述代码的输出结果为:```a = 5b = 10c = 15```试题三:以下是一个 C 语言的代码,请写出该代码的输出结果:```c#include <stdio.h>int main() {int a = 10;if (a > 5) {printf("Hello\n");} else {printf("World\n");}return 0;}```答案三:上述代码的输出结果为:```Hello```试题四:以下是一个 C 语言的代码,请写出该代码的输出结果:```c#include <stdio.h>int main() {int i;for (i = 0; i < 5; i++) {printf("%d ", i);}return 0;}```答案四:上述代码的输出结果为:```0 1 2 3 4```通过以上试题及其对应的答案,我们可以看到 C 竞赛的考察范围涵盖了基本语法、函数定义、条件语句和循环语句等内容。
一单项选择题1.(A)是构成C语言程序的基本单位。
A、函数B、过程C、子程序D、子例程2.C语言程序从 C开始执行。
A) 程序中第一条可执行语句 B) 程序中第一个函数C) 程序中的main函数 D) 包含文件中的第一个函数3、以下说法中正确的是(C)。
A、C语言程序总是从第一个定义的函数开始执行B、在C语言程序中,要调用的函数必须在main( )函数中定义C、C语言程序总是从main( )函数开始执行D、C语言程序中的main( )函数必须放在程序的开始部分4.下列关于C语言的说法错误的是(B)。
A) C程序的工作过程是编辑、编译、连接、运行B) C语言不区分大小写。
C) C程序的三种基本结构是顺序、选择、循环D) C程序从main函数开始执行5.下列正确的标识符是(C)。
A.-a1B.a[i]C.a2_iD.int t5~8题为相同类型题考点:标识符的命名规则(1)只能由字母、数字、下划线构成(2)数字不能作为标识符的开头(3)关键字不能作为标识符选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3)6.下列C语言用户标识符中合法的是( B)。
A)3ax B)x C)case D)-e2 E)union选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1);7.下列四组选项中,正确的C语言标识符是(C)。
A) %x B) a+b C) a123 D) 123选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2)8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。
A、print _3d db8 aBcB、I\am one_half start$it 3paiC、str_1 Cpp pow whileD、Pxq My->book line# His.age选项B中的“\”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while 为关键字,不满足(3)9.C语言中的简单数据类型包括(D)。
C语言一、选择题(第题2分,共20分)1.一个C程序的执行是从 A 。
A) 本程序的main函数开始,到main函数结束B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C) 本程序文件的第一个函数开始,到本程序main函数结束D) 本程序的main函数开始,到本程序文件的最后一个函数结束2.若x、i、j、k都是int型变量,则计算下面表达式后,x的值为 C 。
x=(i=4,j=16,k=32)A) 4 B) 16 C) 32 D) 523.设C语言中,一个int型数据在内存中占2个字节,则unsigned int 型数据的取值范围为 C 。
A) 0~255 B) 0~32767 C) 0~65535 D) 0~21474836474.设有说明:char w; int x; float y; double z;则表达式w*x+z-y值的数据类型为 D 。
A) float B) char C) int D) double5. putchar函数可以向终端输出一个D 。
A) 整型变量表达式 B) 实型变量值C) 字符串 D) 字符或字符型变量值6. printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。
如果字符串长度大于5,则输出按方式 B ;如果字符串长度小于5,则输出按方式 C 。
A) 从左起输出该字符串,右补空格 B) 按原字符长从左向右全部输出C) 右对齐输出该字符串,左补空格 D) 输出错误信息7.判断char型变量ch是否为大写字母的正确表达式是 C 。
A) ‘A’<=ch<=‘Z’ B) (ch>=‘A’)&(ch<=‘Z’)C) (ch>=‘A’)&&(ch<=‘Z’) D) (‘A’<= ch)AND(‘Z’>= ch)8.已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是 B 。
c语言试题目及答案1. 选择题1) 在C语言中,下面哪个选项是无效的标识符?A. myVarB. _varC. 3varD. var3正确答案:C. 3var2) 下面哪行代码可以正确输出字符串 "Hello, World!"?A. printf("Hello, World!");B. print("Hello, World!");C. console.log("Hello, World!");D. cout << "Hello, World!";正确答案:A. printf("Hello, World!");3) 在C语言中,下面哪个数据类型可以用来存储小数值?A. intB. charC. floatD. bool正确答案:C. float2. 填空题1) 下划线是在C语言中用作什么目的?答案:下划线是用来连接多个单词以创建一个标识符。
2) 在C语言中,用于存储单个字符的数据类型是__char__。
3) C语言中,用于声明变量的关键字是__int__。
3. 程序分析题给定以下C语言程序,请写出代码中缺失的部分:```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两数之和为:%d", sum);return 0;}```程序分析:上述代码是一个简单的C语言程序,用于接收用户输入的两个整数,并计算它们的和。
缺失部分为```printf("两数之和为:%d", sum);```中的换行符。
c语言程序设计大赛初赛试题及答案一、选择题(每题2分,共10分)1. 下列哪个选项是C语言中的关键字?A. intB. floatC. stringD. array答案:A2. C语言中,用于定义一个整型变量的关键字是?A. intB. charC. floatD. double答案:A3. 下列哪个选项不是C语言的标准输入输出函数?A. printfB. scanfC. coutD. getchar答案:C4. 在C语言中,下面哪个选项是正确的字符串定义?A. char str[] = "Hello";B. char str[] = {"Hello"};C. char str[] = 'Hello';D. char str[] = "Hello";答案:A5. 下列哪个选项是C语言中正确的注释方式?A. // This is a commentB. /* This is a comment */C. //* This is a commentD. /* This is a comment */答案:B二、填空题(每题3分,共15分)1. 在C语言中,定义一个整型数组可以使用关键字_________。
答案:int2. C语言中,_________函数用于输出字符串。
答案:printf3. C语言中,_________函数用于从标准输入读取一个字符。
答案:getchar4. C语言中,_________关键字用于定义一个函数。
答案:void5. C语言中,_________关键字用于定义一个结构体。
答案:struct三、编程题(每题10分,共20分)1. 编写一个函数,计算并返回两个整数的和。
```cint add(int a, int b) {return a + b;}```答案:```cint add(int a, int b) {return a + b;}```2. 编写一个程序,读取用户输入的两个整数,然后输出它们的乘积。
第1题歌手大赛问题题目:青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分。
3种方法:分别要求使用到排序,数组,函数,指针。
分析:这道题的核心程序是排序,将评委打的10个分数利用数组按增序(或降序)排列,计算数组中除了第一个和最后一个分数以外的数以外的数的平均分答案:#include<stdio.h>double Aver(int p[],int count) //求出结果,p为整型数组,count为数组大小{double result=0;for(inti=0;i<count-1;i++) //排序for(int j=i;j<count;j++){if(p[i]<p[j]){int temp=p[i];p[i]=p[j];p[j]=temp;}}printf("评委打分按顺序:");for(int m=0;m<10;m++) //显示排序后结果printf("%d ",p[m]);printf("\n");for(int k=1;k<count-1;k++) //求出去掉首尾的平均分result+=p[k];result/=count-2;return result;}void main(){printf("请输入10组评分:\n");int p[10];inti;for(i=0;i<10;i++) //输入评分{printf("输入评委%d打分:",i+1);scanf("%d",&p[i]);}double result=Aver(p,10); //计算平均分printf("\n平均分为%5.2f\n",result);}1.11.打鱼还是晒网中国有句俗语叫“三天打鱼两天晒网”。
某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
*问题分析与算法设计根据题意可以将解题过程分为三步:1)计算从1990年1月1日开始至指定日期共有多少天;2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;3)根据余数判断他是在“打鱼”还是在“晒网”;若余数为1,2,3,则他是在“打鱼”否则是在“晒网”在这三步中,关键是第一步。
求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。
闰年的方法可以用伪语句描述如下:如果((年能被4除尽且不能被100除尽)或能被400除尽)则该年是闰年;否则不是闰年。
C语言中判断能否整除可以使用求余运算(即求模)*程序与程序注释#include<stdio.h>int days(struct date day);struct date{int year;int month;int day;};void main(){struct date today,term;intyearday,year,day;printf("Enter year/month/day:");scanf("%d%d%d",&today.year,&today.month,&today.day); /*输入日期*/ term.month=12; /*设置变量的初始值:月*/term.day=31; /*设置变量的初始值:日*/for(yearday=0,year=1990;year<today.year;year++){term.year=year;yearday+=days(term); /*计算从1990年至指定年的前一年共有多少天*/}yearday+=days(today); /*加上指定年中到指定日期的天数*/ day=yearday%5; /*求余数*/if(day>0&&day<4) printf("he was fishing at that day.\\n"); /*打印结果*/ elseprintf("He was sleeping at that day.\\n");}int days(struct date day){staticintday_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/{0,31,29,31,30,31,30,31,31,30,31,30,31,},};inti,lp;lp=day.year%4==0&&day.year%100!=0||day.year%400==0;/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/for(i=1;i<day.month;i++) /*计算本年中自1月1日起的天数*/day.day+=day_tab[lp];returnday.day;}*运行结果Enter year/month/day:1991 10 25He was fishing at day.Enter year/month/day:1992 10 25He was sleeping at day.Enter year/month/day:1993 10 25He was sleeping at day2.12.抓交通肇事犯一辆卡车违反交通规则,撞人后逃跑。
现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。
甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。
请根据以上线索求出车号。
*问题分析与算法设计按照题目的要求造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。
*程序与程序注释#include<stdio.h>#include<math.h>void main(){inti,j,k,c;for(i=1;i<=9;i++) /*i:车号前二位的取值*/ for(j=0;j<=9;j++) /*j:车号后二位的取值*/if(i!=j) /*判断二位数字是否相异*/{k=i*1000+i*100+j*10+j; /*计算出可能的整数*/for(c=31;c*c<k;c++); /*判断该数是否为另一整数的平方*/if(c*c==k) printf("Lorry--No. is %d.\\n",k); /*若是,打印结果*/}}*运行结果Lorry _No.is 77443.14.怎样存钱利最大假设银行整存整取存款不同期限的月息利率分别为:0.63% 期限=1年0.66% 期限=2年0.69% 期限=3年0.75% 期限=5年0.84% 期限=8年利息=本金*月息利率*12*存款年限。
现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。
*问题分析与算法为了得到最多的利息,存入银行的钱应在到期时马上取出来,然后立刻将原来的本金和利息加起来再作为新的本金存入银行,这样不断地滚动直到满20年为止,由于存款的利率不同,所以不同的存款方法(年限)存20年得到的利息是不一样的。
分析题意,设2000元存20年,其中1年存i1次,2年存i2次,3年存i3次,5年存i5次,8年存i8次,则到期时存款人应得到的本利合计为:2000*(1+rate1)i1*(1+rate2)i2*(1+rate3)i3*(1+rate5)i5*(1+rate8)i8 其中rateN为对应存款年限的利率。
根据题意还可得到以下限制条件:0<=i8<=20<=i5<=(20-8*i8)/50<=i3<=(20-8*i8-5*i5)/30<=i2<=(20-8*i8-5*i5-3*i3)/20<=i1=20-8*i8-5*i5-3*i3-2*i2可以用穷举法穷举所有的i8、i5、i3、i2和i1的组合,代入求本利的公式计算出最大值,就是最佳存款方案。
*程序与程序注释#include<stdio.h>#include<math.h>void main(){int i8,i5,i3,i2,i1,n8,n5,n3,n2,n1;float max=0,term;for(i8=0;i8<3;i8++) /*穷举所有可能的存款方式*/for(i5=0;i5<=(20-8*i8)/5;i5++)for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++)for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++){i1=20-8*i8-5*i5-3*i3-2*i2;term=2000.0*pow((double)(1+0.0063*12),(double)i1)*pow((double)(1+2*0.0063*12),(double)i2)*pow((double)(1+3*0.0069*12),(double)i3)*pow((double)(1+5*0.0075*12),(double)i5)*pow((double)(1+8*0.0084*12),(double)i8);/*计算到期时的本利合计*/if(term>max){max=term;n1=i1;n2=i2;n3=i3;n5=i5;n8=i8;}}printf("For maxinumprofit,he should so save his money in a bank:\\n"); printf(" made fixed deposit for 8 year: %d times\\n",n8);printf(" made fixed deposit for 5 year: %d times\\n",n5);printf(" made fixed deposit for 3 year: %d times\\n",n3);printf(" made fixed deposit for 2 year: %d times\\n",n2);printf(" made fixed deposit for 1 year: %d times\\n",n1);printf(" Toal: %.2f\\n",max);/*输出存款方式*/ }*运行结果For maxinumprofit,he should so save his money in a bank:made fixed deposit for 8 year: 0timesmade fixed deposit for 5 year: 4timesmade fixed deposit for 3 year: 0timesmade fixed deposit for 2 year: 0timesmade fixed deposit for 1 year: 0timesTotal:8841.01可见最佳的存款方案为连续四次存5年期。