C语言大赛题目精选(带答案)

合集下载

C语言编程题经典40题(附解答)

C语言编程题经典40题(附解答)
字符串
字符串在C语言中通常表示为字符数组。可以通过字符数组来存储和操作字符串。字符串的常用函数 包括strcpy()、strcat()、strlen()等。
03
进阶题目
函数与递归
总结词
理解函数定义、参数传递、递归调用等概念,掌握函数的使用方法。
题目1
编写一个函数,判断一个整数是否为素数。
题目2
编写一个函数,计算斐波那契数列的第n项。
培养逻辑思维
C语言强调结构化和严谨 的编程风格,学习C语言 有助于培养逻辑思维和问 题解决能力。
为什么选择这40道题目
经典题目
精选的40道题目均来自经典的C语言题目库,具有较高的代表性和难 度。
覆盖面广
题目涵盖了C语言的主要知识点,包括数据类型、控制结构、函数、 指针等,有助于全面提升编程能力。
难度适中
实现二叉树的基本操作(创建、插 入、删除、遍历)
题目12
实现堆排序算法
04
THANKS
感谢观看
01
02
文件打开
使用fopen()函数打开文件,并返回一 个FILE类型的指针。
03
文件读取
使用fscanf()、fgets()等函数从文件中 读取数据。
文件关闭
使用fclose()函数关闭文件。
05
04
文件写入
使用fprintf()、fputs()等函数将数据写 入文件。
动态内存分配
总结词
动态内存分配允许程序员在运行时根 据需要分配或释放内存,提高了程序 的灵活性和可扩展性。
数组与字符串
01
理解数组的概念和使用方法
02
掌握字符串的存储和操作
03
熟悉数组和字符串的常用函数

C语言竞赛练习题40题(答案)

C语言竞赛练习题40题(答案)

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语言考试题型及答案

c语言考试题型及答案

c语言考试题型及答案一、选择题(每题2分,共20分)1. C语言中,用于定义变量的关键字是?A. varB. letC. intD. define答案:C2. 下列哪个选项不是C语言中的基本数据类型?A. intB. floatC. stringD. double答案:C3. 在C语言中,哪个运算符用于取模?A. %B. /C. *D. -答案:A4. C语言中,用于输出的函数是?A. scanf()B. printf()C. gets()D. puts()答案:B5. 下列哪个选项是C语言中的逻辑运算符?A. &&B. ||C. +=D. -答案:A6. C语言中,哪个关键字用于定义函数?A. functionB. defC. voidD. int答案:C7. 在C语言中,哪个关键字用于循环?A. whileB. forC. doD. All of the above答案:D8. C语言中,哪个关键字用于跳过当前循环的迭代?A. continueB. breakC. returnD. exit答案:A9. 在C语言中,哪个函数用于计算数组的长度?A. length()B. size()C. sizeof()D. count()答案:C10. C语言中,哪个关键字用于定义结构体?A. structB. typeC. classD. union答案:A二、填空题(每题2分,共20分)1. 在C语言中,使用________关键字可以定义一个指针变量。

答案:int*2. C语言中,字符串字面量是用________括起来的字符序列。

答案:""3. C语言中,________函数用于将字符串复制到另一个字符串。

答案:strcpy()4. C语言中,________运算符用于比较两个值是否相等。

答案:==5. C语言中,________关键字用于定义一个枚举类型。

答案:enum6. C语言中,________函数用于打开一个文件。

C语言程序设计竞赛题及其答案

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语言试题及答案

蓝桥杯第八届c语言试题及答案

蓝桥杯第八届c语言试题及答案蓝桥杯第八届C语言试题及答案1. 题目一:字符串反转要求:编写一个函数,实现字符串的反转。

```cvoid reverseString(char* str) {int i = 0, j = strlen(str) - 1;while (i < j) {char temp = str[i];str[i] = str[j];str[j] = temp;i++;j--;}}```答案:上述代码定义了一个名为`reverseString`的函数,它接受一个字符数组`str`作为参数。

通过交换数组两端的字符,实现了字符串的反转。

2. 题目二:寻找最大数要求:给定一个整数数组,找出数组中的最大数。

