C语言基础题...持续更新

Posted vs5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言基础题...持续更新相关的知识,希望对你有一定的参考价值。

题记

回首往昔,自己学C语言已经有一段时间了,在学习的过程中也遇到了很多的问题,也通过看其他大佬的博客得到解决。到今天,自己学有余力,准备记录一下自己的学习心得,帮助大家更好的理解题目。 近期的先从基础的开始写,到后面会慢慢的更新一些数据结构算法还有一些题,比如pat甲级乙级这些。

                                                                                                                                2021年11月10日

    

  1. 将给定N*N矩阵右上角乘上某个数

以对角线为分割线 即i=j的时候就是对角线上的点。

#include<stdio.h>
​
int main()
{
   int a[3][3]={
                1,2,3,
                4,5,6,
                7,8,9
        };
    int i,j,m=3;//假设要乘的数为3,具体看题目来  
    for(i = 0;i < 3;i++) // 右上角*m 
        for(j = i; j < 3; j++)      
             a[i][j]*=m; 
             
//  for(i = 0; i < 3;i++) // 左下角*m 
//      for(j = 0;j <= i;j++)
//          a[i][j]*=m;
             
    for(i = 0;i < 3;i++)
        {
        for(j = 0;j < 3;j++)
             printf("%d  ",a[i][j]);
        puts("");               
        }
    return 0;   
} 

  1. N*N矩阵的变换 行变列

1 2 3    1 4 7

4 5 6 ->2 5 8

7 8 9    3 6 9

观察发现

1.可以按照对角线对称交换(条件N*N)

2.也可以新开一个数组把第一行存到一列第二行存到第二列这样子依次存下去.

3.变一下输出顺序,交换两个for循环。(推荐)

下面举一下列子(按对角线对称)。

#include<stdio.h>

int main()
{
   int a[4][4]={
                1,2,3,4,
                5,6,7,8,
                9,10,11,12,
                13,14,15,16
        };   
    int i,j; 
    for(i = 0;i < 4 ;i++) 
      for(j = 0;j < i;j++)  
      {    
      		int t = a[i][j];
      		a[i][j] = a[j][i];
      		a[j][i] = t;		  
	  }
//    for(i = 0;i < 3 ;i++)    错误写法 这样就相当于交换了两遍,矩阵没有变化 
//      for(j = 0;j < 3;j++)
//      {
//     
//      		int t = a[i][j];
//      		a[i][j] = a[j][i];
//      		a[j][i] = t;
//		  
//	  }
	  
	for(i = 0;i < 4;i++)
		{
		for(j = 0;j < 4;j++)
		     printf("%d  ",a[i][j]);
		puts("");	         	
     	}
    return 0; 	
} 

下面给一道列题(交换两个for循环顺序)

矩阵转置

#include<cstdio>
#include<iostream>
using namespace std;
​
int a[101][101];
int main()
{   
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0;i < n ; i++)
       for(int j =0;j < m ;j++)
           scanf("%d",&a[i][j]);
           
           
    //当j = 0 , 第一行也就是a[0][0] a[1][0] a[2][0]....a[n-1][0] 
    // 这样相当先遍历第一列 然后第二列.... 就相当于转置了 
    for(int j = 0;j < m; j++)
       {
         for(int i = 0 ;i < n; i++)
             printf("%d ",a[i][j]);          
        printf("\\n");  
       }
                
    return 0;   
} 

3.求一个序列最大值 和 最小值

给出一到例题

最大值和最小值的差

#include<stdio.h>
​
int a[10010];
int Max_(int a[],int L)
{
    int x = a[0]; // 假设第一个数最大 
    for(int i = 1;i < L; i++) 
      if(a[i] > x)  x = a[i]; // 如果有比x数大的,那就把值给x 
      return x;
}
​
int Min_(int a[],int L)
{
    int x = a[0];
    for(int i = 1;i < L; i++) 
      if(a[i] < x)  x = a[i];
      return x;
}
​
​
int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 0 ;i < n; i++) scanf("%d",&a[i]);
    printf("%d",Max_(a,n)-Min_(a,n));
    return 0;
}

如有错误,请大佬们斧正!!!

以上是关于C语言基础题...持续更新的主要内容,如果未能解决你的问题,请参考以下文章

c/c++刷算法题时常用的函数手册 持续更新--

2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 思路及代码实现(持续更新中)

2021数学建模C题详细思路,代码,论文,参考文献(持续更新)

回归 | js实用代码片段的封装与总结(持续更新中...)

小程序各种功能代码片段整理---持续更新

Java面试题总结 | Java基础部分(持续更新)