仅供学习使用
目录
实验1 2023
1.
//请编写程序在屏幕上输出 hello world!
/**********Program**********/
//在这里开始写程序
#include "stdio.h"
void main()
{
printf("hello world!");
}
/********** End **********/
2.
//输入输出语句练习,请完成该程序
/**********Program**********/
#include "stdio.h"
void main()
{
int a,b;//在本行定义2个整形变量a和b
float x=0.1234f;//在本行定义1个单精度浮点型变量x,并且赋值为0.1234f
double y=2.0;//在本行定义1个双精度浮点型变量y,并且赋值为2.0
char c = 'A';//在本行定义1个字符型变量c,并且赋值为'A'
scanf("%d,%d",&a,&b);//输入2个整形变量a和b的值,两个变量以逗号隔开
scanf("%f",&x);//输入单精度浮点形变量x的值
scanf("%lf",&y);//输入双精度浮点形变量y的值
scanf("%c",&c);//输入字符型变量c的值
printf("%d,%d\n",a,b);//输出2个整形变量a和b的值,两个变量以逗号隔开,输出后换行
printf("%.2f\n",x);//输出单精度浮点形变量x的值,保留两位小数,输出后换行
printf("%3lf\n",y);//输出双精度浮点形变量y的值,保留三位小数,输出后换行
printf("%c\n",c);//输出字符型变量c的值,输出后换行
}
/********** End **********/
3.
//编写程序,实现用户输入1个摄氏温度c,转换为华氏温度f
//计算公式为:f = 1.8 * c + 32;
//例如:
//输入:10
//输出:转换后的华氏温度为50度
/**********Program**********/
//在这里开始写程序
#include <stdio.h>
void main()
{
double c,f;
scanf("%lf",&c);
f=1.8*c+32;
printf("转换后的华氏温度为%.f 度",f);
}
/********** End **********/
4.
//编写程序,用户输入3条边a,b,c的长度,计算三角形面积
//面积公式为s=(a+b+c)/2;
// area=根号(s*(s-a)*(s-b)*(s-c));
//例如:
//输入:3,4,5
//输出:三角形面积为6.0000
/**********Program**********/
//需要引入的文件
#include "stdio.h"
#include "math.h"
//如解答错误,注意检查错误信息提示,对比预期输出和实际输出之间的差异
void main()
{
double a,b,c,s,area;
scanf("%lf;%lf;%lf",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形面积为%lf",area);
}
/********** End **********/
实验2 2023
1.
/*------------------------------------------------
功能:对任意输入的 x,用下式计算并输出 y 的值。
5 x<10
y= 0 x=10
-5 x>10
------------------------------------------------*/
/**********Program**********/
#include "stdio.h"
void main()
{
double x,y;//定义双精度变量,x和y
scanf("%lf",&x);//用户输入x
//条件语句判断,多行
if(x<10)
{
y=5;
}
else if(x==10)
{
y=0;
}
else
{
y=-5;
}
//输出y的结果
printf("%f",y);
}
/********** End **********/
2.
/*-------------------------------------------------------
从键盘输入任意整数年份,判断是否为闰年
闰年的条件是:能被4整除但是不能被100整除 或者 能被400整除。
输入格式: 输出格式:
1900 1900年不是闰年
输入格式: 输出格式:
2008 2008年是闰年
-------------------------------------------------------*/
/**********Program**********/
#include <stdio.h>
int main()
{
int year; //定义整形变量year
scanf("%d",&year);//键盘输入年份
if(year%4==0 &&year%100!=0 ||year%400==0)//判断是否是闫年
{
printf("%d年是闫年",year);
}
else
{
printf("%d年不是闰年",year);
}
}
/********** End **********/
3.
//用户输入1个字符,判断该字符是大写字母、小写字母、或者不是字母
//例如 输入A 输出 A是大写字母
//例如 输入b 输出 b是小写字母
//例如 输入} 输出 }不是字母
//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
char c;
scanf("%c",&c);
if(c>='A' && c<='Z')
{
printf("%c是大写字母",c);
}
else if(c>='a' && c<='z')
{
printf("%c是小写字母",c);
}
else
{
printf("%c不是字母",c);
}
}
//********** End **********此句必须放到末尾,否则没有分
4.
/*等级判断,输入成绩到float变量s,输出对应的等级
0-60 E
>=60-70 D
>=70-80 C
>=80-90 B
>=90-100 A
*/
//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
float s;
scanf("%f",&s);
if(s<60)
{
printf("E");
}
else if(s<70)
{
printf("D");
}
else if(s<80)
{
printf("C");
}
else if(s<90)
{
printf("B");
}
else
{
printf("A");
}
}
//********** End **********此句必须放到末尾,否则没有分
5.
//任意输入三个float类型的边长x,y,z,判断是否能构成三角形,
//若能构成三角形,则判断该三角形是等边三角形、等腰三角形还是普通三角形.
//输出为:不能构成三角形 等边三角形 等腰三角形 普通三角形
//请输入测试数据 3,3,7 不能构成三角形
//请输入测试数据 3,7,3 不能构成三角形
//请输入测试数据 3,3,3 等边三角形
//请输入测试数据 3,3,2 等腰三角形
//请输入测试数据 3,4,5 普通三角形
//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
float x,y,z;
scanf("%f,%f,%f",&x,&y,&z);
if(x+y>z && x+z>y && y+z>x)
{
if(x==y && y==z)
{
printf("等边三角形");
}
else if(x==y || y==z || x==z)
{
printf("等腰三角形");
}
else
{
printf("普通三角形");
}
}
else
{
printf("不能构成三角形");
}
}
//********** End **********此句必须放到末尾,否则没有分
实验3 简单循环
1.
/*
编写程序分别使用for语句、while语句、do while语句输出数字1-9,每个数字占一行
循环变量使用i
每组的9个数字输出后,输出1个空行
*/
//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
int i;
for(i=1; i<=9; i++)
{
printf("%d\n",i);
}
printf("\n");
i=1;
while(i<=9)
{
printf("%d\n",i);
i=i+1;
}
printf("\n");
i=1;
do
{
printf("%d\n",i);
i=i+1;
}while(i<=9);
printf("\n");
}
//********** End **********此句必须放到末尾,否则没有分
2.
/*
用户输入一个整形数n
编写程序分别使用for语句、while语句、do while语句计算小于n的奇数的和,输出结果
要求:循环变量使用i,储存结果的变量为双精度类型变量sum
每个结果占用一行
例如:
输入 5
输出 4.00000
4.00000
4.00000
*/
//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
int i;
int n;
double sum=0;
scanf("%d",&n);
for(i=1; i<n; i=i+2)
{
sum=sum+i;
}
printf("%f\n",sum);
i=1;
sum=0;
while(i<n)
{
sum=sum+i;
i=i+2;
}
printf("%f\n",sum);
i=1;
sum=0;
do
{
sum=sum+i;
i=i+2;
}while(i<n);
printf("%f\n",sum);
}
//********** End **********此句必须放到末尾,否则没有分
3.
/*
用户在一行输入两个整形数n、m
编写程序分别使用for语句、while语句计算n、m之间(包含n和m)的所有3的倍数 或 7的倍
数的和,输出结果
要求:循环变量使用i,储存结果的变量为双精度类型变量sum
每个结果占用一行
例如:
输入 1,8
输出 16.00000
16.00000
*/
//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
int i;
int n,m;
double sum=0;
scanf("%d,%d",&n,&m);
for(i=n; i<=m; i++)
{
if(i%3==0 || i%7==0)
{
sum=sum+i;
}
}
printf("%f\n",sum);
i=n;
sum=0;
while(i<=m)
{
if(i%3==0 || i%7==0)
{
sum=sum+i;
}
i=i+1;
}
printf("%f\n",sum);
}
//********** End **********此句必须放到末尾,否则没有分
4.
/*
水仙花数是指一个 3 位数,它的每个位上的数字的3次幂之和等于它本身
(例如:1^3 + 5^3+ 3^3 = 153), 输出所有的水仙花数。
使用for语句编写程序,输出的每个数占一行
输出 153
370
371
407
*/
//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
#include <math.h>
void main()
{
int n1,n2,n3;
int i;
for(i=100; i<1000; i++)
{
n1=i%10;
n2=i/10%10;
n3=i/100;
if(pow(n1,3)+ pow(n2,3)+pow(n3,3)==i)
{
printf("%d\n",i);
}
}
}
//********** End **********此句必须放到末尾,否则没有分
5.
/*
一个四位数,各位数字互不相同,所有数字之和等于6,并且这个数是11的倍数,
输出满足这种要求的所有四位数
要求:千位、百位、十位、各位分别用整形变量n1、n2、n3、n4来表示
输出 1023
1320
2013
2310
3102
3201
*/
//**********Program**********此句必须放到最前,否则没有分
//在这里开始写程序
#include <stdio.h>
void main()
{
int i;
int n1, n2, n3, n4;
for(i=1000; i<=9999; i++)
{
n1 = i/ 1000;
n2 = i / 100 % 10;
n3 = i / 10 % 10;
n4 = i % 10;
if(n1!=n2 && n2!=n3 && n3!=n4 && (n1+n2+n3+n4)==6 && i%11==0)
{
printf("%d\n",i);
}
}
}
//********** End **********此句必须放到末尾,否则没有分
实验4 多重循环
1.
#include "stdio.h"
void main()
{
int i,n,zc;
scanf("%d",&n);
zc=0;
for(i=2; i<n; i++)
{
if(n%i==0)
{
zc=1;
break;
}
}
if(zc==1)
printf("%d不是素数\n",n);
else
printf("%d是素数\n",n);
}
2.
#include "stdio.h"
void main()
{
int i,j;
//写出输出第1行的for语句
for(i=1; i<=5; i++)
printf("%4d",i);
printf("\n");
//写出输出第2行的for语句
for(i=1; i<=5; i++)
printf("%4d",i+5);
printf("\n");
//写出输出第3行的for语句
for(i=1; i<=5; i++)
printf("%4d",i+10);
printf("In");
//写出输出第4行的for语句
for(i=1; i<=5; i++)
printf("%4d",i+15);
printf("\n");
//写出输出第5行的for语句
for(=1; i<=5;i++)
printf("%4d",i+20);
printf("\n");
printf("\n");
for(j=0;j<5;j++)
{
for(i=1; i<=5; i++)
printf("%4d",i+(5*j+0));
printf("\n");
}
}
3.
#include "stdio.h"
void main()
{
int i,j;
for(j=0; j<4; j++)
{
for(i=0; i<-1*j+3; i++)
printf(" ");
for(i=0; i<2*j+1; i++)
printf("*");
printf("\n");
}
for(j=0; j<3; j++)
{
for(i=0; i<1*j+1; i++)
printf(" ");
for(i=0; i<-2*j+5; i++)
printf("*");
printf("\n");
}
}
4.
#include "stdio.h"
void main()
{
int i,j;
for(j=1; j<=9; j++)
{
for(i=1; i<=j; i++)
printf("%d*%d=%d ",j,i,j*i);
printf("\n");
}
}
5.
#include "stdio.h"
void main()
{
int x,y,z;
printf("公鸡,母鸡,小鸡\n");
for(x=0; x<=20; x++)
{
for(y=0; y<=33; y++)
{
z=100-x-y;
if(5*x+3*y+z/3.0==100)
{
printf("%d,%d,%d\n",x,y,z);
}
}
}
}
6.
#include "stdio.h"
void main()
{
int i,n,zc;
for(n=70; n<=100; n++)
{
zc=0;
for(i=2; i<n; i++)
{
if(n%i==0)
{
zc=1;
break;
}
}
if(zc==0)
printf("%d\n",n);
}
}
实验5 函数
1.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数,其功能是计算3到n之间所有素数的平方根之和。
例如, 在主函数中从键盘给n输入100后,输出为: sum=148.874270。
(注意: 要求n的值大于2且不超过100。)
-------------------------------------------------------*/
#include <math.h>
#include <stdio.h>
double fun(int n)
{
/**********Program**********/
int i,j=0;
double s=0;
for(i=3; i<=n; i++){
for(j=2; j<i; j++)
if (i%j==0)break;
if (j==i) s=s+sqrt(i);
}
return s;
/********** End **********/
}
int main()
{
int n;
double sum;
printf("\n\nInput n: "); scanf("%d",&n);
sum=fun(n);
printf("\n\nsum=%lf\n\n",sum);
return 0;
}
2.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:将大于形参m且紧靠m的k个素数求和并返回到主函数输出。例如,若
输入17, 5,可以找出五个素数分别是19, 23, 29, 31, 37。和为139
-------------------------------------------------------*/
#include<stdio.h>
int fun(int m,int k)
{
/**********Program**********/
int i,j=1,t=m+1,sum=0;
while(j<=k)
{
for(i=2;i<t;i++)
{
if(t%i==0)break;
}
if(i>=t){sum=sum+t;j++;}
t++;
}
return sum;
/********** End **********/
}
int main()
{
printf("%d\n",fun(17,5));
return 0;
}
3.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:计算如样图所示的多项式求和,输入一个x就可以得到求和
要求x<0.97。
例如,若输入x为0.5,则多项式的和为1.224744
-------------------------------------------------------*/
#include<stdio.h>
#include<math.h>
double fun(double x)
{
/**********Program**********/
int i;
double s=1.0, xn=0.5*x;
for(i=2;fabs(xn)>=1e-6;i++){
s=s+xn;
xn=xn*x*(0.5-(i-1))/i;
}
return s;
/********** End **********/
}
int main()
{
double x;
scanf("%lf",&x);
printf("%lf\n",fun(x));
return 0;
}
4.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写一个函数fun,它的功能是:根据以下样图公式求π的值
(比如要求公式右边的累加项满足精度0.0005, 即某项小于0.0005 时停止迭代,则此时PI=3.140578)
-------------------------------------------------------*/
#include <stdio.h>
#include <math.h>
double fun ( double eps)
{
/**********Program**********/
int i;
double s=0,xn=1;
for(i=1;xn>=eps;i++){
s=s+xn;
xn=xn*i/(2*i+1);
}
return 2*s;
/********** End **********/
}
int main( )
{
double x;
printf("Input eps:") ;
scanf("%lf",&x);
printf("\neps = %lf, PI=%lf\n", x, fun(x));
return 0;
}
5.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的
一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1 ,F(n)=F(n-1)+F(n-2)
-------------------------------------------------------*/
#include <math.h>
#include <stdio.h>
int fun( int t)
{
/**********Program**********/
int f0=0,f1=1,f;
do{
f=f0 +f1;
f0=f1;
f1=f;
}while(f<t);
return f;
/********** End **********/
}
main() /* 主函数 */
{
int n;
n=1000;
printf("n = %d, f = %d\n",n, fun(n));
return 0;
}
6.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:若形参ch中是小写字母就转换成大写字母;若是大写字母就
转换成小写字母,若是数字字符就转换成阿拉伯数字,其他字符不变。
最终以ASCII值形式返回主函数输出。
(不采用isupper函数和isdigit函数判断)
-------------------------------------------------------*/
#include <stdio.h>
int fun(char ch)
{
/**********Program**********/
if(ch>='A'&&ch<='Z')ch=ch+32;
else if(ch>='a'&&ch<='z')ch=ch-32;
else if(ch>='0'&&ch<='9')ch=ch-48;
else ch=ch;
return ch;
/********** End **********/
}
int main()
{
char ch;
ch=getchar();
printf("%d\n",fun(ch));
return 0;
}
7.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:用循环实现输入一个五位正整数,将它倒序后返回给主函数输出。
例如输入12345,输出应为54321。(不采用指针、数组)
-------------------------------------------------------*/
#include <stdio.h>
int fun(int n)
{
/**********Program**********/
int x=0,i;
while(n>0){
i=n%10;
x=10*x+i;
n=n/10;
}
return x;
/********** End **********/
}
int main()
{
int n,r;
scanf("%d",&n);
r=fun(n);
printf("%d\n", r);
return 0;
}
实验6-1 一维数组
1.
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:找出一批正整数中的最大的偶数。
------------------------------------------------*/
#include <stdio.h>
void wwjt();
int fun(int a[],int n)
{
/**********Program**********/
int i,num;
num=-1;
for(i=0;i<n;i++)
if(a[i]%2==0 && a[i]>num) num=a[i];
return num;
/********** End **********/
}
main()
{
int a[]={1,2,9,24,35,18},k;
k=fun(a,6);
printf("max=%d\n",k);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
int iIN[10],iOUT,i,j;
IN=fopen("28.IN","r");
if(IN==NULL)
{
printf("Please Verify The Currernt Dir..it May Be Changed");
}
OUT=fopen("28.out","w");
if(OUT==NULL)
{
printf("Please Verify The Current Dir.. it May Be Changed");
}
for(i=0;i<6;i++)
fscanf(IN,"%d",&iIN[i]);
iOUT=fun(iIN,6);
fprintf(OUT,"%d\n",iOUT);
fclose(IN);
fclose(OUT);
}
2.
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:统计出若干个学生的平均成绩,最高分以及得最高
分的人数。(最高分可能不止一个)
例如:输入10名学生的成绩分别为92,87,68,56,92,
84,67,75,92,66,则输出平均成绩为77.9,
最高分为92,得最高分的人数为3人。
------------------------------------------------*/
#include <stdio.h>
float Max=0;/*Max为最高分变量,注意最高分不止一个*/
int J=0; /*J为最高分的人数*/
float fun(float array[],int n)
{
/**********Program**********/
float f;
int i,j=0;
for(i=0;i<n;i++)
f+=array[i];
f=f/n;
for(i=1;i<n;i++)
{
if(array[j]<array[i])
j=i;
}
Max=(int)array[j];
for(i=0;i<n;i++)
if(Max==(int)array[i])
J++;
return f;
/********** End **********/
}
main( )
{
float a[10],ave;
int i=0;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
ave=fun(a,10);
printf("ave=%f\n",ave);
printf("max=%f\n",Max);
printf("Total:%d\n",J);
return 0;
}
3.
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写函数用排序法对数组中的数据进行从小到
大的排序。
------------------------------------------------*/
#include <stdlib.h>
#include<stdio.h>
void sort(int a[],int n)
{
/**********Program**********/
int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
/********** End **********/
}
main()
{
int a[16],i;
for(i=0;i<16;i++)
a[i]=rand()%100;
for(i=0;i<16;i++)
printf("%4d",a[i]);
printf("\n-------------------\n");
sort(a,16);
for(i=0;i<16;i++)
printf("%4d",a[i]);
}
4.
有bug
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目: 编写函数,要求计算并输出不超过n的最大的k个素数以及它们的和。注意找到
的k个素数先要保存在数组a中。
输入格式: 输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。
输出格式: 在一行中按下列格式输出:
素数1+素数2+…+素数k=总和值
其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。
输入样例1: 1000 10
输出样例1: 997+991+983+977+971+967+953+947+941+937=9664
输入样例2: 12 6
输出样例2: 11+7+5+3+2=28
-------------------------------------------------------*/
#include <stdio.h>
int a[11];
int count=0,sum=0;/*count数组中存放素数的个数,sum数组中素数求和*/
void fun(int n,int k)
{
int i,j;
/**********Program**********/
for(i=n; i>=2; i--){
for(j=2; j<i; j++){
if(i%j == 0){
break;
}
}
if(j==i){
a[count]=i;
sum+=a[count];
count++;
}
if(count == k)
break;
}
for(count = 0; count < k; count++){
if (a[count] == 0)
break;
printf("%d+",a[count]);
}
printf("\b");
printf("=%d", sum);
// printf("%d=%d",a[count],sum);
/********** End **********/
}
int main()
{
int n,k;
printf("\nInput n and k: ");scanf("%d %d",&n,&k);
fun(n,k);
return 0;
}
实验6-2 二维数组与字符串
1.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:程序定义了N×N的二维数组,并在主函数中赋值。
请编写函数fun,函数的功能是:求出数组周边元素的平均值
并作为函数值返给主函数中的s。
-------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#define N 5
double fun ( int w[][N] )
{
/**********Program**********/
int i,j,k=0;
double r=0.0;
for(j=0;j<N;j++)
{
r+=w[0][j];
k++;
}
for(j=0;j<N;j++)
{
r+=w[N-1][j];
k++;
}
for(i=1;i<=N-2;i++)
{
r+=w[i][0];
k++;
}
for(i=1;i<=N-2;i++)
{
r+=w[i][N-1];
k++;
}
return r/=k;
/********** End **********/
}
main ( )
{
int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};
int i, j;
double s ;
printf("***** The array *****\n");
for ( i =0; i<N; i++ )
{ for ( j =0; j<N; j++ )
{ printf( "%4d", a[i][j] ); }
printf("\n");
}
s = fun ( a );
printf ("***** THE RESULT *****\n");
printf( "The average is : %lf\n",s );
}
2.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目: 请编一个函数void fun(int tt[M][N ], int pp[N]),tt指向
一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入
pp所指一维数组中。二维数组中的数已在主函数中赋予。
示例结果可以见样图
-------------------------------------------------------*/
#include <stdio.h>
#define M 3
#define N 4
void fun ( int tt[M][N], int pp[N] )
{
/**********Program**********/
int i,j,min;
for (i = 0; i < N; i++)
{
for (j = 0; j < M-1; j++)
{
if (tt[j][i] < tt[j + 1][i])
{
min = tt[j][i];
tt[j + 1][i] = tt[j][i];
}
else
min = tt[j + 1][i];
}
pp[i] = min;
}
/********** End **********/
}
main( )
{
int t [ M ][ N ]={{22,45, 56,30},
{19,33, 45,38},
{20,22, 66,40}};
int p [ N ], i, j, k;
printf ( "The original data is : \n" );
for( i=0; i<M; i++ ){
for( j=0; j<N; j++ )
printf ( "%6d", t[i][j] );
printf("\n");
}
fun ( t, p );
printf( "\nThe result is:\n" );
for ( k = 0; k < N; k++ ) printf ( " %4d ", p[ k ] );
printf("\n");
}
3.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目: 请编一个函数fun(char s[]),函数的功能是把s所指字符串
中的内容逆置。例如:字符串中原有的字符串为:abcdefg,则调
用该函数后, 串中的内容为:gfedcba。
-------------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#define N 81
void fun ( char s[ ] )
{
/**********Program**********/
char ch;
int i,m,n;
i=0;
m=n=strlen(s)-1;
while(i<(n+1)/2)
{
ch=s[i];
s[i]=s[m];
s[m]=ch;
i++;
m--;
}
/********** End **********/
}
main( )
{
char a[N];
printf ( "Enter a string : " ); gets ( a );
printf ( "The original string is : " ); puts( a );
fun ( a );
printf("\n");
printf ( "The string after modified : ");
puts ( a );
}
4.
/* 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:
删除字符串中所有的*号。
在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为:****A*BC*DEF*G*******
删除后,字符串中的内容应当是:ABCDEFG。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
*/
#include <stdio.h>
void fun( char a[])
{
/**********Program**********/
int i=1,j=1,k;
char str[50];
str[0]=a[0];
while(a[i]!='\0')
{
if(a[i]!='*')
{
str[j]=a[i];
j++;
}
i++;
}
for(k=0;k<j;k++)
{
printf("%c",str[k]);
}
printf("\n");
/********** End **********/
}
main()
{
char s[81];
printf("Enter a string:\n");gets(s);
fun( s );
printf("The string after deleted:\n");puts(s);
}
5.
int i,k=0;
for(i=0;s[i]!='\o';i++)
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
k++;
return k;
实验7-1指针与数组
1.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写一个交换函数void swap(int *p , int *q),该函数
实现两个整数的交换。在main函数中构造两个整型变量,通过调
用swap函数实现这两个整型变量的数值交换,并显示交换前和交
换后的数据。
-------------------------------------------------------*/
#include <stdio.h>
void swap( int *p, int *q)
{
/**********Program**********/
int temp;
temp = *p;
*p = *q;
*q = temp;
/********** End **********/
}
int main()
{
int a=10,b=20;
printf("交换前a和b的值\n");printf("a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("交换后a和b的值\n");printf("a=%d,b=%d\n",a,b);
return 0;
}
2.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun, 函数的功能是: 移动一维数组中的内容;
若数组中有n个整数, 要求把下标从0到p(含p,p小于等于n-1)的
数组元素平移到数组的最后。例如, 一维数组中的原始内容为:
1,2,3,4,5,6,7,8,9,10
p的值为3。移动后, 一维数组中的内容应为:
5,6,7,8,9,10,1,2,3,4
-------------------------------------------------------*/
#include <stdio.h>
#define N 80
void fun(int *w, int p, int n)
{
/**********Program**********/
int x,j,ch;
for(x=0;x<=p;x++){
ch=w[0];
for(j=1;j<n;j++){
w[j-1]=w[j];
}
w[n-1] = ch;
}
/********** End **********/
}
int main()
{
int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int i,p,n=15;
printf("The original data:\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
printf("\n\nEnter p: ");scanf("%d",&p);
fun(a,p,n);
printf("\nThe data after moving:\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
printf("\n\n");
return 0;
}
3.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun, 函数的功能是: 删去一维数组中所有相
同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,
函数返回删除后数组中数据的个数。
例如, 一维数组中的数据是:
2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
删除后,数组中的内容应该是:
2 3 4 5 6 7 8 9 10
-------------------------------------------------------*/
#include <stdio.h>
#define N 80
int fun(int *a, int n)
{
/**********Program**********/
int i,j=1;
for(i=1;i<n;i++)
if(a[j-1]!=a[i]){
a[j]=a[i];
j++;
}
return j;
/********** End **********/
}
int main()
{
int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
printf("The original data :\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThe data after deleted :\n");
for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n");
return 0;
}
4.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过
调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段
的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄
段的人数放在d[2]中, 其余依此类推, 把100岁 (含100)以上年龄的人数
都放在d[10]中。结果在主函数中输出。
-------------------------------------------------------*/
#include <stdio.h>
#define N 50
#define M 11
void fun(int *a, int *b)
{
/**********Program**********/
int i;
for(i=0;i<=10;i++)
b[i]=0;
for(i=0;i<N;i++){
if(a[i]>=100)
b[10]++;
else
b[ a[i]/10 ]++;
}
/********** End **********/
}
double rnd() //产生一个随机小数
{ static int t=29,c=217,m=1024,r=0;
r=(r*t+c)%m; return((double)r/m);
}
main()
{ int age[N], i, d[M]={0};//d数组用于存放各年龄段人数
for(i=0; i<N;i++)age[i]=(int)(115*rnd());//调用rnd()函数产生的一个随机小数,用来将age数组中每个元素都赋值为115以内的整数
printf("The original data :\n");
for(i=0;i<N;i++) printf((i+1)%10==0?"%4d\n":"%4d",age[i]);
printf("\n\n");
fun( age, d);
for(i=0;i<10;i++)printf("%4d---%4d:%4d\n",i*10,i*10+9,d[i]); //按格式输出年龄段人数统计
printf(" Over 100:%4d\n",d[10]);
}
实验7-2 指针与字符串
1.
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:求统计一个给定字符串中英文字母的个数。
如“12abc5FGkjh78”,k=8
------------------------------------------------*/
#include <stdio.h>
void wwjt();
int fun(char s[])
{
/**********Program**********/
int i,k=0;
for(i=0;s[i]!='\0';i++)
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
k++;
return k;
/********** End **********/
}
main()
{
char str[]="Best wishes for you!";
int k;
k=fun(str);
printf("k=%d\n",k);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
char sin[80];
int iOUT,i;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Please Verify The Currernt Dir..it May Be Changed");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Please Verify The Current Dir.. It May Be Changed");
}
for(i=0;i<10;i++)
{
fscanf(IN,"%s",sin);
iOUT=fun(sin);
}
fprintf(OUT,"%d\n",iOUT);
fclose(IN);
fclose(OUT);
}
2.
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:将字符串中的小写字母转换为对应的大写字母,
其它字符不变。
------------------------------------------------*/
#include "string.h"
#include <stdio.h>
void wwjt();
void change(char str[])
{
/**********Program**********/
int i;
for(i=0;str[i]!='\0';i++)
if(str[i]>='a'&& str[i]<='z')
str[i]=str[i]-32;
/********** End **********/
}
main()
{
char str[40];
gets(str);
change(str);
puts(str);
wwjt();
}
void wwjt()
{
FILE *IN,*OUT;
char i[200];
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read FILE Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write FILE Error");
}
fscanf(IN,"%s",i);
change(i);
fprintf(OUT,"%s\n",i);
fclose(IN);
fclose(OUT);
}
3.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:请编写一个函数fun,它的功能是:比较两个字符串的长度,
(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符
串。若两个字符串长度相同,则返回第一个字符串。
例如,输入beijing <CR> shanghai <CR>(<CR>为回车键),
函数将返回shanghai。
-------------------------------------------------------*/
#include <stdio.h>
char *fun ( char *s, char *t)
{
/**********Program**********/
int n=0,m=0;
char *p=s,*q=t;
while(*p)
{
n++;
*p++;
}
while(*q)
{
m++;
*q++;
}
if(n>m)
p=s;
if(n<m)
p=t;
return p;
/********** End **********/
}
int main( )
{
char a[20],b[20];
printf("Input 1th string:") ;
gets( a);
printf("Input 2th string:") ;
gets( b);
printf("%s\n",fun (a, b ));
return 0;
}
4.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目: 请编写一个函数,函数的功能是删除字符串中的所有
空格。例如, 主函数中输入"asd af aa z67",
则输出为 "asdafaaz67"。
-------------------------------------------------------*/
#include <stdio.h>
void fun(char *str)
{
/**********Program**********/
int i=0;
char*p=str;
while(*p)
{
if(*p!=' ')
{
str[i]=*p;
i++;
}
p++;
}
str[i]='\0';
/********** End **********/
}
int main()
{
char str[81];
printf("Input a string:") ;
gets(str);
puts(str);
fun(str);
printf("*** str: %s\n",str);
return 0;
}
5.
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:假定输入的字符串中只包含字母和*号。请编写函数fun,它的
功能是:除了尾部的*号之外,将字符串中其它*号全部删除。形参p已
指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供
的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******,
删除后,字符串中的内容应当是: ABCDEFG*******。
-------------------------------------------------------*/
#include <stdio.h>
void fun( char *a, char *p)
{
/**********Program**********/
char *q;int i=0,k,j;
for(q=a;q<p;q++)//q指向数组a的开头,在q遍历到p之前实行for循环:删除指针p之前的'*',注意这里q最终指向p的时候才结束循环
{ if(*q!='*')a[i++]=*q;
k=i;
}
for(q;*q;q++)//p指向q为起始位置,将最后一个字母以及之后的内容写入到数组a中,直到原字符串遍历结束,
{a[k++]=*q;j=k;}//注意:由于j小于原字符串得到最后一个元素的下标,a数组的部分空间依旧是原来的字符
a[j]='\0'; //为新数组添加结束标志,否则a数组的部分空间依旧会存储原字符串的部分字符。
/********** End **********/
}
int main()
{
char s[81],*t;
printf("Enter a string:\n");gets(s);
t=s;
while(*t)t++;
t--;
while(*t=='*')t--;
fun( s , t );
printf("The string after deleted:\n");puts(s);
return 0;
}