|
37.从字符串中查找指定的字符并且将其删除
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char str[100];
char* p = str;
int z = 0;
int t = 0;
char c;
printf(&#34;输入字符串:&#34;);
gets(str);
printf(&#34;输入删除的字符:&#34;);
scanf(&#34;%c&#34;, &c);
t = strlen(str);
for (z = 0; z <= t; z++)
{
*p = str[z];
if (*p != c)
p++;
}
printf(&#34;%s&#34;, str);
return 0;
}
38.写一个函数int isprime(int x),如果x是素数返回值为1,否则返回0。
这里摘抄一段网上对于素数的规律总结:
根据素数的定义思考。素数是大于1的自然数,除了1和自身外,其他数都不是它的因子。
那我们就可以用一个循环,从2开始遍历到这个数减去1,如果这个数都不能被整除,那么这个数就是素数。
也就是说:
给定一个数 n , i 从 2 开始取值,直到 n - 1(取整数),如果 n % i != 0 , n 就是素数
进一步思考,有必要遍历到 n - 1 吗?
除了1以外,任何合数最小的因子就是2,那最大的因子就是 n/2
那我们就遍历到 n/2就足够了
nt isPrime(int target) {
int i = 0;
if (target <= 1) {
printf(&#34;illegal input!\n&#34;);//素数定义
return -1;
}
for (i = 2; i <= target / 2; i++) {
if (target % i == 0)
return 0;//不是素数直接返回0
}
return 1;//是素数返回1
}39.用递归算法编写求Fibonacci数列第n项值的函数fib(int n),并用主函数输出它的前20项来验证该函数
关于斐波拉第序列,作为程序员,我们只需要知道公式(或者网上找到合适的公式,在计算就好)
F (0)=0, F (1)=1, F (n)= F (n - 1)+ F (n - 2)( n ≥ 2, n ∈ N*)
#include <stdio.h>
int fib(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2); //公式输进去
}
}
int main(int argc, char* argv[])
{
for (int i = 1; i <= 20; i++) //第一个到第20个
{
printf(&#34;%d\n&#34;, fib(i));
}
return 0;
}
vc6.0上的输出结果:

40.定义3个整型变量及指向整型变量的指针变量,利用3个指针变量完成数据的输入、从小到大排序、输出。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a, b, c;
int* p1 = &a,* p2 = &b, * p3 = &c;
int temp;
printf(&#34;请输入三个整型变量:\n&#34;);
scanf(&#34;%d%d%d&#34;, p1, p2, p3);
if (*p1 > *p2)
{
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
if (*p1 > *p3)
{
temp = *p1;
*p1 = *p3;
*p3 = temp;
}
if (*p2 > *p3)
{
temp = *p2;
*p2 = *p3;
*p3 = temp;
}
printf(&#34;%d %d %d\n&#34;, *p1, *p2, *p3);
return 0;
}输出结果:

41.已知一个整型数组a[10],要求定义2个指向整型变量的指针变量max、min,使得它们分别指向数组的最大数和最小数。
//设定一个数组
//设定两个指针
//将两个指针定义初始化
//循环
//比较大小
//输出
#include<stdio.h>
int main()
{
int a[5] = { 11,15,99,24,35 }, i;
int* max, * min;
max = min = &a[0];
for (i = 1; i < 5; i++)
{
if (*max < a)
max = &a;
if (*min > a)
min = &a;
}
printf(&#34;max=%d,min=%d\n&#34;, *max, *min);
}
42.实现字符串的查找、删除、替换
//实现字符串的查找、删除、替换
# include<stdio.h>
# include<string.h>
//字符串的查找
int find(char *str1,char *str2)//在str1中寻找str2
{
int len1=strlen(str1);
int len2=strlen(str2);
int i=0,index;
if(len1<len2)
return -1;//查找失败
else
{
index=0;
for(i=0;i<len1;i++)
{
if(str1==str2[index])
{
index++;
if(index==len2)
return i-len2+1;//返回第一次碰到str2的索引
}
else
{
index=0;
}
}
return -1;
}
}
//字符串的删除
char* delet(char* str,int start,int step)//在str1中删除从start到start+step的子串
{
int len=strlen(str);
int i=0;
if(len<start+step)
return NULL;//char *返回值NULL
else
{
for(i=start;i<len-step;i++)
{
str=str[i+step];
}
str[len-step]=&#39;\0&#39;;//末尾补0,补全新的字符串
return str;
}
}
//字符串的替换
char *replace(char *str1,int start,char *str2)
{
int len1=strlen(str1);
int len2=strlen(str2);
int i=0,index=0;
if(len1<start+len2)
return NULL;
else
{
for(i=start;i<start+len2;i++)
{
str1=str2[index++];
}
str1[len1]=&#39;\0&#39;;
return str1;
}
}
int main()
{
char str1[40];
char str2[40];
//删除重复子串
while(scanf(&#34;%s%s&#34;,str1,str2)!=EOF)
{
int t=find(str1,str2);
// printf(&#34;%d\n&#34;,t);
while(t!=-1)
{
//删除
char *p=delet(str1,t,strlen(str2));
t=find(p,str2);
}
printf(&#34;%s\n&#34;,str1);
}
return 0;
}43.请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第n个字符,平移到字符串的最后,把第n+1到最后的字符移到字符串的前部
思考中...如果你们有思路,可以评论区说说,谢谢
给它一个空白
44.小明有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法
刚刚那个题欠着,有点没想出来,放松一下....这道题很简单,如果你是高手,可以略过
#include<stdio.h>
int main()
{
int a, b, c, x = 0;
for (a = 1; a <= 5; a++)
for (b = 1; b <= 5; b++)
for (c = 1; c <= 5; c++)
if (a != b && a != c && b != c)
x++;
printf(&#34;有%d种不同的借法\n&#34;, x);
}
45.某市体育彩票采用整数1,2,3,…,36表示36种体育运动,一张彩票可选择7种运动。编写程序,选择一张彩票的号码,使这张彩票的7个号码之和是105且相邻两个号码之差按顺序依次是1,2,3,4,5,6。例如,第一个号码是1,则后续号码应该是2,4,7,11,16,22。
程序分析:若7个号码中的第一个号码是k0,则后续号码之间的关系是ki-ki-1=i。其中i=1,2,3,4,5,6。
(老实说,个人觉得这道题意思有些不明确,号码之差顺序1,2,3和2,4,7是怎么来的,我想了很久....)
#include<stdio.h>
int main()
{
int a[7];
int i,sum;
for(a[0]=1;a[0]<=15;a[0]++)
{
for(i=1;i<=6;i++)
a=a[i-1]+i;
sum=0;
for(i=0;i<=6;i++)
sum+=a;
if(sum==105)
{
for(i=0;i<=6;i++)
printf(&#34;%d &#34;,a);
printf(&#34;\n&#34;);
}
}
return 0;
}
46.将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*5
思路:短除法

#include<stdio.h>
int main()
{
int n, i;
printf(&#34;请输入整数:&#34;);
scanf(&#34;%d&#34;, &n); //输入这个数
printf(&#34;%d=&#34;, n); //输出左侧n的值
for (i = 2; i <= n; i++) //从2开始依次循环
{
while (n % i == 0)
{
printf(&#34;%d&#34;, i);
n /= i;
if (n != 1) printf(&#34;*&#34;);
}
}
printf(&#34;\n&#34;);
return 0;
}47.求1-1000以内的回文素数。回文素数指的是这个数既是回文数又是素数。
#include <stdio.h>
int main()
{
int i, a, b, k;
for (i = 1; i <= 1000; i++)
{
b = 0;
if ((i % 2 != 0 && i % 3 != 0 && i % 5 != 0 && i % 7 != 0) || i == 2 || i == 3 || i == 5 || i == 7) //素数条件
{
k = i;
while (1)
{
a = k % 10;
b = 10 * b + a;
if (k < 10)
break;
k = k / 10;
}
if (b == i)
printf(&#34;%d\n&#34;, i);
}
}
return 0;
}输出截图:

48.百万富翁问题
一个百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:我每天给你十万元,而你第一天只需给我一分钱;第二天我仍给你十万元,你给我两分钱;第三天我仍给你十万元,你给我四分钱;…,你每天给我的钱是前一天的两倍,直到满一个月(30天)。百万富翁很高兴,欣然接受了这个契约。请编写一个程序计算:这一个月中陌生人给了百万富翁多少钱,百万富翁给陌生人多少钱
#include<stdio.h>
void main()
{
double i, sum = 0, x = 0.01;
for (i = 1; i <= 30; i++)
{
x *= 2;
sum += x;
}
printf(&#34;这一个月中陌生人给了百万富翁%d元\n&#34;, 30 * 100000);
printf(&#34;这一个月中百万富翁给了陌生人%f元\n&#34;, sum);
return;
}
vs运行结果:

49.如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数
程序分析:求A的因子之和为B,再求B的因子之和为C。判断A是否等于C。
#include <stdio.h>
int main()
{
int a, b, i, j, c;
for(a=1;a<3000;a++)
{
b = 0;
for (i = 1; i <= a / 2; i++)
if (a % i == 0)
b += i;
c = 0;
for (j = 1; j <= b / 2; j++)
if (b % j == 0)
c += j;// c=b的因子和
if (a == c && a < b)// 排除重复
printf(&#34;%d和%d为亲密数\n&#34;, a, b);
}
return 0;
}为了帮助大家,轻松,高效学习C语言/C++,给大家分享我收集的资源,从最零基础开始的,帮助大家在学习C语言的道路上披荆斩棘!点击上方即可获取,还可以一起来学习交流嗷 |
|