代码1.
阶乘相加,当输入为5时->5!+4!+3!+2!+1!的和
define _CRT_SECURE_NO_WARNINGS 1#include<math.h>#include<stdio.h>#include<string.h>intmain(){//阶乘的进阶版int n, i, sum =0, k =1;// n为阶乘, i为循环次数, sum求和scanf("%d",&n);//当输入为5时->5!+4!+3!+2!+1!的和for(i =1; i <= n; i++){
k = k * i;//求阶乘
sum += k;//求每个阶乘的和}printf("%d!=%d", n, sum);}
代码2.1-2+3-4+5......的和
intmain(){int i, sum =0, sign =1;//i用于循环,sum求和,sign用于调整正负号int n;scanf("%d",&n);//输入一个数,从1开始累加到这个数for(i =1; i <= n; i++){//i>n时结束循环
sum += i * sign;//通过i*sign变正负号,在通过sum相加求和
sign =-sign;//变正负号作用}printf("结果为:%d", sum);return0;}`![在这里插入图片描述](https://img-blog.csdnimg.cn/270308370d36435c8b66b1f669bdc16d.png#pic_center)
代码3.
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){int score;scanf("%d",&score);char k = score >=90?'A': score >=60?'B':'C';printf("成绩等级:%c",k);return0;}
代码4
计算和输出下列级数的和。
// S = 1 / (1×2) + 1 / (2×3) + … + 1 / (n×(n + 1))#include<stdio.h>intmain(){float fz =1;//分子float fm;//分母float s =0;int n;//s求和scanf("%d",&n);int i=1;//用于循环while(i <= n){
fm = i *(i +1);
s += fz / fm;
i++;}printf("%f", s);}
结果:当输入为10时,结果为0.909091
代码5.
某个公司采用公用电话传递数据,数据是四位的整数,
在传递过程中是加密的,加密规则如下:每位数字都加上5,
然后用和除以10的余数代替该数字,
再将第一位和第四位交换,第二位和第三位交换。
intmain(){int a, b, c,m=0;scanf("%d",&a);//输入4位数while(a){
b =(a %10)+5;//取每一轮最后一位
b= b %10;//余数代替
m = m *10+ b;
a = a /10;//每一轮将最后一位截去}printf("%d", m);}
代码6.
输出100以内能被3整除且个位数为6的所有整数
intmain(){int i;for(i =6; i <=100; i++){if(i %10==6&& i%3==0){printf("%3d", i);}}}
代码7.
判断一个素数能被几个9整除,注:当个1000以内所有素数看就行了
intfun(int n){int i;for(i =2; i <= n /2; i++){if(n % i ==0)return0;}return1;}intmain(){int i,k=0,p=0;//p记录次数,k判断是否余数是0for(i =1; i <1000; i++){if(fun(i)==1){int m = i;while((k = m %9)==0){
p++;
m = m /9;}printf("素数%d,可以被%d个9整除\n", i, p);}}}
代码8.
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
注:自己算一下更容易理解
intmain(){//将一个正整数分解质因数。例如:输入90, 打印出90 = 2 * 3 * 3 * 5。int n,i;scanf("%d",&n);//输入一个正整数printf("90=");for(i =2; i < n; i++){//从2开始循环while(n % i ==0){//判断能否被整除,可以执行下面程序
n = n / i;printf("%d*", i);}}printf("%d", n);}
代码9.打印下方图形
******************intmain(){int i;for(i =0; i <4; i++){for(int j =0; j < i *2+1; j++){printf("*");}printf("\n\n");}return0;}
代码10.
请编写一个函数voidfun(int m,int k,int xx[])
该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。
voidfun(int m,int k,int xx[]){int i =0,j=0;while(k){
m++;//每次加1,判断是否靠近的下一个是素数,若是送到数组中for(i =2; i < m /2; i++){if(m % i ==0)//不是素数退出循环break;}if(i == m /2){//证明是素数
xx[j++]= m;
k--;//到0while循环结束,且靠近m的值也存放到数组中;}}}intmain(){int xx[80];int k,m;scanf("%d %d",&k,&m);//k个素数存入数组fun(m, k, xx);for(int i =0; i < k; i++){printf("%3d", xx[i]);//输出}}
代码11.
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
intmain(){int f1 =1, f2 =1;int i;for(i =1; i <=20; i++){printf("%10d%10d", f1, f2);
f1 = f1 + f2;//第三个月....第五个月...以此类推
f2 = f1 + f2;//第四个月....规则同上if(i %2==0)printf("\n");}return0;}
代码12.
实现矩阵(3行3列)的转置(即行列互换)![在这里插入图片描述](https://img-blog.csdnimg.cn/dde80dafef274717bea8474cfacae749.png)intmain(){int arr[3][3],i,j;for(i =0; i <3; i++){for(j =0; j <3; j++){scanf("%d",&arr[i][j]);//数组元素赋值}}for(i =0; i <3; i++){for(j =0; j < i; j++){//看图int k = arr[i][j];
arr[i][j]= arr[j][i];
arr[j][i]= k;}}for(i =0; i <3; i++){for(j =0; j <3; j++){printf("%4d", arr[i][j]);}printf("\n");}![在这里插入图片描述](https://img-blog.csdnimg.cn/8b917d7f4488462eb2e9949847ef3b50.png)
代码13.
编写函数,函数的功能是:从字符串中删除指定的字符。同一字母的大小写按不同字符处理。
voidfun(char arr[80],int k){int i,j;for(i =0; i <strlen(arr); i++){if(arr[i]== k){for( j = i ; j <strlen(arr); j++){
arr[j ]= arr[j+1];}
i--;}}printf("%s", arr);}intmain(){char arr[80],k;scanf("%c",&k);//被删除字符scanf("%s", arr);fun(arr, k);return0;}
代码14.
一球从100米高度自由落下,
每次落地后反跳回原高度的一半;
再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
intmain(){float h =100,f =50;for(int i =2; i <=10; i++){
h += f *2;//第一次反弹和第二次下降,以此类推
f = f /2;//每次除以2,因为每次落地后反跳回原高度的一半}printf("高度:%f,第10次反弹高度:%f", h, f /2);}
代码15.
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
intmain(){int a,b;//b是控制几个数相加,a是数值scanf("%d %d",&a,&b);int sum=0;//求和int m=0;for(int i =1; i <= b; i++){//while也可以
m = m *10+ a;//-> (0*10+2=2) ->2*10+a=22,以此类推
sum += m;}printf("%d", sum);//结果return0;}
当键盘输入2、5时结果为24690
代码15.
回文数问题,个位与万位相同,十位与千位相同。如:12321intmain(){int m =0,a;scanf("%d",&a);//输入一个数,判断是否为回文数int k = a;while(k){
m = m *10+ k %10;
k = k /10;}if(m == a){printf("YES");}elseprintf("No");}
当输入1234时,不是回文数。12321时是回文数
代码16.
猴子吃桃问题:猴子第一天摘下若干个桃子,
当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
intmain(){int m =1, k =9;//m为最后一天桃子个数,k是天数while(k >0){
m =(m +1)*2;//从后往前推
k--;}printf("%d", m);return0;}
注:列个方程,更容易理解
代码17.
编写一个unsignedxx(unsigned w),w是一个大于10的无符号整数,函数求出w的后n-1位的数作为函数值返回。
如输入1234则输出234,如输入45则输出5unsignedxx(unsigned k){if(k >=10000)return k %10000;elseif(k >=1000)return k %1000;elseif(k >=100)return k %100;return k %10;}intmain(){unsigned k;scanf("%u",&k);if(k >=10)printf("%u",xx(k));elseprintf("输入错误");return0;}
代码18.
判断字符串是否回文,若是则输出YES,不是则输出No
intmain(){char arr[80];scanf("%s", arr);int k=strlen(arr)-1;//计算长度,减一的目的就是下标从0开始int z = k,i;//z指向\0前一个字符for( i =0; i < k /2; i++){if(arr[i]== arr[z]){ z--;continue;}//第一个和最后一个比较,第二个倒数第二个比较以此类推.......elsebreak;//不相同退出循环}if(i == k /2)printf("Yes");//当i等于k/2证明完全相同elseprintf("No");return0;}
代码19.
给定秒数 seconds ,把秒转化成小时、分钟和秒
#include<stdio.h>intmain(){int a=0,b=0,seconds;//分别为小时分钟和秒scanf("%d",&seconds);int i=seconds/60;//计算共有多少60秒
seconds=seconds%60;//求秒while(i>0){if(b>=60){a++;b=0;};//分钟>=60时,小时加一,分钟清空
b++;//每一轮加一分钟
i--;//循环次数减一}printf("小时:%d 分钟:%d 秒:%d",a,b,seconds);}
代码20.
同构数:所谓“同构数”是指这样的数,它出现在它的平方数的右边
intmain(){int i;for(i =5; i <=100;i++){if(i <10){if((i * i)%10== i)printf("%d\n", i);}elseif(i >=10){if((i * i)%100== i)printf("%d\n", i);}}}
结果为:5,6,25,76
代码21.
在字符串中所有数字字符前加一个$字符
intmain(){char arr[80]={0}, i =0, j;scanf("%s", arr);int k =strlen(arr);while(arr[i]!='\0'){if(arr[i]>='0'&& arr[i]<='9'){for(j = k; j > i; j--){//取到\0位置
arr[j]= arr[j -1];//倒数第二赋给倒数第一,以此类推}
arr[i]='$';//最后将数字字符赋为'$'
i++;//因为目前指向'$',++指向后面的数字字符,结合下面又++就指向新的数据,(即下一个字符)}
k =strlen(arr);//每次都要找\0位置
i++;//!!!}printf("%s", arr);return0;}
结果:输入:hello2022
hello$2$0$2$2
代码22.
将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
intfun(int arr[100],int m){int i,j,k=0,n=0;for(i =2; i < m; i++){for( j =2; j < i /2; j++){if(i %2==0){//证明是非素数
arr[n++]= i;//非素数放到数组中
k++;//统计非素数个数break;}}}return k;}intmain(){int arr[100],m;scanf("%d",&m);int k=fun(arr, m);printf("非素数个数:%d", k);return0;}
输入100时
非素数个数:47
代码22.
求x的y次方
intmain(){int x, y;scanf("%d %d",&x,&y);if(y ==0&& x !=0){printf("%d",1);}else{int k = x;while(y >1){
x = x * k ;
y--;}printf("%d",x);}}
代码23.
杨辉三角:
111121133114641intmain(){int arr[5][5],j,i;for(i =0; i <5; i++){//将每行第一个与最后一个赋值1
arr[i][0]=1;
arr[i][i]=1;}for(i =2; i <5; i++){for(j =1; j < i; j++){//当前值等于上一行的第j个元素与j-1个元素的和
arr[i][j]= arr[i -1][j]+ arr[i -1][j -1];}}for(i =0; i <5; i++){//输出打印for(j =0; j <= i; j++)printf("%5d",arr[i][j]);printf("\n");}return0;}
代码24.
将一个3*3的矩阵的上三角元素化为0100450789intmain(){int arr[3][3], j, i;for(i =0; i <3; i++){for(j=0;j<3;j++){scanf("%d",&arr[i][j]);//每个元素赋值}}for(i =0; i <3; i++){for(j =3-1; j > i; j--){
arr[i][j]=0;}}for(i =0; i <3; i++){for(j =0; j <3; j++){printf("%4d", arr[i][j]);}printf("\n");}}
代码25.
将一个3*3的矩阵的下三角元素化为0123056009intmain(){int arr[3][3], j, i;for(i =0; i <3; i++){for(j=0;j<3;j++){scanf("%d",&arr[i][j]);//每个元素赋值}}for(i =0; i <3; i++){for(j =0; j< i; j++){
arr[i][j]=0;}}for(i =0; i <3; i++){for(j =0; j <3; j++){printf("%4d", arr[i][j]);}printf("\n");}}
代码26.
求一个3*3矩阵对角线元素之和
intmain(){int arr[3][3], j, i,sum=0;for(i =0; i <3; i++){for(j=0;j<3;j++){scanf("%d",&arr[i][j]);//每个元素赋值}}for(i =0; i <3; i++){for(j =0; j <= i; j++){if(i == j)
sum += arr[i][j];}}printf("对角线元素和为:%d", sum);123456789
对角线元素和为:15
代码27.
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方
intmain(){int k,m=0,sum=0,i;for(i =100; i <1000; i++){
k = i;//保存i的值,利用k循环while(k){//每轮取k最后一位,取完将k/10进行调整,在立方求和
m = k %10;
m = m * m * m;
sum += m;
k = k /10;}if(sum == i)printf("水仙花数有:%4d\n", i);
sum =0;//记住每轮要清空sum的值}return0;}
代码28.
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
intmain(){int i,j,sum=0;for(i =6; i <1000; i++){//最小完数是6for(j =1; j <= i /2; j++){if(i % j ==0)
sum += j;}if(sum == i)printf("完数有:%d\n", i);
sum =0;//清空,}}
代码29.
输入两个正整数,求其最大公约数和最小公倍数
intmain(){int a, b,temp;scanf("%d %d",&a,&b);int m = a, n = b;if(a <b){
temp = a;
a = b;
b = temp;}while(b !=0){
temp = a % b;
a = b;
b = temp;}printf("最大公约数%d", a);printf("最小公倍数%d", m * n / a);return0;}
代码30.
有1、2、3个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
intmain(){int i, j, k,m=0;for(i =1; i <=3; i++){for(j =1; j <=3; j++){for(k =1; k <=3; k++){if(i != j && i != k && k != j){m++;printf("%d%d%d", i, j, k);}}printf("\n");}}printf("个数:%d",m);return0;}
代码31.
一元二次方程
intmain(){float a, b, c,s=0;scanf("%f %f %f",&a,&b,&c);
s = b * b -4* a * c;if(s >0){//有两个根float k1 =(-b +sqrt(s))/(2* a);float k2 =(-b -sqrt(s))/(2* a);printf("%f %f\n", k1, k2);}elseif(s ==0){//有一个跟float k1 =(-b +sqrt(s))/(2* a);printf("%f\n", k1);}else{printf("没有根");}return0;}
结果当输入 121时-1.000000
代码32.
递归实现9*9乘法表
intfun(int n){if(n==0)return0;else{fun(n -1);for(int i =1; i <= n; i++){printf("%d*%d=%d ", n, i, n * i);}printf("\n");return0;}}intmain(){fun(9);}
结果:
1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81
代码33.
实现字符串的连接
voidfun(char* pa,char* pb){while(*pa !='\0') pa++;//找到字符串尾while(*pb !='\0'){//进行连接,直到\0为止*pa =*pb;
pa++; pb++;}*pa ='\0';//因为连接时没有带\0所以末尾要赋个\0}intmain(){char arr1[200];char arr2[80];scanf("%s %s", arr1, arr2);fun(arr1, arr2);printf("%s", arr1);}
结果:
hello world
helloworld
代码34.
实现字符串求长
intfun(char* p){int k =0;while(*p !='\0'){
p++;
k++;}return k;}intmain(){char arr1[80];scanf("%s", arr1);int k=fun(arr1);printf("长度为%d", k);}
结果: 输入 hello
输出 5
代码35.
字符串的复制
voidfun(char* pa,char* pb){while(*pb!='\0'){*pa =*pb;
pa++; pb++;}*pa ='\0';}intmain(){char arr1[80];char arr2[80];scanf("%s %s", arr1, arr2);fun(arr1, arr2);printf("%s", arr1);return0;}
结果:输入hello world
输出world
代码36.
字符串的比较
intfun(char* pa,char* pb){while(*pb!='\0'&&*pa!='\0'){if(*pa !=*pb)return0;
pa++;
pb++;}return1;}intmain(){char arr1[80];char arr2[80];scanf("%s %s", arr1, arr2);if(fun(arr1, arr2)==1)printf("两个字符串相等");elseprintf("两个字符串不相等");return0;}
代码37.
国家名排序
intmain(){char arr[5][100];int i,j;for(i =0; i <5; i++){scanf("%s",&arr[i]);//输入国家名}for(i =0; i <4; i++){for(j =0; j <4- i; j++){//冒泡排序if(strcmp(arr[j], arr[j +1])>0){//从小到大排序char k[100];//存临时变量strcpy(k, arr[j]);//字符串的复制来赋值strcpy(arr[j], arr[j +1]);strcpy(arr[j +1], k);}}}for(i =0; i <5; i++){printf("%s\n", arr[i]);}return0;}
代码38.
用递归方法将一个整数n转换字符串,例如1234转换成"1234"intfun(int n){if(n){fun(n /10);printf("%c",(n %10)+48);}else{return0;}}intmain(){int n;scanf("%d",&n);fun(n);}
代码39.
打印数字金字塔
112112321123432112345432112345654321123456765432112345678765432112345678987654321intmain(){int i, j, k;for(i =1; i <=9; i++){//一共九行for(j =9; j > i; j--)printf(" ");//打印每行前的空格for(k =1; k <= i ;k++){printf("%d", k);//打印每行从1到达行数的数字,如此行要打印出1 2 1,打印1 2}int n = i;//记录值,for(k = i +1; k <= i *2-1; k++){
n--;printf("%d", n);//打印如1 2 1 中1 2后的1,如12321 中123 后的2 1}printf("\n");}}
代码40.
从键盘输入一个日期(年、月、日),判断这是今年的第几天
intmain(){int arr[12]={31,28,31,30,31,30,31,31,30,31,30,31};int year, month, day;scanf("%d %d %d",&year,&month,&day);//输入年月日int i,sum=day;//sum取日for(i =0; i < month-1&&month!=1; i++){//若是1月份直接取到day的值,因为是下标所以i<month-1
sum += arr[i];//每个月天数相加}if((year %4==0&& year %100!=0|| year %400==0)&&year>2){//判断是否为闰年,若为闰年天数+1//闰年
sum +=1;}printf("今天是这一年的第:%d天", sum);return0;}
41.intmain(){float fz=1, fm=3,t=1+(fz/fm), sum=0,i=2,j=5;while(t >=1e-6){
sum += t;//求和
fz = fz*i;
fm = fm * j;
i++;//每次+1
j +=2;//每次+2
t = fz / fm;}printf("%f", sum *2);//因为求得是派所以要*2,上述是2分之派的结果}
42.intmain(){char a;int i =0, k =0;while((a =getchar())!='\n'){if(a >='0'&& a <='9'){
k = k *16+ a -48;//-48转换成数字}elseif(a >='A'&& a <='F'){
k = k *16+ a -'A'+10;}}printf("%d", k);}
43.intmain(){char a;int i =0, k =0;while((a =getchar())!='\n'){if(++i >20)break;if(a >='0'&& a <='9'){
k = k *10+ a -48;//-48转换成数字}}printf("%d", k);}44.
问题:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%;
高于100万元时,超过100万元的部分按1%提成。
从键盘输入当月利润I,求应发放奖金总数?
intmain(){float b1 =100000*0.1;float b2 = b1 +100000*0.075;float b4 = b2 +200000*0.05;float b6 = b4 +200000*0.03;float b10 = b6 +400000*0.015;float k;scanf("%f",&k);if(k <100000)printf("%f\n", k *0.1);elseif(k <200000)printf("%f\n", b1 +(k-100000)*0.075);elseif(k <400000)printf("%f\n", b2 +(k-200000)*0.05);elseif(k <600000)printf("%f\n", b4 +(k-400000)*0.03);elseif(k <600000)printf("%f\n", b6 +(k -400000)*0.015);else{printf("%f", b10 +(k -1000000)*0.01);}45.
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
intmain(){int i,x,y;for(i =1; i <=1000; i++){
x =sqrt(i +100);
y =sqrt(i+268);if(x * x == i+100&& y * y == i+268)printf("%d\n", i);}}
46.intmain(){int i,x,y;for(i =1000; i <10000; i++){
x = i %100;//取后两位
y = i /100;//取前两位
x = x + y;if(x * x == i){printf("%d\n", i);}}return0;}
47.intfun(int m,int n){for(int i =2; i < m; i++){if(m % i ==0)return0;}for(int i =2; i < n; i++){if(m % i ==0)return0;}return1;}intmain(){int i =6,k,j;for(; i <=50; i++){for(j =1; j < i; j++){
k = i - j;//保证k+j等于iif(fun(k, j)==1)printf("%d,%d和%d\n",i,k,j);}}return0;}
48.intmain(){char A,B,C;for(A ='x'; A <='z'; A++){for(B ='x'; B <='z'; B++){for(C='x'; C<='z'; C++){if(A != B && A != C && B != C){if(A !='x'&& C !='x'&& C !='z'){printf("A->%c", A);printf("B->%c", B);printf("C->%c", C);}}}}}return0;}
50.intmain(){char arr[100];gets(arr);//输入字符串int i =0,sum=1,flag=1;//下标while(arr[i]!='\0'){if(flag ==1&& arr[i]>='a'&& arr[i]<='z'){
arr[i]-=32;//转大写
flag =0;}if(arr[i]==32){//32是空格
sum++;
flag =1;}
i++;}printf("单词个数为:%d", sum);}