C语言 选择排序(这里是由大到小排序):
#include<stdio.h>
#include<stdlib.h>
void SelectSort(int a[],int n){
int i,j,k,t;
for(i=0;i<n-1;i++){
// n个元素需要进行(n-1)趟比较
for(j=i+1;j<n;j++){
//先使k记录排序范围内的第一个元素的位置
k=i;
//找出最大元素的位置,由k记录
if(a[j]>a[k])
k=j;
//如果排序范围的第一个元素(即第i个)不是最大元素
if(k!=i){
//则将最大的元素与第i个元素对调
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
}
}
int main(){
int i,n;
int *b;
printf("input a number:\n");
scanf("%d",&n);
b=(int*)malloc(n*sizeof(int));
printf("input n numbers:\n");
for(i=0;i<n;i++){
scanf("%d",&b[i]);
}
printf("original data:\n");
for(i=0;i<n;i++){
printf("%4d",b[i]);
}
SelectSort(b,n);
printf("\n");
printf("sorted data:\n");
for(i=0;i<n;i++){
printf("%4d",b[i]);
}
return 0;
}
注意:C语言中定义一个由 n 个数组成的数组(即数组元素个数未知),不可使用以下方法定义:
int n;
scanf("%d",&n);
int num[n];
而应使用如下方法:
//定义
int n,i;
int *num;
scanf("%d", &n);
num = (int *)malloc(n * sizeof(int));
//输入
for (i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
定义一个长度未知的多维数组用如下方法:
int **node;
int col,row,i,j;
scanf("%d", &col);
scanf("%d", &row);
node = (int **)malloc(col * sizeof(int *));
for (i = 0; i < n - 1; i++)
{
node[i] = malloc(sizeof(int) * row);
for(j = 0; j < row; j++){
scanf("%d", &node[i][j]);
}
}
记得添加 #include<stdlib.h> 头文件。malloc( )包含在这个头文件中。
需要注意一点,C语言中没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中,因此,定义某个字符串时,应使用语句char str[100]="xxx"的形式。
#include<stdio.h>
#include<string.h>
int main(){
char s[]="abcde f";
int len;
printf("%s\n",s);
//计算字符串s的长度,用strlen()函数
len=strlen(s);
printf("length:%d",len);
return 0;
}
#include<stdio.h>
#include<string.h>
int main(){
char str[100]={0};
//也可以写成"0"或{'0'}或{“0”}
int len;
gets(str);
len=strlen(str);
printf("length:%d\n",len);
return 0;
}
getchar( ),putchar( )函数分别为得到一个字符,输出一个字符;gets( )函数从标准输入读入一行数据,遇到换行符就返回,它会把换行符替换成空字符 '\0' ,作为C语言字符串结束的标志。gets( (函数与puts( )函数配对使用,puts( )函数用于显示字符串,并自动在字符串后面添加一个换行标志 '\n' 。 getch( )用法同getchar( ),只是不回显,且头文件是 conio.h 。
#include<stdio.h>
#include<conio.h>
int main(){
double radius,v,s;
printf("please enter radius:\n");
scanf("%lf",&radius);
v=4.0*3.14*radius*radius*radius/3;
s=4*3.14*radius*radius;
printf("V=%lf,S=%lf",v,s);
getch();
return 0;
}
加深理解:输入字符,直到遇到换行符停止运行,如下:
#include<stdio.h>
int main(){
char c;
while((c=getchar())!='\n') {
printf("hello");
}
return 0;
}
计算字符串长度需要调用函数strlen( ),包含在string.h头文件中,下面两个代码案例分别用于求:
1.从键盘输入一行英文,求倒数第2个单词的字符个数。
2.从键盘输入一行字符,求各个“单词”中包含字符的个数。
//从键盘输入一行英文,求倒数第2个单词的字符个数
#include<stdio.h>
#include<string.h>
//包含strlen()函数
int main(){
char s[100];
int i,j,count=0;
gets(s);
i=strlen(s);//字符串长度
while(s[i-1]!=' ') i--;//i标识最后一个空格的位置
printf("%d\n",i);
j=i-1;
while(s[--j]!=' '){
count++;
//如果只有2个单词,当j==0时即完成第1个单词字符个数的计算
if(j==0) break;
}
//(j+1)标识倒数第2个空格的位置
printf("%d %d\n",j+1,count);
return 0;
}

//从键盘输入一行字符,求各个"单词"中包含字符的个数
#include<stdio.h>
int main()
{
int i=0,n=0;
char b;
scanf("%c",&b);
if(b!=' ')
n++;
while(b!='\n'){
scanf("%c",&b);
if(b!=' '&&b!='\n')
n++;
if(n!=0&&b==' '||b=='\n'){
if(n!=0){
printf("%d ",n);
i=1;
}
n=0;
}
}
if(i!=1)
printf("0 ");
return 0;
}
输入一个文本行,其中包含多个单词,计算其中最长的单词的长度。
注:这里可以使用alpha( )函数,用于检测一个字符是否是字母,使用该函数,需要引用ctype.h头文件。isdigit( )函数用于检测一个字符是否是数字。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(){
int value = 0;
int maxvalue = 0;
int length;
char str[100];
gets(str);
length = strlen(str);
for(int i = 0; i < length+1; i++){
if(isalpha(str[i])){
value++;
}
//遇到空格,将value置零重新计算单词长度
else{
if(value > maxvalue)
maxvalue = value;
value = 0;
}
}
printf("%d\n", maxvalue);
return 0;
}
//计算输入文本行中字母、数字、其他字符的个数
#include<stdio.h>
#include<ctype.h>
int main()
{
int u=0,p=0,y=0;
char ch;
while(ch=getchar(),ch!='\n')
{
if(isalpha(ch))//判断输入的字符是不是字母小写a~z或大写A~Z
{
u++;
}
else if(isdigit(ch))//判断输入的字符是不是十进制的数字
{
p++;
}
else
{
y++;
}
}
printf("letter:%d\n",u);
printf("digit:%d\n",p);
printf("other:%d\n",y);
return 0;
}
C语言标识符的命名规则:字母、数字、下划线。第一个字符必须是字母或下划线,后面可以跟随字母、数字或下划线。下面的代码用于判断输入的字符串中各标识符是否合法。
//判断输入的字符串是否标识一个合法的标识符
#include<stdio.h>
int main(){
int i;
char s[100];
printf("Enter a string:\n");
gets(s);
if(s[0]=='_'||(s[0]<='z'&&s[0]>='a')||(s[0]<='Z'&&s[0]>='A'))
{
for(i=0;s[i]!='\0';i++){
if(s[i]==' '||s[i]=='_'||(s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A')||(s[i]<='9'&&s[i]>='0')) continue;
else{
printf("illegal\n");
break;
}
}
if(s[i]=='\0') printf("legal");
}
else printf("illegal\n");
return 0;
}