C语言/C++常见习题问答集锦(二十三)
程序之美
1、若有已降序排列的数列20、18、16、14、…、6、4、2,现要求从键盘输入一个数插入到该数列中,要求按原来的排列规律插入。
#include<stdio.h>
int main()
{
int a[20]={20,18,16,14,12,10,8,6,4,2};
int c;
printf("请输入要插入的数:\n");
scanf("%d", &c);
int temp;
int len = sizeof(a)/ sizeof(a[0]);
for(int i = len - 2; i >= 0; i --){
if(a[i] <= c){//若第 i 个元素大于 i-1 元素则直接插入;反之,需要找到适当的插入位置后在插入。
a[i + 1] = a[i];
}
else{
a[i] = c;
break;
}
}
for (i = 0; i < len; i++)
{
printf("%d ",a[i]);
}
return 0;
}
2、字符串反向输出 请编写函数,反向输出字符串。字符串反向输出
请编写函数,反向输出字符串。
#include <stdio.h>
#include <string.h>
char* str_reverse(char* str)
{
int n = strlen(str) / 2;
int i = 0;
char tmp = 0;
for(i = 0; i < n; i++)
{
tmp = str[i];
str[i] = str[strlen(str)-i-1];
str[strlen(str)-i-1] = tmp;
}
return str;
}
int main()
{
char s[] = "hello world!";
printf("str_reverse(s) = %s\n", str_reverse(s));
return 0;
}
3、用指针访问数组,通过冒泡方式将最大值移动到数组尾部,然后输出该数组
#include <iostream>
using namespace std;
int main() {
//数组的声明
int num[6];
//数组输入
for (int i = 0; i < 6; i++) {
cin>>num[i];
}
int *p = num;
//排序算法
for(int i = 5;i>=0;i--){
for(int j = 0;j<i;j++){
if(*(p+j)>*(p+j+1)){
int temp = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = temp;
}
}
break;//一趟遍历,去掉是整个冒泡
}
//数组的输出
for(int k = 0;k<6;k++){
cout<<num[k]<<"\t";
}
return 0;
}
4、应用筛选法进行求素数
#include <stdio.h>
#include <math.h>
int main()
{
int a, b, i, flag;
printf("输入两个整数: ");
scanf("%d %d", &a, &b);
printf("%d与%d之间的素数为: ", a, b);
while(a<b)
{
flag=0;
for(i=2; i<=sqrt(a); i++)
{
if(a%i==0)
{
flag=1;
break;
}
}
if(flag==0)
printf("%d ", a);
a++;
}
return 0;
}
5、写一个判别素数的函数int prime(int),在主函数中调用它输出求10~100间的全部素数,每输出20个数换行。
#include<stdio.h>
int prime(int n);
int main()
{
int i,m = 0;
for(i = 11; i < 100; i+= 2){
if(prime(i) == 1){
printf("%3d", i);
m ++;
if(m % 20 == 0)
printf("\n");
}
}
printf("\n");
return 0;
}
int prime(int n) { /*判断素数函数*/
int i;
int flag = 1;
for (i=2;i<n;i++) /*从2循环至自身,如果能被其间任一数整除,则循环结束,其为非素数*/
if (n%i==0) {
flag = 0;
break;
}
return flag;
}