数组字符串的练习:
在字符串的指定位置插入一个字符:
思路1:
#include <stdio.h>
#include <string.h>
int main()
{
char a[50] = {0};
char b[50] = {0}; //设置一个空数组用来存放新的字符串
char m;
int i, j, n;
printf("请输入一个字符串:\n");
scanf("%s",a);
printf("请输入要插入字符的位置:\n");
scanf("%d",&j);
printf("请输入要插入的字符:\n");
scanf(" %c",&m);
n = strlen(a);
if(j <= 0 || j > n)
{
printf("请输入0-%d之间的数字:\n",n);
}
for(i = 0; i < n; i++)
{
if(i < j )
{
b[i] = a[i]; //在[0,j-1]的范围内,原样不动传输a数组
}
if(i == (j - 1)) //在下标为j的地方,将要插入的字符赋值给b[j]
{
b[j] = m;
}
if(i > (j-1)) //将a数组[j,n-1]的元素赋值到b数组j后面的空间
{
b[i+1] = a[i];
}
}
printf("%s",b);
printf("\n");
return 0;
}
思路2:
单个字符也能看作长度为一的字符串,可用字符串的连接,复制函数解决问题
#include <stdio.h>
#include <string.h>
int main()
{
char a[50] = {0};
char m[50] = {0};
char c[50] = {0};
int j;
printf("请输入一个字符串:\n");
scanf("%s",a);
printf("请输入要插入字符串的位置:\n");
scanf("%d",&j);
printf("请输入要插入的字符串:\n");
scanf("%s",m);
strncpy(c,a,j); //复制字符串a的前j个字符给c数组
strcat(c,m); //将要插入的字符串连接到c字符串后面
strcat(c,a+j); //将字符串a的j后面的字符连接到c字符串后面,从而完成字符串的插入
printf("%s",c);
printf("\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char a[50] = {0};
char b[50] = {0};
char m[50] = {0};
char c[50] = {0};
int i, j, n, d=0;
printf("请输入一个字符串:\n");
scanf("%s",a);
printf("请输入要插入字符串的位置:\n");
scanf("%d",&j);
printf("请输入要插入的字符串:\n");
scanf("%s",m);
n = strlen(a);
if(j <= 0||j > n)
{
printf("请输入0-%d之间的数字:\n",n);
}
for(i = 0;i < n;i++)
{
if(i < j )
{
b[i] = a[i];
}
if(i >= j)
{
c[d++]=a[i];
}
}
strcat(b,m);
strcat(b,c);
printf("%s",b);
printf("\n");
return 0;
}
整数算法的练习:
通过编程实现统计1-n有多少个9:
思路:
先判断一个数有没有9,如果有,又有多少9
然后判断下一个数
#include <stdio.h>
int main()
{
int n,i;
int sum=0;
printf("请输入一个整数:");
scanf("%d",&n);
while(n>0)
{
i=n;
while(i>0)
{
if(i%10==9)
sum++;
i=i/10;
}
n--;
}
printf("%d\n",sum);
return 0
- 有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
#include <stdio.h>
int main()
{
int i, k, n, count;
int a[1000] = {0};
printf("请输入一个整数:\n");
scanf("%d",&n);
for(i = 0; i < n; i++)
{
a[i] = i+1;
}
i = 0;
k = 0;
count = 0;
while(count < (n - 1))
{
if(a[i] != 0)
{
k++;
}
if(k == 3)
{
k = 0;
a[i] = 0;
count++;
}
i++;
if(i == n)
{
i = 0;
}
}
for(i = 0; i < n; i++)
{
if(a[i] != 0)
{
printf("%d\n",a[i]);
}
}
return 0;
}
- 题目: 一个数如果恰好等于它的因子之和,这个数被成为”完数”,例如:6=1+2+3.请编程找出1000以内的完数
#include <stdio.h>
int main()
{
int i, m, sum;
for(m = 1; m <= 1000; m++)
{
sum = 0;
for(i = 1; i < m; i++)
{
if(m % i == 0)
{
sum += i;
}
}
if(sum == m)
{
printf("%d\n",m);
}
}
return 0;
}
因子是整数对因子求余为0,但不包括整数自身;
一道题可以有不同种解,不同方法,运行的效率不同,如何寻找最具效率的方法,需要日积月累的练习。。。

被折叠的 条评论
为什么被折叠?



