C语言实验报告
预处理
编程序并上机调试运行。
预处理 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);
}
其实这题我感觉怪怪的。即便如此还是觉得自己写得更聪明点,希望事实也是如此。
预处理 3
用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如′a′变成′b′,…,z′ 变成′a′。其他字符不变)。用#define命令来控制是否要译成密码。例如:
- 编写程序,用条件编译方法来处理题目要求。
- 开始在程序中用“#define CHANGE 1”,运行程序,应得到密码。
- 将“#define CHANGE 1”改为“define CHANGE 0”,再运行,应得到原文。
代码——网上找的
#include<stdio.h>
#define LOCK 1 //自行修改LOCK的值,若为1则按照加密(将字母变成下一字母)输出,为0则按照原内容输出
int main()
{
char s1[20];
int i;
printf("输入一行字符串:\n");
gets(s1);
printf("输出字符串:\n");
if(LOCK)//根据宏进行判断 ,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
for(i=0;i<strlen(str);i++)
if(str[i]=='z')
str[i]='a';
else if(str[i]=='Z')
str[i]='A';
else
str[i]+=1;
puts(str);
#else
puts(str);
#endif
别人写得真好。果然抄作业是对的。
指针
编程序并上机调试运行程序(都要求用指针处理)。
指针 1
输入3个整数,按由小到大的顺序输出,然后将程序改为:输入3个字符串,按由小到大顺序输出(本题是教材第10章习题10.1和10.2)。
代码——自己写的
#include <stdio.h>
void swap(int *p1, int *p2);
int main(void)
{
int a,b,c;
int *p1,*p2,*p3;
printf("please inout three numbers :") ;
scanf("%d%d%d",&a,&b,&c);
p1=&a;
p2=&b;
p3=&c;
if(*p1>*p2) swap(p1,p2);
if(*p1>*p3) swap(p1,p3);
if(*p2>*p3) swap(p2,p3);
printf("%d<%d<%d\n",*p1,*p2,*p3);
}
void swap(int *p1, int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
改为输入字符串:
代码 —— 网上找的
#include <stdio.h>
void CompareInt(int* a, int* b, int* c)
{
if( *a >= *b && *a >= *c )
{
if( *b >= *c )
printf("%d %d %d", *c, *b, *a);
else
printf("%d %d %d", *b, *c, *a);
}
if( *b >= *a && *b >= *c )
{
if( *a >= *c )
printf("%d %d %d", *c, *a, *b);
else
printf("%d %d %d",*a, *c, *b);
}
if( *c >= *a && *c >= *b )
{
if( *a >= *b )
printf("%d %d %d",*b, *a, *c);
else
printf("%d %d %d",*a, *b, *c);
}
}
int main(void)
{
int a = 0, b = 0, c = 0;
printf("please input three number:");
scanf("%d %d %d",&a, &b, &c);
CompareInt(&a, &b, &c);
return 0;
}
改为输入字符串:
指针 2
用指向指针的指针的方法对n个字符串排序并输出。(本题是教材第10章习题10.20)。
结构体和共用体
结构体和共用体 1
有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求输出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。(本题是教材第11章习题11.5)
- 要求用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。
结构体和共用体 2
建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结眯所包含的年龄等于此年龄,则将此结点删去(本题是教材第11章11.11)。
文件
文件 1
有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、3门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中(本题是教材第13章习题13.6)。
- 设5名学生的学号、姓名和3门课成绩如下:
99101 Wang 89,98,67.5
99103 Li 60,80,90
99106 Fun 75.5,91.5,99
99110 Ling 100,50,62.5
99113 Yuan 58,68,71
文件 2
将上题stud文件中的学生数据按平均分进行排序处理,将已排序的学生数据存入一个新文件stu_sort中(本题是教材第13章习题13.7)。
- 在向文件stu_sort写入数据后,应检查验证stu_sort文件中的内容是否正确。
文件 3
将上题已排序的学生成绩文件进行插入处理。插入一个学生的3门课成绩。程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件(本题是教材第13章习题13.8)。
- 要插入的学生数据为:
99108 Xin 90,95,60
在向新文件stu_new写入数据后,应检查验证stu_new文件中的内容是否正确。