栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言核心测试题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言核心测试题

文章目录
  • 一、判断是否是闰年
    • 1、闰年
    • 2、设计思路:
      • 2.1、从控制台获取
      • 2.2、用if判断是否满足闰年的条件。
      • 2.3、输出结果
    • 3、代码展示
  • 二、编写程序,输入x的值,求y的值
    • 1、设计思路
      • 1.1、根据题目可以看出x的值是需要从控制台获取的
      • 1.2、判断输入的x值是大于0还是小于0还是等于0
      • 1.3、输出根据题意y的值
    • 2、代码展示
  • 三、输入1+2+3+...+n的值
    • 1、设计思路
      • 1.1、首先n的值需要从控制台获取
      • 1.2、利用for循环,从1到n依次遍历。
        • 1.2.1、语法格式:
      • 1.3、创建一个变量累计增加1-n的值
    • 2、代码展示
  • 四、输入一个字符串,统计英文、数字和其他字符
    • 1、设计思路
      • 1.1、从控制台获取一个字符串。
      • 1.2、利用for循环遍历字符串所有字符
      • 1.3、创建三个变量,分别统计英文,数字和其他字符,利用if语句判断字符串的当前字符是什么类型,相应的变量进行累加,并且检测到’#‘结束统计。
      • 1.4、输出数字和字母和其他字符
    • 2、代码展示
  • 五、输入五个学生的成绩,求总分和平均分,并对成绩从高到低排序
    • 1、设计思路
      • 1、创建数组,从控制台输入。
        • 1.1、利用for循环遍历数组,给数组从第0位到第4位五个元素赋值
      • 2、创建两个变量存放总分和平均分。
      • 3、遍历数组每一位进行排序并且求出总分和平均分
      • 3.1、排序(这里用到冒泡排序)
        • 3.1.1、算法描述
        • 3.1.2、动画展示
        • 3.1.3、代码展示
        • 3.1.4、结果展示
      • 4、代码展示
  • 六、一位同学缓考,缓考后,老师需要把他的成绩插入班级成绩单中,成绩单已经按照分数从高到低进行排序。
    • 1、设计思路
      • 1.1、从控制台获取其他考生成绩和缓考学生的成绩,并且先按照从高到低排序。
      • 1.2、根据冒泡排序的比较原则,因为是已经排好序的成绩单, 利用if判断,找到比插入数大的成绩,然后存储下标。
      • 1.3、把存储的数组下标往后的元素对应的下标往后移动以为,在存储的下标元素上存储缓考学生的成绩。
    • 2、代码展示
  • 七、输入一个字符串判断是否为回文字符串,判断过程在函数中实现
    • 1、设计思路
      • 1.1、从控制获取一个字符串,创建一个int类型变量,存储接受状态,是回文数用1表示,不是回文数用0表示。
      • 1.2、在函数里利用for循环对字符串每一位字符进行遍历。判断是否为回文字符串
        • 1.2.1判断方法:
        • 1.2.2利用if判断
      • 1.3,在主函数创建int类型变量,如果函数内返回0则表示是回文数,如果不是0,则表示不是回文数。
    • 2、代码展示
  • 八、编写一个整数,判断是否是素数
    • 1、设计思路
      • 1.1、从控制台获取一个数
      • 1.2、for遍历从2到获取的数-1,判断是否为素数,并且用int类型存储是是否为素数,是的话为1,假为0
        • 1.2.1、素数:除了1和自身,之外没有可以被自身整除的数
      • 1.3、输出
    • 2、代码展示
  • 九、有一个数列为:1,1,2,3,5,8......,输出这个数列的前30项,每一行输出5个
    • 1、设计思路
      • 1.1、创建斐波那契数列数组,大小为30
      • 1.2、利用for循环写出斐波那契额列数组
        • 1.2.1、斐波那契数列:feibonaqie[] = {1,1,2,3,5,8,13,21,......,n}
      • 1.3、控制每输出五个换行
    • 2、代码展示

