C语言C语言C语言,重要的事情说三遍。
有几个选择语言的时候选成了C++,希望没事()
1. 编写函数,计算表达式 的值( ),形参n的值由主程序输入并传递,函数返回值为s.
#include<stdio.h>
int main()
{
int n;
int f(int n);
scanf("%d",&n);
printf("%d",f(n));
return 0;
}
int f(int n)
{
int i,j,x,s=0;
for(i=1;i<=n;i++)
{
x=1;
for(j=1;j<=i;j++)
{
x*=j;
}
s+=x;
}
return s;
}
2. 编写数字加密和解密函数。测试值由主程序输入。
2.1 编写数字加密函数 int encrypt(int n). 其输入为一个四位数,返回为加密后的数。其加密方法为:
- 将该数每一位上的数字加9,然后除以10 取余,作为该位上的新数字,
- 将第1 位和第3 位上的数字互换,第2 位和第4 位上的数字互换,组成加密后的新数。
例:输入 1257 输出 The encrypted number is 4601
#include<stdio.h>
int encrypt(int n)
{
int i,t,a[4];
for(i=0;i<4;i++)
{
a[i]=n%10;
n/=10;
}
for(i=0;i<4;i++)
{
a[i]=(a[i]+9)%10;
}
t=a[0];
a[0]=a[2];
a[2]=t;
t=a[1];
a[1]=a[3];
a[3]=t;
t=1000*a[3]+100*a[2]+10*a[1]+a[0];
return t;
}
int main()
{
int n;
scanf("%d",&n);
printf("The encrypted number is %d",encrypt(n));
return 0;
}
2.2 编写数字解密函数 int decrypt(int n), 其输入为一个使用2.1 encrypt 函数加密后的四位数,返回为解密后的数
例:输入 4601 输出 The decrypted number is 1257
#include<stdio.h>
int decrypt(int n)
{
int b[4],i,t;
for(i=0;i<4;i++)
{
b[i]=n%10;
n/=10;
}
t=b[0];
b[0]=b[2];
b[2]=t;
t=b[1];
b[1]=b[3];
b[3]=t;
for(i=0;i<4;i++)
{
b[i]+=1;
}
t=1000*b[3]+100*b[2]+10*b[1]+b[0];
return t;
}
int main()
{
int n;
scanf("%d",&n);
printf("The decrypted number is %d",decrypt(n));
return 0;
}
3.数组转置:在主函数中定义一个n(1<=n<=6)维方阵,并从键盘读入数组元素;编写函数transpose(a,n)实现数组a转置;在主函数中输出转置后的方阵。
例:输入 4
1 2 3 4 输出 1 5 9 13
5 6 7 8 2 6 10 14
9 10 11 12 3 7 11 15
13 14 15 16 4 8 12 16
#include<stdio.h>
#define M 0
void transpose(int a[][6],int n)
{
int i,j,k;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
k=a[i][j];
a[i][j]=a[j][i];
a[j][i]=k;
}
}
int main()
{
int a[6][6];
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
transpose(a,n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
4.分数的四则运算,即对两个分数进行加、减、乘、除等运算,要求用C语言编写4个分数的函数来实现四则运算。
输入:
分数1 操作符 分数2 (操作符为 + - * /)
输出:
计算结果
要求:
计算结果使用分数表示,并且为最简化。例如结果为2/6,则被简化为1/3
例:输入 1/6 + 1/3 输出 1/6+1/3=1/2
输入 1/6 - 1/3 输出 1/6-1/3=-1/6
提示:在进行化简时,需要求出分子和分母的最大公约数,即这个数可以同时整除分子和分母,其该数为最大的数。计算结果可能是个负数,求最大公约数时,要保证两个数为同号。
#include<stdio.h>
int main()
{
int a,b,c,d,e,f,i;
char x;
scanf("%d/%d %c %d/%d",&a,&b,&x,&c,&d);
switch(x)
{
case 42:
{
e=a*c;
f=b*d;
break;
}
case 43:
{
e=a*d+b*c;
f=b*d;
break;
}
case 45:
{
e=a*d-b*c;
f=b*d;
break;
}
case 47:
{
e=a*d;
f=b*c;
break;
}
}
for(i=2;i<=e&&i<=f;i++)
{
if((e%i==0)&&(f%i==0))
{
e=e/i;
f=f/i;
i=1;
}
}
printf("%d/%d %c %d/%d=%d/%d",a,b,x,c,d,e,f);
return 0;
}
5.学生信息:编写4个函数实现下列功能(通过参数传递实现,函数参数为数组):
(1)函数input( ) ——输入20个学生姓名和高考总分;
(2)函数sort( ) ——按高考总分从高到低的顺序排序,姓名顺序也随之调整;
(3)函数display( )——显示所有学生姓名及其高考总分;
(4)函数search( ) ——根据姓名用顺序查找方法找出该学生,查找成功返回学生下标,否则返回-1;
(5)主函数——①调用input( )输入学生姓名及成绩;②调用函数sort( )进行排序;③调用display( )输入排序后的学生姓名及成绩;④输入一个姓名,调用函数search( ),根据返回值判定是否查找成功,若查找成功,输出该学生姓名及高考总分,否则显示查找失败。
提示:高考分数储存于一维整形数组,学生姓名为储存为二维字符数组。
#include<stdio.h>
#include <string.h>
int main()
{
char name[20][20],x[20];
int score[20],m;
void input(char name[][20],int score[20]);
void sort(char name[][20],int score[20]);
void display(char name[][20],int score[20]);
int search(char name[][20],int score[20],char x[20]);
input(name,score);
sort(name,score);
display(name,score);
getchar();
printf("wanted name:");
gets(x);
m=search(name,score,x);
if(m==-1)
printf("NOT FOUND\n");
else
printf("name:%s score:%d",name[m-1],score[m-1]);
return 0;
}
void input(char name[][20],int score[20])
{
int i;
printf("name:");
for(i=0;i<20;i++)
{
printf("%d.",i+1);
gets(name[i]);
}
printf("score:");
for(i=0;i<20;i++)
{
printf("%d.",i);
scanf("%d",&score[i]);
}
}
void sort(char name[][20],int score[20])
{
int t,i,j;
char p[20];
for(i=0;i<20;++i)
{
for(j=0;j<20-i;++j)
{
if(score[j]<score[j+1])
{
t=score[j+1];
score[j+1]=score[j];
score[j]=t;
strcpy(p,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],p);
}
}
}
}
void display(char name[][20],int score[20])
{
int i;
for(i=0;i<20;i++)
{
printf("name:%s score:%d\n",&name[i],score[i]);
}
}
int search(char name[][20],int score[20],char x[20])
{
int i,n=10086,k;
for(i=0;i<20;i++)
{
if(strcmp(x,name[i])==0)
{
n=i+1;
break;
}
}
if(n>=1&&n<=20)
k=n;
else
k=-1;
return k;
}
6.字符串处理
定义两个C源程序文件:fmain.c 和 fstring.c。fmain.c中包含主函数,实现字符串处理功能选项和字符串的输入与结果的输出。fstring.c中包含两个函数delchar(s,c)和strreverse (s),实现删除字符和字符串反转功能。
delchar(s,c):在主函数中输入字符串和要删除的字符,此函数将字符串s中出现的所有c字符删除;再在主函数中输出删除后的字符串。
strreverse (s):在主函数中读入字符串,此函数实现将字符串s反转;再在主函数中输出反转后的字符串。
fstring.c
#include<stdio.h>
#include<string.h>
extern char str[50];
extern char c;
void strreverse(char str[50])
{
int i,n,m;
char t;
for(i=0;i<50&&str[i]!='\0';i++);
n=i-1;
if(n%2==0)
m=n/2;
else
m=(n-1)/2;
for(i=0;i<=m;i++)
{
t=str[i];
str[i]=str[n-i];
str[n-i]=t;
}
}
void delchar(char str[50],char c)
{
char shadow[50];
int i,j;
for(i=0,j=0;i<50&&str[i]!=0;i++)
{
if(str[i]==c)
continue;
shadow[j]=str[i];
j++;
}
shadow[j]='\0';
strcpy(str,shadow);
str[j]='\0';
}
fmain.c
#include<stdio.h>
#include<string.h>
int main()
{
char str[50],c;
void strreverse(char s[50]);
void delchar(char str[50],char c);
int x;
char yn;
int yesorno(char yn);
printf("1.Reverse a string.\n2.Delete a character in a string.\n");
printf("Please input your choice:");
scanf("%d",&x);
getchar();
printf("Enter a string: ");
gets(str);
if(x==1)
{
strreverse(str);
printf("Reversed string is:êo");
printf("%s\n",str);
}
else if(x==2)
{
printf("Enter a character you want to delete:");
scanf("%c",&c);
getchar();
delchar(str,c);
printf("Reversed string is:êo");
printf("%s\n",str);
}
else
printf("ERROR");
printf("Would you like to continue? (ꡧy/n)ê?");
scanf("%c",&yn);
x=yesorno(yn);
while(x!=0)
{
printf("1.Reverse a string.\n2.Delete a character in a string.\n");
printf("Please input your choice:");
scanf("%d",&x);
getchar();
printf("Enter a string: ");
gets(str);
if(x==1)
{
strreverse(str);
printf("Reversed string is:êo");
printf("%s\n",str);
}
else if(x==2)
{
printf("Enter a character you want to delete:");
scanf("%c",&c);
getchar();
delchar(str,c);
printf("Reversed string is:êo");
printf("%s\n",str);
}
else
printf("ERROR");
printf("Would you like to continue? (ꡧy/n)ê?");
scanf("%c",&yn);
x=yesorno(yn);
}
return 0;
}
int yesorno(char yn)
{
int t;
if(yn==89||yn==121)
t=1;
else
t=0;
return t;
}