C++编程 -- 基础练习(5)

1. 选择排序法应用

题目:用选择排序法对10个整数进行升序排序[1,12,4,9,10,22,-7,0,99,8]

知识点:用一维数组存储数据,再进行处理

方法1:

#include<stdio.h>

int main() {
    int i, j, t;
    int a[10] = {1, 12, 4, 9, 10, 22, -7, 0, 99,8};

    for(i = 0; i < 10; i++) {
        for(j = i + 1; j < 10; j++) {
            if(a[i] > a[j]) {
                t = a[i];
                a[i] = a[j];
                a[j] = t;            }
        }
    }

    for(i = 0; i < 10; i++)
        printf("%d ", a[i]);

    return 0;
}

方法2:

#include <iostream>
using namespace std; 
int main()
{
	int i,j,min,temp,a[11]={1000,1,12,4,9,10,22,-7,0,99,8};
	for (i=1; i <=9; i++) {
		min=i;
		for (j=i+1; j <=10; j++)
			if (a[min]>a[j]) min=j;
		temp=a[i];
		a[i]=a[min];
		a[min]=temp;
	}
	for (i=1; i <=10; i++)
		cout<<a[i]<<" ";
	return 0;
}

2. 键盘输入长度为10的数组,统计其中有多少不相同的数据

题目:键盘输入长度为10的数组,统计其中有多少不相同的数据

知识点:用一维数组存储数据,再进行处理

方法1:

#include <stdio.h>

int main() {
    int arr[10], count = 1;
    
    
    for (int i = 0; i < 10; i++) {
        scanf("%d", &arr[i]);
    }
    
    for (int i = 1; i < 10; i++) {
        int j;
        for (j = 0; j < i; j++) {
            if (arr[i] == arr[j]) {
                break;
            }
        }
        if (i == j) {
            count++;
        }
    }
    
    printf("%d", count);
    
    return 0;
}

方法2:

#include <iostream>
using namespace std; 
int main()
{
	int a[10],i,j,count=1;
	for(i=0;i <10;i++){
		cin>>a[i];
	}
	for(i=1;i <10;i++){
		for(j=0;j< i;j++)
			if(a[i]==a[j]) 
				break;
		if(j==i) count++;
	}
	cout<<count<<endl;
	return 0;
}

3. 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

题目:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

知识点:用字符数组存储数据,再进行处理

方法1:

#include <stdio.h>

int main() {
    char a[80];
    int i, num = 0, word = 0;

    gets(a);

    for (i = 0; a[i] != '\0'; i++) {
        if (a[i] == ' ') {
            word = 0;
        } else if (word == 0) {
            num++;
            word = 1;
        }
    }

    printf("%d", num);
}

方法2:

#include <iostream>
using namespace std; 
int main()
{
	char string[81];
	int i,num=0,word=0;
	char c;
	gets(string);
	for (i=0; (c=string[i])!='\0'; i++)
		if(c==' ') word=0;
		else if(word==0) {
			word=1;
			num++;
		}
	cout<<num<<endl;
	return 0;
}

4. 输入3个字符串,要求找出其中最大者

题目:输入3个字符串,要求找出其中最大者

知识点:用字符数组存储数据,再进行处理

方法1:

#include <iostream>
#include <cstring>
using namespace std; 
int main()
{
  char a[100],b[100],c[100],max[100];
  scanf("%s %s %s",&a,&b,&c);
  if(strcmp(a,b)>0) strcpy(max,a);
  else strcpy(max,b);
  if(strcmp(max,c)<0) strcpy(max,c);
  puts(max);
  return 0;
}

方法2:

#include <iostream>
#include <cstring>
using namespace std; 
int main()
{
	char str[3][20];
	char string[20];
	int i;
	for (i=0; i <3; i++)
		cin>>str[i];
	if (strcmp(str[0],str[1])>0)
		strcpy(string,str[0]);
	else
		strcpy(string,str[1]);
	if (strcmp(str[2],string)>0)
		strcpy(string,str[2]);
	cout<<string<<endl;
	return 0;
}