一、判断是否是闰年 1、闰年
  • 能被4整除,但不能被100整除的年份

  • 能被400整除的年份。

2、设计思路: 2.1、从控制台获取
int year;
printf("请输入一个年份:n"); 
scanf("%d",&year);
2.2、用if判断是否满足闰年的条件。
if (判断条件){
	如果成立(为真)执行这里代码块
}else{
	如果不成立(为假)执行这里代码块
}
2.3、输出结果
printf("");

通过printf(“” );向控制台输出.

3、代码展示
#include 
int main() {
	int year;
	printf("请输入一个年份:n"); 
	scanf("%d",&year);
	if ((year % 4 == 0 && year % 100 != 0 )|| year % 400 == 0) {
		printf("%d年是闰年!",year);
	} else {
		printf("%d不是闰年!",year); 
	}
	return 0;
}
二、编写程序,输入x的值,求y的值 1、设计思路 1.1、根据题目可以看出x的值是需要从控制台获取的
int x;
printf("请输入x的值:n");
scanf("%d",&x); 
1.2、判断输入的x值是大于0还是小于0还是等于0
if (x > 0) {
	printf("y = 1");
} else if (x < 0) {
	printf("y = -1");
} else {
	printf("y = 0");
}

语法格式解析:

if (当这个条件成立){
    执行这条语句;
}else if (当这个条件成立){
    执行这条语句;
}else{
    当上边两种条件都不成立,执行这条语句;
}
1.3、输出根据题意y的值 2、代码展示
#include 
int main() {
	int x;
	printf("请输入x的值:");
	scanf("%d",&x);
	if (x > 0) {
		printf("y = 1");
	} else if (x < 0) {
		printf("y = -1");
	} else {
		printf("y = 0");
	}
	return 0;
}
三、输入1+2+3+…+n的值 1、设计思路 1.1、首先n的值需要从控制台获取
int n;
printf("请输入一个数:n");
scanf("%d",&n);
1.2、利用for循环,从1到n依次遍历。 1.2.1、语法格式:
for (int i = 1; i <= n; i++){
    
}

格式拆分:for(开始初始值;循环次数;循环方式)

上文指从1开始,循环最大到等于n截止,每次加1的方式循环

1.3、创建一个变量累计增加1-n的值
for (int i = 1; i <= n; i++){
   num = num + i;
}
2、代码展示
#include 
int main() {
	int n;
	printf("请输入一个数:n");
	scanf("%d",&n);
	int num = 0; 
	for (int i = 1; i <= n; i++) {
		num = num + i;
	}
	printf("1+2+3+...+%d=%d",n,num);
	return 0;
}
四、输入一个字符串,统计英文、数字和其他字符 1、设计思路 1.1、从控制台获取一个字符串。
char* arr[255];
printf("请输入一个字符串:n"); 
gets(arr);

gets():从控制台获取字符串;

puts():从控制台输出字符串;

gets()和puts()需要引入头文件:#include

1.2、利用for循环遍历字符串所有字符
 for (int i = 0; arr[i] != ''; i++){

 }
1.3、创建三个变量,分别统计英文,数字和其他字符,利用if语句判断字符串的当前字符是什么类型,相应的变量进行累加,并且检测到’#‘结束统计。
int number = 0,  letter = 0,  character = 0;
	for(int i = 0; arr[i] != ''; i++) {
		//判断如果是0-9为数字之间进入,统计数字的变量加一
		if ((arr[i] >= '0') && (arr[i] <= '9')) {
			number++;
			//判断如果是小写的a和z之间或者大写的A与Z之间进入,统计字母变量加一
		} else if (arr[i] >= 'a' && arr[i] <= 'z' || arr[i] >= 'A' && arr[i] <= 'Z') {
			letter++;
			//判断如果字符为'#'结束统计
		} else if(arr[i] == '#') {
			//break是退出距离当前最近的一个for循环或者while循环
			break;
			//如果不为数字和字母为其他字符的时候进入,统计其他字符的变量加一
		} else {
			character++;
		}
	}
