高级语言程序设计C语言大作业

《高级语言程序设计》大作业
编程题(5题,每题20分)
1、 输入任意的3个整数,判断这3个数是否可以构成三角形,若能,可以构成等腰三角形、等边三角形还是其他三角形。

思路
直接列出每种三角形的特征 符合就直接打印 不符合就输出其他三角形

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
    if((a+b>c&&a+c>b&&b+c>a)&&(a>b-c&&b>a-c&&c>a-b))
	{
		if(a==b&&a==c)
			printf("等边三角形\n");
		else if((a==b&&a!=c)||(a==c&&a!=b)||(b==c&&b!=a))
			printf("等腰三角形\n");
		else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
			printf("直角三角形\n");
		else
			printf("其他三角形\n");
	}
	else 
		printf("不能构成三角形\n");   
	return 0;
}

2、用函数实现判断素数,在主函数中调用该函数实现输出200~300间的所有素数。要求每行显示5个数。

素数是指除了一以外 只能被 1 和它本身整除的数
那么找到这些数就只需要用这个数去一次除以前面所有的2到它本身的数 如果没有一个数能整除 那么就能知道这个数是质数 如果出现了整除 那么就说明是合数
然后可以对代码做出一些优化
首先一次除以的数不需要到本身 只需要到sqrt(n) 就可以找到所有的能够验证素数的数, 那么就很大程度的减少了枚举的次数

#include<iostream> //普通筛 
using namespace std;
int zhishu(int n)
{
	for (int i = 2; i * i <= n; i++)
	{
		if (n % i == 0)
			return 0;
	}
	return 1;
}
int main()
{
	int a[100], cnt=0;
	for (int i = 100; i <= 300; i++)
	{
		if (zhishu(i))
			a[cnt++] = i;		
	}
	for (int i = 0; i < cnt; i++)
	{
		cout << a[i] << ' ';
		if ((i+1) % 5 == 0)
			cout << endl;		
	}
	return 0;
}

3、键盘输入一个字符串,编程找出字符串中(不包括’\0’)最大的字符及其下标、最小的字符及其下标。

思路
字符之间是可以直接进行比较的,用这个特性就可以直接进行枚举判断, 遍历一遍就可以找到最大的和最小的 以及他们的坐标

#include<stdio.h>
int main()
{
    char str[200];
    scanf("%s",str);
    char min,max;
    int minid,maxid;
    int i=0;
    min=max=str[0];
    maxid=minid=0;
    while(str[i]!='\0')
    {
        if (str[i]>max)
        {
            max=str[i];
        }
        if (str[i]<min)
        {
            min=str[i];
            minid=i;
        }
        i++;
    }
    i=0;
    while(str[i]!='\0')
    {
        if (str[i]==max)
        {
            printf("最大元素是%c 位置%d\n",max,i);
        }
        if (str[i]==min)
        {
            printf("最小元素是%c 位置%d\n",min,i);
        }
        i++;
    }
     
    return 0;
}

4、键盘输入一串字符,以‘#’结束,并将输入的字符写到D盘的a.txt文件中。再打开该文件,只将其中的字母输出到屏幕上。

#define _CRT_SECURE_NO_DEPRECATE//vs需要
#include<stdio.h>
#include<stdlib.h>
void writefile(int ch, FILE *fp);
void readfile(int ch, FILE *fp);

int main()
{
	FILE *fp; //首先定义文件指针
	char ch = 0;
	fp = fopen("D:\\a.txt", "w+");//打开文件,w+表示既可以读取也可以写入
	if (fp == 0)                       //文件打开后需判断是否正确
	{
		printf("错误\n");
		exit(1);
	}
	writefile(ch, fp);//写
	rewind(fp);//rewind函数,把指针移到文件头
	readfile(ch, fp);//读
	fclose(fp);//关闭
	return 0;
}
void writefile(int ch, FILE *fp)       
{
	printf("Enter a text (end with '#'):\n");
	ch = getchar();
	while (ch != '#')
	{
		fputc(ch, fp);
		ch = getchar();
	}
}
void readfile(int ch, FILE *fp)       
{
	while ((ch = fgetc(fp)) != EOF)
	{
		putchar(ch);
	}
	putchar('\n');
}

5、定义一个存放课程信息的结构体数组,数组实际大小由用户指定。每门课程的信息包括课程号、课程名称、学分。输入课程信息,并按学分降序排序,输出排序后的课程信息以及学分最高的课程信息(可能不止一门)。

#include<stdio.h>
#include <cstdlib>
struct student
{
	char sno[20];
	char name[20];
	int score;
}s[5];

void input()
{
	int i, j;
	for (i = 0; i < 5; i++)
	{
		printf("输入课程号:");
		scanf("%s", &s[i].sno);
		printf("输入课程名称:");
		scanf("%s", &s[i].name);
		printf("输入学分:");
		scanf("%d", &s[i].score);
		printf("\n");
	}
}

int sort(int n)
{
	int i, j;
	for (i = 0; i < n; i++)//排序
	{
		for (j = 0; j + i < n - 1; j++)
		{
			if (s[j].score < s[j + 1].score)
			{
				struct student t;
				t = s[j];
				s[j] = s[j + 1];
				s[j + 1] = t;
			}
		}
	}
	for (i = 0; i < 5; i++) {
		printf("课程号\t课程名称\t学分\n");
		printf("%s\t%s\t%d\n", s[i].sno, s[i].name, s[i].score);
	}
}

void output(int n) {
	int i;
	for (i = 0; i < n; i++) {
		printf("课程号\t 课程名称\t学分\n");
		printf("%s\t%s\t%d\n", s[i].sno, s[i].name, s[i].score);
	}
}

void outputMax(int n) {
	int i;
	for (i = 0; i < n; i++) { 
		printf("课程信息以及学分最高的课程信息:课程号\t 课程名称\t学分\n");
		printf("%s\t%s\t%d\n", s[i].sno, s[i].name, s[i].score);
		if (s[i].score != s[i+1].score)
			break; 
	}
}
void query(int n)
{
	int i;
	char sno1[20];
	printf("请输入课程号:");
	scanf("%s", &sno1);
	for (i = 0; i < n; i++)//排序
	{
		if (sno1 == s[i].sno) {
			printf("%s\t%s\t%d\n", s[i].sno, s[i].name, s[i].score);
		}
	}
}
int main()
{
	int n = 5;
	printf("菜单界面:\n");
	printf("1表示输入5门课程:\n");
	printf("2表示输出5门课程:\n");
	printf("3表示对5门课程按学分排序:\n");
	printf("4表示输出5门课程查询:\n");
	printf("5输出最高学分的课程:\n");
	printf("6表示结束返回:\n");
	printf("请输入编号:\n");

	while (true) {
		int a;
		scanf("%d", &a);
		switch (a) {
		case 1:
			input();
			break;
		case 2:
			output(n);
			break;
		case 3:
			sort(n);
			break;
		case 4:
			query(n);
			break;
		case 5:
			outputMax(n);
		case 6:
			return 0; 
		default:
			exit;
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值