第一次作业
C高级语言第一次作业(1)
6-1 计算两数的和与差
1.主要描述题目算法
第一步:根据题目来加减运算
第二部:用指针来传递数据
2.代码:
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum = op1 + op2;
*pdiff = op1 - op2;
}
3.指针在题目中的作用:
op1代表a op2代表b,
*psum代表sum *pdiff代表diff。
6-2 拆分实数的整数与小数部分
1.主要描述题目算法:
第一步:先写出函数,将数据变为int型定义整数部分
第二步:用传入数据减去int型数据定义为小数部分
2.代码:
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart = x;
*fracpart=x - *intpart;
}
3.指针在题目中的作用
x为输入数
*intpart取x整数部分
*fracpart取输入数减整数的部分
C高级语言第一次作业(2)
6-1 在数组中查找指定元素:
1.主要描述题目算法:
第一步:设定指针
第二步:在循环中找到相应值
第三步:找到后返回值
2.代码:
int search(int list[], int n, int x ){
int i,index;
for(i=0;i<n;i++)
{
if(list[i]==x){
index = i;
break;
}else{
index = -1;
}
}
return index;
}
3.流程图:
4.遇到的问题:未遇到问题。
6-2 找最大值及其下标:
1.主要描述题目算法:
第一步:设置指针
第二步:在循环中找出最大值和下标
第三步:利用指针输出结果
2.代码:
int fun(int *a,int *b,int n){
int i;
for(i=0;i<n;i++){
if(a[i]>*a){
*a = a[i];
*b = i;
}
}return *a;
}
3.流程图:
4.遇到的问题:未遇到问题
C高级语言第一次作业(3)
6-1 最小数放前最大数放后:
1.主要描述题目算法:
第一步:定义数组
第二步:利用循环找出最大值和最小值
第三步:将最大值和最小值利用指针交换
第四步:输出结果
2.代码:
void input(int *arr,int n)
{
int i;
for(i = 0;i < n;i++){
scanf("%d",& *(arr + i));
}
}
void max_min(int *arr,int n)
{
int idx=0,i,t;
for ( i = 0; i < n; i++ )
{
if ( arr[i] < arr[idx] )
{
idx=i; }
}
if(idx!=0){
t=arr[0];arr[0]=arr[idx];arr[idx]=t;
}
idx=0;
for ( i = 0; i < n; i++ )
{
if ( arr[i] > arr[idx] )
{
idx=i;}
}
if(idx!=(n-1)){
t=arr[n-1];
arr[n-1]=arr[idx];
arr[idx]=t;}
}
void output(int *arr,int n)
{
int i;
for(i = 0;i < n;i++){
printf("%3d",*(arr + i));
}
}
3.流程图:
4.遇到的问题:未遇到问题
6-2 指针选择法排序
1.主要描述题目算法:
第一步:设定数组
第二步:找出数组最大值
第三步:记录当前数组值
第四步:调换当前数组值和最大值
2代码:
void sort(int *x,int n)
{
int j,i,t;
for(j=1;j<=n-1;j++)
for(i=0;i<=n-j-1;i++)
if(x[i]<x[i+1])
{t=x[i]; x[i]=x[i+1]; x[i+1]=t;}
}
3.流程图:
4.遇到的问题:最大值和最小值排序错误
解决办法:将大于号改为小于号
C高级PTA第一次作业(4)
6-1 判断回文字符串:
1.主要描述题目算法:
第一步:记录字符长度
第二步:判断长度单复数
第三步:利用循环对比首尾,输出结果
2.代码:
bool palindrome( char *s ){
int i,j;
int n = strlen(s);
for(i=0,j=n-1;i<=(n-1)/2;i++,j--)
{
if(*(s+i)!=*(s+j))
{
return false;
}
}
if(i>=j) return true;
}
3.流程图:
4.遇到的问题:未遇到错误。
6-2 使用函数实现字符串部分复制
1.主要描述题目算法:
第一步:找出字符串长度
第二步:判断字符串是否为空
第三步:将原数组数据存到新数组中
2.代码:
void strmcpy( char *t, int m, char *s ){
int n;
n=strlen(t);
int i;
int a=0;
if(m<=n){
for(i=m;t[i-m]!='\0';i++)
{
*(s+a)=t[i-1];
a++;
}*(s + n) = '\0';
}else{
*s='\0';
}
}
3.流程图:
4.遇到的问题:未定义出空字符
解决办法:在循环结尾加上空字符
附加题
1.主要描述题目算法:
第一步:获取字符串,将其传入函数。
第二步:用for语句遍历,用if语句判断遍历字符是否为y,z,若不是则码值加二,若是则分别变为a,b。
2.代码:
#include<stdio.h>
#define max 100
void SE( char *);
int main()
{
char name[max];
gets(name);
SE(name);
printf("%s",name);
return 0;
}
void SE (char *s)
{
for(;*s != '\0';s++)
{
if(*s == 'z'){
*s = 'b';
}else if(*s == 'y'){
*s = 'a';
}else{
*s = *s + 2;
}
}
}
3.流程图:
4.结果:
学习总结和进度
1.总结两周里所学的知识点有哪些学会了?哪些还没有学会?
学会了使用指针完成一系列问题。
对于指针的使用还不是很熟悉
2.将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
地址:https://git.coding.net/AssassinCreed/Devil-May-Cry.git
截图:
3.点评同学:
丰大为:http://www.cnblogs.com/DavidPark/p/8551402.html
顾家伟:http://www.cnblogs.com/qq807443119/p/8641932.html
高立彬:http://www.cnblogs.com/gao628526/p/8551285.html
4.表格和折线图: