C语言——第一次作业(2)
1.写程序证明p++等价于(p)++还是等价于*(p++)?
#include <stdio.h>
int main()
{
	int *p,a=5;
	p = &a;
	printf("*p = %d\n",*p);         //*p = 5
	printf("p = %d\n",p);         //p = 6487620
	printf("p++ = %d\n",p++);         //p++ = 6487620
        //printf("(p)++ = %d\n",(p)++);        //(p)++ = 6487620
	//printf("*p++ = %d\n",*p++);        //*p++ = 5
	//printf("*(p++) = %d\n",*(p++));        //*(p++) = 5
 }
题目
题目1.计算两数的和与差(函数题)
1.设计思路
- (1)算法
第一步:调用题目中定义的函数。
第二步:通过局部变量op1,op2进行加减运算,计算psum、pdiff的值。
第三步:函数调用结束,结果返回主函数。
- (2)流程图

2.实验代码
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
	*psum = op1 + op2;
	*pdiff = op1 - op2;
}
完整代码
#include <stdio.h>
void sum_diff( float op1, float op2, float *psum, float *pdiff );
int main()
{
    float a, b, sum, diff;
    scanf("%f %f", &a, &b);
    sum_diff(a, b, &sum, &diff);
    printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);
    return 0;
}
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
	*psum = op1 + op2;
	*pdiff = op1 - op2;
}
3.本题调试过程碰到问题及解决办法
本题未遇到问题。
题目2.拆分实数的整数与小数部分(函数题)
1.设计思路
- (1)算法
第一步:调用题目中定义的函数。
第二步:将x除以1,所得值为x的整数部分,将其赋值给*intpart。
第三步:将x减去其整数部分intpart,所得值为x的小数部分,将其赋值给fracpart。
第四步:函数调用结束,结果返回主函数。
- (2)流程图

2.实验代码
void splitfloat( float x, int *intpart, float *fracpart )
{
	*intpart = x / 1;
	*fracpart = x - *intpart;
}
完整代码
#include <stdio.h>
void splitfloat( float x, int *intpart, float *fracpart );
int main()
{
    float x, fracpart;
    int intpart;
    scanf("%f", &x);
    splitfloat(x, &intpart, &fracpart);
    printf("The integer part is %d\n", intpart);
    printf("The fractional part is %g\n", fracpart);
    return 0;
}
void splitfloat( float x, int *intpart, float *fracpart )
{
	*intpart = x / 1;
	*fracpart = x - *intpart;
}
3.本题调试过程碰到问题及解决办法
错误信息:
错误原因:*fracpart是浮点型数据,(x/1)的运算没有作用。
改正方法:将*fracpart = x - (x / 1)改为 *fracpart = x - *intpart。
题目3.在数组中查找指定元素(函数题)
1.设计思路
- (1)算法
第一步:调用题目中定义的函数。
第二步:定义i,使用for循环结构,在数组元素范围内,当存在数组元素等于所查找的数据时,返回主函数此元素下标;当循环结束时未查找到,则返回主函数-1。
第三步:函数调用结束。
- (2)流程图


2.实验代码
int search( int list[], int n, int x )
{
    int i;
    for (i = 0 ; i < n ; i++)
    {
        if (list[i] == x)
        {
            return i ;
        }
    }
    return -1;
}
完整代码
#include <stdio.h>
#define MAXN 10
int search( int list[], int n, int x );
int main()
{
        int i, index, n, x;
        int a[MAXN];
        scanf("%d", &n);
        for( i = 0; i < n; i++ )
            scanf("%d", &a[i]);
        scanf("%d", &x);
        index = search( a, n, x );
        if( index != -1 )
            printf("index = %d\n", index);
        else
            printf("Not found\n");
        return 0;
}
int search( int list[], int n, int x )
{
    int i;
    for (i = 0 ; i < n ; i++)
    {
        if (list[i] == x)
        {
            return i ;
        }
    }
    return -1;
}
3.本题调试过程碰到问题及解决办法
本题未遇到问题。
题目4.找最大值及其下标(函数题)
1.设计思路
- (1)算法
第一步:调用题目中定义的函数。
第二步:定义i,max=*a(使max初始值为数组a首元素地址),使用for循环结构,在数组元素范围内,将数组a中数值最大的元素存于max,将a的下标存于b。
第三步:函数调用结束,结果返回主函数。
- (2)流程图


