#include<stdlib.h>
#include<stdio.h>
void loveyou(int n){
int a,b,c;
if(n>1){
loveyou(n-1);
}
printf("i love you %d\n",n);
}
int main(){
loveyou(5);
return 0;
}
1.
我
#include<stdlib.h>
#include<stdio.h>
int main(){
int i=1;
float s=0,temp=2;
while(temp>1e-6){
temp=0;
temp=(1.0/(2*i-1)*(2.0*i/(2*i-1)));
s+=temp;
i++;
}
printf("%.6f",s);
return 0;
}
总结:一次隐式变换更准确;其次每次修改temp;
踩分点:循环不出现n,整除
2.字典序对n个字符串排序
冒泡排序(两两交换排序)
下面展示一些 内联代码片
。
#include<stdlib.h>
#include<stdio.h>
int str_cmp(char*str1,char*str2){
do{
if(*str1>*str2)return 1;
else if(*str1<*str2)return -1;
}while(*str1 == *str2 && *str1 != '\0' && *str2 != '\0');
return 0;
}
void sort(char *st[], int n){
char *temp;
int i,j;
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(str_cmp(st[j],st[j+1])>0){
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
}
int main(){
int n,i=0;
scanf("%d",&n);
char*st[n];
for(i=0;i<n;i++){
st[i] = (char*)malloc(sizeof(char) * 100); // 为第i个字符串分配100个字节的内存空间
scanf("%s",st[i]); // 读入字符串,并将其存储到对应的内存空间中
}
sort(st,n);
for(i=0;i<n;i++){
printf("%s\n",st[i]);
}
return 0;
}
选择排序
下面展示一些 内联代码片
。
#include<stdlib.h>
#include<stdio.h>
int str_cmp(char*str1,char*str2){
do{
if(*str1>*str2)return 1;
else if(*str1<*str2)return -1;
}while(*str1 == *str2 && *str1 != '\0' && *str2 != '\0');
return 0;
}
void sort(char *st[],int n){
char *temp;
int i,j,min;
for(i=0;i<n-1;i++){
min=i;
for(j=i+1;j<n;j++){
if(str_cmp(st[j],st[min])<0){
min=j;
}
}
if(min!=i){
temp=st[i];
st[i]=st[min];
st[min]=temp;
}
}
}
int main(){
int n,i=0;
scanf("%d",&n);
char*st[n];
for(i=0;i<n;i++){
st[i] = (char*)malloc(sizeof(char) * 100); // 为第i个字符串分配100个字节的内存空间
scanf("%s",st[i]); // 读入字符串,并将其存储到对应的内存空间中
}
sort(st,n);
for(i=0;i<n;i++){
printf("%s\n",st[i]);
}
return 0;
}
思考:冒泡排序两个两个换到最后面,用flag可以剪枝;char*st[]需要循环定义动态数组
踩分点:自定义比较函数,任何一种排序