5. 输入8个整数放入一维数组w中,找出其中最小和最大数,然后输出

题目:输入8个整数放入一维数组w中,找出其中最小和最大数,然后输出。

知识点:用一维数组存储数据,再进行处理

方法1:

#include <iostream>
using namespace std;

int max(int b[], int n) {
    int max = b[0];
    for (int i = 0; i < n; i++) {
        if (b[i] > max) {
            max = b[i];
        }
    }
    return max;
}

int min(int b[], int n) {
    int min = b[0];
    for (int i = 0; i < n; i++) {
        if (b[i] < min) {
            min = b[i];
        }
    }
    return min;
}

int main() {
    int w[8];
    for (int i = 0; i < 8; i++) {
        cin >> w[i];
    }
    cout << "最小值是:" << min(w, 8) << "\n最大值是:" << max(w, 8) << endl;
    return 0;
}

方法2:

#include <iostream>
using namespace std; 
int main()
{
	int w[8],i,j=0,k=0;
	for(i=0; i <8; i++) {
		cin>>w[i];
	}
	for(i=0; i <8; i++) {
		if(w[i] <w[k])k=i;
		if(w[i]>w[j])j=i;
	}
	cout<<"最小值是:"<<w[k]<<endl;
	cout<<"最大值是:"<<w[j]<<endl;
	return 0;
}

6. 将一个二维数组行和列元素互换

题目:将一个二维数组行和列元素互换,存到另一个二维数组中并输出这两个矩阵。 原始矩阵如下: 1 4 5 6 3 2 7 8 7 9 0 3

知识点:用二维数组存储数据,再进行处理

方法1:

#include <stdio.h>
int main() {
    int i, j;
    int a[3][4] = {{1, 4, 5, 6}, {3, 2, 7, 8}, {7, 9, 0, 3}};
    int b[4][3];

    // 将二维数组行和列的元素互换,并存到数组b中
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 4; j++) {
            b[j][i] = a[i][j];
        }
    }
    // 输出互换后的矩阵b
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", b[i][j]);
        }
        printf("\n");
    }

    return 0;
}

方法2:

#include <iostream>
using namespace std; 
int main()
{
	int a[3][4]= {{1,4,5,6},{3,2,7,8},{7,9,0,3}};
	int i,j,b[4][3];
	for(i=0; i <3; i++)
		for(j=0; j <4; j++)
			b[j][i]=a[i][j];

	for(i=0; i <4; i++) {
		for(j=0; j <3; j++)
			cout<<b[i][j]<<" ";

		cout<<endl;
	}
}

7. 求矩阵对角线元素之和

题目:求一个3*3的整数矩阵对角线元素之和,元素由键盘输入。

知识点:无

方法1:

#include <stdio.h>

int main() {
    int a[3][3] = {0}, sum = 0;
    
    // 输入矩阵元素
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            scanf("%d", &a[i][j]);
        }
    }
    
    // 求对角线元素之和
    for (int i = 0; i < 3; i++) {
        sum += a[i][i];
    }
    
    printf("对角线之和是%d\n", sum);
    
    return 0;
}

方法2:

#include<iostream>
#define N 3
#define M 3
using namespace std;
int main()
{
 float a[N][M],sum=0;
 int i,j;

  for(i=0;i<N;i++)
    for(j=0;j<M;j++)
      cin>>a[i][j];
  for(i=0;i<N;i++)
    sum=sum+a[i][i];
  cout<<"对角线之和是"<<sum<<endl;
return 0;
}

8. 链接字符串

题目:编写程序,将两个字符串连接起来,不要用strcat函数。

方法1:

#include <stdio.h>

