立志成为ctrlcv工程师
C语言实验报告
前情提要
这个博客是为了方便抄作业写的。
有福同享,有答案一起抄。
指针打后可能会每题写三份。
你们有舍友的话。可以和舍友商量着一起抄,还不会撞。
如果你们有写好的代码,想要造福社会,可以把代码发给我,我整理到文章上去,欢迎各位加入。
最后,因为我本人也很菜,写的代码可能也不怎么样。如果哪位好心人可以指点我一下,那就最好不过了。
嗯,总之欢迎交流。
版本🍄版本🐖版本🖊还有“自己写的”都是自己写的,可以随便抄,不用怕老师说你是网上找的。不用怕老师说你是抄答案的。
实验报告题目来源
昨天抄了四分之一。在网上找答案的过程中通过一些蛛丝马迹旁敲侧击找到了报告题目的来源——谭浩强的《C语言程序设计》。
贴上一份找到的答案:https://max.book118.com/html/2018/1009/6021005021001222.shtm
在抄答案的过程中。发现答案有些语法错误?
反正抄的不是很顺利。应该是因为这本书比较老了。
上面那份答案,似乎不
题外话
害。终于抄完了。简直就是鸽子精。不到最后一刻不写作业。本来想着写🍄版本和🐖版本也没写。有一题还是抄的。算了算了,江山易改本性难移。
预处理
编程序并上机调试运行。
预处理 1
定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实参,输出已交换后的两个值(本题是教材第9章习题9.1)。
代码
#include <stdio.h>
#define swap(a,b) t=a;a=b;b=t;
int main(void)
{
int x,y,t;
scanf("%d%d",&x,&y);
swap(x,y);
printf("%d,%d",x,y);
return 0;
}
预处理 2
设计输出实数的格式,包括:①一行输出一个实数;②一行内输出两个实数;③一行内输出3个实数。实数用“%6.2f”格式输出(本题是教材第9章习题9.6)。
- 用一个文件print_formar.h包含以上用#define命令定义的格式。在自己的文件(自己命名)中用#include命令将print_format.h文件包含进来。在程序中用scanf函数读入3个实验给f1、f2、f3。然后用上面定义的3种格式分别输出:①f1;②f1、f2;③f1、f2、f3 。
代码 —— 自己写的
print_format.h
#define format1(f1,f2,f3) printf("format1:\n"); printf("%6.2f\n%6.2f\n%6.2f\n",f1,f2,f3);
#define format2(f1,f2,f3) printf("\nformat2:\n"); printf("%6.2f、%6.2f\n%6.2f\n",f1,f2,f2);
#define format3(f1,f2,f3) printf("\nformat3:\n"); printf("%6.2f、%6.2f、%6.2f\n",f1,f2,f3);
#include "print_format.h"
#include <stdio.h>
int main(void)
{
int i;
float f1,f2,f3;
printf("please input three float numbers:");
scanf("%f%f%f",&f1,&f2,&f3);
format1(f1,f2,f3);
format2(f1,f2,f3);
format3(f1,f2,f3);
}
代码 —— 网上找的
直接抄这个很容易被发现。建议先改一改再收入囊中为己所用。
#include<stdio.h>
#define PR printf
#define NL putchar('\n');
#define PRINT1(a) PR("%6.2f",a);NL
#define PRINT2(a,b) PR("%6.2f",a);PRINT1(b)
#define PRINT3(a,b,c) PR("%6.2f",a);PRINT2(b,c)
int main()
{
float a,b,c;
PR("输入a,b,c三个数:\n");
scanf("%f%f%f",&a,&b,&c);
PR("一行输出一个:\n");
PRINT1(a);
PRINT1(b);
PRINT1(c);
PR("一行输出两个:\n");
PRINT2(a,b);
PRINT1(c);
PR("一行输出三个:\n");
PRINT3(a,b,c);
}
代码 —— 网上找的(加以修改
print_format.h
#define FORMAT1(a) printf("%6.2f\n",a);
#define FORMAT2(a,b) printf("%6.2f",a);FORMAT1(b)
#define FORMAT3(a,b,c) printf("%6.2f",a);FORMAT2(b,c)
#include<stdio.h>
#include <print_format.h>
int main(void)
{
float a,b,c;
printf("输入a,b,c三个数:\n");
scanf("%f%f%f",&a,&b,&c);
printf("一行输出一个:\n");
FORMAT1(a);
FORMAT1(b);
FORMAT1(c);
printf("一行输出两个:\n");
FORMAT2(a,b);
FORMAT1(c);
printf("一行输出三个:\n");
FORMAT3(a,b,c);
return 0;
}
其实这题我感觉怪怪的。即便如此还是觉得自己写得更聪明点,希望事实也是如此。
预处理 3
用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如′a′变成′b′,…,z′ 变成′a′。其他字符不变)。用#define命令来控制是否要译成密码。例如:
- 编写程序,用条件编译方法来处理题目要求。
- 开始在程序中用“#define CHANGE 1”,运行程序,应得到密码。
- 将“#define CHANGE 1”改为“define CHANGE 0”,再运行,应得到原文。
代码 —— 网上找的
#include<stdio.h>
#define CHANGE 1
//原来是LOCK
//自行修改LOCK的值,若为1则按照加密(将字母变成下一字母)输出,为0则按照原内容输出
int main()
{
char s1[20];
int i;
printf("输入一行字符串:\n");
gets(s1);
printf("输出字符串:\n");
if(CHANGE)//根据宏进行判断 ,lock==1
{
for(i=0;i<20;i++)
if(s1[i]!='\0'){
if(s1[i]>='a'&&s1[i]<'z'||s1[i]>='A'&&s1[i]<'Z')
s1[i]++;
else if(s1[i]=='z'||s1[i]=='Z')
s1[i]-=25;
}
}
printf("%s",s1);//输出结果
}
代码 —— 自己写的
这个其实没有按题目要求。因为不是输入的。但是写都写了。就这样吧。
#define CHANGE 1
int main(void)
{
int i;
static char str[]="Zchinaz";
#if CHANGE