1.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?能组成多少?
已知:
1,1、2、3、4
2,组成3位数互不相同
求:能组成多少? 能组成多少?
#include<stdio.h>
int main()
{
int i, j, k;
int count = 0;
for (i = 1; i <= 4; i++)
{
for (j = 1; j <= 4; j++)
{
for (k = 1; k <= 4; k++)
{
if (i != j && i != k && j != k)
{
printf("%d\n", i * 100 + j * 10 + i);
count++;
}
}
}
}
printf("能组成%d个三位数",count);
return 0;
}
2.企业发放的奖金根据利润提成
利润(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,求应发放奖金总数?
————————————————
#include<stdio.h>
int main()
{
double pro, sum;
printf("请输入本月利润\n");
scanf("%d", &pro);
double bonus1, bonus2, bonus3, bonus4,bonus5;
bonus1 = 100000 * 0.1; //10w
bonus2 = bonus1 + 100000 * 0.075;//20w
bonus3 = bonus2 + 200000 * 0.05;//40w
bonus4 = bonus3 + 200000 * 0.03;//60w
bonus5 = bonus4 + 400000 * 0.015;//100w
if (pro <= 100000)
sum = pro * 0.1;
else if (pro <= 200000)
sum = bonus1 + (pro - 100000) * 0.075;
else if (pro <= 4000000)
sum = bonus2 + (pro - 200000) * 0.05;
else if (pro <= 600000)
sum = bonus3 + (pro - 400000) * 0.03;
else if (pro <= 1000000)
sum = bonus4 + (pro - 600000) * 0.15;
else if (pro > 1000000)
sum = bonus5 + (pro - 100000) * 0.01;
printf("提成为:%lf", sum);
return 0;
}
3.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include<stdio.h>
#include<math.h>
int main()
{
long int x, y, i;//定义数据类型为长整型
for (i = 1; i < 100000; i++)
{
x = sqrt(i + 100);//x为i+100开平方
y = sqrt(i + 268);//y为i+268开平方
if (x * x == i + 100 && y * y == i + 268)//判断i是否同时满足条件
printf("这个数是%ld\n", i);
}
return 0;
}
4.输入某年某月某日,判断这一天是这一年的第几天?
1.数组储存月份代表天数
2.输入年月日
3.该年的第几天 = 月份对应天数+day
#include <stdio.h>
#include <math.h>
int main()
{
int y, m, d;
int day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
printf("请输入年月日\n");
scanf("%d%d%d", &y, &m, &d);
if (m > 12 || d > 31) {
printf("输入有误\n");
return 0;
}
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
{
day[2 - 1] = 29;
}
int sum = 0, i;
for (i = 0; i < m-1; i++)
{
sum = sum + day[i + 1];
}
printf("%d年%d月%d日是这一年第%d天\n", y, m, d, sum + d);
return 0;
}
5.输入三个整数x,y,z,请把这三个数由小到大输出
#include <stdio.h>
int main()
{
int x, y, z,temp;
printf("请输入三个整数\n");
scanf("%d%d%d", &x, &y, &z);
if( x>y)
{
temp = y; y = x; x = temp;
}
if (x > z)
{
temp = z; z = x; x = temp;
}
if (y > z)
{
temp = z; z = y; y = temp;
}
printf("%d %d %d", x, y, z);
return 0;
}
8.输出9*9口诀
9.要求输出国际象棋棋盘
11.古典问题(兔子生崽)
题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
#include <stdio.h>
//递归
int fib(int i)
{
if (i <= 2)
return 1;
else
return fib(i - 1) + fib(i - 2);
}
int main()
{
int k = 0;
for (int i = 1; i <= 40; i++, k++)
{
if (k % 4 == 0)printf("\n");
printf("%12d", fib(i));
}
return 0;
}
#include <stdio.h>
//循环
int main()
{
int f1 = 1, f2 = 1, f3, k = 0;
for (int i = 1; i <= 40; i++, k++)
{
if (k % 4 == 0)printf("\n");
printf("%12d", f1);
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return 0;
}
//数组
12.判断100到200之间的素数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i,j;
for (i = 100; i <= 200; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0) break;
}
if (j >= i)printf("%d ",i);
}
printf("\n");
return 0;
}
13.打印出所有的"水仙花数"
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
14.将一个正整数分解质因数(短除法)
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。
(2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
#include<stdio.h>
int main()
{
int n,i;
printf("请输入整数:");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n%i==0)
{
printf("%d",i);
n/=i;
if(n!=1) printf("*");
}
}
printf("\n");
return 0;
}
#include <stdio.h>
int main()
{
int n, i, j;
scanf("%d", &n);
for (int i = 1; i <= n; i++) //遍历1~n
{
for (int j = 2; j <= i; j++)
{
if (i % j == 0 && i == j && n % i == 0)
printf("%d ", i);
else if (i % j == 0 && i != j)
break;
}
}
}
16.最大公约数和最小公倍数
辗转相除法
1,保证 n>m
2,保存n*m的乘积 求最小公倍数
3,辗转法
#include <stdio.h>
int main()
{
int m, n, t; //p用来接收原始值m和n的乘积,r接余数
printf("请输入两个正整数n,m:");
scanf("%d%d", &m, &n);
if (m < n) { t = m; m = n; n = t; }
int p = m * n;
while (n != 0) //m/n n小于0无意义 作为退出循环的条件
{
t = m % n;
m = n;
n = t;
}
printf("最大公约数%d", m);
printf("最小公倍数%d", p / m);
return 0;
}
递归法
#include <stdio.h>
int gcd(int a, int b)
{
if (b == 0)
return a;
else
return gcd(b, a % b);
}
int main()
{
int m, n, temp;
printf("请输入两个正整数n,m:");
scanf("%d%d", &m, &n);
if (m < n) // 让m必须大于n
{
temp = m;
m = n;
n = temp;
}
int k = m * n;
temp = gcd(m, n); //保存最大公因数
printf("最大公因数:%d\n", temp);
printf("最小公倍数:%d\n", k / temp);
return 0;
}
求一个整数的所有因素
#include <stdio.h>
int main()
{
int number, i;
printf("输入一个整数: ");
scanf("%d",&number);
printf("%d 的因数有: ", number);
for(i=1; i <= number; ++i)
{
if (number%i == 0)
printf("%d ",i);
}
return 0;
}
寻找两个数所有公因数
#include <stdio.h>
int main()
{
int num1, num2, i;
printf("输入两个数:");
scanf("%d%d", &num1, &num2);
for (i = 1; i <= (num1 > num2 ? num2 : num1); ++i)
{
if (num1 % i == 0 && num2 % i == 0)
{
printf("%d ", i);
}
}
return 0;
}
寻找两个数所有最大公约数
#include <stdio.h>
int main()
{
int n1, n2, i, gcd;
printf("输入两个正整数,以空格分隔: ");
scanf("%d %d", &n1, &n2);
for(i=1; i <= n1 && i <= n2; ++i)
{
// 判断 i 是否为最大公约数
if(n1%i==0 && n2%i==0)
gcd = i;
}
printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd);
return 0;
}
17.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
#include<stdio.h>
int main()
{
char c;
int letters = 0, spaces = 0, digits = 0, others = 0;
printf("请输入一些字母:\n");
while ((c = getchar()) != '\n')
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
letters++;
else if (c >= '0' && c <= '9')
digits++;
else if (c == ' ')
spaces++;
else
others++;
}
printf("字母=%d,数字=%d,空格=%d,其他=%d\n", letters, digits, spaces, others);
return 0;
}
18.:求s=a+aa+aaa+aaaa+aa...a的值
变量a,n由键盘输入:
2
22=2*10+2
222=2*100+22
2222=2*1000+222
#include <stdio.h>
int main()
{
int a, n;
printf("请输入a和n:");
scanf("%d%d", &a, &n);
int i, s = 0, k = 0;
for (i = 1; i <= n; i++)
{
k = k + a; //pow(10,i)
s = s + k;
a = a * 10;
}
printf("累加结果为:%d\n", s);
return 0;
}
求x=1-1/22 + 2/333-3/4444.....n-1/nnnnn的值,n<=9
1,22 333 4444 55555、、、、
2,-1/t 2/t -3/t、、、、
#include<stdio.h>
#include<math.h>
int gac(int n)
{
int k = 0;
for (int i = 1; i <= n; i++) //控制位数
{
k = k + n * pow(10, i - 1);
}
return k;
}
int main()
{
int n;
printf("请输入一个小于9的自然数:");
scanf("%d", &n);
double sum = 1.0,sige=-1.0;
for (int i = 1; i < n; i++)
{
sum += (i * sige) / gac(i + 1);
sige = sige * -1;
}
printf("%lf", sum);
return 0;
}
1 22 333 4444 55555......
1=1
22=2*10 +2
333=3*100+3*10+3
.......
int gac(int n)
{
int k = 0;
for (int i = 1; i <= n; i++) //控制位数
{
k = k + n * pow(10, i - 1);
}
return k;
}
int main()
{
for (int i = 1; i <= 5; i++)
{
printf("%d ", gac(i));
}
return 0;
}
19.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数
1,1000以内
2,一个数是其因子之和
3,打印完数 打印因子
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 1000; i++) //1.编程找1000以内完数
{
int sum = 0;
for (int j = 1; j < i; j++)
{
if (i % j == 0)
{
sum += j;//记录因数之和
}
}
if (sum == i)
{
printf("%d是完数:", i);
for (j = 1; j < i; j++) //2.因子打印出来
{
if (i % j == 0)
{
printf("%d,", j);
}
}
printf("\n");
}
}
return 0;
}
20.小球自由下落
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include <stdio.h>
int main()
{
double sumcm =0.0, cm=100.0;
for (int i = 1; i <= 10; i++)
{
sumcm += cm;
cm = cm / 2;
sumcm += cm;
}
sumcm = sumcm - cm;
printf("第10次落地时共经过%lfcm\n", sumcm);
printf("第10次反弹%lfcm", cm);
return 0;
}
21.猴子吃桃问题
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
题目分析:采用逆向思维
下一天桃子=上一天桃子/2 - 1 《==》 上一天桃子=(下一天桃子+1)*2
#include <stdio.h>
int peachNum(int day)
{
if (day == 10)
return 1;
else
return (peachNum(day + 1) + 1) * 2;
}
int main()
{
printf("第一天共摘桃%d", peachNum(1));
}
#include <stdio.h>
int main()
{
int day = 9, crenum = 1, prenum;
while (day--)
{
prenum = (crenum + 1) * 2;
crenum = prenum;
}
printf("第一天共摘桃%d", crenum);
return 0;
}
22.两个乒乓球队进行比赛,各出三人
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#include <stdio.h>
int main()
{
int A, B, C;
//1.列举A的所有对战对象
for (A = 'X'; A <= 'Z'; A++)
{
//2.列举B的所有对战对象
for (B = 'X'; B <= 'Z'; B++)
{
//3.列举C的所有对战对象
for (C = 'X'; C <= 'Z'; C++)
{
if (A != B && A != C && B != C && A != 'X' && C != 'X' && C != 'Z')
{
printf("A对战%c,B对战%c,C对战%c\n", A, B, C);
}
}
}
}
return 0;
}
23.打印出如下图案(菱形)
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 4; i++)
{
for (j = 4; j > i; j--)
printf(" ");
for (j = 1; j <= i; j++)
printf("*");
for (j = 1; j < i; j++)
printf("*");
printf("\n");
}
for (i = 1; i <= 3; i++)
{
for (j = 1; j <= i; j++)
printf(" ");
for (j = 3; j >= i; j--)
printf("*");
for (j = 2; j >= i; j--)
printf("*");
printf("\n");
}
return 0;
}
24.:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
#include <stdio.h>
int main()
{
double sum = 0.0, f1 = 2.0, f2 = 1.0, f3;
for (int i = 1; i <= 20; i++)
{
sum += f1 / f2;
f3 = f1 + f2;
f2 = f1; f1 = f3;
}
printf("sum=%.2lf", sum);
return 0;
}
25.求1+2!+3!+...+20!的和 (递归)
n! { 1 n=0,1
{ (n-1)*n n>=2
#include <stdio.h>
int main()
{
//1!--20!阶乘
int fac(int n);
int i, sum = 0;
for (i = 1; i <= 20; i++)
{
sum = sum + fac(i);
}
printf("1!+2!..+20!=%d\n", sum);
return 0;
}
int fac(int n)
{
int sum;
if (n < 0)
printf("数据错误");
else if (n == 0 || n == 1)
sum = 1;
else
sum = fac(n - 1) * n; // 反复调用 int f( int n )函数然后返回出去。
return sum;
}
#include <stdio.h>
int main()
{
int sum = 0, i, j;
for (i = 1; i <= 20; i++)
{
int k = 1;
for (j = 1; j <= i; j++)
k = k * j;
sum += k;
}
printf("1-20的阶乘为:%d", sum);
return 0;
}
27.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来
#include<stdio.h>
int main()
{
void plain(int n);
int i=5;
plain(i);
printf("\n");
return 0;
}
void plain(int n)
{
char next;
if(n<=1)
{
next=getchar();
putchar(next);
}
else
{
next=getchar();
plain(n-1);
putchar(next);
}
}
29.给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
#include <stdio.h>
int main()
{
int WeiNum(int);
void convert(int);
int n;
printf("请输入不多于五位的正整数\n");
scanf("%d", &n);
printf("%d是%d位数\n", n, WeiNum(n));
convert(n); //逆序输出
return 0;
}
int WeiNum(int n)
{
int count = 0;
while (n != 0)
{
count++;
n = n / 10;
}
return count;
}
void convert(int i)
{
if (i / 10 == 0)
{
printf("%d", i % 10);
}
else
{
printf("%d", i % 10);
convert(i / 10);
}
}
30.回文数
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:学会分解出每一位数。
#include <stdio.h>
int main()
{
int n,k=0,t; //错误 少定义一个t
printf("请输入一个整数\n");
scanf("%d", &n);
t = n;
while (t!= 0)
{
k = k * 10 + t % 10;
t = t / 10;
printf("%d\n", k);
}
if (k == n)
printf("是回文数\n");
else
printf("不是回文数\n");
return 0;
}
#include <stdio.h>
int main()
{
int a;
printf("请输入一个整数");
scanf("%d",&a);
int s=0;
for(int i=1;i<a;i*=10)
{
s=a%(10*i)/i +s*10;
}
if (a == s)
printf("%d是回文数",a);
else
printf("%d不是回文数", a);
return 0;
}
32.删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母
#include <stdio.h>
#include <string.h>
void deleteChar(char a, char str[]) {
int strLength = strlen(str); // 计算字符串的长度
int point = 0; // 字符串位置标号,用于保存当前有效字符位置
for (int i = 0; i < strLength; i++) {
if (str[i] == a) {
continue; // 若当前字符为要删除的字符,则直接跳过继续进行循环
} else {
str[point] = str[i]; // 当前字符为非删除字符,则往前覆盖
point++; // 有效字符标号位置递增
}
}
str[point] = '\0'; // 循环结束,最后一个字符为结束符
}
int main(void) {
char a; // 要删除的字母
char str[200]; // 保存字符串
scanf("%s", str);
deleteChar('a', str); // 这里把要删除的字符写死了,为`a`,你也可以换成输入语句,自行输入
puts(str);
return 0;
}
33.判断一个数字是否为质数
质数:即素数 除1和其本身不能被整除的数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a,i;
printf("请输入一个正整数哦\n");
scanf("%d", &a);
if (a <= 1)
printf("不是素数");
else if (a == 2)
printf("素数%d", a);
else {
//sqrt()函数 求一个数的平方根
//16 1 2 4 8 16 16平方根4
//可 1 2取余判断素数 a变sqrt(a) #include <math.h>
for (i = 2; i < a; i++) {
if (a % i == 0) break;
}
if (i < a)printf("%d不是素数\n", a);
else printf("%d是素数\n", a);
}
return 0;
}
35.字符串反转,如将字符串 "www.runoob.com" 反转为 "moc.boonur.www"
#include<stdio.h>
#include<string.h>
int main()
{
char str[40], temp;
gets(str);
int len, i;
len = strlen(str);//strlen是计算有效的内存长度
for (i = 0; i < len / 2; i++) {//用/2 来进行反转
temp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
}
puts(str);
// for(i=0;i<len;i++){
// printf("%c",str[i]);
// }
return 0;
}
#include<stdio.h>
int main()
{
char arr[40];
gets(arr);
int len = strlen(arr);
char temp;
int low = 0, high = len - 1;
while (low < high)
{
temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
low++;
high--;
}
puts(arr);
return 0;
}
36.求100之内的素数(筛选法)
#include <stdio.h>
int main()
{
int i,j;
int a[100];
//向a数组中填充1-100的数据
for (i = 0; i < 100; i++)
{
a[i] = i + 1;
}
//1不是素数,将1划掉-----使用0进行赋值
a[0] = 0;
for (i = 1; i < 100; i++)
{
if (0 == a[i]) {
continue;
}
//现在用a[i]去模之后的所有的元素
for (j = i + 1; j < 100; j++)
{
if (a[j] % a[i] == 0 && 0 !=a[j])
a[j] = 0;
}
}
//输出素数
for (i = 0; i < 100; i++)
{
if (a[i] != 0)
{
printf("%d ", a[i]);
}
}
printf("\n");
return 0;
}
#include <stdio.h>
int main()
{
int i, j;
for (i = 2; i <= 100; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0) break;
}
if (j >= i)printf("%d ", i);
}
printf("\n");
return 0;
}
37.对10个数进行排序(选择法)
38.求一个3*3矩阵对角线元素之和
39.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
61.杨辉三角形
题目:打印出杨辉三角形(要求打印出10行)。
程序分析:
结构如下所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
#include <stdio.h>
int Back_Print(int i, int j)
{
if (j == 0 || i == j)
{
return 1;
}
else
{
return Back_Print(i - 1, j) + Back_Print(i - 1, j - 1);
}
}
int main()
{
//杨辉三角的递归打印
int i, j;
int blank = 0;
for (int i = 0; i < 7; i++)
{
for (j = 0; j < -i + 6; j++)
printf(" ");
for (int j = 0; j <= i; j++)
{
printf("%4d ", Back_Print(i, j));
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main()
{
//保存杨辉三角数据
int a[10][10];
int i, j;
for (i = 0; i < 10; i++)
{
//对每一行进行赋值
for (j = 0; j <= i; j++)
{
//第0列与对角线上的数据都为1
if (j == 0 || j==i)
{
a[i][j] = 1;
}
else
{
//其他位置
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}
}
}
for (i = 0; i < 10; i++)
{
for (j = 0; j <= i; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
return 0;
}
66.输入3个数a,b,c,按大小顺序输出
程序分析:利用指针方法。
#include <stdio.h>
int main()
{
int a, b, c,t;
printf("请输入3个数\n");
scanf("%d%d%d", &a, &b, &c);
int* p1 = &a, * p2 = &b, * p3 = &c;
if (*p1 > *p2)
{
t = *p1; *p1 = *p2; *p2 = t;
}
else if (*p1 > *p3)
{
t = *p2; *p2 = *p1; *p1 = t;
}
else if (*p2 > *p3)
{
t = *p2; *p2 = *p3; *p3 = t;
}
printf("%d %d %d", a, b, c);
return 0;
}
67.输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
1.输入数组
2.记录最大与最小元素下标
3.用下标交换
#include<stdio.h>
#define N 5
int main()
{
int a[N] = { 2,1,5,21,6 };
int i;
printf("原数组:\n");
for (i = 0; i < N; i++)
{
printf("%d ", a[i]);
}
int maxindex = 0, mineindex = 0; //定义最大值与最小值 下标为0
for (i = 1; i < 5; i++)
{
if (a[maxindex] < a[i])
maxindex = i;
if (a[mineindex] > a[i])
mineindex = i;
}
int temp;
//最大值与首元素交换
temp = a[maxindex]; a[maxindex] = a[0]; a[0] = temp;
//最小值与最后元素交换
temp = a[mineindex]; a[mineindex] = a[N - 1]; a[N - 1] = temp;
printf("\n交换后数组\n");
for (i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
return 0;
}
68.有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数(队循环)
#include<stdio.h>
void move(int num[], int n, int m);
int main()
{
int arr[20];
int n, m;
printf("输入整数个数\n");
scanf("%d", &n);
printf("输入移动个数\n");
scanf("%d", &m);
printf("输入%d个整数:\n",n);
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
move(arr, n, m);
//输出移动后数值
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
void move(int num[], int n, int m)
{
for (int i = 0; i < m; i++)
{
int t = num[n - 1];
for (int j = n - 1; j > 0; j--)
num[j] = num[j - 1];
num[0] = t;
}
}
#include <stdio.h>
void move(int number[20], int n, int m);
int main()
{
int number[20], n, m;
printf("请输入整数个数:\n");
scanf("%d", &n);
printf("请输入移动位数:\n");
scanf("%d", &m);
printf("请输入%d个整数", n);
for (int i = 0; i < n; i++)
{
scanf("%d", &number[i]);
}
for (int i = 0; i < n; i++)
{
printf("%d ", number[i]);
}
printf("\n");
move(number, n, m);
for (int i = 0; i < n; i++)
{
printf("%d ", number[i]);
}
return 0;
}
void move(int number[20], int n, int m)
{
for (int i = 0; i < m; i++)
{
int t = number[n - 1];
for (int j = n - 1; j > 0; j--)
{
number[j] = number[j - 1];
}
number[0] = t;
}
}
69.有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
1,输入n人数
2,
70.写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度
#include<stdio.h>
int main()
{
int str[20];
printf("请输入字符串\n");
scanf("%s", str);
int len = length(str);
printf("字符串长度为%d", len);
return 0;
}
int length(char* s)
{
int count = 0;
while (*s != '\0')
{
count++;
s++;
}
return count;
}
71.编写input()和output()函数输入,输出5个学生的数据记录
#include<stdio.h>
#define N 5
struct student
{
char name[20];
char sex[6];
int age;
}stu[5];
void input(struct student st[N])
{
int i;
for (i = 0; i < N; i++)
{
scanf("%s%s%d", stu[i].name, stu[i].sex, &stu[i].age);
}
}
void output(struct student stu[N])
{
for (int i = 0; i < N; i++)
{
printf("%s %s %d\n", stu[i].name, stu[i].sex, stu[i].age);
}
}
int main()
{
printf("请输入5个学生信息:姓名 性别 年龄:\n");
input(stu);
printf("5个学生的信息如下:\n姓名 性别 年龄\n");
output(stu);
return 0;
}
72.创建一个链表
75.输入一个整数,并将其反转后输出(递归)
#include<stdio.h>
void convert(int);
int main()
{
int n;
printf("输入一个整数:\n");
scanf("%d", &n);
convert(n);
return 0;
}
void convert(int n)
{
if (n / 10 == 0)
printf("%d", n);
else
{
printf("%d", n % 10);
convert(n / 10);
}
}
整数反转:类似回文数
#include<stdio.h>
int main()
{
int n,t=0;
printf("请输入一个整数:");
scanf("%d", &n);
while (n != 0)
{
t = t * 10 + n % 10;
n = n / 10;
}
printf("反转后的整数:%d", t);
return 0;
}
#include<stdio.h>
int main()
{
int n,t=0;
printf("请输入一个整数:");
scanf("%d", &n);
for (int i = 1; i < n; i = i * 10)
{
t = t * 10 + n % (10 * i) / i;
}
printf("%d", t);
return 0;
}
76.编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)
#include<stdio.h>
double even(int);
double odd(int);
int main()
{
int n;
double sum;
double (*pfunc)(int); // 定义函数指针
printf("请输入n:");
scanf("%d", &n);
if (n % 2 == 0) { // 判断奇偶
pfunc = even; // 偶数函数
}
else {
pfunc = odd; // 奇数函数
}
sum = (*pfunc)(n); // 通过指针调用函数
printf("%lf\n", sum);
return 0;
}
double even(int n)
{
double sum=0.0, t = 1.0;
for (int i = 2; i <= n; i += 2)
{
sum = sum + t / i;
}
return sum;
}
double odd(int n)
{
double sum = 0.0, t = 1.0;
for (int i = 1; i <= n; i+=2)
{
sum = sum + t / i;
}
return sum;
}
81.809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果
#include<stdio.h>
int main()
{
int i;
for (i = 10; i < 100; i++)
{
if ((809 * i >= 1000 && 809 * i < 10000) && (8 * i >= 10 && 8 * i < 100)
&& (9 * i >= 100 && 9 * i < 10000))
{
printf("%d=%d*%d+%d*%d", 809 * i, 800, i, 9, i);
}
}
return 0;
}
82.八进制转换为十进制
1.输入8进制数 存入数组中
2.取出每位数字进行 转十进制
#include<stdio.h>
int main()
{
char s[20];
printf("请输入一个8进制数:\n");
gets(s);
int n = 0, i = 0;
while (s[i] != '\0') {
n = n * 8 + s[i] - '0'; //进制转换
i++;
}
printf("刚输入的8进制数转化为十进制为\n%d\n", n);
return 0;
}
十六进制转换为十进制
#include<stdio.h>
int main()
{
char s[20];
printf("请输入一个16进制数:\n");
gets(s);
int n = 0, i = 0;
while (s[i] != '\0') {
//进制转换
if (s[i] >= '0' && s[i] <= '9')
n = n * 16 + (s[i] - '0');
else if (s[i] >= 'a' && s[i] <= 'f')
n = n * 16 + (s[i] - 'a' + 10);
else if (s[i] >= 'A' && s[i] <= 'F')
n = n * 16 + (s[i] - 'A' + 10);
i++;
}
printf("刚输入的8进制数转化为十进制为\n%d\n", n);
return 0;
}
十进制转换为八进制
83.求0—7所能组成的奇数个数
84.一个偶数总能表示为两个素数之和
#include<stdio.h>
int prime(int);
int main()
{
int odd;
printf("请输入一个偶数:");
scanf("%d", &odd);
int i;
for (i = 1; i < odd; i++)
{
if (prime(i) && prime(odd - i))
break;
}
printf("偶数%d能被分解成%d,%d两素数的和", odd, i, odd - i);
return 0;
}
int prime(int n)
{
if (n < 2)
return 0;
else if (n == 2)
return 1;
else
{
int i;
for (i = 2; i < n; i++)
{
if (n % i == 0)break;
}
if (i >= n)
return 1;
else
return 0;
}
}
85.判断一个素数能被几个9整除
1.输入一个素数
2.判断能整除几个9
#include <stdio.h>
int main()
{
int n;
printf("请输入一个素数:");
scanf("%d", &n);
int sum = 9, i;
for (i = 1; ; i++) {
if (sum % n == 0) {
break; // 能被一个9整除
}
else {
sum = sum * 10 + 9; // 累加
}
}
printf("素数%d能整除%d个9组成的数%d", n, i, sum);
return 0;
}
88.读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的 *
1.读取7位1-50整数值
2.读取第几个值,程序打印几个※
#include<stdio.h>
int main()
{
int n, i, j;
printf("请输入要7个数(1-50)");
for (i = 1; i <= 7; i++)
{
scanf("%d", &n);
if (n >= 1 && n <= 50)
{
for (j = 1; j <= i; j++)
printf("*");
printf("\n");
}
else
{
printf("请重新输入");
i--;
}
}
return 0;
}
89.电话号码加密
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
1.输入四位整数
2.数字都加上5,然后用和除以10的余数代替该数字
3.将第一位和第四位交换,第二位和第三位交换。
#include<stdio.h>
int main()
{
int a, aa[4];
printf("请输入四位整数");
scanf("%d", &a);
if (a >= 1000 && a < 10000)
{
aa[3] = a % 10;
aa[2] = a % 100 / 10;
aa[1] = a % 1000 / 100;
aa[0] = a / 1000;
}
int i, t;
//每位数字都加上5,然后用和除以10的余数代替该数字
for (i = 0; i < 4; i++)
{
aa[i] = (aa[i] + 5) % 10;
}
//交换
for (i = 0; i < 4 / 2; i++)
{
t = aa[i];
aa[i] = aa[3 - i];
aa[3 - i] = t;
}
//输出加密数据
for (i = 0; i < 4; i++)
{
printf("%d", aa[i]);
}
return 0;
}
101.矩阵交换行
3X3二维数组转置,行列互换
1.行列互换,即对角线以为进行互换
#include<stdio.h>
void convert(int a[3][3]); //函数声明
int main()
{
int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
int i, j;
//打印原数组
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
convert(a); //行列元素交换
printf("\n");
//打印交换数组
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
void convert(int a[3][3])
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < i; j++)
{
int temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
}
将一个二维数组行和列的元素互换,存到另一个二维数组中。