简单C语言程序设计(中南大学C语言实验报告)

一、实验一

从键盘输入一个三位数,输出该数的各位数字之和。
如输入:358,输出:3+5+8=16。

1.1 实验设计
  1. 首先,需要从键盘输入一个三位数,用到scanf的函数。
  2. 其次,题目明确说明是三位数,只需把这个三位数的每一位数分解出来求和即可。分解的方法有两种:
    一是用循环三次,每一次都对该数对10取余再除10;
    二是直接求三个数字,分别对三位数对10取余、除100、先对10取余再除10。
  3. 最后,在输出时,题目要求输出一个表达式,就应该使用printf的函数依此输出百位、加号、十位、加号、个位、等于号、和。
1.2 实验代码
#include<stdio.h>
int main(){
	int x=0;	
	int g,s,b;
	scanf("%d",&x);	
	g=x%10;
	s=x/10%10;
	b=x/100;
	printf("%d+%d+%d=%d\n",b,s,g,b+s+g);
	return 0;
}
1.3 实验总结与分析

这个试验主要考察了标准输入输出函数的应用以及基本运算符的理解,在分别计算每一位数字时有多种算法,根据题目做选择。如果数字位数已知且较小,则适合用直接计算法,若位数未知或位数较大,则适合使用循环加和法。不同的题目应该使用不同的方法。

二、实验二

从键盘输入一个整数,判断是否是满足除以4余3、除以7余5的数。

2.1 实验设计
  1. 首先应该使用scanf的函数输入一个整数
  2. 其次应该做出判断。先判断该数对4取余是否等于三,再判断概述对7取余是否等于5。这里应该使用逻辑运算符&&。
  3. 最后应该得出结果是否满足题意,运用printf的函数,如果不满足则输出no,满足则输出yes。
2.2 实验代码
#include<stdio.h>
int main(){
	int flag=0;
	int x=0;
	scanf("%d",&x);
	if(x%4==3 && x%7==5) printf("yes\n");
	else printf("no\n");
	return 0;
}
2.3 实验总结与分析

这个实验主要考察了标准输入输出函数的应用以及逻辑运算符和基本运算符的理解,在使用逻辑运算符时,要注意两点,首先是区分赋值符号“=”和判断符“==”的区别,否则非常容易出错,判断符最后只会得出1或者1的结果而赋值运算符是从右向左传递值;其次是要弄明白逻辑运算符之间的关系,在本题中,两个条件应该是“并”的关系,即应该使用“&&”运算符连接,如果在写表达式时,用“x%4!=3”表达,则这两个表达式之间应该使用“||”连接才是正确结果。

三、实验三

从键盘输入一个数字字符串,转换为整数输出。

3.1 实验设计
  1. 首先应该使用scanf或者gets读入一个字符串
  2. 再对字符串进行处理,字符串本质就是一个字符数组,遍历这个数组,从最后一位开始每一位依次加到整数中去,用一个t来表示第几位,每一次循环t乘以10表示下一位。
  3. 最后输出这个数字
3.2 实验代码
#include<stdio.h>
#include<string.h>
int main(){
char s[10];
	int a=0;
	int i=0,t=1;
	scanf("%s",s);
	int n=strlen(s);
	for(i=n-1;i>=0;i--){
		a+=(s[i]-'0')*t;
		t*=10;
	}
	printf("%d",a);
	return 0;
}
3.3 实验总结与分析

首先要理解字符串的本质实际上就是一个字符数组,其次它是一个字符串可以使用字符串的函数strlen()得出字符串的元素个数。核心算法应该是逆序遍历这个字符串,从个位开始加到整数中去,每加一位就乘10。这个题目还考察到了字符与整形的区别,字符的数字实际上是ASCII表中的一个字符,可以使用该字符减去字符零的方法得到它实际对应的数字。

四、实验四

编写计算mn的递归函数,并计算54。

4.1 实验设计
  1. 首先应该使用函数递归的思想去解决一个数的次幂问题
  2. 这个函数应该在每一次调用的过程中调用这个函数再×m,直到上标为0,返回m;
  3. 算法是mn=m(n-1)·m
  4. 用scanf输入m和n之后直接调用次幂函数即可,在调用的过程中运用递归的思想。
4.2 实验代码
#include<stdio.h>
int f(int m ,int n);
int main(){
	int m,n;
	scanf("%d%d",&m,&n);
	printf("%d",f(m,n));
	return 0;
}
int f(int m,int n){
	if(n==0) 
		return 1;
	else 
		return f(m,n-1)*m;
}
4.3 实验总结与分析

递归解决这个问题的关键就是在于理解逐渐拆分,向下传递,向上回归这个过程。在面对递归问题时,我们可以用「分而治之」的概念去帮助理解。步骤如下:把问题分解成更容易解决的子问题集合,比如可以把计算斐波那契数列的第n项问题分解转换成计算第n-1项加上第n-2项这两个子问题假设我们有一个函数可以应用在所有的子问题上,比如计算斐波那契数列的fibo函数;基于步骤2的函数,实现如何把子问题的解拼成最终问题的解,这就是递归部分,在计算斐波那契数列的例子里就是fibo(n-1) + fibo(n-2)部分;递归部分确定了,然后再考虑子问题最终简化到到最底层时该返回什么值。

五、实验五

利用指针编写程序,实现从键盘输入一个字符串,将此字符串从m个字符开始的n个字符复制成另一个字符串。

5.1 实验设计
  1. 首先应该使用scanf函数读入一个字符串和m,n
  2. 然后利用函数对该字符串进行操作。函数的参数必须要有输入字符串的地址和输出字符串的地址,而题目中要求从第m个字符开始复制,所以可以直接传入第m个字符的地址,再进行复制
  3. 在函数中循环访问传入的输入字符串的地址,并将其赋给输出字符串地址中的变量,每次循环地址加1,即数组下标加一,循环n次
  4. 循环结束后在输出字符串的末尾加‘\0’表示字符串结束,直接输出字符串
5.2 实验代码
#include<stdio.h>
void cut(char *out,const char *in,int n);
int main()
{
			char in[100];
			char out[100];
			int m,n;
			scanf("%s%d%d ",in,&m,&n);
			m--;
			cut(out,in+m,n);
printf("%s",out);
return 0;
}	

void cut(char *out,const char *s,int n)
{
			int i=0;
			for(i=0;i<n;i++){
				*(out+i)=*(s+i);
			}
			*(out+i)='\0';
}
5.3 实验总结与分析

在使用指针时,首先要明白数组实际上就是一个指针,而对指针进行加减法运算实际上就是对指向数组下标加减后的数组元素的地址,因此只需要传一个首地址进入函数即可,之后可以对该地址进行加减法运算访问其中的元素。而这个实验实际上就是字符串函数strncpy的一个函数原型,运用字符串是字符数组的性质用指针进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forest_Lamb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值