首页 > 编程语言 >c语言编程题

c语言编程题

时间:2024-03-18 12:26:31浏览次数:13  
标签:10 main 语言 int 编程 ++ 测试 include

1.密码破译

要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母。
例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。

测试输入:China

测试输出:Glmre

#include <stdio.h>
int main(){
    char s[11];                             
    gets(s);                                //输入字符串
    for (int i = 0; s[i] != '\0'; i++){
        if (s[i] >= 'A' && s[i] <= 'Z'){             //判断是否为大写字母
            s[i] = (s[i] + 4 - 'A') % 26 + 'A';     //大写字母后移
        }
        if (s[i] >= 'a' && s[i] <= 'z'){             //判断是否为小写字母
            s[i] = (s[i] + 4 - 'a') % 26 + 'a';     //小写字母后移
        }
    }
    puts(s);                                //输出字符串
    return 0;
}

2.最大公约数与最小公倍数

输入两个正整数m和n,求其最大公约数和最小公倍数。

测试输入:12,8

测试输出:4,24

#include <stdio.h> 
int main(){
    int n, m, r, p;
	scanf("%d,%d", &n, &m);
	if(n < m){	//确保 n 比 m 大 
		int temp = n;
		n = m;
		m = temp;
	} 
	p = n * m;
	while(m != 0){
		r = n%m;
		n = m;
		m = r;
	}
	
	printf("最大公约数为: %d\n", n);
	printf("最小公倍数为: %d\n", p/n);
	return 0;
}

3.字符统计

输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。

测试输入:aklsjflj123 sadf918u324 asdf91u32oasdf/.';123

测试输出:字母数:23,数字数:16,空格数:2,其他数:4

方法一:利用 getchar() 输入字符。

#include <stdio.h>
int main(){
    int letter = 0, number = 0, space = 0, other = 0;
    char ch;
     
    while((ch = getchar()) != '\n'){   //读入字符  
        if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
            letter ++;   
        else if (ch == ' ')
            space ++;  
        else if (ch >= '0' && ch <= '9')
            number ++; 
    	else
            other ++;  
    }
    printf("字母数:%d,数字数:%d,空格数:%d,其他数:%d", letter, number, space, other);
     
    return 0;
}

方法二:利用 gets() 输入字符串。

#include <stdio.h>
#include <string.h>
char str[200];
int main(){
    int letter = 0, number = 0, space = 0, other, n;
    gets(str); 
    n = strlen (str); 
    
    for(int i = 0; i < n; i++){
        if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
            letter ++;
        else if (str[i] == ' ')
            space ++;
        else if (str[i] >= '0' && str[i] <= '9')
            number ++;
		else 
			other++;  
    }
    printf("字母数:%d,数字数:%d,空格数:%d,其他数:%d", letter, number, space, other);
     
    return 0;
}

4.求和1

求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如: a为2,n=5时,Sn=2+22+222+2222+22222,a,n由键盘输入。

测试输入:2 5

测试输出:24690

#include <stdio.h>
int main(){
    int a, n, sn = 0, temp = 0;
    scanf("%d %d", &a, &n);
    for(int i = 0; i < n; i++){
    	temp += a;
    	sn += temp;
    	a *= 10;
	}
    printf("%d\n", sn);
    return 0;
}

5.求和2

求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。

#include <stdio.h>
int main(){
    int n;
    long long Sn = 0, temp = 1;
    scanf("%d", &n); 
     
    for (int i = 1; i <= n; i++){
        temp = temp * i;
        Sn = Sn + temp;
    }
    printf("%lld", Sn); 
    return 0;
}

6.求和3

求以下三数的和, 1a之和,1b的平方和,1~c的倒数和。a,b,c 由键盘输入,保留2位小数。

测试输入:100 50 10

image-20240313162529867

测试输出:47977.93

#include <stdio.h>
int main(){
    int a, b, c;
    double sum1 = 0, sum2 = 0 , sum3 = 0;
    scanf("%d %d %d", &a, &b, &c); 
     
    for (int i = 1; i <= a; i++)
    	sum1 += i;
 	for (int i = 1; i <= b; i++)
    	sum2 += i * i;
    for (double i = 1; i <= c; i++)//i作分母,使用double类型 
    	sum3 += 1/i;
    	
    printf("%.2lf", sum1 + sum2 + sum3); 
    return 0;
}

7.水仙花数

打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=13+53+3^3。

