20道经典C语言编程题(初级)

article/2025/10/9 2:17:01

       编者按:以下20道题目为自己练习所写的代码,均已提交检测通过,其中有些题也许有更优的解法,所以写的不好望读者包涵,由于个人练习,所以没有写注释,有什么问题的地方,可以留言一起交流学习。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第1道: 

#include<stdio.h>
int main()
{int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};int year,month,day;while(scanf("%d/%d/%d",&year,&month,&day)!=EOF){int sum=0;for(int i=0;i<month-1;i++)sum=sum+a[i];sum=sum+day;if((year%4==0&&year%100!=0)||year%400==0)if(month>2)sum++;printf("%d\n",sum);}return 0;}//备注:其中在判断闰月加1天的时候必须当月份大于2时,才可以加1,否则将导致错误。

第2道:

#include<stdio.h>
#include<string.h>
int main()
{int len;int a,b;char str[51];char str2[200];int i=0 ;gets(str);len=strlen(str);a=len;b=len;strcpy(str2,str);while(i<len){str2[a++]=str[--b];i++;}str2[a]='\0';puts(str2);return 0;
}//备注:
//注意在编程过程中,当i为循环条件参数时,不可对其进行更改,解决办法是在定义一个变量对其备份。

 第3道:

#include<stdio.h>
#include<string.h>
int main()
{int len;char str[256];int i=0 ;int j=0;gets(str);len=strlen(str);for(i=0,j=len-1;i<j;i++,j--){if(str[i]!=str[j]){break;}}if(i==j||i>j)printf("Y");elseprintf("N");return 0;
}//备注:
//在写判断条件的时候一定要注意,要将字符串为单数和双数的情况都考虑进去,否则将导致错误。

 第4道:

#include<stdio.h>
int main()
{int a[41];int n;int i;scanf("%d",&n);a[0]=1;a[1]=1;for (i=2;i<41;i++){a[i]=a[i-2]+a[i-1];}for (i=0;i<n;i++){printf("%d ",a[i]);}return 0;
}

第5道: 

 

#include<stdio.h>
#include<string.h>
int main()
{int i;int len;char str[200];while(gets(str)!=NULL){len =strlen(str);for (i=0;i<len-1 ;i++){if(str[i]=='/'&&str[i+1]=='/')str[i]='\0';}if(str[0]!='\0')printf("%s\n",str);}return 0;
}//备注:
//这里涉及到多行输入的方法,以后遇到类似问题也可以这么干。

 第6道:

 

#include<stdio.h>
#include<string.h>
int main()
{int n;int i;int count=0;int temp;scanf("%d",&n);for(i=1;i<=n;i++){temp=i;if(i%7==0){count++;}else{while(temp){if(temp%10==7){count++;break;}temp=temp/10;}}}printf("%d\n",count);return 0;
}//备注:
//这道题的难点不在于找出7的倍数,而在于找出不是7的倍数但包含7的数字,这里用了移位的思想,
//这个思想很重要,以后遇到需要对数据的每一位操作时候的题目也可以考虑用这种思想试试。

第7道: 

 

#include<stdio.h>
int main()
{int n,m;int i=0;int flag=0;//a+b=n;//2*a+4*b=m;while( scanf("%d%d",&n,&m)==2){flag=0;for(i=0;i<=n;i++){if((n-i)*4+2*i==m){printf("%d %d\n",i,n-i);flag=1;}}if(flag==0){printf("No answer\n");}}return 0;
}//备注:
//1.本题运用遍历思想。
//2.数据多组输入的方法需要掌握一下。

第8道: 

 

#include<stdio.h>
int main()
{int m,n;int c;int temp;scanf("%d%d",&m,&n);c=m*n;if(m<n){temp=m;m=n;n=temp;}while(m%n){temp=m%n;m=n;n=temp;}printf("%d %d\n",n,c/n);return 0;
}//备注:
//”辗转相除法“求最大公约数,两数的和除以最大公约数求最小公倍数,这两种办法需要记住。

第9道: 

#include<stdio.h>
int main()
{int n;double m,s;int i;scanf("%lf%d",&m,&n);s=m;for(i=0;i<n;i++){m=m/2;s=s+2*m;}s=s-2*m;printf("%.2f %.2f\n",m,s);return 0;
}//备注:
//一定要读清楚题目要求,举例子画图,不然及其容易出错。

 第10道:

 

