C语言常见题目汇总(不断更新)(建议收藏)

前言:

C语言的常见题,对大家学习C语言会有一定的帮助,不断地会收录新题(含牛客网的习题)

没有对题型进行分类,大家自行挑选对自己有用的题目

如果代码有什么bug,或者你比我有更好的处理方法还请及时下方留言

如果还需要哪种题型也可以下方留言

感谢支持!!!


eg1.(斐波那契数列)非递归的

方法1:

int main()
{
	int arr[30];//定义一个数组
	arr[0] = 0;//设置数组的第一个元素为0
	arr[1] = 1;//设置数组的第二个元素为1
	int i = 0;//定义一个循环变量
	for (i = 2; i < 30; i++)
	{
		arr[i] = arr[i - 1] + arr[i - 2];//从第三个元素开始等于前两个元素的和 循环去赋值
	}
	for (i = 0; i < 30; i++)
	{
		printf("%d\n", arr[i]);//循环把元素都打印出来
	}
	return 0;
}

方法2:递归求解

int fib(int n)
{
	if (n == 0)//第一个原素打印 0
	{
		return 0;
	}
	if (n <= 2 && n > 0)//第一个元素打印1
	{
		return 1;

    }
	else//从第三个元素开始递加
	{
		return fib(n - 1) + fib(n - 2);
	}
	

}
int main()
{
	int i = 0;
	for (i = 0; i < 20; i++)
	{
		int ret = fib(i);//打印斐波那契数列
		printf("%d\n", ret);
	}
	return 0;
}

效果如图:

方法3:(变式)求斐波那契数列的第n个元素

#pragma warning(disable : 4996)
#include <stdio.h>
int fib(int n)
{
	int result = 1;  
	int pre_result = 1;
	int next_preresult ;
	while (n > 2)  //从第三个数字才开始有规律 数值等于前两个相加
	{
		n = n - 1;
		next_preresult = pre_result;
		pre_result = result;
		result = pre_result + next_preresult;
	}
	return result;
}
int main()
{
	printf("请你输入想要查询的n的数值\n");
	int n = 0;
	scanf("%d", &n);//捕获你想查询的数字
	int ret = fib(n);//接收算出来的返回值(n所对应的斐波那契数列数值)
	printf("%d", ret);
	return 0;
}

效果如图:

eg2.字符金字塔(输入一个字符输出相应字符所对应的金字塔)

#include <stdio.h>
int main()
{
    char a;
    scanf("%c", &a);
    int i = 1;//行
    int j = 1;
    for (i = 1; i <= 5; i++)//从第一行开始  一共有5行
    {
        for (j = 5-i; j >=0; j--)//打印空格  空格从第一行到第五行空格是递减的  第一行四个空格第五行没有空格,所以利用循环 5-i表示打印的空格数去打印空格
        {
            printf(" ");
        }
        for (j = 1; j <= i; j++)//一行有几个字符取决于字符在第几行,在第几行打印打印几个字符
        {
            printf("%c ", a);
        }
        printf("\n");//循环完打印完一行换行
    }
    return 0;
}

效果如图:

(变式)打印菱形    (与上方的打印方法基本一致加一步打印倒三角)

//}
#include <stdio.h>
int main()
{
    char a;
    scanf("%c", &a);
    int i = 1;//行
    int j = 1;
    //打印上三角
    for (i = 1; i <= 5; i++)//从第一行开始  一共有5行
    {
        for (j = 5-i; j >=0; j--)//打印空格
        {
            printf(" ");
        }
        for (j = 1; j <= i; j++)
        {
            printf("%c ", a);
        }
        printf("\n");
    }
    //打印倒三角
    for (i = 4; i>=1; i--)//从第一行开始  一共有5行
    {
        for (j = 5 - i; j >= 0; j--)//打印空格
        {
            printf(" ");
        }
        for (j = 1; j <= i; j++)
        {
            printf("%c ", a);
        }
        printf("\n");
    }
    return 0;
}

效果如图:

 (变式)根据自己需求打印多少行的菱形