测试输入:无

测试输出:无

#include<stdio.h>
int main(){
    int a,b,c;
    for(int i=100; i<1000; i++){
        a = i / 100;	//百位 
        b = i / 10 % 10;	//十位 
        c = i % 10; 	//个位 
        if(a*a*a + b*b*b + c*c*c == i)
            printf("%d ",i);
    }
    return 0;
}

8.完数

一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子。

测试输入:1000

测试输出:6 its factors are 1 2 3

​ 28 its factors are 1 2 4 7 14

​ 496 its factors are 1 2 4 8 16 31 62 124 248

#include <stdio.h>
 
int main(){
    int N, sum = 0;
    scanf( "%d", &N );
 
    for ( int i = 2; i <= N; i++ ){
        for ( int j = 1; j <=i/2; j++ ){
            if ( i % j == 0 )
                sum = sum + j;
        }
 
        if ( sum == i ){
            printf( "%d its factors are ", i );

            for ( int k = 1; k <=i/2; k++ ){
                if ( i % k == 0 )
                    printf( "%d ", k );
            }
            printf( "\n" );
        }
        
        sum = 0;
    }
    return 0;
}

9.求和4

有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。

测试输入:10

测试输出:16.48

#include<stdio.h>

int main(){
	int n;
    double sum = 0, a = 2.0, b = 1.0, t;//a为分子,b为分母
    scanf("%d", &n);
    
    for(int i = 0; i < n; i++){
    	sum += a / b;
        t = a;
        a = a + b;
        b = t;
    }
    
    printf("%0.2lf", sum);
    return 0;
}

10.自由下落的距离计算

一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数。M, N由键盘输入。

测试输入:1000

测试输出:5

#include<stdio.h>

int main(){
	double M, N;
	scanf("%lf %lf", &M, &N);
	double sum = M, h = M/2;
	for(int i = 1; i < N; i++){
		sum += 2*h;
		h = h/2;
	}
	printf("%lf %lf", h, sum);
	
    return 0;
}

11.猴子吃桃

猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。

测试输入:10

测试输出:1534

# include <stdio.h>
 
int main()
{
    int sum = 1, n;
    scanf("%d", &n);
    while(n > 1){	//注意循环 n-1 次, 不是n次
    	sum = (sum + 1) * 2;
    	n--;
	}
    printf("%d", sum);
 
    return 0;
}

12.迭代法求平方根

用迭代法求 平方根。

公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数。

#include <stdio.h>
#include <math.h>

int main(){
    double a, x0, x1;
    scanf("%lf", &a);
    x0 = a/2;
    x1 = (x0 + a/x0)/2;  
    
    while(fabs(x1-x0) > 1e-5){
    	x0 = x1;
		x1 = (x0 + a/x0)/2;    
    }
    
    printf("%0.3lf", x1);
    return 0;
}

13.筛选N以内的素数

筛选法求N以内的素数。

测试输入:10

测试输出:

2
3
5
7

#include <stdio.h>
#include <math.h>

int main(){
    int N, isPrime = 1;	
    scanf("%d", &N);
    
    for(int i = 2; i <= N; i++){//因为 1 不是素数,i 从 2 开始
        isPrime = 1;                
        for(int j = 2; j <= sqrt(i); j++){
            if(i % j == 0){
            	isPrime = 0;
			}      
        }
        if(isPrime == 1)            
            printf("%d\n", i);
    }
    return 0;
}

14.选择排序

输入10个数,用选择法对10个整数从小到大排序。

测试输入:4 85 3 234 45 345 345 122 30 12

测试输出:3 4 12 30 45 85 122 234 345 345

#include <stdio.h>

void Select_Sort(int a[], int len) {
	int min, temp;
	
    for (int i = 0 ; i < len - 1 ; i++){
        min = i;                  // 记录最小值,第一个元素默认最小
        for (int j = i + 1; j < len; j++){     // 访问未排序的元素
            if (a[j] < a[min]){    // 找到目前最小值
                min = j;    // 记录最小值
            }
        }
        
        if(min != i){
            temp = a[min];  // 交换两个变量
            a[min] = a[i];
            a[i] = temp;
        }
    }
}

int main(){
    int a[10];
	for(int i = 0; i < 10; i++)
		scanf("%d", &a[i]);
	
	Select_Sort(a, 10);
	
	for(int i = 0; i < 10; i++)
		printf("%d ", a[i]);
		
	return 0;
}