#include<stdio.h>
int main()
{int i,j;for(i=1;i<=9;i++){for (j=1;j<=i;j++){printf("%d*%d=%-2d ",j,i,i*j);}printf("\n");}return 0;
}//备注:
//该题看起来很简单,实际上很容易出错,错就错在打印格式,对齐方式等一定要注意。

第11道:

 

#include<stdio.h>
int main()
{int n;int i;int sum=1;scanf("%d",&n);for(i=1;i<n;i++){sum=2*(sum+1);}printf("%d",sum);return 0;
}
//备注:
//此题考察逆向思维,难点在于循环次数,为什么经历n天却只能循环n-次,
//原因是题目说了当天就吃了一半多一个,且最后一天还没吃就已经是1个了。所以只能循环n-1次。

 第12道:

#include<stdio.h>
#include<math.h>
int main()
{int x1,y1,x2,y2;double d=0;while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)==4){printf("%.2f\n",sqrt(pow(abs(x1-x2),2)+pow(abs(y1-y2),2)));}return 0;
}//此题没有难度,只是为了熟悉常用的sqrt函数和pow函数。

第13道: 

#include<stdio.h>
#include<math.h>
int main()
{int i=3025;for(i=1000;i<9999;i++){if((i/100+i%100)*(i/100+i%100)==i){printf("%d  ",i);}}return 0;
}//备注:
//此题很简单,但是作者在做的时候有个犯了错误,原因是pow函数返回值是double类型,
//不可以和int类型的值进行比较,前玩不能用强转,转成int类型在进行比较
//原因是这样pow得到的结果会与真实结果有误差,因为会舍去小数部分。

第14道: 

 

#include<stdio.h>
#include<math.h>
int main()
{int n;int i,j;int x,y;int a[10][10];int max=0;scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);if(fabs(a[i][j])>fabs(max)){max=a[i][j];x=i+1;y=j+1;}}}printf("%d %d %d",max,x,y);return 0;
}//备注:
//主要注意多行输入以及下标需要加1。

 第15道:

 

#include<stdio.h>
#include<math.h>
int main()
{double a,b,c;double t;double x1,x2;scanf("%lf%lf%lf",&a,&b,&c);t=pow(b,2)-4*a*c;if(t>0){x1=(-b+sqrt(t))/2*a;x2=(-b-sqrt(t))/2*a;}else{x1=x2=-b/2*a;}printf("%.2f %.2f\n",x1,x2);return 0;
}//备注:
//此题需要注意的一点就是在同时接收int类型和char类型的时候,空格会影响接收
//解决办法就是在scanf的%d之间也加上同样多的空格。

第16道: 

#include<stdio.h>
int main()
{int n;int a[17];int i=0;while(scanf("%d",&n)==1){i=0;printf("%d-->",n);if(n<0){printf("-");n=-n;}if(n==0){printf("0");}while(n){a[i++]=n%2;n=n/2;}while(i--){printf("%d",a[i]);}printf("\n");}return 0;
}//备注:
//1.所有的进制转换都可以用这种方法
//2.这里最需要注意的是while(i--),这里while里面的i与while括号里面的i相差1.

第17道: 

#include<stdio.h>
int main()
{int i,j,k;for(i=0;i<=20;i++){for(j=0;j<=34;j++){for(k=0;k<=100;k++){if(i+j+k==100&&5*i+3*j+k/3==100 &&k%3==0){printf("cock=%d,hen=%d,chicken=%d\n",i,j,k);}}}}return 0;
}//备注:
//1.这里采用的是暴力算法,遍历思想;
//2.这里用嵌套的先后顺序,巧妙的解决了题目要求的字典排序输出。
//3.尽管用暴力算法,也要想办法优化代码,比如鸡翁不可能超过20只,
//鸡母不可能超过34只,大大减少循环次数。
//4.鸡雏的价钱不能简单的用k/3,因为例如k为10的话,结果也为3,所以要加上k%==0这个条件。

 第18道:

 

 

#include<stdio.h>
#include<string.h>int prime(int n)
{int i;int flag=0;for (i=2;i<n;i++){if(n%i==0){flag=1;break;}}if(flag==1)return 0;return 1;
}
int main()
{int n;int i;int count=0;scanf("%d",&n);for(i=2;i<=n/2;i++){if(prime(i)&&prime(n-i)){count++;}}printf("%d\n",count);return 0;
}//备注:
//1.一是要注意用函数对子功能进行封装,例如本题判断是不是素数。
//2.二是要注意重复情况的考虑,例如本体只遍历一般,将重复的情况去掉了。

