C语言程序设计
Timeless-01
这个作者很懒,什么都没留下…
展开
-
n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来的第几号的那位
解本题在于答题者否能将以上游戏规则用C程序进行操作新手这类题多多模仿操作就会熟练了//n个人围成一圈,顺序排号。从第一个人开始报数(1-3)#include<stdio.h>void num_off(int * q,int n);int main(){ //第一步:构造一个数组,根据用户提供的n人数对数组进行编号 int num[50]; int n,i=1; int * p; p = num; printf("How many people?\n"); scanf("原创 2021-05-05 14:53:42 · 724 阅读 · 3 评论 -
用两种不同类型的指针分别输出——3x4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值
#include<stdio.h>int main(){ int a[3][4]={{1,3,5,7}, {9,11,13,15}, {17,19,21,23}}; /* 方法一:定义一个与二维数组a类型(即int (*)[4])相同!!的指针变量p int (*p)[4]; int i; for(p=a+0;p<a+3;p++)//控制行 { puts("\n"); for(i=0;i<4;i++) printf("%d ",*(*p原创 2021-05-02 14:22:32 · 449 阅读 · 0 评论 -
给出年、月、日,计算该日是该年的第几天?
//给出年月日,计算这一天是这一年的第几天//考虑对于年:闰年(首先用100来取余,能取余为零,则再用400取余;若不能,则用4取余);对于月:大小月;就这几个要考虑的,日子就十分明显#include<stdio.h>int Feb_days;int month_days;int all_days;void leap_year(int year_n);void month(int month_n);int main(){ //第一步,输入年月日 int year_n,m原创 2021-04-23 22:06:33 · 4396 阅读 · 0 评论 -
输出杨辉三角形(要求输出10行)
要输出杨辉三角形肯定要明白怎么定义和赋值,要定义和赋值肯定要先找到其中的规律。 主要发现三个规律:①杨辉三角形可以用数组表示,发现第一行只有一列,第二行有两列,第三行有三列,类推第十行有十列。可以用a[9][9]表示。②分别用i,j来表示数组的下标,a[i][j]。当j=0时,a[i][0]=1;当j=i时,a[i][j]=1,即对角线均为1.③从第三行开始,即a[2]开始,中间的元素等于其上一行上一列与其上一行同一列的元素之和。即a[i][j]=a[i-1][j-1]+a[i-1][j]。数组构建原创 2021-04-09 09:28:42 · 14333 阅读 · 3 评论 -
有一个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
方法一:傻的很直接的算法(当然是我脑子最直接想到的,反复用if语句,毫无美感【dog】)假设数组a[11](数组中含有10个元素,待会插入一个为防止溢出,故设11个内存空间)已按升序排好,则很容易知道a[0]为最小值,a[9]为最大值,那么插入的数num无非就是三种情况:①比最小值小或等于最小值。则num的值赋给a[0],数组原来的元素全部后退一位。很容易想到先把原来数组的值放到一个空数组中(b[11]),num给a[0]赋值完毕后,a[i+1]=b[i]。②比最大值大。直接放入数组末尾即可。③在最原创 2021-04-08 23:19:46 · 5572 阅读 · 0 评论 -
用筛选法求1-100的素数
筛选法的求素数本质就是把某个数的倍数先全部剔除,例如1-100,我们只要考虑1-10(100根号)的倍数,1既不是素数也不是质数,先把2的倍数全部剔除,再把3的倍数全部剔除,4及4的倍数已经被2剔除了,接着把5的倍数全部剔除,以此类推。原本考虑是每剔除某个整数的倍数后获得的数组覆盖原数组,但不知到如何操作。直到答案中对凡是倍数将其赋值为零的这个操作让我觉得很灵活。因为题目只要求输出素数,并没有说要有一个全是素数的数组。输出时也十分方便,凡是元素的值为零便跳过。作为新手,要尤其关注这些条件的设定,,有些原创 2021-04-08 17:25:39 · 753 阅读 · 0 评论 -
用选择法对10个整数进行排序
选择法将同一单个元素与还未比较的元素进行比较:a[0]分别与a[1]-a[9]进行比较,a[0]值确定后,a[1]分别与a[2]-a[9]比较,a[1]值也确定了,接着a[2]分别与a[3]-a[4]比较,依次类推。冒泡法排序,将相邻的元素之间两两比较:a[0]与a[1]比较,假如是要由小往大排,若a[0]>a[1],a[0]与a[1]值互换。a[1]再与a[2]比较,若a[1]<a[2],则值不变,a[2]继续与a[3]比较,依次类推,a[9]的值最终敲定。接着继续a[0]与a[8]之间两两原创 2021-04-08 17:15:57 · 2426 阅读 · 0 评论 -
C语言初学者常见算法思想(解题思路)---谭浩强C语言第四版
目的新手容易忘记,此篇便于日后复习时集中练习。内容在本篇文章中,我将在评论区写下我在初学C语言中碰到的一些算法(解题思路),主要出自谭浩强C语言第四版,并给出这些算法解决常见问题的程序代码(文章链接),如筛选法求素数,选择法给整数排序等。也会总结一些对初学者而言,不禁赞叹妙啊的代码(简称妙妙码)。...原创 2021-03-24 19:35:04 · 623 阅读 · 2 评论 -
将一个二维数组行和列的元素互换,存到另一个二维数组中
#include<stdio.h>void main(){ int a[2][3]={{1,2,3},{4,5,6}}; int i,j; //输出a数组 printf("a[2][3]:\n"); for(i=0;i<2;i++) { if(i==1) { puts("\n"); } for(j=0;j<3;j++) { printf("%d ",a[i][j]); } } puts("\n"); //将a数组的值赋给原创 2021-03-24 13:14:57 · 1863 阅读 · 0 评论 -
冒泡排序的解释
#include<stdio.h>void sort(int *p,int n);int main(){ int a[6]={12,2,5,7,-1,0}; int i; for(i=0;i<6;i++) printf("%d ",a[i]);//输出原排序 puts("\n"); sort(a,6);//调用函数 for(i=0;i<6;i++) printf("%d ",a[i]);//输出调用函数后的结果 puts("\n"); return 0原创 2021-03-11 17:05:37 · 143 阅读 · 0 评论 -
用数组来处理Fibonacci数列问题
#include<stdio.h>int main(){ int a[20]={1,1}; int i; for(i=2;i<20;i++) { a[i]=a[i-1]+a[i-2]; } for(i=0;i<20;i++) { if(i%5==0) { puts("\n"); } printf("%6d",a[i]); } return 0;}思路:1、找到该数列各元素之间的关系并用数组表示(即从第三个元原创 2021-02-23 18:25:39 · 1143 阅读 · 0 评论 -
有10个地区的面积,要求对它们按从小到大排列。
#include<stdio.h>int main(){ int a[10]={34,67,90,43,124,87,65,99,132,26};//初始化数组 int i,j,min; puts("原数组为:"); for(i=0;i<10;i++)//输出原数组 { printf("%5d",a[i]); } puts("\n"); for(i=0;i<10;i++)//元素大小比较并由小到大排序,逻辑上有混乱 for(j=0;j<10;j原创 2021-02-09 12:41:18 · 2047 阅读 · 0 评论 -
用C语言二维数组输出一个菱形
#include<stdio.h>int main(){ char diamond[5][5]={{'\0','\0','*'},{'\0','*','\0','*'},{'*','\0','\0','\0','*'},{'\0','*','\0','*'},{'\0','\0','*'}}; //'\0'代表空格 int i,j; for(i=0;i<5;i++) { for(j=0;j<5;j++) { printf("%c",diamond[i][j]原创 2020-07-31 14:21:42 · 5648 阅读 · 0 评论 -
猜想pow函数原理并编程
#include<stdio.h>void main(){ float pow(float x,int y); float a,c; int b; scanf("%f,%d",&a,&b); c=pow(a,b); printf("sum is %f\n",c);}float pow(float x,int y){ int n; float sum=1; for(n=1;n<=y;n++) { sum=sum*x; } return原创 2020-07-13 20:43:50 · 508 阅读 · 0 评论 -
输入两个整数,要求输出其中值较大者。要求用函数求出最大值
#include<stdio.h>void main(){ int max(int x,int y);//形参 int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("Max is %d\n",c);}int max(int x,int y)//实参{ int z; z=x>y?x:y;//三步运算符,x是否大于y,是则赋值给z,否则将y值赋值给z return(z);}我犯了一个教科书错原创 2020-07-13 12:30:11 · 4911 阅读 · 0 评论 -
用函数调用实现上下两行星星符号,中间文字
非常简单,学习函数调用的很好的例子自己随意选句子#include<stdio.h>int main(){ void print_star(); void print_message(); print_star(); print_message(); print_star(); return 0;}void print_star(){ printf("*********************************************\n");}void p原创 2020-07-13 10:47:24 · 1197 阅读 · 1 评论 -
Fibonacci数列公式:已知:a1=a1=1,an=an-1 + an-2。即:1,1,2,3,5,8,13.......
此题较简单,主要考察对一维数组的赋值,数组下标的注意事项,即从a0开始对应1,第20个值的数组应该为a[19].#include<stdio.h>int main(){ int i,a[20]={1,1};//为前两个值赋值,其他值为0 printf("%d\n%d\n",a[0],a[1]); for(i=2;i<20;i++)//重点是确定i的初始值 { a[i]=a[i-1]+a[i-2]; printf("%d\n",a[i]); } ret原创 2020-07-05 10:27:54 · 1408 阅读 · 0 评论 -
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个, 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上一样。到第10天早上想再吃时,见只剩下1个桃
倒推法即可#include<stdio.h>int main(){ int i; int n=1;//由题可知day10,1个桃,day9,(1+1)x2个桃,类推得下面的公式。 for(i=2;i<=10;i++)//逆推,设day10为day1,原题减少,逆推则增加,day1,1个 n=(n+1)*2; //当n=1,公式推出的是day9=day2(假设),即i从2开始往后推 printf("%d",n); return 0;}...原创 2020-07-03 21:02:01 · 4334 阅读 · 0 评论 -
一个球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下。求它在第10次落地时
在简单的题上·跌倒过程第一次落地前是自由落体,之后是弹起又落下,高度乘二。答案循环赋值为2,看错为1,为此纠结了将近1小时(o(╥﹏╥)o)#include<stdio.h>int main(){ int n; float sum,i; i=100; i=i/2; sum=100;//第一次的自由落体,100米 for(n=2;n<=10;n++)//从第二次着地开始,每次着地前都有弹起和落下的过程。 { sum=sum+2*i;//第10次着地后前面经过原创 2020-07-03 20:40:35 · 24242 阅读 · 5 评论 -
求一个分数数列,2/1,3/2,5/3,8/5,13/8,21/13,...等这个数列前20项之和
这个比较简单,各个项的和,找到规律就好了。#include<stdio.h>int main(){ int n; float i,j,t,sum=0;//根据题意判断需要哪些变量,以及变量的类型 i=2; j=1;//阅读题目仔细,赋对值 for(n=1;n<=20;n++) { sum = sum+i/j; t = i; i = i+j; j = t; } printf("The sum is %f.\n",sum);/*书本上的参考答案都对浮原创 2020-07-03 17:09:11 · 650 阅读 · 0 评论 -
C语言求完全数(注意不需要输出因子只需使用前面两个循环)
思路:求某范围内每个数的因子,循环语句,公式-%-==0求因子。故一个循环控制范围,还需一个循环求因子。求偶数n的因子,其最大因子等于n/2,奇数的最大因子小于n/2.故可缩小求因子的范围。#include<stdio.h>int main(){ int n,i,j,s; printf("请输入n的取值范围:\n"); scanf("%d",&n); for(i=2;i<=n;i++)//大循环控制次数 { s=0;//保证和初始值为0,放for循环下面原创 2020-07-03 16:03:48 · 512 阅读 · 0 评论 -
求水仙花数(博主犯错日常)
正确代码(果然题做多了,类似的分分钟)#include<stdio.h>int main(){ int a,x,y,z; for(a=100;a<1000;a++) { x=(int)(a/100); y=(int)((a-x*100)/10); z=a-x*100-y*10; if(a==x*x*x+y*y*y+z*z*z) printf("%d\t",a); } printf("\n")原创 2020-07-02 21:20:12 · 76 阅读 · 0 评论 -
求∑(k=1~100)k+∑(k=1~50)k2+∑(k=1~10)
这个算很简单的题,就是有规律的累加。如果要考虑输出小数的话,将int换成float或double,输出也需要修改我犯了特傻的两个错,一个是以为n只能一个循环用一个,其实只要修改对它的限制,没有特定需求的话可多用。另一个是修改了n以后,相应的某些字符未修改。所以还是要细心吧,不能因为简单就感觉很high,会掉入简单的陷阱中,比如字符拼错等#include<stdio.h>int main(){ int n,s1=0,s2=0,s3=0; int sum;原创 2020-07-02 20:46:01 · 3733 阅读 · 0 评论 -
用C语言/*求1+2!+3!+...+20!的和
①最开始的想法#include<stdio.h>int main(){ int n,j; long tem,sum=0;//最开始想到的是循环套嵌。 for(n=1;n<=20;n++)//第一个循环,控制项次(20),控制每一项的乘积 { tem=1;//前面没有想到把它每次小循环前初始化,参考了一个博主的恍然大悟。 for(j=1;j<=n;j++)//第二个循环,在第一个循环的约束下将每一项分别累积。 { tem=tem原创 2020-07-02 19:56:35 · 11786 阅读 · 7 评论 -
求Sn=a+aa+aaa+...+n个a之间的值,其中a是一个数字,n代表a的位数,n由键盘输入
#include<stdio.h>int main(){int i,n,a;//a代表数字,n代表数位,i用来控制循环次数int sum=0,tem=2;//代表总和printf(“输入a,n的值:\n”);scanf("%d,%d",&a,&n);for(i=1;i<=n;i++)//循环,根据数位控制项数{sum=sum+tem;//和累加tem=tem*10+2;//求每一项(a相同可用,重点就是知道如何表达每一项)}printf(“sum值为原创 2020-07-02 10:04:39 · 1153 阅读 · 0 评论 -
求一行字符中有多少字母,数字,空格以及其他字符。(我在else if 与语法句之间的空格上总是犯错,怪不得用不好))
#include<stdio.h>int main(){char ch;int letters=0,space=0,number=0,other=0;printf(“请输入一行字符:\n”);while((ch=getchar())!=’\n’){if((ch>=‘a’&&ch<=‘z’)||(ch>=‘A’&&ch<=‘Z’))letters++;else if(ch==’ ')space++;else if(ch原创 2020-07-01 14:43:30 · 143 阅读 · 0 评论