15.冒泡排序

输入10个数,用选择法对10个整数从小到大排序。

测试输入:4 85 3 234 45 345 345 122 30 12

测试输出:3 4 12 30 45 85 122 234 345 345

#include <stdio.h>

void Bubble_Sort(int a[], int len){
    int temp;
    for (int i = 0; i < len - 1; i++){
    	for (int j = 0; j < len - 1 - i; j++){
    		if (a[j] > a[j + 1]){
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
		}
	}
}

int main(){
    int a[10];
	for(int i = 0; i < 10; i++)
		scanf("%d", &a[i]);
	
	Bubble_Sort(a, 10);
	
	for(int i = 0; i < 10; i++)
		printf("%d ", a[i]);
		
	return 0;
}

16.直接插入排序

输入10个数,用选择法对10个整数从小到大排序。

测试输入:4 85 3 234 45 345 345 122 30 12

测试输出:3 4 12 30 45 85 122 234 345 345

#include <stdio.h>

void Insert_Sort(int a[], int len){
    int temp, j;//将 j 定义在for循环外,后面要用到 j 
    for (int i = 1; i < len; i++){
        temp = a[i];
        for (j = i; j > 0 && a[j-1] > temp; j--){
            a[j] = a[j-1];
		}
        a[j] = temp;
    }
}

int main(){
	int a[10];
	for(int i = 0; i < 10; i++)
		scanf("%d", &a[i]);
	
	Insert_Sort(a, 10);
	
	for(int i = 0; i < 10; i++)
		printf("%d ", a[i]);
		
	return 0;
}

17.二分查找(折半查找)

查找 target 在有序数组中的下标。数组长度n,有序数组中的n个元素,target 均由键盘输入。

测试输入1:

4

1 2 3 4

4

测试输出1:4在数组中的下标为3

测试输入2:

4

1 2 3 4

0

测试输出2:数组中不存在0

#include <stdio.h>

int a[100];

int search(int a[], int n, int target){ //a是数组,n是数组a的大小,target是需要查找的值
    int left = 0, right = n - 1;
    
    while (left <= right){	//当left <= right时,区间 [left, right]有效 
        int mid = (right + left) / 2;
        if (a[mid] > target){
            right = mid - 1;	//target在左区间 [left, mid - 1]
        } 
		else if (a[mid] < target){
            left = mid + 1;	//target在右区间 [mid + 1, right]
        } 
		else{	//既不在左边,也不在右边,那就是找到答案了
            return mid; //返回的是 target在数组中的位置 
        }
    }
    //循环结束都没有找到目标值,说明数组中没有 target
    return -1;
}

int main(){
	int n, target, pos;
	scanf("%d", &n);

	for(int i = 0; i < n; i++)
		scanf("%d", &a[i]);
	scanf("%d", &target);
	
	pos = search(a, n, target);
	if(pos == -1)
		printf("数组中不存在%d\n", target);
	else 
		printf("%d在数组中的下标为%d\n", target, pos);
	
	return 0;
}

18.矩阵对角线求和

输入一个3×3矩阵,求主对角线元素之和与副对角线元素之和。

测试输入:

1 2 3
1 1 1
3 2 1

测试输出:

主对角线之和为 3
副对角线之和为 7

#include<stdio.h>
int main(){
    int a[3][3];
    int sum1 = 0, sum2 = 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++){
        for(int j=0; j<3; j++){
            if(i == j)	//主对角线 
                sum1 += a[i][j];
            if(i + j == 2)	//副对角线 
                sum2 += a[i][j];
        }
    }
    
    printf("主对角线之和为 %d\n副对角线之和为 %d\n", sum1, sum2);
    return 0;
}

19.数组插入

已有一个已正序排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。

测试输入:
1 7 8 17 23 24 59 62 101
50

测试输出:

1 7 8 17 23 24 50 59 62 101

#include<stdio.h>

int main(){
	int a[10], num;
    for(int i = 0; i < 9; i++)
    	scanf("%d", &a[i]);
    scanf("%d", &num);
	
	int j;
    for (j = 9; j > 0 && a[j-1] > num; j--){ //直接插入排序的思想 
        a[j] = a[j-1];	//元素后移 
	}
    a[j] = num;	
    
    for(int i = 0; i < 10; i++)
    	printf("%d ", a[i]);
    	
    return 0;
}

20.数字逆序输出