第19道: 

#include<stdio.h>
#include<string.h>
int main()
{int a,b;char c;scanf("%d %d %c",&a,&b,&c);switch(c){case '+':printf("%d",a+b);break;case '-':printf("%d",a-b);break;case '*':printf("%d",a*b);break;case '/':printf("%d",a/b);break;case '%':printf("%d",a%b);break;default :break;}return 0;
}//备注:
//这道题比较简单,主要是对switch的语法进行复习。

第20道: 

 

#include<stdio.h>
enum hand{rock,paper,scissors};
enum ans{fail=-1,draw,win};
int main()
{int a,b;scanf("%d%d",&a,&b);if(a==rock&&b==scissors||a==scissors&&b==paper||a==paper&&b==rock){printf("%d\n",win);}else if(b==rock&&a==scissors||b==scissors&&a==paper||b==paper&&a==rock){printf("%d\n",fail);}else{printf("%d\n",draw);}return 0;
}//备注:本题主要是对枚举进行复习。

 

 

 


http://chatgpt.dhexx.cn/article/uCvAt00X.shtml

相关文章

沈师 PTA 数据库题目及部分解析 第四章

判断题 1.在数据库安全性控制中&#xff0c;所有授予出去的权力在必要时都可以用REVOKE语句收回。 T 2.用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人&#xff0c;因此称这样的存取控制是自主存取控制。 T 3.数据库的安全性是指保护数据…

编程题目+数据库题目总结(3)

目录 编程题1.字典中保存了一些股票代码&#xff08;键&#xff09;及价格&#xff08;值&#xff09;&#xff0c;用一行代码找出价格最高的股票&#xff0c;输出股票代码。(5分&#xff09;2.字典中保存了一些股票代码&#xff08;键&#xff09;及价格&#xff08;值&#x…

沈师 PTA 数据库题目及部分解析 第一章

判断题&#xff1a; 1.一个数据库只有一个模式和一个内模式。 T 2.数据模型是由数据结构、数据操作和完整性约束三部分组成的 T 3.由于数据库中的数据是不断更新的&#xff0c;因此关系模式是相对变化的。 F 解析&#xff1a;关系模式不会相对变化&#xff0c;变化的是实例 4.数…

【数据库题目复习】期末试卷 一、二

文章目录 试题一一、选择题二、填空题三、简答题四、设计题五、综合题 试题二一、选择题二、填空题三、简答题四、设计题五、综合题 试题一 一、选择题 1. 数据库系统的核心是&#xff08; B &#xff09; A&#xff0e;数据库 B&#xff0e;数据库管理系统 C&#xf…

【数据库题目复习】第7章 数据库设计

文章目录 一、选择题&#xff1a;二、填空三、应用 参考文章&#xff1a;https://blog.csdn.net/qq_46139801/article/details/117453449 知识点&#xff1a; &#xff08;1&#xff09;各子系统的E-R图之间的冲突主要有三类&#xff1a; 属性冲突、命名冲突和结构冲突。 &…

【力扣刷题总结】数据库题目按知识点分类总结

观前提示&#xff1a; 这个图先自行背诵至滚瓜烂熟。 文档中论述题目解题思路时没有特殊情况都按照上面的程序执行顺序为准&#xff0c;个别题也会以其他更自然的顺序讲解。 本文的知识点整理仅起提示作用&#xff0c;一些不常用功能、参数可能会遗漏&#xff0c;如需了解详细…

数据库题目之数据库设计

一、选择题 1、在数据库设计中&#xff0c;用E-R图来描述信息结构但不涉及信息在计算机中的表示&#xff0c;它是数据库设计的 阶段。 A&#xff0e;需求分析 B&#xff0e;概念设计 C&#xff0e;逻辑设计 D&#xff0e;物理设计 【答案&#xff1a;】B 2、在关系…

数据库常考大题

宝子们心心念念的数据库大题来啦~ 我已经整理好啦~你们根据目录找对应题目就好啦&#xff0c;嘿嘿~姐姐是不是还有点小贴心呢&#xff1f; &#x1f6f8; &#x1f30f; &#x1f318; • . ✯✯ ★ * &#x1f6f0; . • ★ • ▁▂▃▄▅▆▇▇▆▅▄▃▁▂▃. 目录…

