1.逆序输出
1.1数字数组
#include <stdio.h>
#include <stdlib.h>
#define M 5
int main()
{
int a[M]={1,2,3,4,5};
int i,j,t;
i=0;j=M-1;
while(i<j)
{
t=*(a+i);
*(a+i)=*(a+j);
*(a+j)=t;
i++;j--;
}
for(i=0;i<M;i++)
{
printf("%d\n",*(a+i));
}
}
1.2数字数组
#include<stdio.h>
#define N 10
int main()
{
int a[N]={0,1,2,3,4,5,6,7,8,9};
int i,t;
printf("原始数组是:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
for(i=0;i<N/2;i++)//取其半数为限,进行元素交换
{
t=a[i];
a[i]=a[N-1-i];
a[N-1-i]=t;
}
printf("\n排序后的数组:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
2.字符数组
#include <stdio.h>
void reverse(char* s)
{
// 获取字符串长度
int len = 0;
char* p = s;
while (*p != 0)
{
len++;
p++;
}
// 交换 ...
int i = 0;
char c;
while (i <= len / 2 - 1)
{
c = *(s + i);
*(s + i) = *(s + len - 1 - i);
*(s + len - 1 - i) = c;
i++;
}
}
int main()
{
char s[] = "www.runoob.com";
printf("'%s' =>\n", s);
reverse(s); // 反转字符串
printf("'%s'\n", s);
return 0;
}
3.整数
#include <stdio.h>
int main()
{
int n, reversedNumber = 0, remainder;
printf("输入一个整数: ");
scanf("%d", &n);
while(n != 0)
{
remainder = n%10;
reversedNumber = reversedNumber*10 + remainder;
n /= 10;
}
printf("反转后的整数: %d", reversedNumber);
return 0;
}
4.递归逆序输出
#include <stdio.h>
int convert(char s[],int n)
{
int i;
if((i=n/10)!=0)
convert(s+1,i); //条件:n是一位数,放在数组中;n不为一位数,放n/10
*s=n%10+'0';
return 0;
}
int main()
{
int num;
char str[10]=" ";
printf("input integer data:");
scanf("%d",&num);
convert(str,num);
printf("output string:\n");
puts(str);
return 0;
}
2.1结构体
#include <stdio.h>
struct student
{
int x;
char c;
}a;
int main()
{
a.x=3;
a.c='y';
}
2.2结构体指针
#include<stdio.h>
#include<stdlib.h>
struct man{
char name[20];
int age;
}
person[3]={"li",18,"wang",25,"sun",22};
int main()
{
struct man *q,*p;
int i,m=0;
p=person;
for(i=0;i<3;i++)
{
if(m<p->age)
{
m=p->age;//
q=p;
}
p++;
}
printf("%s %d\n",q->name,q->age);
return 0;
}
3.二维数组应用
1.对角线求和
#include<stdio.h>
#define N 3
int main()
{
int i,j,a[N][N],sum=0;
printf("请输入矩阵(3*3):\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
sum+=a[i][i];
printf("对角线之和为:%d\n",sum);
return 0;
}
2.寻找最大值和其下标
#include <stdio.h>
int main()
{
int a[3][4],i,j,max,max_i=0,max_j=0;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>max)
{
max=a[i][j];
max_i=i;
max_j=j;
}
printf("max=a[%d][%d]=%d\n",max_i,max_j,max);
return 0;
}
4.#define命令
#include<stdio.h>
#define exchange(a,b) { int t;t=a;a=b;b=t;}//注意放在一行里,define可以用来定义函数
int main()
{
int x=10;
int y=20;
printf("x=%d; y=%d\n",x,y);
exchange(x,y);
printf("x=%d; y=%d\n",x,y);
return 0;
//define命令的作用是字符替换、函数定义。
}
5.结构体指针
//找到年龄最大的人并输出
#include<stdio.h>
#include<stdlib.h>
struct man{
char name[20];
int age;
}
person[3]={"li",18,"wang",25,"sun",22};//person[3]={{"li",18},{"wang",25},{"sun",22}};这样写更为标准
int main()
{
struct man *q,*p;
int i,m=0;
p=person;
for(i=0;i<3;i++)
{
if(m<p->age)
{
m=p->age;
q=p;
}
p++;
}
printf("%s %d\n",q->name,q->age);
return 0;
}
函数设计
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)。
指针函数:(*变量func)(参数)
变量func=函数名 ‘’代表传送定义过的函数地址(实际上函数的地址存在栈区,可以从地址取用,函数名就是其地址)
#include<stdio.h>
#include<stdlib.h>
double evenumber(int n);
double oddnumber(int n);//声明函数的存在并分配地址
int main()
{
int n;
double r;
double (*pfunc)(int);
printf("请输入一个数字:");
scanf("%d",&n);
if(n%2==0) pfunc=evenumber;
else pfunc=oddnumber;
r=(*pfunc)(n);
printf("%lf\n",r);
system("pause");
return 0;
}
double evenumber(int n)
{
double s=0,a=0;
int i;
for(i=2;i<=n;i+=2)
{
a=(double)1/i;
s+=a;
}
return s;
}
double oddnumber(int n)
{
double s=0,a=0;
int i;
for(i=1;i<=n;i+=2)
{
a=(double)1/i;
s+=a;
}
return s;
}
字符串长度(简版)
//求字符串长度
int length(char *s)
{
int i=0;
while(*s!='\0')
{
i++;
s++;
}
return i;
}
线性代数数组转置:核心b[j][i]=a[i][j];
#include <stdio.h>
int main()
{
int i,j,i1,j1,a[101][101],b[101][101];
printf("please input the number of rows(<=100)\n");
scanf("%d",&i1);
printf("please input the number of columns(<=100)\n");
scanf("%d",&j1);
printf("please input the element\n");
for(i=0;i<i1;i++)
for(j=0;j<j1;j++)
scanf("%d",&a[i][j]);
printf("array a:\n");
for(i=0;i<i1;i++)
{
for(j=0;j<j1;j++)
printf("\t%d",a[i][j]);
printf("\n");
}
for(i=0;i<i1;i++)
for(j=0;j<j1;j++)
b[j][i]=a[i][j];
printf("array b:\n");
for(i=0;i<j1;i++)
{
for(j=0;j<i1;j++)
printf("\t%d",b[i][j]);
printf("\n");
}
return 0;
}
加密与解密算法:
要求设计一个加密和解密算法。在对一个指定的字符串加密之后,利用解密函数能够对密文解密,显示明文信息。加密的方式是将字符串中每个字符加上它在字符串中的位置和一个偏移值 5。以字符串“mrsoft”为例,第一个字符“m”在字符串中的位置为 0,那么它对应的密文是“‘m’+0+5",即 r。
算法:
在 main() 函数中使用 while 语句设计一个无限循环,并定义两个字符数组,用来保存,明文和密文字符串,在首次循环中要求用户输入字符串,进行将明文加密成密文的操作, 之后的操作则是根据用户输入的命令字符进行判断,输入 1 加密新的明文,输入 2 对刚加密的密文进行解密,输入 3 退出系统。
#include <stdio.h>
#include <string.h>
int main()
{
int result=1;
int i;
int count=0;
char Text[128]={'\0'};
char cryptograph[128]={'\0'};
while(1)
{
if(result==1)
{
printf("请输入要加密的明文:\n");
scanf ("%s",&Text);
count=strlen(Text);
for(i=0;i<count;i++)
{
cryptograph[i]=Text[i]+i+5;
}
cryptograph[i]='\0';
printf("加密后的密文是:%s\n",cryptograph);
}
else if(result==2)
{
count=strlen(Text);
for(i=0;i<count;i++)
{
Text[i]=cryptograph[i]-i-5;
}
Text[i]='\0';
printf("解密后的明文是:%s\n",Text);
}
else if(result==3)
{
break;
}
else
{
printf("请输入正确的命令符:\n");
}
printf("输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:\n");
printf("请输入命令符:\n");
scanf("%d",&result);
}
return 0;
}
三维坐标系求两点间距离:
定义一个表示三维空间点坐标的结构类型,通过函数求空间上任意两点之间的距离。
算法:
空间内任意点的坐标有三个,分别为 x 轴方向、y 轴方向、z 轴方向,设定结构体 point,包括三个成员 x、y、z,都为双精度类型。
定义一个函数 dist 用于计算空间上两点的距离,函数返回值也为 double 类型,函数的参数为结构体 point 的两个变量。
#include <stdio.h>
#include <math.h>
struct point
{
float x;
float y;
float z;
};
float dist(struct point p1,struct point p2)
{
float x,y,z;
float d;
x=fabs(p1.x-p2.x);
y=fabs(p1.y-p2.y);
z=fabs(p1.z-p2.z);
d=sqrt(x*x+y*y+z*z);
return d;
}
int main()
{
struct point p1,p2;
printf("Enter point1:");
scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z);
printf("Enter point2:");
scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z);
printf("distance: %f\n",dist(p1,p2));
return 0;
}
字符串拼接函数设计:
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
char* strconnect(char *str1,char *str2);//指针函数
int main()
{
char str1[20],str2[20];
char *str;
puts("请输入两个字符串,用回车分开:");
scanf("%s%s", str1, str2);
str=strconnect(str1,str2);
puts("连接后的字符串为:");
puts(str);
return 0;
}
char* strconnect(char *str1,char *str2)
{
char*str;
str=(char*)malloc(strlen(str1)+strlen(str2)+1);//为指针函数分配地址和内存,realloc可以增加原来的内存长度
str[0]='\0';
strcat(str,str1);
strcat(str,str2);
return str;
}
直接插入排序:
1.已有数据
#include<stdio.h>
int main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("原始数组是:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n插入一个新的数字: ");
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else
{
for(i=0;i<10;i++)
{
if(a[i]>number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}
2.一边输入一遍排序
#include <stdio.h>
#include <string.h>
#include <math.h>
void main()
{
float a[100],t,w;
int j,i,k=0;
for(j=0;j<5;j++)//这个‘5’可以改成100以内正整数
{
scanf("%f",&w);
for(i=j-1;i>=0;i--)
{
if(a[i]>w)
{
a[i+1]=a[i];
}
else{break;}
}
a[i+1]=w;
}
for(j=0;j<5;j++)printf("%f\n",a[j]);
}
本文介绍了四种编程操作:逆序输出数字数组、字符数组、整数反转以及结构体处理。涵盖了数组交换、字符串反转、整数逆序、结构体指针和数组应用,如对角线求和与查找最大值。
2397

被折叠的 条评论
为什么被折叠?