2.实验代码
int fun(int *a,int *b,int n)
{
	int i,max=*a;
	for(i = 0 ; i < n ; i++)
	{
		if(*(a+i) > max)
		{
			max = *(a+i);
			*b = i;
		}
	}
	return (max);
}
完整代码
#include<stdio.h>
#define N 10
int fun(int *a,int *b,int n);
int main()
{
        int a[N],i,max,p=0;
        for(i=0;i<N;i++)
            scanf("%d",&a[i]);
         max=fun(a,&p,N);
         printf("max=%d,position=%d\n",max,p);
         return 0;
}
int fun(int *a,int *b,int n)
{
	int i,max=*a;
	for(i = 0 ; i < n ; i++)
	{
		if(*(a+i) > max)
		{
			max = *(a+i);
			*b = i;
		}
	}
	return (max);
}
3.本题调试过程碰到问题及解决办法
本题未遇到问题。
题目5.最小数放前最大数放后(函数题)
1.设计思路
- (1)算法
第一步:调用题目中定义的input(int *arr,int n)函数,定义i,使用for循环结构,当i小于元素个数n时,输入arr数据。函数调用结束。
第二步:调用题目中定义的max_min(int arr,int n)函数。定义 j,s=0,t,x=0,首先使用for循环结构,在循环中判断(arr+j)与(arr+s)的大小关系,当(arr+j)<*(arr+s) 时,将j赋值给s,若s不等于0,做交换,可得最小值;同理,可得最大值。函数调用结束。
第三步:调用题目中定义的output(int *arr,int n)函数。定义k,使用循环结构,输出结果。函数调用结束。
- (2)流程图




2.实验代码
void input(int *arr,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%d",arr++);
	}
}
void max_min(int *arr,int n)
{
	int j,s=0,x=0;
	int t;
	for(j=1;j<n;j++)
	{
		if(*(arr+j)<*(arr+s))
			s=j;
	}
	if(s!=0)
	{
		t=*arr;
        *arr=*(arr+s);
        *(arr+s)=t;
	}
	for(j=1;j<n;j++)
	{
		if(*(arr+j)>*(arr+x))
			x=j;
	}
	if(x!=0)
	{
		t=*(arr+n-1);
        *(arr+n-1)=*(arr+x);
        *(arr+x)=t;
	}
}
void output(int *arr,int n)
{
	int k;
	for(k=0;k<n;k++,arr++)
	{
		printf("%3d",*arr);
	}
}
完整代码
#include<stdio.h>
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
int main()
{
    int a[10];
    input(a,10);
    max_min(a,10);
    output(a,10);
    return 0;
}
void input(int *arr,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%d",arr++);
	}
}
void max_min(int *arr,int n)
{
	int j,s=0,x=0;
	int t;
	for(j=1;j<n;j++)
	{
		if(*(arr+j)<*(arr+s))
			s=j;
	}
	if(s!=0)
	{
		t=*arr;
        *arr=*(arr+s);
        *(arr+s)=t;
	}
	for(j=1;j<n;j++)
	{
		if(*(arr+j)>*(arr+x))
			x=j;
	}
	if(x!=0)
	{
		t=*(arr+n-1);
        *(arr+n-1)=*(arr+x);
        *(arr+x)=t;
	}
}
void output(int *arr,int n)
{
	int k;
	for(k=0;k<n;k++,arr++)
	{
		printf("%3d",*arr);
	}
}
3.本题调试过程碰到问题及解决办法
本题出现了格式错误,题目中要求每个元素输出占3列,但是我并没有在代码中表现出这一点。修改输出格式即为正确答案。

题目6.指针选择法排(函数题)
1.设计思路
- (1)算法
第一步:调用题目中定义的函数。
第二步:定义i,t,k,j,使用双重for循环结构(即使用选择排序法排序)。
第三步:函数调用结束。
- (2)流程图


2.实验代码
void sort(int *x,int n)
{
	int i;
	for(i=0;i<(n-1);i++)
	{
		int k,j;
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(*(x+j)>*(x+k))
			{
				k=j;
			}
		}
		if(i!=k)
		{
			int t;
			t=*(x+i);
			*(x+i)=*(x+k);
			*(x+k)=t;
		}
	 }
} 
完整代码
#include<stdio.h>
void sort(int *x,int n);
int main ( )
{
     int *p,i,a[10];
     p=a;
     for (i=0;i<10;i++)
        scanf("%d",p++);
     p=a;
     sort(a,10);
     for(i=0;i<10;i++)
        printf("%4d",*p++);
     printf("\n");
     return 0;
 }
