C语言期末

C语言期中

1成绩计算及等级转换

小王同学参加了某计算机类课程的考试。考试分为笔试和上机编程测试,满分均为 100 分。
总成绩由笔试成绩 (60%)和上机成绩(40%)组成。如果总成绩在 85-100 分之间,则成绩等级为“优秀”;总成绩在 70-85 分之间, 则成绩等级为“良好”;总成绩在 60-70,则为“及格”;总成绩在 60 分以下则为“不及格”。 
编写程序,在键盘上输入小王同学的笔试和上机成绩分数(记为整数),然后计算小王的总成绩(记为整数,不考 虑四舍五入)以及分数等级(不及格(fail)、及格(pass)、良好(good)和优秀(excellent));如果笔试或上机分数输入 为负数或超过 100 分,则提示输入错误(wrong score)。
#include <stdio.h>
int main()
{
    int a,b;
    int f=0; 
    scanf("%d%d",&a,&b);
    printf("Writing score: %d\n",a);
    printf("Testing score: %d\n",b);
    f=a*0.6+b*0.4;
    if(a>100||a<0||b>100||b<0)
    {
    	printf("Wrong input");
	}
	else
	{
		if(f > 85&&f <= 100)
  { 
       printf("Final score is %d, the grade is exellent",f); 
  }
    else if(f >70&&f <= 85)
  {     
        printf("Final score is %d, the grade is good",f);
  }
    else if(f >60&&f <= 70)
  {     
        printf("Final score is %d, the grade is pass",f);
  }
  else
  //else if(f >0&&f <= 60)
  {     
        printf("Final score is %d, the grade is fail",f);
  }
	}

  return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JVmSP3lS-1650519406743)(C:\Users\Tait\Desktop\图片\image-20220421114631571.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLcz7Jo5-1650519406744)(C:\Users\Tait\Desktop\图片\image-20220421115913060.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XeFQNbqY-1650519406744)(C:\Users\Tait\Desktop\图片\image-20220421115955330.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2QkG9jjF-1650519406744)(C:\Users\Tait\Desktop\图片\image-20220421120026579.png)]

2计算满足不等式的最大数值

1. 从键盘输入一个整数 m,如果 m 小于 1,输出:输入错误! 
2. 如果 m 大于等于 1,则计算满足如下不等式的最大整数 n: 1 2 + 2 2 + 3 2 + ⋯ + 𝑛 2 ≤ m 
注意:不能调用除 stdio.h 之外的函数包。 
Write a program to input an integer m, if m<1, output “Wrong input!” If m≥1, find the maximum integer n satisfying the following inequality: 1 ^2 + 2^ 2 + 3^ 2 + ⋯ + 𝑛^ 2 ≤ m
#include <stdio.h>
int main()
{
    int m,n,j,i=1;
    int sum=0;
	scanf("%d",&m) ;
	if(m<1)
	{
		printf("Wrong input!");
	}
	else
	{
		do
		{
			i++;
			n=j++;
			sum+=i*i;
		}
		while(sum<=m);
		printf("The maximum integer satisfing the inequality is %d",n+1);
	}
    
  return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OLb4zizQ-1650519406745)(C:\Users\Tait\Desktop\图片\image-20220421104812864.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HPOn54MG-1650519406745)(C:\Users\Tait\Desktop\图片\image-20220421104847350.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sh1BRXd8-1650519406745)(C:\Users\Tait\Desktop\图片\image-20220421104909755.png)]

3查找数组元素出现的次数

给定数组 a[10]= {1, 5, 3, 1, 2, 3, 7, 6, 3, 9}。编写程序,从键盘输入 0~9 之间的任意一个数字,查找该数字在数组中 出现的次数、要求用指针方式实现对数组的操作(注:如果未用指针方式,最多得一半分数)。
#include <stdio.h> 
int find( int *p, int num);

int main()
{
	int a[10]= {1, 5, 3, 1, 2, 3, 7, 6, 3, 9};
	int num;
	printf("please input any number from 0 to 9:\n");
	scanf("%d",&num);
	find(a, num);
}

int find( int *p, int num)
{	
	int n = 0,i = 0;
	while(*p)
	{
		if(*p ==num)
		++n;
		++p;
	}
	if(num>=10)
	{
			printf("wrong input!");
	}
	else
	printf("%d appears %d times",num,n);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9dNqc4pF-1650519406746)(C:\Users\Tait\Desktop\图片\image-20220421110926139.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6yNaJOc1-1650519406746)(C:\Users\Tait\Desktop\图片\image-20220421111000443.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RhGjgSnC-1650519406746)(C:\Users\Tait\Desktop\图片\image-20220421111456108.png)]

4求矩阵各行元素之和