int main() {
    char str1[100], str2[100];
    int i, n;

    i = n = 0;
    gets(str1);
    gets(str2);

    // 使用循环将第二个字符串的字符逐个拼接到第一个字符串的末尾
    while (str1[n] != '\0') {
        n++;
    }

    while (str2[i] != '\0') {
        str1[n++] = str2[i++];
    }

    str1[n] = '\0'; // 添加字符串结束符

    printf("%s\n", str1);

    return 0;
}

方法2:

#include <iostream>
#define N 80
#define M 40
using namespace std;
int main()
{
 char s1[N],s2[M];
 int i=0,j=0;
 cin>>s1;
 cin>>s2;
 while(s1[i]!='\0')
   i++;
 while(s2[j]!='\0')
   s1[i++]=s2[j++];
 s1[i]='\0';
 cout<<s1<<endl;
 return 0;
}

9. 复制字符串数组

题目:编写程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strcpy函数,复制时,“\0”也要复制过去。“\0”后面的字符不用复制。

方法1:

#include <stdio.h>

void copyString(char s1[], char s2[]) {
    int i = 0;
    while (s2[i] != '\0') {
        s1[i] = s2[i];
        i++;
    }
    s1[i] = '\0';
}

int main() {
    char s1[100];
    char s2[] = "teacher";
    
    copyString(s1, s2);
    
    printf("%s\n", s1);
    
    return 0;
}

方法2:

#include<iostream>
#include<cstring>
#define N 80
using namespace std;
int main()
{
 char from[N],to[N];
 int i;
 cin>>to;
 cin>>from;
 for(i=0;i<=strlen(from);i++)
  to[i]=from[i];
 cout<<to<<endl;
 return 0;
}

10. 用冒泡法对一组数排序

题目:用冒泡法对一组数(假设5个数90 80 60 70 40)按由小到大的顺序排序并输出排序后的数。

方法1:

#include <stdio.h>

void bubbleSort(int arr[], int n) {
    int i, j, temp;
    for (i = 0; i < n-1; i++) {
        for (j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

int main() {
    int arr[] = {90, 80, 60, 70, 40};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    bubbleSort(arr, n);
    
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    
    return 0;
}

方法2:

#include <iostream>
#define N 5
using namespace std;
int main()
{ int a[N];
  int i,j,t;
  for (i=0;i<N;i++)                    
   cin>>a[i];
for(i=0;i<N-1;i++)  
	for(j=N-1;j>i;j--)                                       
	  if (a[j]< a[j-1])                      
	    {t=a[j];a[j]=a[j-1];a[j-1]=t;}
   
   for(i=0;i<N;i++)                      
     cout<<a[i]<<" ";
   cout<<endl;
return 0;
}

11. 调换数字顺序

题目:从键盘输入10个整数,将其中最小的数与第一个数对换,然后输出对换后的10个数。

方法1:

#include <stdio.h>

void inputNumbers(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        scanf("%d", &arr[i]);
    }
}

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void processNumbers(int arr[], int size) {
    int minIndex = 0;
    for (int i = 1; i < size; i++) {
        if (arr[i] < arr[minIndex]) {
            minIndex = i;
        }
    }
    swap(&arr[0], &arr[minIndex]);
}

void outputNumbers(int arr[], int size) {
    printf("");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int numbers[10];
    inputNumbers(numbers, 10);
    processNumbers(numbers, 10);
    outputNumbers(numbers, 10);
    return 0;
}

方法2:

#include <iostream>
using namespace std; 
int main()
{
   int i,number[10];
   int min,k=0,temp;
   for (i=0;i<10;i++)
     cin>>number[i];      //输入10个数
   min=number[0];
for (i=1;i<10;i++)
     if (number[i]<min) 
	 { min=number[i];k=i;}        // 查找最小值并记下下标
   temp=number[0];
   number[0]=number[k];
   number[k]=temp;             //交换
   //输出
   for (i=0;i<10;i++)
     cout<<number[i]<<" ";
cout<<endl;
return 0;
}

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值