C语言--循环和数组综合练习

一、题目描述:输入终值,输出所有能被7整除的数值及其和

  1. 评分要求
      1. 根据接收值准确定义变量类型(2分)
      2. 提示并输入终值(2分)
      3. 阅读题目确定循环要素:起始值、终值、步长(3分)
      4. 循环判断指定范围内能被7整除的数值并输出(5分) 核心
      5. 每5个换行输出(2分)
      6. 累计全部符合条件的数值和并输出(3分)
      7. 代码中添加不少于5行的关键注释描述实现思路(3分)

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, const char *argv[])
{
	int n,f=0;
	int sum=0;
	printf("请输入终值:");
	scanf("%d",&n);
    //for循环遍历n以内的数字
	for(int i=1;i<=n;i++){
        //如果能被7整除就输出
		if(i%7==0){
			printf("%d ",i);
            //累加求和
			sum+=i;
            //定义计数器并累加
			f++;
		}
        //当循环到5时输出换行
		if(f==5){
			printf("\n");
			f=0;
		}
	}
	printf("\n%d以内能被7整除的数值和是%d\n",n,sum);
	return 0;
}

运行结果如图所示:

要求一代码:

 if (n <= SHRT_MAX && n >= SHRT_MIN) {
        si = (short int)n;
    } else if (n <= INT_MAX && n >= INT_MIN) {
        in = (int)n;
    } else if (n <= LONG_MAX && n >= LONG_MIN) {
        li = (long int)n;
    } else {
        printf("超出可处理的数据范围!\n");
        return 0;
    }

 但在for循环中添加i<=in || i<=si || i<=li 的条件时陷入了死循环

二、题目描述:  注册账号时需输入6位密码,根据密码组成验证其安全等级

  1.  评分要求
      1. 根据接收用户值定义变量类型,命名遵守规范(2分)
      2. 利用循环结构、getchar()函数 输入验证密码(3分)
      3. 判断并统计输入的密码各组成部分个数(4分) 核心
      4. 如长度不符合要求给出提示信息(1分)
      5. 根据字母、数字、特殊字符、空格个数验证密码等级(3分) 核心
      6. 代码中需要添加至少5行关键注释描述实现思路(3分)

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char a[100];
	printf("请输入6位密码:");
	int i=0;
	char ch;
    //循环将字符通过getchar函数放入数组
    //循环结束条件是输入字符为回车和文件结束字符且长度不能大于定义
	while((ch=getchar())!='\n'&&ch!=EOF&&i<99){
		a[i++]=ch;
	}
	a[i]='\0';
    //如果字符长度大于6输出不符合要求
	if(i!=6){
		printf("密码长度不符合要求\n");
		return 0;
	}
	int z=0,s=0,k=0,f=0;
    //循环判断各个字符的类型
	for(int i=0;i<strlen(a);i++){
        //整数字符
		if(a[i]>='0'&&a[i]<='9'){
			z++;
        //字母字符
		}else if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'){
			s++;
        //空格字符
		}else if(a[i]==32){
			k++;
        //其他符号
		}else{
			f++;
		}
	}
    //判断密码等级
	if (z!=0&&s!=0&&f==0) {
        printf("输入的六位密码中含有字母、数字 等级验证为:中\n");
    } else if (z!=0 && s!=0 && f!=0) {
        printf("输入的六位密码中含有字母、数字、空格及其他字符 等级验证为:高\n");
    } else if (z!=0 && f!=0&&s==0) {
        printf("输入的六位密码中含有数字和其他字符 等级验证为:中\n");
    } else if (s!=0 && f!=0&&z==0) {
        printf("输入的六位密码中含有字母和其他字符 等级验证为:中\n");
    } else {
        printf("输入的六位密码 等级验证为:低\n");
    }	
	return 0;
}

运行结果如图所示:

三 、题目描述:  神州租车公司为提升服务质量近期展开满意度调查活动,请输入近期租车6位顾客满意度进行相关运算

  1. 评分要求 :
      1. 正确定义一维数组 (3分)
      2. 循环输入6位顾客的满意度值(5分) 核心
      3. 将 6位用户的满意度按由小到大的顺序排序输出(5分) 核心
      4. 统计满意度个数,计算百分比并输出 (90分为合格) (4分) 核心
      5. 判断如果百分比值低于90%则显示信息“服务质量有待改进”,否则提示“保持现有服务质量水平” (3分)
      6. 代码关键处添加不少于5行的规范注释(5分)

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    //定义数组循环存储顾客满意度
	int a[100],i;
	int sum=0;
	for(i=0;i<6;i++){
		printf("请输入第%d位顾客的满意度:",i+1);
		scanf("%d",&a[i]);
        //判断用户满意度是否大于90
		if(a[i]>=90)
            //统计满意度个数
			sum++;
	}
    //利用冒泡排序对数组元素从大到小排序
	int ts,j,t;
    //一共需要比较多少次
	for(ts=0;ts<6-1;ts++){
        //一次比较多少回
		for(j=0;j<6-1-ts;j++){
			if(a[j+1]<a[j]){
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
	printf("本次满意度由低到高的分数值是:");
	for(int i=0;i<6;i++){
		printf("%d ",a[i]);
	}
	float good=(sum/6.0)*100;
	printf("满意度为%.2f%%\n",good);
	if(good<90.0)
		printf("服务质量有待改进\n");
	else
		printf("保持现有服务质量水平\n");
	return 0;
}

运行结果如图所示:

四、题目描述:  输入一批数,输出是3倍数的数值,计算3倍数中的最大值、最小值

  1. 评分要求
      1. 正确定义一维数组(2分)
      2. 提示并输入数组长度(2分)
      3. 循环输入数组元素的值(5分) 核心
      4. 循环判断并输出数组元素中是3倍数的元素(4分) 核心
      5. 循环查找数组元素中是3倍数的最小值,最大值并输出结果(4分) 核心
      6. 代码中添加不少于5行的关键注释描述程序实现思路(4分)

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n,i;
	printf("请输入数组长度:");
    //获取数组长度
	scanf("%d",&n);
	int num[n];
	int a[100],j=0;
    //for循环依次输入数组元素
	printf("请依次输入数组元素值:");
	for(i=0;i<n;i++){
		scanf("%d",&num[i]);
	}
    //循环数组判断元素能不能被3整除
	for(int i=0;i<n;i++){
        //如果能就将其存储在新定义的数组中
		if(num[i]%3==0){
			a[j]=num[i];
            //j为新数组中存储了多少3倍数的元素
			j++;
		}
	}
    //若j为0,则数组没有3的倍数
	if(j==0){
		printf("数组中没有3的倍数");
		return 0;
	}
    //定义最小值和最大值,皆赋值为a[0]
	int min=a[0],max=a[0];
	for(i=0;i<j;i++){
        //如果最小值大于某一数组元素 将其值赋给min
		if(min>a[i])
			min=a[i];
		if(max<a[i])
			max=a[i];
	}
	printf("数组中是3倍数的元素包括:");
	for(i=0;i<j;i++){
		printf("%d ",a[i]);
	}
	printf("数组元素中3的最小倍数是:%d  最大倍数是%d\n",min,max);
	return 0;
}

运行结果如图所示:

五、题目描述:输入操作数及运算符完成数值的加、减、乘、除运算

  1. 评分要求
  1. 定义接收操作数及运算符的变量,名称要符合规范(2分)
  2. 提示并输入第一个操作数(2分)
  3. 提示并输入运算符[加减乘除用字母代表](2分)
  4. 提示并输入第二个操作数(2分)
  5. 采用多分支选择结构switch对输入的操作数进行判断,输入大小写字母都可以调用
  6. 对应的运算(3分)  核心
  7. 正常计算两数相加并输出结果(2分)核心
  8. 正常计算两数相减并输出结果(2分)核心
  9. 正常计算两数相乘并输出结果(2分)核心
  10. 正常计算两数相除并输出结果(2分)核心
  11. 如分母为0则输出提示信息“分母不能为零!”(2分)
  12. 核心语句需添加不少于5行的规范注释描述实现思路(4分)

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    //定义两个实型变量存储操作数
	float num1=0,num2=0;
    //定义字符变量存储操作符
	char ysf;
	printf("请输入第一个操作数:\n");
	scanf("%f",&num1);
    //输入操作符时记得清空字符变量
    //可用方法:1.getchar();2.“ %c”
	printf("请输入运算符[加-P/p 减-S/s 乘-M/m 除-D/d]:\n");
	scanf(" %c",&ysf);
	printf("请输入第二个操作数:");
	scanf("%f",&num2);
	printf("运算结果\n");
    //switch语句判断输入操作符类型
	switch(ysf){
        //大小写字母是相同操作,可以写在一起
		case 'P':
		case 'p':printf("%.2f+%.2f=%.2f\n ",num1,num2,num1+num2);break;
		case 'S':
		case 's':printf("%.2f-%.2f=%.2f\n ",num1,num2,num1-num2);break;
		case 'M':
		case 'm':printf("%.2f*%.2f=%.2f\n ",num1,num2,num1*num2);break;
		case 'D':
        //当操作为除时,判断分母是否为零
		case 'd':
			if(num2==0.0){
				printf("分母不能为零!\n");
				return 0;
	}
            //输出时取实型变量小数点后两位输出
			printf("%.2f/%.2f=%.2f\n ",num1,num2,num1/num2);break;
		default:printf("输入有误");break;
	}
	return 0;
}

运行结果如图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值