```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. 题目三:计算阶乘要求:编写一个函数,计算一个整数的阶乘。

```clong long factorial(int n) {if (n == 0) return 1;long long result = 1;for (int i = 1; i <= n; i++) {result *= i;}return result;}```答案:函数`factorial`接受一个整数`n`作为参数。

如果`n`为0,直接返回1,因为0的阶乘定义为1。

否则,初始化结果为1,并通过循环计算从1到`n`的乘积,最后返回计算出的阶乘值。

c语言的考试题目答案及解析

c语言的考试题目答案及解析

c语言的考试题目答案及解析1. 题目:以下哪个选项是C语言中的合法变量名?A. 2variableB. variable2C. _variableD. variable-2答案:C解析:在C语言中,变量名必须以字母或下划线开头,不能以数字开头。

因此,选项A和D是不合法的。

选项B虽然以字母开头,但是数字紧跟字母,没有下划线或空格分隔,所以也是不合法的。

选项C 以下划线开头,符合变量命名规则。

2. 题目:以下哪个选项是C语言中正确的字符串字面量?A. "Hello, World!"B. 'Hello, World!'C. "Hello, World!"D. "Hello, World!"答案:A解析:在C语言中,字符串字面量应该用双引号括起来。

选项B使用了单引号,这是用于字符字面量的,而不是字符串。

选项C和D是重复的,并且由于格式问题,它们可能没有正确显示,但假设它们是正确的字符串字面量,那么答案应该是A,因为它是第一个出现的合法字符串字面量。

3. 题目:以下哪个选项是C语言中正确的函数声明?A. int function(int x) {}B. void function() {}C. int function(int x, int y) {}D. All of the above答案:D解析:在C语言中,函数声明可以包含参数列表,也可以没有参数。

选项A和C都包含了参数列表,并且参数类型是int,这是合法的。

选项B没有参数列表,并且指定了返回类型为void,这也是合法的。

因此,所有选项都是正确的函数声明。

4. 题目:以下哪个选项是C语言中正确的条件语句?A. if (x > 0) { ... }B. if x > 0 { ... }C. if (x > 0) { ... } else { ... }D. if (x > 0) { ... } elseif { ... }答案:C解析:在C语言中,条件语句必须使用if关键字,并且条件表达式需要用括号括起来。

蓝桥杯专科组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语言本科组(带答案)
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把ABCDE所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
3.
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复......直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
#include <cstdio>
int main()
{
long int X=10, Y=90;
for(int k=1; k<=120; k++)//半分钟一个单位
{
if(k%2==1) Y -= X;//因为X出生半分钟后就要吃Y,尔后没1分钟要吃Y,所以永远都是奇数个半分钟的时候吃Y,又因为此时X不会增长(题目为了减小讨论的复杂度),所以直接减X数量即可。
14 10 6 2
15 11 7 3
16 12 8 4
下面的代码实现的功能就是要把一个方阵顺时针旋转。
void rotate(int* x, int rank)
{
int* y = (int*)malloc(___________________); //填空
for(int i=0; i<rank * rank; i++)
{
GoNext(x,r,c);
return;
}
int rr = GetRowStoneNum(x,r);
int cc = GetColStoneNum(x,c);
if(cc>=3) //本列已满
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;3)根据余数判断他是在“打鱼”还是在“晒网”;
若余数为1,2,3,则他是在“打鱼”
否则是在“晒网”
在这三步中,关键是第一步。求从
1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:
0<=i5<=(20-8*i8)/5
0<=i3<=(20-8*i8-5*i5)/3
0<=i2<=(20-8*i8-5*i5-3*i3)/2
0<=i1=20-8*i8-5*i5-3*i3-2*i2
可以用穷举法穷举所有的i
8、"i
5、"i
3、"i2和i1的组合,代入求本利的公式计算出最大值,就是最佳存款方案。
牌照的前两位数字是相同的;乙说:
牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:
四位的车号刚好是一个整数的平方。请根据以上线索求出车号。
*问题分析与算法设计
按照题目的要求造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。
*程序与程序注释
#include<stdio.h>
printf("\n平均分为%
5."2f\n",result);}
1.1
1."打鱼还是晒网
中国有句俗语叫“三天打鱼两天晒网”。某人从
1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
*问题分析与算法设计
根据题意可以将解题过程分为三步:
1)计算从
1990年1月1日开始至指定日期共有多少天;
/*判定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 25
He was fishing at day.
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];
*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);
for(i=0;i<4;i++)/*假定只有第i个人为窃贱*/{for(j=0;j<4;j++)/*将第i个人设置为1表示窃贱,其余为0*/
if(j==i)a[j]=1;
else a[j]=0;
made fixed deposit for 8 year:
0times
made fixed deposit for 5 year:
4times
made fixed deposit for 3 year:
0times
made fixed deposit for 2 year:
0times
made fixed deposit for 1 year:
如果((年能被4除尽且不能被100除尽)或能被400除尽)
则该年是闰年;
否则不是闰年。
C语言中判断能否整除可以使用求余运算(即求模)
*程序与程序注释
#include<stdio.h>
int days(struct date day);
struct date{
int year;
int month;
int day;
*程序与程序注释
#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++)
0times
Total:
8841."01
可见最佳的存款方案为连续四次存5年期。
4.
51."谁是窃贼
公安人员审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中:
甲说:
“乙没有偷,是丁偷的。”
乙说:
“我没有偷,是丙便的。”
丙说:
“甲没有偷,是乙偷的。”
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++) //求出去掉首尾的平均分
resu置变量的初始值:
日*/
for(yearday=0,year=1990;year<today.year;year++){term.year=year;
yearday+=days(term);/*计算从1990年至指定年的前一年共有多少天*/}yearday+=days(today);/*加上指定年中到指定日期的天数*/day=yearday%5;/*求余数*/

题目:
青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分。
3种方法:
分别要求使用到排序,数组,函数,指针。
分析:
这道题的核心程序是排序,将评委打的10个分数利用数组按增序(或降序)排列,计算数组中除了第一个和最后一个分数以外的数的平均分
答案:
#include<stdio.h>
丁说:
“我没有偷。”
请根据这四人的答话判断谁是盗窃者。
*问题分析与算法设计
假设
A、
B、
C、D分别代表四个人,变量的值为1代表该人是窃贱。
由题目已知:
四人中仅有一名是窃贱,且这四个人中的每个人要么说真话,要么说假话,而由于甲、乙、丙三人都说了两句话:
“X没偷,X偷了”,故不论该人是否说谎,他提到的两人中必有一人是小偷。故在列条件表达式时,可以不关心谁说谎,谁说实话。这样,可以列出下列条件表达式:
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]=
分析题意,设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<=2
%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:
Enter year/month/day:1992 10 25
He was sleeping at day.
Enter year/month/day:1993 10 25
He was sleeping at day
2.
12."抓交通肇事犯
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:
};
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;/*设置变量的初始值:
甲说:
”乙没有偷,是丁偷的。”B+D=1
相关文档
最新文档