1.4、输出数字和字母和其他字符 2、代码展示
#include 
#include 
int main() {
	char arr[50];
	printf("请输入一个字符串:n");
	gets(arr);
	int number = 0,  letter = 0,  character = 0;
	for(int i = 0; arr[i] != ''; i++) {
		//判断如果是0-9为数字之间进入,统计数字的变量加一
		if ((arr[i] >= '0') && (arr[i] <= '9')) {
			number++;
			//判断如果是小写的a和z之间或者大写的A与Z之间进入,统计字母变量加一
		} else if (arr[i] >= 'a' && arr[i] <= 'z' || arr[i] >= 'A' && arr[i] <= 'Z') {
			letter++;
			//判断如果字符为'#'结束统计
		} else if(arr[i] == '#') {
			//break是退出距离当前最近的一个for循环或者while循环
			break;
			//如果不为数字和字母为其他字符的时候进入,统计其他字符的变量加一
		} else {
			character++;
		}
	}
	puts(arr);
	printf("中数字有%d个,字母有%d个,其他字符有%d个。",number,letter,character);
	return 0;
}
五、输入五个学生的成绩,求总分和平均分,并对成绩从高到低排序 1、设计思路 1、创建数组,从控制台输入。 1.1、利用for循环遍历数组,给数组从第0位到第4位五个元素赋值
int arr[5];
	for (int i = 0; i < 5; i++) {
		printf("请输入第%d位同学的成绩n",(i+1));
		scanf("%d",&arr[i]);
	}
2、创建两个变量存放总分和平均分。
int num = 0, average = 0;
3、遍历数组每一位进行排序并且求出总分和平均分
for (int i = 0; i < 5; i++){
    for (int j = i + 1; j < 5; j++){
        if (arr[i] < arr[j]){
            int temp;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    num = num + arr[i];
}
3.1、排序(这里用到冒泡排序) 3.1.1、算法描述
  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  3. 针对所有的元素重复以上的步骤,除了最后一个;
  4. 重复步骤1~3,直到排序完成。
3.1.2、动画展示

3.1.3、代码展示
for(int i = 0; i < arr1.length; i++){
            for (int j = i; j < arr1.length; j++){
                if(arr1[i] > arr1[j]){
                    int temp = arr1[i];
                    arr1[i] = arr1[j];
                    arr1[j] = temp;
                }
            }
        }
3.1.4、结果展示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fOqI0lC5-1656334033635)(D:java同学代码6.18/image-20220627155920902.png)]