#include <stdio.h>
int main()
{
    char a;
    int n = 0;
    scanf("%c %d", &a, &n);
    int i = 1;//行
    int j = 1;
    //打印上三角
    for (i = 1; i <= n; i++)//从第一行开始  一共有5行
    {
        for (j = n-i; j >=0; j--)//打印空格
        {
            printf(" ");
        }
        for (j = 1; j <= i; j++)
        {
            printf("%c ", a);
        }
        printf("\n");
    }
    //打印倒三角
    for (i = n-1; i>=1; i--)//从第一行开始  一共有5行
    {
        for (j = n - i; j >= 0; j--)//打印空格
        {
            printf(" ");
        }
        for (j = 1; j <= i; j++)
        {
            printf("%c ", a);
        }
        printf("\n");
    }
    return 0;
}

效果如图: 



eg3. 反向输出一个四位数字(逆序输出)

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    int q = n/1000;  //计算数字的每一位  千位
    int b = n%1000/100;//百位
    int s = n%100/10;//十位
    int g = n%10;//个位
    int new = g*1000+s*100+b*10+q*1;//倒着赋值回去
    printf("%04d",new);
}

 效果如图:

eg4. (利用海伦公式)计算三角形的周长和面积

#include <stdio.h>
#include <math.h>
int main()
{
    int a = 0;//定义三个整形数据
    int b = 0;
    int c = 0;
    scanf("%d %d %d", &a, &b, &c);//录入数据
    if (a + b >= c && a - b <= c)//判断是否满足三角形的的前提条件
    {
        float zc = (float)(a + b + c);//将周长强制转换成浮点类型
        float S = 0;//定义一个浮点类型的面积S
        float p = 0;//定义一个浮点型的半周长p
        p = (float)(zc / 2);//初始化p
        float n = (float)((p - a) * (p - b) * (p - c));//利用海伦公式
        float f = p * n;
        S = sqrt(f);
        printf("circumference=%.2f area=%.2f\n", zc, S);
    }


}

 效果如图:

 

海伦公式:相关海伦公式的介绍(点击即可查询)

eg 5.井字棋(简单版没有棋盘)(同往期博客的三子棋游戏)

#include <stdio.h>
char fun(char arr[3][3])
{
    int i = 0;
    for (i = 0; i < 3; i++)//竖着的三种情况(一列)
    {
        if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])//利用循环对i进行变化去判断一列的元素是不是相等
        {
            return arr[0][i];//返回那个下标元素 
        }
    }
    for (i = 0; i < 3; i++)//横着的三种情况(一行)
    {
        if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])//利用循环对i进行变化去判断一行的元素是不是相等
        {
            return arr[i][0];//返回那个下标元素 
        }
    }
    //判断主对角线上的三个元素
    
        if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])//利用主对角线所对应坐标去判断元素是否相等
        {
            return arr[0][0];//返回那个下标元素 
        }
    
   //判断副对角线上的三个元素
    
        if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])//利用副对角线所对应坐标去判断元素是否相等
        {
            return arr[1][1];//返回那个下标元素 
        }
        else //都不是就返回一个平局
        {
            return 'Q';//Q代表平局
        }
    
}
int main()
{
    char arr[3][3] = { 0 };//初始化棋盘
    int i = 0;
    int j = 0;
    for (i = 0; i < 3; i++)//循环对棋盘进行初始化
    {
        for (j = 0; j < 3; j++)
        {
            scanf("%c", &arr[i][j]);//录入元素
            getchar();//清除换行
        }
        
    }
    char str = fun(arr);//调用判断输赢的fun函数
    if (str == 'K')//返回的K就是kiki赢
    {
        printf("KiKi wins!\n");
    }
    else if (str == 'B')//返回的B就是kiki赢
    {
        printf("BoBo wins!\n");
    }
    else 
    {
        printf("No winner!\n");//上面两种情况 都不是就是都没赢
    }
    return 0;
}

 效果如图:

1.主对角线情况

 

2.副对角线情况

3.一列的情况

4.一行的情况

5..都没赢的情况


 

eg 6.  相关质数的求法