输入n个数字,然后逆序输出。

测试输入:

10

1 2 3 4 5 6 7 8 9 0

测试输出:

0 9 8 7 6 5 4 3 2 1

#include<stdio.h>

int a[100];

int main(){
	int n;
	scanf("%d", &n);
	for(int i = 0; i < n; i++)
		scanf("%d", &a[i]);
	for(int i = n-1; i >= 0; i--)
		printf("%d ", a[i]);
    	
    return 0;
}

标签:10,main,语言,int,编程,++,测试,include
From: https://www.cnblogs.com/bwtyt/p/18080065

相关文章

  • Node+Vue毕设少儿编程教育系统(程序+mysql+Express)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今信息化社会,编程教育逐渐成为儿童素质教育的重要组成部分。越来越多的家长认识到从小培养孩子的计算机思维和编程能力对其未来学习和职业发展的重要性......
  • 排序算法01 - 插入排序 (C语言)
    原理将a[0]作为哨兵,然后从a[2]开始遍历数组,如果发现前者比后者大,则将后者存入哨兵,再从后向前调整数组元素的位置,最后将哨兵插入即可。图示代码#include<stdio.h>constintN=10010;inta[N];n;voidinsert_sort(inta[]){intj;for(inti=2;i<=n;i++){......
  • 整块代码自动生成、智能括号匹配……CodeGeeX编程提效,功能再升级!
    CodeGeeX插件功能持续打磨,希望成为开发者更高效的智能编程工具,提高开发速度和代码质量。今天介绍VSCode中最新的v2.4.0版本插件新功能,让你在编写代码时更加得心应手。一、新增block代码块生成的设置CodeGeeX插件中,以往针对代码生成的行数,只有Automatic和Linebyline两种模式。......
  • 在LabVIEW中编程运行可执行程序
    以下文字来自于https://knowledge.ni.com/KnowledgeArticleDetails?id=kA03q000000YGhVCAW&l=en-US翻译来自于ChatGPT3.5 在LabVIEW中,您可以使用SystemExecVI来编程调用可执行文件(*.exe)或应用程序。SystemExecVI接受一个字符串输入,在Windows命令提示符中执行该字符串;要启......
  • C#异步编程:原理与实践
    一、引言在现代应用程序开发中,尤其是在涉及I/O操作(如网络请求、文件读写等)时,异步编程成为了提高性能和用户体验的关键技术。C#作为.NET框架下的主流开发语言,提供了强大的异步编程支持,通过async/await关键字,可以让开发者以同步的方式编写异步代码,极大地简化了异步编程的复杂性。本......
  • 【golang语言】
    目录数据类型基础数据类型boolstringintint8int16int32int64uintuint8uint16uint32uint64uintptrbyterunefloat32float64complex64complex128类型转换go语言不允许隐式转换别名类型和原有类型也不能进行隐式转换类型的预定义值......
  • Android第一行代码——快速入门 Kotlin 编程(2.5 面向对象编程)
    目录2.5    面向对象编程2.5.1    类与对象2.5.2    继承与构造函数2.5.3    接口2.5.4    数据类与单列类2.5    面向对象编程        和很多现代高级语言一样,Kotlin也是面向对象的,因此理解什么是面向对......
  • 地理探测器R语言实现:geodetector
      本文介绍基于R语言中的geodetector包,依据多张栅格图像数据,实现地理探测器(Geodetector)操作的详细方法。  需要说明的是,在R语言中进行地理探测器操作,可以分别通过geodetector包、GD包等2个包实现。其中,geodetector包是地理探测器模型的原作者团队早先开发的,其需要保证输入的......
  • 架构知识-编程语言的演进
    架构学习-编程语言的演进前言什么是冯·诺伊曼结构中央处理器存储器输入输出设备汇编语言编程范式的进化1、过程式2、函数式3、面向对象参考架构学习-编程语言的演进前言这里开始来尝试了解下架构层面的知识。什么是冯·诺伊曼结构冯·诺伊曼结构(英语:V......
  • 新书速览|轻松学C++编程:案例教学
    零负担学习C++语言的语法,轻松上手C++面向对象程序设计本书简介The19thAsianGames《轻松学C++编程:案例教学》从初学者的角度循序渐进地从C++语言的基础语法到高级语法进行讲解。全书使用生动的实例和图示,介绍C++面向对象程序设计的基础知识;进而通过案例详解类的高级应......