编写程序,从键盘输入 2 个正整数 m 和 n (1<=m<=4, 1<=n<=4),然后输入矩阵 a(m 行 n 列)中的元素,将 矩阵的元素按 m 行 n 列方式写入到文件 matrix.txt 中,并分别求出各行元素之和,输出到屏幕上。
#include<stdio.h>
#include <stdlib.h>
int main ()
{
 int m,n,i,j,sum=0;
 scanf("%d %d",&m,&n);
 int a[4][4];

 for(i=0; i<m; i++)
 {
  for (j=0; j<n; j++)
  {
   scanf ("%d",&a[i][j]);
  }
 }
 //写入文件 
 	FILE *fpWrite=fopen("matrix.txt","w");
 	if(fpWrite==NULL)
 {
 	 return 0;
 }
 	for(i=0; i<m; i++)
 {
 	 for (j=0; j<n; j++)
  	{
  	 fprintf(fpWrite,"%d ",a[i][j]);
 	}
  fputc('\n',fpWrite);
 }
 fclose(fpWrite);
 
 //计算数组之和 
 for(i=0; i<m; i++)
 {
  for (j=0; j<n; j++)
 	{
  		 sum+=a[i][j];
  	}
  printf("sum of row %d is %d\n",i,sum);
  sum=0;
 }
 
 return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ri2IyU72-1650519406746)(C:\Users\Tait\Desktop\图片\image-20220421112202220.png)]

5求最大和最小温差值

北京 2019 年 1~12 月的最高和最低气温如下 最高(℃) h={10,14,25,28,37,35,38,32,34,30,17,10} 最低(℃) l={-10,-8,-2,3,10,18,19,18,14,1,-6,-10} 编写程序,实现以下功能: 

(1)从键盘输入最高和最低温度,分别存入两个一维数组中; 

(2 分别求出 1~12 月中每个月的温差 h_l=|h-l|,存入一个一维数组中,并在屏幕上显示 

(3)求出温差最大和最小的月份(假设最大值和最小值均是唯一的) 并在屏幕上显示最大和最小温差,以及相 应的月份
#include <stdio.h>
int main()
{
    int h[12], l[12], h_l[12];
    int i;

    for (i = 0; i < 12; i++)
        scanf("%d", &h[i]);
    for (i = 0; i < 12; i++)
        scanf("%d", &l[i]);

    for (i = 0; i < 12; i++) 
	{
        int tmp = h[i] - l[i];
        if (tmp < 0)
        {
        	tmp = -tmp;
		}
        h_l[i] = tmp;
    }

    int min = 0;
    for (i = 0; i < 12; i++)
    {
    	if (h_l[i] < h_l[min])
        {
        	    min = i;
		}
	}
        

    int max = 0;
    for (i = 0; i < 12; i++)
    {
    	 if (h_l[i] > h_l[max])
            max = i;
	}      

    printf("high  low   diff\n");
    for (i = 0; i < 12; i++) 
	{
        printf("%-3d   %-3d   %-3d\n", h[i], l[i], h_l[i]);
    }

    printf("Max.diff:%d, Month:%d\n", h_l[max], max + 1);
    printf("Min.diff:%d, Month:%d", h_l[min], min + 1);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mzQfgQo9-1650519406747)(C:\Users\Tait\Desktop\图片\image-20220421121413655.png)]

6判断 Armstrong 数

从键盘输入一个 4 位的 10 进制非负整数,判定其是否为乘方和完全数(Armstrong)
主函数已从键盘读入一个整数,调用函数 checkingAmstrong 判定输入的整数是否为 Amstrong 数,然后输出结果。
编写函数 checking Armstrong,判定该整数是否为 Armstrong 数,若是,则返回 1,否则返回 0。
乘方和完全数的特征是:该数的位数作为乘方的幂次,每位数字的乘方之和等于该数。
a^4+b^4+c^4+d^4=abcd
#include <stdio.h>
#include <math.h>
/****************************************
num: a 4-digit integer number
dn: total number of digits
return value: if num is an Armstrong number, return 1, otherwise return 0
****************************************/
int checkingArmstrong(int num, int dn)
{
	 int a, b, c, d, number = num;
	 a = num / 1000;
	 num %= 1000;
	 b = num / 100;
	 num %= 100;
	 c = num / 10;
	 num %= 10;
	 d = num;
	 if (a*a*a*a + b*b*b*b + c*c*c*c + d*d*d*d == number)
	 return 1;
	 return 0;
}
int main() {
	 int num, result=0;
	 scanf("%d",&num);
	 if (checkingArmstrong(num, 4) == 1) 
	 printf("%d is an Armstrong number.", num);
	 else 
	 printf("%d is not an Armstrong number.", num);
	 return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9mtfGPlp-1650519406747)(C:\Users\Tait\Desktop\图片\image-20220421115522742.png)]

c + ddd*d == number)
return 1;
return 0;
}
int main() {
int num, result=0;
scanf(“%d”,&num);
if (checkingArmstrong(num, 4) == 1)
printf(“%d is an Armstrong number.”, num);
else
printf(“%d is not an Armstrong number.”, num);
return 0;
}


[外链图片转存中...(img-9mtfGPlp-1650519406747)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vecXEgZm-1650519406747)(C:\Users\Tait\Desktop\图片\image-20220421115609874.png)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值