#include <stdio.h>
int main()
{
    int i = 0;
    int j = 0;
    for (i = 2; i < 10; i++)//从2-10的数字(这里的10是可以改动的)
    {
        for (j = 1; j < i; j++)//从1开始设置被除数小于数字本身即可
        {
            if (i % j == 0 && j != 1)//判断哪些数字不满足题目要求(判断一下除了自身和1还没有可以整除的数字  如果有进入if语句停止循环  所对应的数字不是质数)
            {
                break;//有一个本身及1的被除数外即停止本次循环
            }
            
        }
        if (i == j)//这些数字都是循环完整一边后(j的数值不满足小于i)才跳出来的(这就证明这些数字都是只能被本身和1整除的  所以他们是质数)
        {
            printf("%d ", i);//打印出来这些质数
        }
        
    }
    return 0;
}

 效果如图:(10以内的质数)(10可以改变)

方法 2 :筛选法求质数(素数)(从2开始的后面的数组元素只要可以被2整除全部置成0,以此类推可以被3,4,5等等整除的数字全部置成0)(最终数组剩下的元素即为质数)

#include <stdio.h>
int main()
{
    int n = 0; //设置你想打印从数字2到数字几(n所对应的数值)
    int arr[100] = { 0 };//定义一个数组用来存放 数字 2~n
    while (scanf("%d", &n) != EOF)//输入n的数值
    {
        int i = 0;
        int j = 0;
        for (i = 2; i <= n; i++)//从2开始存进数组中
        {
            arr[j] = i;//以i为循环变量去把从2~n的数值赋值进数组里
            j++;
        }
        //对数组全部的元素进行访问  从2开始的后面的数组元素只要可以被2整除全部置成0,以此类推可以被3,4,5等等整除的数字全部置成0)(最终数组剩下的元素即为质数)
        for (i = 2; i <= n; i++)
        {
            for (j = 0; j <= n - 2; j++)
            {
                if (i != arr[j])
                {
                    if (arr[j] % i == 0)
                    {
                        arr[j] = 0;
                    }
                }

            }
        }
        for (i = 0; i <= n; i++)
        {
       
            if (arr[i] != 0)//数组元素中不是0的给他打印出来就是质数
            {
                printf("%d ", arr[i]);
            }
        }
        printf("\n");
       
    }
    return 0;
}

eg 7.计算球体的体积

#include <stdio.h>
#include <math.h>
#define pi 3.1415926  定义一个宏  是π的数值
int main()
{
    float r = 0;
    scanf("%f", &r);  //输入半径
    float mid = (float)4/(float) 3;//注意一定要对4/3的每个元素进行强制类型转化  因为3和4都是整型变量所以4/3的结果也是整型,所以需要强制转化  这样才可以输出 4/3的数值
    double V = mid * pow(r, 3) * pi;//球的体积公式
    printf("%.3lf", V);
    return 0;
}

eg 8. 2的n次方 (特殊方法)

不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。

#include <stdio.h>
#include <math.h>
int main()
{
    int a = 0;
   while(scanf("%d", &a) != EOF) {
        //高效的实现可以使用左移,移动a位即为2的a次方
        printf("%d\n", 1 << a);
    }
    return 0;
}

方法 2 :一般方法直接利用C语言的库函数pow

#include <stdio.h>
#include <math.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = pow(2, n);
	printf("%d", ret);
	return 0;
}

eg 9 .变种水仙花数