void sort(int *x,int n)
{
	int i;
	for(i=0;i<(n-1);i++)
	{
		int k,j;
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(*(x+j)>*(x+k))
			{
				k=j;
			}
		}
		if(i!=k)
		{
			int t;
			t=*(x+i);
			*(x+i)=*(x+k);
			*(x+k)=t;
		}
	 }
}
3.本题调试过程碰到问题及解决办法
本题未遇到问题。
题目7.判断回文字符串(函数题)
1.设计思路
- (1)算法
第一步:调用题目中定义的函数。
第二步:确定输入字符串的长度,定义i,j,(i为首元素下角标,j为末元素下角标)使用循环结构,判断在数组元素内是s[i]与s[j]是否相等。若是,则返回true;若不是则返回false。
第三步:函数调用结束。
- (2)流程图


2.实验代码
bool palindrome( char *s )
{
	int a = strlen(s);
  	int i, j;
  	for(i=0,j=a-1 ; i <= j ; i++, j--)
	{
   		if(s[i] == s[j]);
   		return false;
 	}
  	return true;
}
完整代码
#include <stdio.h>
#include <string.h>
#define MAXN 20
typedef enum {false, true} bool;
bool palindrome( char *s );
int main()
{
    char s[MAXN];
    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);
    return 0;
}
bool palindrome( char *s )
{
	int a = strlen(s);
  	int i, j;
  	for(i=0,j=a-1 ; i <= j ; i++, j--)
	{
   		if(s[i] == s[j]);
		return false;
 	}
  	return true;
}
3.本题调试过程碰到问题及解决办法
本题未遇到问题。
题目8.使用函数实现字符串部分复制(函数题)
1.设计思路
- (1)算法
第一步:调用题目中定义的函数。
第二步:先使用字符串复制函数,判断字符串长度。使用双重for循环结构,利用指针进行复制,注意最后的'\0'结束符。
第三步:函数调用结束,结果返回主函数。
- (2)流程图


2.实验代码
void strmcpy(char *t, int m, char *s)
{
    int i,j,a;
    strcpy(s,t);
    a = strlen(s);
    for (i = m - 1 ; i > 0 ; i--)
	{
        for (j = i ; j < a + 1 ; j++)
            *(s + j - 1) = *(s + j);
    }
    *(s + a - m + 1) = '\0';
    return;
}
完整代码
#include <stdio.h>
#define MAXN 20
#include<string.h>
void strmcpy( char *t, int m, char *s );
//void ReadString( char s[] ); 
int main()
{
    char t[MAXN], s[MAXN];
    int m;
    scanf("%d\n", &m);
    //ReadString(t);
    gets(t);
    strmcpy( t, m, s );
    printf("%s\n", s);
    return 0;
}
void strmcpy(char *t, int m, char *s)
{
    int i,j,a;
    strcpy(s,t);
    a = strlen(s);
    for (i = m - 1 ; i > 0 ; i--)
	{
        for (j = i ; j < a + 1 ; j++)
            *(s + j - 1) = *(s + j);
    }
    *(s + a - m + 1) = '\0';
    return;
}
3.本题调试过程碰到问题及解决办法
本题原函数中存在一个“由裁判实现,略去不表”的函数,使得原代码在编译器中无法通过编译。不过修改也很简单,自行编写读入字符串的函数就好。
额外加题
为了防止信息被别人轻易盗取,需要把电码明文通过加密方式变换成为密文。变换规则如下:小写字母y变换为a,小写字母z变换为b,其他字母变换成为该字母ASCII码顺序后2为字幕,比如o变换成q。要求给出你的姓名全拼加密后的结果。
1.设计思路
- (1)算法
第一步:定义数组,获取字符串。
第二步:在字符不是'\0'的情况下使用循环结构,在循环中进行判断输出。
第三步:返回,结束。
- (2)流程图

2.实验代码
#include <stdio.h>
#define N 10001
int main()
{
	char a[N];
	gets(a);
	int i = 0;
	while(a[i] != '\0')
	{
		if(a[i] == 'y')
			printf("%c",'a');
		else if(a[i] == 'z')
			printf("%c",'b');
		else if(a[i] >= 'a' && a[i] <= 'x')
			printf("%c",a[i]+2);
		else;
		i++;
	}
	return 0;
}

3.本题调试过程碰到问题及解决办法
本题题目中未说明除小写字母外其它字符的变换规则,所以我将除小写字母外其他字母都当成默认不显示字符,未进行打印输出。
学习总结和进度
1.知识点
1.使用指针变量做函数参数。
2.数组与指针的结合使用。
3.指针字符串的使用。
学会了以上知识点。由于熟练程度有所欠缺,还不太习惯使用指针,解题总是习惯性地使用以前的思路,接下来解题会尽可能思考指针方法,提高熟练度。
2.我的git地址

3.点评链接
链接一
链接二
链接三
4.图表




C语言——第一次作业(2)的更多相关文章
- c语言第一次作业1
		
