一.实验目的及要求
(1)了解C语言中数据类型的意义。
(2)理解常用运算符的意义。
(3)掌握C语言表达式的运行规则。
(4)编写实验报告。
二.实验内容
(1)计算由键盘输入的任何两个整型数据,求他们的平均值并输出到屏幕。
(2)输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。
interest = money(1+rate)year - money
(3)要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E".“E"代替"A”。因此,“China"应译为"Glmre”。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)
#include
int main()
{int a,b;
float c;
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
c=(float)(a+b)/2;
printf("两个整数的平均数是%.1f",c);
}
#include
#include
int main()
{
float money,year,rate;
printf("请输入金额,年份数,利率:");
scanf("%f%f%f",&money,&year,&rate);
printf("存款到期的利息:%.2f",money*pow(1+rate,year)-money);
}
#include
int main(){
char c1='C',c2='h',c3='i',c4='n',c5='a';
printf("%c%c%c%c%c",c1+4,c2+4,c3+4,c4+4,c5+4);
}
#include
int main(){
char c1='C',c2='h',c3='i',c4='n',c5='a';
c1+=4;
c2+=4;
c3+=4;
c4+=4;
c5+=4;
printf("%c%c%c%c%c",c1,c2,c3,c4,c5);
}
#include
int main(){
char c1,c2,c3,c4,c5;
printf("请输入五个字母");
scanf("%c%c%c%c%c",&c1,&c2,&c3,&c4,&c5);
if(c1>='W'&&c1<='Z')
{c1=c1-22;}else{ if(c1>='w'&&c1<='z')
{c1=c1-22;}else{c1+=4;}}
if(c2>='W'&&c2<='Z')
{c2=c2-22;}else{ if(c2>='w'&&c2<='z')
{c2=c2-22;}else{c2+=4;}}
if(c3>='W'&&c3<='Z')
{c3=c3-22;}else{if(c3>='w'&&c3<='z')
{c3=c3-22;}else{c3+=4;}}
if(c4>='W'&&c4<='Z')
{c4=c4-22;}else{ if(c4>='w'&&c4<='z')
{c4=c4-22;}else{c4+=4;}}
if(c5>='W'&&c5<='Z')
{c5=c5-22;}else{if(c5>='w'&&c5<='z')
{c5=c5-22;}else{c5+=4;}}
printf("%c%c%c%c%c",c1,c2,c3,c4,c5);
}
一.实验目的及要求
(1)了解和掌握分支语句的使用,包括if语句的各种形式以及switch语句。
(2)使用循环语句完成累乘、图像输出的程序编写。
(3)掌握较复杂结构程序的编写。
(4)掌握程序调试的方法。
(5)编写实验报告。
二.实验内容
(1)请根据输入的学生成绩给出成绩等级的判断,判断规则如下:
如果输入的成绩大于等于90,则输出优秀;
如果输入的成绩小于90、大于等于80,则输出良好;
如果输入的成绩小于80、大于等于70,则输出中等;
如果输入的成绩小于70、大于等于60,则输出及格;
其他输出不及格。
(2)已知xyz + yzz = 532,其中x、y、z都是数字(0~9),编写一个程序求出x、y、z分别代表什么数字。
(3)编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字4时的情形:
4444444
33333
222
1
222
33333
4444444
(4)给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123.
三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)
#include
void main()
{
int a;
printf("请输入成绩:");
scanf("%d",&a);
if(a>=90){
printf("优秀");
}else if(a>=80){
printf("良好");
}else if(a>=70){
printf("中等");
}else if(a>=60){
printf("合格");
}else{
printf("不合格");
}
}
#include
int main()
{
int a;
printf("请输入成绩:");
scanf("%d",&a);
switch(a/10)
{
case 10:printf("优秀\n");break;
case 9: break;
case 8:printf("良好\n");break;
case 7:printf("中等\n");break;
case 6:printf("合格\n");break;
case 5:
case 3:
case 2:
case 1:
case 0:printf("不及格\n");break;
default:printf("错误\n");
}
return 0
}
#include
void main()
{
int x,y,z;
for(x=1;x<=10;x++)
for(y=1;y<=10;y++)
for(z=1;z<=10;z++)
if(x*100+y*10+z+y*100+z*10+z==532){
printf("%4d%4d%4d",x,y,z);
}
#include
void main()
{
int n,x,y;
printf("请输入一个1~9的数字\n");
scanf("%d",&n);
/*上面部分*/
for(x=n;x>=1;x--)/*随行递减*/
{
for(y=0;y<n-x;y++)
{
printf(" ");
}/*每行的空格数*/
for(y=0;y<2*x-1;y++)
{
printf("%d",x);
}/*每行的数字*/
printf("\n");/*换行*/
}
/*下面部分*/
/*每一行规律一样*/
for(x=2;x<=n;x++)
{
for(y=0;y<n-x;y++)
{
printf(" ");
}
for(y=0;y<2*x-1;y++)
{
printf("%d",x);
}
printf("\n");
}
}
#include
void main()
{
int x,a,b,c,d,e;
printf("请输入小于5位数的整数:");
scanf("%d",&x);
a=x/10000;
b=(x/1000)%10;
c=(x/100)%10;
d=(x/10)%10;
e=x%10;
if(x/10000>=1){
printf("这个数的组成为:");
printf("%4d",a);
printf("%4d",b);
printf("%4d",c);
printf("%4d",d);
printf("%4d",e);
printf("这个数的逆序为:%d",e*10000+d*1000+c*100+b*10+a);
} else if(x/1000>=1){
printf("这个数的组成为:");
printf("%4d",b);
printf("%4d",c);
printf("%4d",d);
printf("%4d",e);
printf("这个数的逆序为:%d",e*1000+d*100+c*10+b);
} else if(x/100>=1){
printf("这个数的组成为:");
printf("%4d",c);
printf("%4d",d);
printf("%4d",e);
printf("这个数的逆序为:%d",e*100+d*10+c);
} else if(x/10>=1){
printf("这个数的组成为:");
printf("%4d",d);
printf("%4d",e);
printf("这个数的逆序为:%d",e*10+d);
} else if(x>=1){
printf("这个数的组成为:");
printf("%d",e);
printf("这个数的逆序为:%d",e);
}
}
1、目的要求:
(1)学习函数的编程思想,编写一个包括3~4个函数的程序。
(2)掌握函数中参数传递的两种方式和函数的相互调用。
(3)编写实验报告。
2、实验内容:
(1)写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3。
(2)写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零值。
(3)一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行。
(4)写一个函数求给定的一个数n的阶乘,要求必须用递归函数实现该功能。
一.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)
#include
int digit( int n , int k )
{
int j;
while(n/10!=0)
{
for(j=2;j<=k;j++)
{
n=n/10;
}
n=n%10;
}
return n;
}
#include
int isprime(int n)
{
int i;
for(i=2;i<=sqrt(n);i++)
{
if (n%i == 0)
{
return 0;
}
}
return 1;
}
#include
#include
int isprime(int n);
int digit( int n , int k );
int main()
{
int t;
for(t=10000;t<=99999;t++)
{
if((digit(t,1)==digit(t,5))&&(isprime(t)==1)&&(digit(t,2)==digit(t,4)))
printf("%d\n",t);
}
}
int digit( int n , int k )/*判断对应位置数相等*/
{
int j;
while(n/10!=0)
{
for(j=2;j<=k;j++)
{
n=n/10;
}
n=n%10;
}
return n;
}
int isprime(int n)/*判断是否为质数*/
{
int i;
for(i=2;i<=sqrt(n);i++)
{
if (n%i == 0)
{
return 0;
}
}
return 1;
}
#include
long f(int n)
{
if(n<0)
return -1;
else if (n==0||n==1)
return 1;
else
return (n*f(n-1));
}
一.实验目的及要求
(1)掌握一维和二维数组的使用技巧。
(2)编写实验报告。
二.实验内容
(1)从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。比如原来数组为:2 -5 -89 75 0 -89 0 93 48 0,经过处理后的数组为:-5 -89 -89 0 0 0 75 93 48 2。由于不要求数组有序,所以不允许用排序方法。
提示:
1)输入N个数据,构建数组。
2)按照要求确定数据的位置,需要注意循环条件的确定、0数据元素往中间推的实现过程以及数组处理的方向。
(2)设数组a的定义如下:
int a[20] = {2,4,6,8,10,12,14,16}; 已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。
提示:
1)定义整型数组并初始化。
2)从键盘输入一个数据。
3)将该数据插入到数组中,由于要保证插入的数组仍然有序,所以需要查找插入的位置。
4)输出插入数据以后的数组。
(3)编程实现输入10个整数,并将其按降序排序并输出(可以使用选择排序算法或者冒泡排序算法)。
(4)写一个函数reverse( char s[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两种形式编写。
三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)
#include
void main()
{
int a[10]={0};
int b[10]={0};
int i=0;
int j=0;
int k=9;
int s=0;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
if(a[i]<0)
{
b[j]=a[i];
j++;
}
else if(a[i]>0)
{
b[k]=a[i];
k--;
}
}
for(s=0;s<10;s++)
{
printf("%3d",b[s]);
}
}
#include
int main()
{
int a[20]={2,4,6,8,10,12,14,16};
int b[20]={0};
int n=0;
int m=0;
int i=0;
int t=0;
int j=0;
scanf("%d",&n);
for(i=0;i<20;i++)
{
if(a[i]>n)
{
m=i;
break;
}
}
for(j=0,i=0;j<m;j++,i++)
{
b[j]=a[i];
}
for(j=m+1,i=m;j<20;j++,i++)
{
b[j]=a[i];
}
b[m]=n;
for(i=0;i<20;i++)
{
printf("%3d",b[i]);
}
}
#include
int main()
{
int a[10]={0};
int t=0;
int i=0;
int j=0;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(a[j]>a[i])
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
}
for(i=0;i<10;i++)
{
printf("%4d",a[i]);
}
}
递归void reverse( char s[]) {
int n;
n=strlen(s);
if(n==1) {
printf("%c ",s[0]);
return }
printf("%c ",s[n-1]);
s[n-1]='\0';
reverse(s); }
非递归:
void reverse( char s[]) {
int n;
int i,j;
char temp;
n=strlen(s);
if(n==1) {
printf("%c ",s[0]); return
}
for(i=0;i<n;i++) {
temp=s[i];
s[i]=s[n-1-i];
s[n-1-i]=temp;
}
for(i=0;i<n;i++)
{
printf("%c ",s[i]); }
}
一.实验目的及要求
(1)用指针作为函数参数完成字符串的传递。
(2)掌握函数中参数传递的两种方式。
(3)编写实验报告。
二.实验内容
(1)编写一个函数char *delk( char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回。
(2)写一个函数int find( char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。
(3)编写一个书名排序程序,输入10个书名存入一个二维数组,用函数void sortstring( char name[][20] , int n)实现它们的字典顺序输出。
(4)输入一个字符串,内有数字和非数字字符,例如:
A123cdf 456.78cpc876.9er 849.1
将其中连续的数字作为一个实数,依次存放到一数组a中。例如123存放在a[0],456.78存放在a[2],依次类推,统计共有多少个数,并输出这些数。
三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)
#include
char *delk( char *sp)
{
char b[100]={0};
int i=0;
char *pb=b;
while(*sp!='\0')
{
if(*sp!='$')
{
b[i]=*sp;
i++;
}
sp++;
}
b[i]='\0';
return pb;
}
int main()
{
char a[100];
gets(a);
getchar();
printf("%s", delk(a));
}
#include
#include
int find(char* s1,char* s2)
{
int i=0;
int len1 = strlen(s1);
int len2 = strlen(s2);
int j=0;
if(len1-len2<0) return -1;
for(;i<len1-len2;i++)
{
int m = i;
for(j=0;j<len2;j++)
{
if(s1[m]!=s2[j])
break;
m++;
}
if(j==len2)
break;
}
return i<len1-len2?i-1:-1;
}
int main()
{
char a[]="abdzgadgdvnjc";
char b[]="a";
printf("%d",find(a,b));
}
#include
#include
void sortstring( char name[][20] , int n)
{
int i,j;
char temp[20];
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(name[j],name[i])<0)
{
strcpy(temp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],temp);
}
}
}
}
int main()
{
char a[3][20];
int n=3,i;
for(i=0;i<n;i++)
{
gets(a[i]);
}
sortstring(a,n);
for(i=0;i<n;i++)
{
puts(a[i]);
}
return 0;
}
#include
#include
#include
int main()
{
char a[]="A123cdf 456.78cpc876.9er 849.1";
char b[100][20]={0};
int i=0,j=0,k=0;
while(a[i]!='\0')
{
if(isdigit(a[i])||(isdigit(a[i+1])&&a[i]=='.'))
//当是数字或者这一项是'.'且下一项是数字时,保存数字的值
{
b[j][k]=a[i];
k++;
if(isdigit(a[i])&&(isdigit(a[i+1])==0))
//当这一项是数字下一项是非数字时,给数组末尾加'\0'
{
b[j][k+1]='\0';
}
}
if((isdigit(a[i])&&(isdigit(a[i+1])==0&&a[i+1]!='.')))
//当这一项是数字,下一项不是数字也不是'.'时,计数
{
j++;
k=0;
}
i++;
}
printf("%d\n",j);
for(i=0;i<=j;i++)
{
printf("%s\n",b[i]);
}
}
一.实验目的及要求
(1)掌握结构体的定义、数据输入方法。
(2)掌握结构体成员变量的两种访问方法。
(3)掌握编写程序完成单链表的建立和查询方法。
(4)掌握文件的打开和关闭。
(5)精通文件的读写操作。
(6)了解文件的定位操作及文件的检测函数。
(7)掌握文件的应用。
(8)编写实验报告。
二.实验内容
(1)编写一个建立单链表的函数,设链表的表元素信息包含学号、姓名、一门课的成绩;写一个按照学号查学生成绩的函数;最后写一个主函数,它先调用建立函数,再调用查询函数(根据学号查找该学生),显示查到学生的姓名和成绩或者显示找不到该学生。
(2)在第(1)题的基础上加入删除链表中的一个学生节点的功能,先找到给定学号的学生节点,然后将该节点从链表中删除。
(3)有一个存放整数的文本文件,读取其中的数值,如果为奇数加1,如果为偶数减1,然后存放到新的文件中去。
三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)
实验一
#include
#include
#include
struct link
{
long number;
char name[20];
int socer;
struct link *next;
};
struct link *add(struct link *head);
//增加链表
void search(struct link*head ,long number);
// 查找学生信息
void displynode(struct link*head);
//输出全部学生信息
void deletememory(struct link*head);
// 程序结束时,释放掉申请的内存
int main()
{
int n,i=0;
long num;
struct link *head=NULL;
printf("How many students?\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
head=add(head);
}
displynode(head);
printf("input number which you want to search:\n");
scanf("%ld",&num);
search(head,num);
deletememory(head);
}
struct link* add(struct link*head)
{
struct link*p=NULL,*pr=head;
long number;
char name[20];
int socer;
p=(struct link*)malloc(sizeof(struct link));
if(p==NULL)
{
printf("no enough memory to allocate!\n");
exit(0);
}
if(head==NULL)
{
head=p;
}
else
{
while(pr->next!=NULL)
{
pr=pr->next;
}
pr->next=p;
}
printf("input student's number,name,socer:\n");
scanf("%ld%s%d",&number,&name,&socer);
p->number=number;
strcpy(p->name,name);
p->socer=socer;
p->next =NULL;
return head;
}
void search(struct link*head ,long number)
{
struct link*p=head,*pr=head;
if(head==NULL)
{
printf("空表\n");
}
while(number!=p->number&&p->next!=NULL)
{
pr=p;
p=p->next;
}
if(number==p->number)
{
printf("%ld\t%s\t%d\n",number,p->name,p->socer);
}
else
{
printf("没有找到你说的数据\n");
}
}
void displynode(struct link*head)
{
struct link*p=head,*pr=NULL;
int j=1;
while(p!=NULL)
{
printf("%d\t%ld\t%s\t%d\n",j,p->number,p->name,p->socer);
p=p->next;
j++;
}
}
void deletememory(struct link*head)
{
struct link*p=head,*pr=NULL;
while(p!=NULL)
{
pr=p;
p=p->next;
free(pr);
}
}
实验二
#include
#include
#include
struct link
{
long number;
char name[20];
int socer;
struct link *next;
};
struct link *add(struct link *head);
//增加链表
void search(struct link*head ,long number);
//查找学生信息
struct link* deletnode(struct link*head,long number);
//删除学生信息
void displynode(struct link*head);
//输出全部学生信息
void deletememory(struct link*head);
//程序结束时,释放掉申请的内存
int main()
{
int n,i=0;
long num;
struct link *head=NULL;
printf("How many students?\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
head=add(head);
}
displynode(head);
printf("input student's number which you want to search:\n");
scanf("%ld",&num);
search(head,num);
printf("which student's number want to delet?\n");
scanf("%ld",&num);
head=deletnode(head,num);
displynode(head);
deletememory(head);
}
struct link* add(struct link*head)
{
struct link*p=NULL,*pr=head;
long number;
char name[20];
int socer;
p=(struct link*)malloc(sizeof(struct link));
if(p==NULL)
{
printf("no enough memory to allocate!\n");
exit(0);
}
if(head==NULL)
{
head=p;
}
else
{
while(pr->next!=NULL)
{
pr=pr->next;
}
pr->next=p;
}
printf("input student's number,name,socer:\n");
scanf("%ld%s%d",&number,&name,&socer);
p->number=number;
strcpy(p->name,name);
p->socer=socer;
p->next =NULL;
return head;
}
void search(struct link*head ,long number)
{
struct link*p=head,*pr=head;
if(head==NULL)
{
printf("空表\n");
}
while(number!=p->number&&p->next!=NULL)
{
pr=p;
p=p->next;
}
if(number==p->number)
{
printf("%ld\t%s\t%d\n",number,p->name,p->socer);
}
else
{
printf("没有找到你说的数据\n");
}
}
struct link*deletnode(struct link*head,long number)
{
struct link*p=head,*pr=head;
if(head==NULL)
{
printf("空表\n");
return (head);
}
while(number!=p->number&&p->next!=NULL)
{
pr=p;
p=p->next;
}
if(number==p->number)
{
if(p==head)
{
head=p->next;
}
else
{
pr->next=p->next;
}
free(p);
}
else
{
printf("没有找到你说的数据\n");
}
return head;
}
void displynode(struct link*head)
{
struct link*p=head,*pr=NULL;
int j=1;
while(p!=NULL)
{
printf("%d\t%ld\t%s\t%d\n",j,p->number,p->name,p->socer);
p=p->next;
j++;
}
}
void deletememory(struct link*head)
{
struct link*p=head,*pr=NULL;
while(p!=NULL)
{
pr=p;
p=p->next;
free(pr);
}
}
实验三
#include
#include //由于使用exit函数
int main()
{
FILE *fp;
int a[100];
int i=0;
int flag=0;
if((fp=fopen("整数1.txt","r"))==NULL)
{
printf("Failure to open 整数1.txt!\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%d",&a[i]);
i++;
}//将文件中的数字转移到数组中
a[i]=0;//由于feof函数在末尾时还要返回一次于是将数组末尾设置为0;
fclose(fp);//关闭文件
for(i=0;a[i]!=0;i++)
{
if(a[i]%2==1)
{
a[i]+=1;
}
else
{
a[i]-=1;
}
}//将得到的数字进行题目规则的运算
FILE *fp1;//再建立一个文件指针 ,将修改后的数字赋给新文件
if((fp1=fopen("整数2.txt","w"))==NULL)
{
printf("Failure to open 整数1.txt!\n");
exit(0);
}
for(i=0;a[i]!=0;i++)
{
fprintf(fp1,"%4d",a[i]);
}
fclose(fp1);
}