没有合适的资源?快使用搜索试试~ 我知道了~
西安电子科技大学计算机科学与技术专业,贾文老师C语言程序设计课程高分报告,内涵程序源码
需积分: 5 2 下载量 91 浏览量
2023-09-11
12:38:37
上传
评论
收藏 933KB DOC 举报
温馨提示
试读
35页
本文档为西安电子科技大学计算机科学与技术专业,贾文老师C语言程序设计课程高分报告,内涵程序源码。可以直接运行出结果,代码注释明了,简单易懂。
资源推荐
资源详情
资源评论
《程序设计基础课程设计》实验报告
第 1 题
算法描述:
通过一个三重循环,确定每三个点是否在一条直线上,如果在一条直线上则不能构成三角
形,如果三个点不在一条直线上就可以构成一个三角形。
源程序:
No1.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct Point//定义坐标的结构体
{
int x; //x 坐标
int y; //y 坐标
}point, *setPoint;
//要求用户输入三角形的坐标信息
setPoint setPt(int n)
{
int i;
setPoint pt;
pt = (setPoint)malloc(sizeof(point)*n);//申请一块连续的指定大小的内存块区域
printf("请输入横坐标和纵坐标并用空格分开,如 95 27");
for(i=0; i<n; i++)
{
printf("第%d 个坐标为:", i+1);
scanf("%d %d", &(pt+i)->x, &(pt+i)->y);
}
return pt;
}
bool slope(point pt1, point pt2, point pt3)
{
int xl1, yl1, xl2, yl2;
yl1 = pt2.y - pt1.y;
xl1 = pt2.x - pt1.x;
yl2 = pt3.y - pt2.y;
xl2 = pt3.x - pt2.x;
if(yl1*xl2 == yl2*xl1)//判断斜率是否相同 ,如果斜率相同则不能组成三角形
return false;
else
return true;
}
//获取可以组成的三角形的总的个数
int getnumber(setPoint pt, int n)
{
int num = 0;
int i, j, k;
for(i=0; i<n-2; i++) //设 i 是线段的第一个点, 所以最大 i 是第 n-2 个点
{
for(j=i+1; j<n-1; j++) //设 j 是线段的最后一个点, 所以最大 j 是第 n-1 个点
{
//构成 pt[i]到 pt[j]的线段,由于 j 是
从 i+1 开始的,所以没有重复线段
for(k=j+1; k<n; k++)//k 用来一直循环到 n
{
if(slope(*(pt+i), *(pt+j), *(pt+k)))//三个点不在一条直线上就能组成三角形
num++;
}
}
}
return num;
}
int main()
{
int n, number;
printf("请输入你要输入的坐标点的个数:\n");
scanf("%d", &n);
setPoint pt = setPt(n);
number = getnumber(pt, n);
printf("\n%d\n", number);
return 0;
}
测试数据(输入、输出):(数据不用太多)
第 2 题 大数运算
算法描述:
如果不把正负号设计到字符数组里,符号不好确定,因此,输入字符串转为数组的时候先
判断符号,然后再转化为数组,正数相加直接相加,正负相加先判断长短确定符号,然后
进行减法运算,负负相加添加负号再进行加法运算,同理,减法运算先判断符号和长度,
然后转化为减或者加法即可。
源程序:
No2.c
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "malloc.h"
using namespace std;
const int maxn = 10010;
char a[maxn],b[maxn];
int aa[maxn],bb[maxn],cc[maxn];
int max(int i,int k)
{
if(i>k)
return i;
else
return k;
}
void sub(char a[],char b[],int n,int m)//计算两个数的差的函数
{
int q,u,aa[maxn],bb[maxn];
for(q=0; q<n; q++)
aa[q]=a[n-q-1]-'0';
for(q=0; q<m; q++)
bb[q]=b[m-q-1]-'0';
for(q=0; q<n; q++)
cc[q]=aa[q]-bb[q];
for(q=0;q<n;q++)
if(cc[q]<0)
{
while(cc[q]<0)
{
cc[q+1]=cc[q+1]-1;//借位(高位减一,低位加十)
cc[q]+=10;
}
}
}
int main()
{
while(scanf("%s%s",a,b)!=EOF)
{
printf("两个数的和为:");
memset(aa,0,sizeof(aa));
memset(bb,0,sizeof(bb));
int l1=strlen(a),l2=strlen(b),i;
int flag1=0,flag2=0;
if(a[0]=='0'&&b[0]=='0') printf("0\n"); //特殊考虑 a 和 b 都为 0 的情况
else
{
if(a[0]=='-')
{
flag1=1; //判断 a 是否是负数 是的话置标记
for(i=0;i<l1-1;i++) //然后 a[0]是负号可以不用处理
{
aa[i]=a[l1-i-1]-'0';
}
}
else //否则 直接转换就好
{
for(i=0;i<l1;i++)
{
aa[i]=a[l1-i-1]-'0';
}
}
if(b[0]=='-') //同理判断 b
{
flag2=1;
for(i=0;i<l2-1;i++)
{
bb[i]=b[l2-i-1]-'0';
}
}
else
{
for(i=0;i<l2;i++)
{
bb[i]=b[l2-i-1]-'0';
}
}
int s=0,ans=0; //分四种情况 分别对 a,b 进行处理
if(!flag1&&!flag2) //a,b 都为正数
{
l1=max(l1,l2);
for(i=0;i<l1;i++)
{
bb[i]+=aa[i];
if(bb[i]>=10)
{
剩余34页未读,继续阅读
资源评论
神秘学长
- 粉丝: 182
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功