第一次作业 一 你对软件工程或者计算机科学与技术专业的了解是什么? 软件工程是一门研究用工程化方法构建和维护有效的,实用的和高质量的软件的学科,涉及程序语言设计,数据库,软件开发工具,系统平台,设计模 ...
 - 网络1712--c语言第一次作业总结
		
1.作业亮点 1.1大家均能较为独立自主地完成第一次c语言作业,无明显抄袭现象 1.2 以下几位同学博文写的较为优秀,可作为范例供大家参考 田亚琴--态度端正,及时回复评论并及时完善修改博文 戴洁-- ...
 - c语言------第一次作业,分支,顺序结构
		
1.1思维导图 1.2本章学习体会及代码量学习体 1.2.1学习体会 初次接触C语言,由于比较懒惰,感觉学习脚步跟不上身边的同学,也比较困扰.但伴随着pta上多次显示的##编译错误##,坚持不懈地问舍 ...
 - 网络1711班 C语言第一次作业批改总结
		
Testing 总结 1 本次作业评分规则 1.1 基本要求(1分) 按时交 - 有分 未交 - 0分 迟交一周以上 - 倒扣本次作业分数 抄袭 - 0分 博客作业格式不规范,没有用Markdown语 ...
 - c语言第一次作业——输入与输出格式
		
一.PTA实验作业 1.温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代码 ...
 - C语言——第一次作业
		
**学习内容总结** 本周进行了算法的初步学习,用计算机的思维方式去思考问题,并学习了如何用传统程序框图表示算法. 相关内容: 1.算法是用来解决问题的方法与步骤. 2.计算机擅长重复,常用枚举的方法 ...
 - c语言第一次作业--分支  顺序结构
		
1.1思维导图 1.2.1本周学习体会以及代码量学习体会 1.2.2学习体会 因为在假期时只看了小部分的学习视频,也没有刷题量,导致了在开始就感觉到差同学的进程很多.刚开始觉得老师讲课很快,在恶补了很 ...
 - c语言第一次作业--顺序、分支结构
		
1.1思维导图 1.2.1本周学习体会以及代码量学习体会 1.2.2学习体会 因为在暑假时候没有对c语言进行学习,没太关注一些学习资料,一些教学视频也没看,感觉对c语言是陌生的,刚开课的时候自 ...
 - C语言第一次作业
 - C语言第一次作业——输入输出格式
		
题目1温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代码 #include& ...
 
随机推荐
- 【NFS】nfs安装调优
			
nfs [root@flymaster ~]# rpm -qa nfs-utils rpcbindnfs-utils-1.2.3-75.el6.x86_64rpcbind-0.2.0-13.el6_9 ...
 - 如何在Java应用中提交Spark任务?
			
最近看到有几个Github友关注了Streaming的监控工程--Teddy,所以思来想去还是优化下代码,不能让别人看笑话,是不.于是就想改在一下之前最丑陋的一个地方--任务提交 本博客内容基于Spa ...
 - Web 小案例 -- 网上书城(三)
			
内容有点乱,有兴趣的同伙可依照后面的案例结构结合文章进行阅读 和网上购买东西一样,你可以在不登录的状态下去浏览商品,但是当你想把自己中意的东西加入购物车或是收藏起来就需要你拥有自己的账号然后登录后才可 ...
 - 说说你对用SSH框架进行开发的理解
			
SSH框架指的是Struts,Spring,Hibernate.其中,Struts主要用于流程控制:Spring的控制反转能祈祷解耦合的作用:Hibernate主要用于数据持久化.
 - [BZOJ1096] [ZJOI2007] 仓库建设 (斜率优化)
			
Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天, ...
 - 300行Kotlin代码实现的区块链
			
使用Kotlin实现的区块链基本逻辑! 源码地址 GitHub仓库 启动方式 启动参数添加 -Dserver.port=8080,启动不同的端口,模拟不同的节点. 假设目前启动了8080和8081两个 ...
 - node.js连接MySQL操作及注意事项
			
node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑.前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是nod ...
 - 360加固apk并自动签名
			
我们知道Android加混淆之后,代码的安全性得到了提高,即使你hook,反编译得到的也是乱码的,对于阅读性造成了影响,为了增强代码的破解难度,我们通常退对apk进行加固,常见的有腾讯,360,爱加密 ...
 - 项目角度谈矢量切片运用以及Geoserver处理自定义规格矢量切片方案
			
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1. 背景 矢量切图方案目前已经是很常见的一个方案,在2016年时团队 ...
 - linux 目录详解
			
/bin bin是binary的缩写.这个目录沿袭了UNIX系统的结构,存放着使用者最经常使用的命令.例如cp.ls.cat,等等. /boot 这里存放的是启动Linux时使用的一些核心文件. /d ...