4、代码展示
#include 
int main() {
	int arr[5];
	for (int i = 0; i < 5; i++) {
		printf("请输入第%d位同学的成绩n",(i+1));
		scanf("%d",&arr[i]);
	}
	int num = 0, average = 0;
	for (int i = 0; i < 5; i++) {
		for (int j = i + 1; j < 5; j++) {
			if (arr[i] < arr[j]) {
				int temp;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		num = num + arr[i];
	}
	printf("排序后的成绩:"); 
	for (int i = 0; i < 5; i++) {
		printf("%3d",arr[i]);
	}
	return 0;
}
六、一位同学缓考,缓考后,老师需要把他的成绩插入班级成绩单中,成绩单已经按照分数从高到低进行排序。 1、设计思路 1.1、从控制台获取其他考生成绩和缓考学生的成绩,并且先按照从高到低排序。
printf("请输入班级有多少名学生:");
int num;
scanf("%d",&num);
double arr[num];
for (int i = 0; i < num-1; i++) {
	printf("请输入第%d位学生成绩",(i+1));
	scanf("%lf",&arr[i]);
}
for (int i = 0; i < num; i++) {
	for (int j = i + 1; j < num; j++) {
		if (arr[i] < arr[j]) {
			double temp;
			temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
	}
}
1.2、根据冒泡排序的比较原则,因为是已经排好序的成绩单, 利用if判断,找到比插入数大的成绩,然后存储下标。
printf("请输入缓考学生的成绩:");
double performance;
scanf("%lf",&performance);
int index = 0;
for (int i = 0; i < num - 1; i++) {
	if (arr[i] < performance) {
		index = i;
		break;
	}
}
1.3、把存储的数组下标往后的元素对应的下标往后移动以为,在存储的下标元素上存储缓考学生的成绩。
for(int i = num - 1; i > index; i--) {
	arr[i] = arr[i-1];
}
arr[index] = performance;

假如:原本成绩单是{80,50,30,20,10,5,0}

  1. 最后一个0是缓考的人的成绩,还未录入所以初始化为0;
  2. 往后移动需要让成绩单变为
  3. 缓考成绩为35,成绩单是{80,50,30,30,20,10、5}
  4. 在加粗30的位置上,替换为35
  5. 替换后成绩单为{80,50,35,30,20,10、5}

需要从后往前复制到合适的位置,如果从前往后会一直重复。

2、代码展示
#include 
int main() {
	printf("请输入班级有多少名学生:");
	int num;
	scanf("%d",&num);
	double arr[num];
	for (int i = 0; i < num-1; i++) {
		printf("请输入第%d位学生成绩",(i+1));
		scanf("%lf",&arr[i]);
	}
	for (int i = 0; i < num; i++) {
		for (int j = i + 1; j < num; j++) {
			if (arr[i] < arr[j]) {
				double temp;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
	printf("请输入缓考学生的成绩:");
	double performance;
	scanf("%lf",&performance);
	int index = 0;
	for (int i = 0; i < num - 1; i++) {
		if (arr[i] < performance) {
			index = i;
			break;
		}
	}
	for(int i = num - 1; i > index; i--) {
		arr[i] = arr[i-1];
	}
	arr[index] = performance;
	printf("插入缓考成绩后:");
	for(int i = 0; i < num; i++){
		printf("%.2lft",arr[i]);
	}
	return 0;
}
七、输入一个字符串判断是否为回文字符串,判断过程在函数中实现 1、设计思路 1.1、从控制获取一个字符串,创建一个int类型变量,存储接受状态,是回文数用1表示,不是回文数用0表示。
int main(){
printf("请输入一个字符串:n"); 
char arr[255];
gets(arr);
int lage = huiwenshu(arr); 
if(lage == 0){
	printf("不是回文字符串!"); 
}else if(lage = 1){
	printf("是回文字符串!"); 
} 
return 0;
1.2、在函数里利用for循环对字符串每一位字符进行遍历。判断是否为回文字符串 1.2.1判断方法:

假如回文串里有i个字符,第s位和i-s-1

例如:“abcba”,i=5个字符

  • 当s = 0,第s位是’a‘,第i - s - 1 = 4,第i-s-1位是’a’
  • 当s = 1,第s位是’b’,第i - s - 1 = 3,第i-s-1位是’b‘
  • 当s = 2,第s位是’c’,第i - s - 1 = 2,第i-s-1位是’c‘
  • 当s = 3,第s位是’b’,第i - s - 1 = 1,第i-s-1位是’b‘
  • 当s = 4,第s位是’a’,第i - s - 1 = 0,第i-s-1位是’a‘

当第s位和第i-s-1位全部相等时,是回文串,但是我们只需要比较i/2次就可以

例如:“abcba”,i=5个字符,i/2 =2(因为是整型变量,所以小数点抹去)

  • 当s = 0,第s位是’a‘,第i - s - 1 = 4,第i-s-1位是’a’
  • 当s = 1,第s位是’b’,第i - s - 1 = 3,第i-s-1位是’b‘

当第s位和第i-s-1位全部相等时,是回文串

1.2.2利用if判断

如果第s位和第i-s-1位全部相等时,返回true,如果有一位不相等,返回flase

int huiwenshu(char arr[]){
	int lage = 0;
	int index = 0, leng = 0;
	while (arr[index] != ''){
		leng++;
		index++;
	}
	for (int i = 0; arr[i] != ''; i++){
        if (arr[i] == arr[leng-i-1]){
            lage = 1;
        }else{
            lage = 0;
            break;
        }
    }
    return lage;
}
1.3,在主函数创建int类型变量,如果函数内返回0则表示是回文数,如果不是0,则表示不是回文数。
int lage = huiwenshu(arr); 
if(lage == 0){
	printf("不是回文字符串!"); 
}else if(lage = 1){
	printf("是回文字符串!"); 
}
2、代码展示
#include 
int huiwenshu(char arr[]){
	int lage = 0;
	int index = 0, leng = 0;
	while (arr[index] != ''){
		leng++;
		index++;
	}
	for (int i = 0; arr[i] != ''; i++){
        if (arr[i] == arr[leng-i-1]){
            lage = 1;
        }else{
            lage = 0;
            break;
        }
    }
    return lage;
}
int main(){
	printf("请输入一个字符串:n"); 
	char arr[255];
	gets(arr);
	int lage = huiwenshu(arr); 
	if(lage == 0){
		printf("不是回文字符串!"); 
	}else if(lage = 1){
		printf("是回文字符串!"); 
	}
	return 0;	
}
八、编写一个整数,判断是否是素数 1、设计思路 1.1、从控制台获取一个数
printf("请输入一个数:n");
int a;
scanf("%d",&a);
1.2、for遍历从2到获取的数-1,判断是否为素数,并且用int类型存储是是否为素数,是的话为1,假为0 1.2.1、素数:除了1和自身,之外没有可以被自身整除的数
int lage = 1;
for(int i = 2; i < a; i++){
    if(a % i == 0){
        lage = 0;
        break;
    }
}
1.3、输出
if(lage == 1) {
	printf("%d是素数",a);
} else if(lage == 0{
	printf("%d不是素数",a);
}
2、代码展示
#include 
int main() {
	printf("请输入一个数:n");
	int a;
	scanf("%d",&a);
	int lage = 1;
	for(int i = 2; i < a; i++) {
		if(a % i == 0) {
			lage = 0;
			break;
		}
	}
	if(lage == 1) {
		printf("%d是素数",a);
	} else if(lage == 0){
		printf("%d不是素数",a);
	}
	return 0;
}
九、有一个数列为:1,1,2,3,5,8…,输出这个数列的前30项,每一行输出5个 1、设计思路 1.1、创建斐波那契数列数组,大小为30
int feibonaqie[20];
1.2、利用for循环写出斐波那契额列数组
int feibonaqie[20];
feibonaqie[0] = 1;
feibonaqie[1] = 1;
for(int i = 2; i < 20; i++) {
	feibonaqie[i] = feibonaqie[i-1] + feibonaqie[i-2];
}
1.2.1、斐波那契数列:feibonaqie[] = {1,1,2,3,5,8,13,21,…,n}

公式为:feibonaqie[i] = feibonaqie[i-1]+feibonaqie[i-2];

先写出第1,2个元素

feibonaqie[0] = 1

feibonaqie[1] = 1

第i个元素=第i-1个元素+第i-2个元素

1.3、控制每输出五个换行
int index = 0;
for (int i = 0; i < 20; i++) {
	printf("%5d",feibonaqie[i]);
	index++;
	if (index % 5 == 0) {
		printf("n");
	}
}

在for外层创建一个计数变量,for循环里每次输出一条,计数变量加一,判断取余5是否为0,如果为0进行换行,如果不为零继续输出

2、代码展示
#include 
int main() {
	int feibonaqie[20];
	feibonaqie[0] = 1;
	feibonaqie[1] = 1;
	for(int i = 2; i < 20; i++) {
		feibonaqie[i] = feibonaqie[i-1] + feibonaqie[i-2];
	}
	int index = 0;
	for (int i = 0; i < 20; i++) {
		printf("%5d",feibonaqie[i]);
		index++;
		if (index % 5 == 0) {
			printf("n");
		}
	}
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号