#include <stdio.h>
int LilyNumber(int i)
{
    int flag = 0;//定义了一个判断变量
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    a = i % 10000 * (i / 10000);//获取10000-100000数字的每一位
    b = i % 1000 * (i / 1000);
    c = i % 100 * (i / 100);
    d = i % 10 * (i / 10);
    if (a + b + c + d == i)
    {
        flag = 1;//如果加在一起相等flag变成1  就是满足条件的数字
    }


    return flag;
}
int main()
{
    int i = 0;
    for (i = 10000; i < 100000; i++)
    {
        int ret = LilyNumber(i);//循环调用函数去打印出数字
        if (ret == 1)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

eg 10.三角形判断

#pragma warning(disable : 4996)
#include <stdio.h>
int main()
{
    int a, b, c;
    while (scanf("%d %d %d", &a, &b, &c) != EOF)
    {

        if (a + b > c && a - b < c)//满足三角形大条件
        {
            //再判断下面三类三角形
            if (a == b && b == c && c == a)
            {
                printf("Equilateral triangle!\n");
            }
            else if (a == b || c == a || c == b)
            {
                printf("Isosceles triangle!\n");
            }
            else if (a * a + b * b == c * c || c * c + b * b == a * a || a * a + c * c == b * b)
            {
                printf("Right angle!\n");
            }
            
            else
            {
                printf("Ordinary triangle!\n");
            }

        }
        else//不满足三角形大条件
        {
            printf("Not a triangle!\n");
        }
    }
    return 0;
}

eg 11.简单计算器

#include <stdio.h>
int main()
{
    double a = 0.0;
    double b = 0.0;
    char c = 0;
    while(scanf("%lf%c%lf",&a,&c,&b)!=EOF)//输入两个数字和一个运算符 进去计算就好了
    {
        double sum = 0.0;
        if(c=='+')
        {
            sum = a+b;
            printf("%.4lf+%.4lf=%.4lf\n",a,b,sum);
        }
        else if(c=='-')
        {
            sum = a-b;
            printf("%.4lf-%.4lf=%.4lf\n",a,b,sum);
        }
        else if(c=='*')
        {
            sum = a*b;
            printf("%.4lf*%.4lf=%.4lf\n",a,b,sum);
        }
        else if(c=='/')
        {
            sum = a/b;
            if(b==0)
            {
                printf("Wrong!Division by zero!\n");
            }
            else
            {
                printf("%.4lf/%.4lf=%.4lf\n",a,b,sum);
            }
        }
        else
        {
            printf("Invalid operation!\n");
        }
        
    }
    return 0;
}

eg 12.打印线图案

#include <stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d",&n)!=EOF)
    {
        int i = 0;
        for( i = 0 ; i < n ;i++)//循环按需求打印*个数
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

 

eg 13. 打印正方形

#include <stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d",&n)!=EOF)
    {
        int i = 0;
        int j = 0;
        for( i = 0 ;i < n ;i++ )
        {
            for( j = 0 ;j < n ;j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
}

eg 14.打印直角三角形

#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d",&n)!=EOF)
    {
        int i = 0;
        int j = 0;
        for(i = 0;i < n;i++)
        {
            for(j = 0 ;j <= i;j++ )//j<=i(*的个数小于等于行数就可以打印出来)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

 

eg 15.打印倒三角

#include "stdio.h"
 
int main(){
    int x=0;
    int i,j,k;
 
    while(scanf("%d",&x)!=EOF)
{
    k=x;
       for(i=1;i<=x;i++)
    {   
        for(j=1;j<=k;j++)//同打印正三角一样就是从多*向少*打印
        {
            printf("* ");
        }
          k--;//打印一行后减少下次打印*的个数
           printf("\n");
 
       }
}
 
    return 0;
}

eg 16.打印靠右的三角 

#include<stdio.h>
int main(){
    int n,i,j;
    while(~scanf("%d",&n)){
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
               if(j<n-i-1) printf("  ");
               else printf("* ");
            }printf("\n");
        }
    }
}

eg 16.打印金字塔(同上代码一致就是if条件句是打印1个空格,上面题目打印的是两个空格)

#include<stdio.h>
int main(){
    int n,i,j;
    while(~scanf("%d",&n)){
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
               if(j<n-i-1) printf(" ");
               else printf("* ");
            }printf("\n");
        }
    }
}

 

eg 17. 打印倒金字塔

#include <stdio.h>
int main()
{
int a = 0;
while (~scanf("%d", &a))
{
for (int b = 0; b < a; b++)
{
for (int c = 0; c < b; c++)
{
printf(" ");
}
for (int d = 0; d < a-b; d++)
{
printf("* ");
}printf("\n");
}
}return 0;
}

eg 18. 打印k形图案

#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        int j = 0;
        for (i = 0; i <= n; i++)//打印上三角
        {
            for (j = n-i; j >= 0; j--)//*数量随着行数+而-1
            {
                printf("* ");
            }
            printf("\n");
        }
        for (i = 1; i <= n; i++)//打印下三角
        {
            for (j = 1; j <=i+1; j++)//每一行的*数量等于行数+1
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

 

eg 19. 打印箭头形图案

#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        int j = 0;
        for (i = 0; i <= n; i++)//上半部分
        {
            for (j = 2 * n - (2 * i); j > 0; j--)
            {
                printf(" ");
            }//打印空格
            for (j = 0; j <= i; j++)
            {
                printf("*");
            }
            printf("\n");
        }
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= 2 * i; j++)
            {
                printf(" ");
            }
            for (j = n - i + 1; j >= 1; j--)
            {
                printf("*");
            }
            printf("\n");
        }

    }
    return 0;
}