33道数据库题目

33道数据库题目 准备三张表题目 准备三张表 emp–员工表 dept–部门表 salgrade–工资等级表 题目 取得每个部门最高薪水的人员名称 (方法1) select ename, sal, deptno from emp where sal in (select max(sal) from emp group by deptno);(方法2&#xff09; select e.…

50道数据库SQL练习题(深入理解各关键字的作用)

目录 表结构创建表练习题1、查询“001”课程比“002”课程成绩高的所有学生的学号2、查询所有同学的学号、姓名、选课数、总成绩3、查询平均成绩大于60分的同学的 学号和平均成绩4、查询姓“葛”的老师的个数5、查询没学过“五木”老师课的同学的学号、姓名6、查询学过“101”并…

数据库复习题选择题+判断题+填空题(考试续命必备

数据库复习题选择题判断题填空题(考试续命必备 一些选择题 1、从计算机数据管理的角度看&#xff0c;信息就是数据&#xff0c;数据就是信息。&#xff08;B &#xff09; A、对 B、错 (描述事物的符号记录称为数据 数据库的数据项之间无联系&#xff0c;记录之间存在联系。…

【课后习题】高等数学第七版上第二章 导数与微分 第五节 函数的微分

习题2-5 1. 已知 y x 3 − x yx^3-x yx3−x, 计算在 x 2 x2 x2 处当 Δ x \Delta x Δx 分别等于 1 , 0.1 , 0.01 1,0.1,0.01 1,0.1,0.01 时的 Δ y \Delta y Δy 及 d y \mathrm{d} y dy. 2. 设函数 y f ( x ) yf(x) yf(x) 的图形如下, 试在图(a)、(b)、&#xff0…

高等数学同济七版课后习题答案

高等数学同济七版课后习题答案上册下册,习题全解指南。 一、《高等数学》(第七版)下册习题全解 第八章 向量代数与空间解析几何 下载地址: 链接:https://pan.baidu.com/s/185C8RB4Y9pYO84V4Rup1Wg 提取码:p0o8 习题8-1 向量及其线性运算 习题8-2 数量积 向量积 *混合积…

高等数学(第七版)同济大学 习题10-3 (后6题)个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题10-3&#xff08;后6题&#xff09; 函数作图软件&#xff1a;Mathematica 10. 利 用 球 面 坐 标 计 算 下 列 三 重 积 分 &#xff1a; \begin{aligned}&10. \ 利用球面坐标计算下列三重积分&#xff1a;&\end…

高等数学(第七版)同济大学 习题1-8 个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题1-8 函数作图软件&#xff1a;Mathematica 1. 设 y f ( x ) 的图形如图 1 − 39 所示&#xff0c;试指出 f ( x ) 的全部间断点&#xff0c;并对可去间断点补充或 修改函数值的定义&#xff0c;使它成为连续点。 \begin{…

浅谈一下前端单元测试

关于单元测试这个概念&#xff0c;我想很多前端的小伙伴都知道&#xff0c;但是却并不一定能描述清楚。由于我开始接触单元测试还是在四个月前&#xff0c;当时也只是做了一些纯函数的单元测试。所以在这里只能说浅谈一下前端单元测试。 什么是单元测试&#xff1f; 我理解的…

web前端测试要点

【说明】 JS压缩&#xff1a; 目的&#xff1a; 1、减少JS代码容量&#xff0c;增加下载速度和执行速度&#xff1b; 2、压缩后的JS代码不具备可识性&#xff0c;在一定程度上达到加密效果&#xff0c;防止被人轻易使用。 常规Javascript压缩的原理&#xff1a; 1、压缩多余的…

为什么必须执行前端测试?

对于网站的真实前端测试&#xff0c;必须在不同的设备和浏览器(具有多个版本)上检查功能和性能。在不同浏览器、浏览器版本和操作系统上评估网站的过程称为跨浏览器测试&#xff0c;它被认为是每个前端网站测试计划的重要组成部分&#xff0c;用于评估你能够通过无缝UI和UX取悦…

前端接口测试

背景 由于需求不断更改&#xff0c;项目前后端分离后&#xff0c;后端开发人员经常需要改字段加字段&#xff0c;也有可能删掉接口&#xff0c;这时候前端如果没有相对应的调整&#xff0c;就容易造成bug。为了解决这个问题&#xff0c;我们需要对接口进行测试。 测试被调用接…