eg 20. 打印反斜线

#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        int j = 0;
   
        for (i = 0; i < n; i++)//打印行数
        {
            for (j = 0; j < i;j++)
            {
                printf(" ");
            }
            printf("*");
            printf("\n");
        }
    }
    return 0;
}

eg 21. 正斜线(与反斜线基本一致)(就是打印空格的代码略有区别)

#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        int j = 0;

        for (i = 0; i < n; i++)//打印行数
        {
            for (j = n-1-i; j >0; j--)
            {
                printf(" ");
            }
            printf("*");
            printf("\n");
        }
    }
    return 0;
}

eg 22.打印X形

#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        int j = 0;

        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {
                if (i == j || j == n - i - 1)
                {
                    printf("*");
                }
                else
                {
                    printf(" ");
                }
            }
            printf("\n");

        }
    }
    return 0;
}

 

eg 22.空心正方形

#include <stdio.h>
int main()
{
	int n = 0;
	while ((scanf("%d", &n) != EOF))
	{
		int i = 0;
		for (i = 0; i < n; i++)
		{
			int j = 0;
			for (j = 0; j < n; j++)
			{
				if (i == 0 || i == n - 1 || j == 0 || j == n - 1)//把不满足条件的点扣掉
				{
					printf("* ");//满足要求的打印*
				}
				else
				{
					printf("  ");//其他不满足的点置成空格
				}
			}
			printf("\n");
		}
	}
	return 0;
}

 eg 23.空心三角形

#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        int j = 0;
        for (i = 0; i < n; i++)//行数
        {
            for (j = 0; j < n; j++)
            {
                if (i == j || j == 0 || i == (n - 1))
                {
                    printf("* ");
                }
                else
                {
                    printf("  ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

 

 eg 24.有序序列插入一个数

#include <stdio.h>
void sort(int arr[], int n)
{
    int i = 0;
    int j = 0;
    int temp = 0;
    for (j = 1; j <= n; j++)
    {
        for (i = 0; i <= n - j; i++)
        {
            if (arr[i] > arr[i + 1])

            {
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
    }
}
int main()
{
    int arr[50] = { 0 };
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    for (i = 0; i < n; i++)//输入数组元素
    {
        scanf("%d", &arr[i]);
    }
    int cr = 0;
    scanf("%d", &cr);//输入想要插入的数组
    arr[n] = cr;//把想插入数组的元素赋值给数组
    sort(arr, n);//将插入好的数组进行冒泡排序
    for (i = 0; i <= n; i++)//打印出排序好的数组
    {
        printf("%d ", arr[i]);
    }
}

eg 25. 图片相似度

#include <stdio.h>
int main()
{
    int arr[10][10] = { 0 };
    int brr[10][10] = { 0 };
    int m = 0;
    int n = 0;
    int count = 0;
    scanf("%d %d", &m, &n);
    int i = 0;
    int j = 0;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);//初始化数组
        }
    }
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &brr[i][j]);//初始化数组
        }
    }
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (arr[i][j] != brr[i][j])//访问两个数组  如果元素不一样
            {
                count++;//计数器+1
            }
        }
    }
    int sum = n * m;//总元素
    int s = sum - count;//得到一样元素的数量
    float ret = (float)s / sum;//算出比例
    printf("%.2f", ret*100);
    return 0;
}

eg 26. 有序数组判断(升序or降序)

#include <stdio.h>
int main()
{
    int n = 0;
    int count1 = 0;
    int count2 = 0;
    int arr[50] = { 0 };
    int i = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);//初始化数组
    }
    for (i = 1; i < n - 1; i++)
    {
        if (arr[i] >= arr[i - 1] && arr[i + 1] >= arr[i])//判断数组元素的相邻元素是否满足升序或者是降序的标准
        {
            count1++;//满足升序计数器++
        }
        if (arr[i] <= arr[i - 1] && arr[i + 1] <= arr[i])
        {
            count2++;//满足降序计数器++
        }
    }
    if (count1 == (n - 2) || count2 == (n - 2))//判断如果计算器数量满足n-2即可因为是从第二个元素到倒数第二个元素   所以这里的n需要-2
    {
        printf("sorted\n");
    }
    else {
        printf("unsorted\n");
    }
    return 0;
}

 

 eg 27.数组中删除指定元素

#include <stdio.h>
int main()
{
    int n = 0;
    int arr[50] = {0};
    int i = 0;
    scanf("%d",&n);
    for(i = 0;i < n; i++)
    {
        scanf("%d",&arr[i]);初始化数组
    }
    int shan = 0;
    scanf("%d",&shan);//输入那个需要删除的数组
    for (i = 0;i < n;i++)
    {
        if(arr[i]==shan)//去循环判断如果等于数组中的元素
        {
            arr[i] = 0;//将数组中的那个对应元素  赋值成0
        }
    }
    
    for (i = 0;i < n;i++)
    {
        if(arr[i]!=0)//不打印0把其他的都打印出来
        {
             printf("%d ",arr[i]);
        }
    }
    return 0;
}

eg 28.数组去重

#include <stdio.h>
int main()
{
    int n = 0;
    int arr[1000] = { 0 };
    int i = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);//初始化数组
    }
    int j = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (i != j)//访问下标元素  在不是其本身的条件下去进行循环判断
            {
                if (arr[i] == arr[j])//如果有重合元素
                {
                    arr[j] = 0;//把该元素赋值成0
                }
            }
        
        }

    }

    for (i = 0; i < n; i++)//打印出来
    {
        if (arr[i] != 0)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}

 

eg 29.有序数组合并

#include <stdio.h>
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d", &m, &n);
    int num = m;
    int arr[5000] = { 0 };//定义两个数组
    int brr[5000] = { 0 };
    int i = 0;
    int j = 0;
    for (i = 0; i < m; i++)
    {
        scanf("%d", &arr[i]);//初始化这两个数组
    }
    for (j = 0; j < n; j++)
    {
        scanf("%d", &brr[j]);
    }
    int crr[10000] = { 0 };//定义一个大的数组
    for (i = 0; i < m; i++)
    {
        crr[i] = arr[i];//把arr数组的元素赋值给crr数组的前半段
    }
    for (i = 0; i < n; i++)
    {
        crr[num] = brr[i];//把brr数组的元素赋值给crr数组的后半部
        num++;
    }
    for (j = 1; j < m + n; j++)//合并完保证是升序的  进行冒泡排序
    {
        for (i = 0; i < (m + n) - j; i++)
        {
            if (crr[i] > crr[i + 1])
            {
                int temp = crr[i];
                crr[i] = crr[i + 1];
                crr[i + 1] = temp;
            }
        }
    }
    for (i = 0; i < m + n; i++)//最后打印出来
    {
        printf("%d ", crr[i]);
    }
    return 0;
}

 

eg 30. 上三角形矩阵判断

#include <stdio.h>
int main()
{
    int n = 0;
    scanf ("%d",&n);
    int i = 0;
    int j = 0;
    int arr[10][10] = {0};
    int count = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0;j < n;j++)
        {
            scanf("%d",&arr[i][j]);//初始化数组
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0;j < n;j++)
        {
            if (i !=j && j < n-1 && i != 0)//去访问这些下表的元素看看他们是不是都是0
            {
                if (arr[i][j] == 0)
                {
                   count++;//是0计数器+1
                }
            }
        }
    }
    if (count==n*(n-1)/2)//上三角矩阵的0的个数  等于阶数*(阶数-1)/2
    {
        printf("YES\n");
    }
    else
    {
        printf("NO\n");
    }
    return 0;
}

eg 31.矩阵转置 (通过交换循环变量就可以实现)

#include <stdio.h>
int main()
{
	int n = 0;//行
	int m = 0;//列
	scanf("%d %d", &n, &m);
	int arr[10][10] = { 0 };
	int i, j;
	for (j = 0; j < n; j++)
	{
		for (i = 0; i < m; i++)
		{
			scanf("%d", &arr[i][j]);
				
		}
			
	}

	for (j = 0; j < m; j++)
	{
		for (i = 0; i < n; i++)
		{
			printf("%d ", arr[j][i]);

		}
		printf("\n");
	}


}

eg 32. 杨辉三角

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int j = 0;
    int arr[30][30] = { 0 };
    for (i = 0; i < n; i++)
    {
        for (j = 0; j <= i; j++)
        {
            if (j == 0)//第一列的元素全是1
            {
                arr[i][j] = 1;
            }
            else if (j == i)//对角线的元素都是1
            {
                arr[i][j] = 1;
            }
            else//其他的元素都等于上一行的元素+上一行左一列的元素和
            {
                arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
            }
        }
    }
    for (i = 0; i < n; i++)//打印出来杨辉三角
    {
        for (j = 0; j <= i; j++)
        {
            printf("%5d", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

eg 33.矩阵交换

#include <stdio.h>
int arr[10][10];
void swapr(int m, int a, int b)
{
    int temp;
     
    for(int i = 0; i < m;i++)//交换对应下标元素
    {
        temp = arr[a][i];
        arr[a][i] = arr[b][i];
        arr[b][i] = temp;
    }
}
void swapc(int n,int a, int b)//交换对应下标元素
{
    int temp;
    scanf("%d%d",&a,&b);
    for(int i = 0; i < n;i++)
    {
        temp = arr[i][a];
        arr[i][a] = arr[i][b];
        arr[i][b] = temp;
    }
}
int main()
{
    int n,m,k,a,b;
    char func;
     
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            scanf("%d",&arr[i][j]);//初始化数组
        }
    }
    scanf("%d",&k);//输入需要变化几次
    while(k)
    {
        scanf(" %c%d%d",&func,&a,&b);
        if(func == 'r')//行变换
        {
            swapr(m,a-1,b-1);//调用函数
        }
        if(func == 'c')//列变化
        {
            swapc(n,a-1,b-1);//调用函数
        }
        k--;
    }
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)//打印出来变化后的数组
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
}

eg 33.模拟实现计算器

#include <stdio.h>
//模拟实现计算器函数指针
int add(int x,int y)
{
	return x + y;
}
int sub(int x, int y)
{
	return x - y;
}
int cheng(int x, int y)
{
	return x * y;
}

void calc(int (*pf)(int, int))
{
	int ret = pf(3, 5);
	printf("%d", ret);
}
int main()
{
	calc(add);
	printf("\n");
	calc(sub);
	printf("\n");
	calc(cheng);
	return 0;
}

  • 45
    点赞
  • 398
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
C语言课程设计题目汇总是指在学习C语言课程过程中,所需完成的一系列设计题目汇总。这些题目旨在帮助学生提高C语言编程能力,理解C语言的基本概念和特点,并培养解决问题的能力。以下是一些可能的C语言课程设计题目汇总: 1. 编写一个计算器程序,可以进行基本的数学运算(加法、减法、乘法、除法)。 2. 编写一个学生成绩管理系统,可以输入学生的考试成绩,计算平均分并输出成绩报表。 3. 编写一个猜数字的游戏,让用户猜一个随机生成的整数。 4. 设计一个简单的学生图书管理系统,可以添加、删除、查询学生的借阅信息。 5. 编写一个程序,判断一个字符串是否是回文(正反读都相同)。 6. 实现一个简单的冒泡排序算法,对给定的一组数字进行排序。 7. 设计一个银行账户管理系统,可以进行存款、取款和查询余额操作。 8. 编写一个简单的文字游戏,让用户填写空白处,完成一个故事。 9. 实现一个简单的网络聊天程序,可以实现多用户之间的对话交流。 10. 设计一个简单的扫雷游戏,给定一组雷区,根据用户选择进行扫雷操作。 以上仅是一些可能的C语言课程设计题目,不同学校或教师可能会有不同的设置和要求。通过完成这些设计题目,学生可以巩固C语言的基础知识,锻炼编程思维和解决问题的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦の澜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值