1. 输出闰年,3个年号换一行 1900-2000年 (pass!!!)
复习备注:较为简单,主要运用到了for循环,建议过。
/*最终输出的结果如下图所示:
1904 1908 1912
1916 1920 1924
1928 1932 1936
1940 1944 1948
1952 1956 1960
1964 1968 1972
1976 1980 1984
1988 1992 1996
2000
*/
int main(){
int years,count=0;
for(years=1900;years<=2000;years++){
if(years%4==0&&years%100!=0||years%400==0)
{
printf("%d ",years);
count++;
if((count%3)==0)
printf("\n");
}
}
return 0;
}
2. 学生信息的相关数据显示操作
//复习备注:涉及结构体,打擂算法,多加复习 ①输入学生的信息(学号、性别、姓名、四门课成绩) ②输出总平均成绩最高的学生的信息(学号、性别、姓名、平均成绩)
********输出结果:
请输入学生1的学号、性别、姓名、成绩:
1 1 1 1 1 1 1
请输入学生2的学号、性别、姓名、成绩:
2 2 2 2 2 2 2
请输入学生3的学号、性别、姓名、成绩:
3 3 3 3 3 3 3
总平均成绩最高的是:学号:3,性别:3,姓名:3,平均成绩:3.000000
#include <stdio.h>
#define N 3 //此处不要加分号,否则会报错
//结构体的定义一般放在主函数的上方
struct student{
long stu_num;//学号
char sex;//性别
char name[15];//姓名
int score[4];//分数
float average;//平均分 //平均分存在小数,故设置为浮点型
}stu[31];//存放学生信息的数组
int main() {
int i,j,index;
float sum,max;
//struct student stu[3];
//控制学生成绩的输入
for(i=0;i<N;i++)
{
printf("请输入学生%d的学号、性别、姓名、成绩:\n",i+1);
//注意要加上取地址符
scanf("%ld %c %s",&stu[i].stu_num,&stu[i].sex,&stu[i].name);
for(j=0;j<4;j++)
scanf("%d",&stu[i].score[j]); //一个学生有多个成绩
}
//计算每位学生成绩的平均值
for(i=0;i<N;i++)
{
sum = 0.0;//注意要重新置为0(是每位学生的)
for(j=0;j<4;j++)
sum+=stu[i].score[j];
stu[i].average = sum/4.0;
}
//找出平均成绩的最大值,并进行输出操作
max = stu[0].average;
index = 0;
for (i=1;i<N;i++)
{
if(stu[i].average>max)
{
max = stu[i].average;
index = i;
}
}
printf("总平均成绩最高的是:学号:%d,性别:%c,姓名:%s,平均成绩:%lf\n",stu[index].stu_num,stu[index].sex,stu[index].name,stu[index].average);
}
3. 从键盘当中输入10个整数,找出第一个能被7整除的数,若找到后打印该数,否则打印“未找到此数” (pass!!!)
//复习备注:1、用数组的--先输入再遍历输出; 2、边输入边输出
//方法一、
int main() {
int num[10],i;
for(i=1;i<=10;i++){
scanf("%d",&num[i]);
}
for(i=1;i<=10;i++)
{
if(num[i]%7==0)
{
printf("找到此数:%d\n",num[i]);
break;
}
}
if(i>10)
printf("未找到此数!");
return 0;
}
//方法二、
int main() {
int i,a;
for(i=1;i<=10;i++){
scanf("%d",&a);
if(a%7==0){
printf("%d",a);
break;
}
}
if(i==11){
printf("not exist!");
return 0;
}
}
4.从键盘上输入a与n的值,计算sum=a+aa+aaa.......
//复习备注:再过一遍关键性代码,如何生成a、aa、aaaa..... //设计主要思路:生成每个数,生成项
int main() {
int a,n,i,t=0,sum=0;
scanf("%d %d",&a,&n);
for(i=1;i<=n;i++)
{
t+=a;
sum+=t;
t*=10; //不是这个t+=a*10;
}
printf("sum=%d",sum);
}
5.从键盘当中输入10个评委的分数,去掉一个最高分,去掉一个最低分,求出其余8个人的平均分输出平均分,最高分,最低分
//程序设计的主体思路:利用数组+打擂算法,找出最高分和最低分,最后算平均分时候,将其总分减去两个分数,人数为8人即可
#define N 10
int main(){
int scores[N],max,min,i,sum=0;
float aver;
printf("请输入10位评委的分数:\n");
for(i=0;i<N;i++)
{
scanf("%d",&scores[i]);
}
max=min=scores[0];//将最小值和最大值进行初始化
for(i=0;i<N;i++){
sum+=scores[i];
if(scores[i]>max)
max=scores[i];
if(scores[i]<min)
min=scores[i];
}
aver=(sum-min-max)/8.0;//如果这里为8的话,就变成了整数与整数相除,这样会导致向下取整,故结果为5.000000
printf("最高分:%d,最低分:%d,平均成绩为:%f",max,min,aver);
return 0;
}
6、文件的相关字符串读取操作
6-1 将文件file1.txt文件中的内容读出并显示到屏幕上
int main() {
FILE *fp;
fp=fopen("file.txt","r");
char ch;
while((ch=getc(fp))!=EOF)//一直读取到文件字符末尾(言外之意就是读取全部字符)
putchar(ch);
fclose(fp);
return 0;
}
//6-2 将文本文件的file1.txt中的内容复制到文本文件file2.txt当中,同时将小写字母转化为大写字母
//核心:fputc和fgetc函数的应用
int main() {
FILE *fp1;
FILE *fp2;
char ch;
fp1=fopen("file1.txt","r");
fp2=fopen("file2.txt","w");
while((ch=getc(fp1))!=EOF){
if(ch>='a'&&ch<='z')//完成大小写字母的转换
ch=ch-32;//或 ch-='a'-'A';
fputc(ch,fp2);//将ch的值输出到fp2
}
fclose(fp1);
fclose(fp2);
printf("文件写入成功!");
return 0;
}
7.字符或者数字的顺序性的输出问题汇总
7-1 逆序输出一个输入的数
//隐藏条件:次数未知、不知道具体的循环次数,故此处使用while循环
int main() {
int x,digit=0,rev=0;
scanf("%d",&x);//控制输入数字
while(x!=0)//这里修改为此条件,目的在于负数也可以转置
{
digit=x%10;//不断取个位数
rev=rev*10+digit;
x/=10;//将小数点不断左移,保证每次向左取数
}
printf("%d",rev);//打印转置后的数
}
//7-2 正序输出一个数的各位数字
#include <stdio.h>
int main(){
int x,t,count=1;
scanf("%d",&x);
t=x;
while(t>9)//用于计算x为几位数,如果为两位数则为100
//不能写成>=(此时打印的第一个数字就是0)
{
t/=10;
count*=10;
}
do
{
int d=x/count; //不断取最高位,并依次输出
printf("%d ",d);
x%=count;//去掉最高位置的数 !!!!
count/=10;
}while(count>0);
}
//扩展:逆序输出输出数字:实质就是取低位,去低位,再取低位,如此往复,直至完全取完
#include <stdio.h>
int main(){
int x,t,count=0;
scanf("%d",&x);
t=x;
while(t>9)//用于计算x为几位数,如果为两位数则为100
//不能写成>=(此时打印的第一个数字就是0)
{
t/=10;
count++;
}
do
{
int d=x%10; //不断取最高位,并依次输出
printf("%d ",d);
x=x/10;//去掉最高位置的数 !!!!
count--;
}while(count>=0);
}
//7-3、将输入的字符串反序输出
//重点:gets()和puts()函数
//字符数组:来存取输入的字符串、i,j用来遍历、k用来保存长度、temp用来作为临时变量用于交换
//复习备注:掌握对当行字符串的处理方法,使用特殊函数,提高效率,减少代码量
#include <string.h>
int main(){
char c[200],temp;
int i,j,k;
printf("请输入一个字符串:\n");
gets(c);//输入字符
k=strlen(c);//计算字符的长度
for(i=0,j=k-1;i<k/2;i++,j--)//i表示字符头,j表示字符尾
{
//交换首尾字符的位置
temp=c[i];
c[i]=c[j];
c[j]=temp;
}
puts(c);//输出字符
return 0;
}
8.输出200-300之间的素数
//复习建议:标志数的合理使用(涉及判断条件类问题(如判定与否的问题))
//代码亮点:运用了定义函数功能,提高了代码阅读性
#include <math.h>
int prime(int x){
//i:因子遍历量、isprime:素数与否的标志数、k遍历的范围
int i,isprime=1,k=sqrt(x);
for(i=2;i<=k;i++){
if(x%i==0)
{
isprime=0;
break;
}
}
return isprime;
}
int main(){
int i;
for(i=200;i<300;i++){
if(prime(i)==1)
printf("%d是素数\n",i);
}
return 0;
}
9.输入两个字符,若这两个字符之差为偶数,则输出前驱字符,否则输出后继字符
//前驱字符:较小字母前面的,后继字符:较小字母后面的
//代码两点:三目运算符的运用,简化了代码量;
//复习备注:三目运算符的运用
int main() {
char a,b,y;//a为字符1,b为字符2
printf("请输入两个字符:\n");
scanf("%c %c",&a,&b);
if((a-b)%2==0)
{
y=(a<b?a:b);
y--;
printf("%c",y);
}
else
{
y=(a>b?a:b);
y++;
printf("%c",y);
}
return 0;
}
10.输入年份和月份,输出该月的天数(应先判断是否为闰年)
//switch-case语句的运用、标志数的使用
//利用其函数带来的返回值来进行计算天数
int main(){
int year,month,days=0,isprime=0;
printf("请输入年份和月份\n");
scanf("%d %d",&year,&month);
if(year%4==0&&year%100!=0||year%400==0)
isprime=1;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
days=31;
break;
case 4:case 6:case 9:case 11:
days=30;
break;
case 2:
days=28+isprime;//闰年的2月份为29天,利用其函数带来的返回值来进行计算天数
}
printf("%d年%d月有%d天",year,month,days);
return 0;
}
11.输入10个数字,将这十个数按升序输出,并且奇数在前,偶数在后。例如10个数是10,9,8,7,6,5,4,3,2,1
//方法一、
//冒泡排序算法
int sort(int a[],int n){
int i,temp,j;
for(i=0;i<n;i++){
for(j=0;j<n-i-1;j++){
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main(){
int m[10],i,j,odd[10],k=0,eve[10],n=0;
printf("请输入10个数字:\n");
for(i=0;i<10;i++)
scanf("%d",&m[i]);
for(i=0;i<10;i++)
{
if(m[i]%2==0)//判断其奇偶性,分别将奇数和偶数赋值给不同的数组
odd[k++]=m[i];
else
eve[n++]=m[i];
}
sort(odd,k);
sort(eve,n);
for(j=0;j<n;j++)
printf("%d ",eve[j]);
for(i=0;i<k;i++)
printf("%d ",odd[i]);
}
//方法二、采取先分奇偶再排序
12.录入一段英文文章(存放在数组a当中),统计其中的单词个数,并按照单词长度,从小到大输出各个单词。假定这段文章不超过1000个字符,单词不超过240个,请自行设计录入结束条件
#include <stdio.h>
#include <stdlib.h>//引入目的:为了使用malloc函数
#include <string.h>
struct voca
{
char word[20];
int lent;//单词的长度
};
int main(){
int i=0,word=0,len;
struct voca *danci;//定义一个结构体指针
danci = (struct voca *)malloc(240 *sizeof(struct voca));
//(类型)malloc(大小)
char a[1000];
int j = 0;
printf("请输入:\n");
gets(a);//gets函数里面所含的是数组
//**********功能1:实现单词个数的统计**********
while(a[i]!='\0')
{
if(a[i]==' ')
for(i++;a[i]==' ';i++);//连续跳过所有空格
else
{
word++;//计算单词数
len=1;
for(i++;a[i]!='\0'&&a[i]!=' ';i++)//连续跳过所有字符
{
len++;
}
danci[j].lent=len;//该单词的长度
strncpy(danci[j].word,a+i-len,len);
j++;
}
}
//************功能2:实现单词的排序**********
int m,n;
struct voca t;
for(m=0;m<word;m++)
for(n=0;n<word-m;n++)
{
//关于比较的另外一个函数是strcmp(str1,str2) 相等返回0,大于返1,小于返-1
if(danci[n].lent>danci[n+1].lent)
{
t=danci[n];
danci[n]=danci[n+1];
danci[n+1]=t;
}
}
int f;
printf("从小到大的顺序:\n");
for(f=0;f<word+1;f++)
{
printf("%s ",danci[f].word);
}
printf("\n");
printf("单词数为:%d\n",j);
printf("结构体的大小为:%d",sizeof(voca));
return 0;
}
13.输入一行字符,统计其中有多少个单词,单词之间用空格符隔开(通过字符数组来处理字符串)
int main(){
char str[100];
int i=0,word=0;
printf("请输入一行字符:\n");
gets(str);
while(str[i]!='\0')
{
if(str[i]==' ')
for(i++;str[i]==' ';i++) ;//跳过空格
else
{
word++;
for(i++;str[i]!='\0'&&str[i]!=' ';i++) ;//跳过字符
}
}
printf("该行字符串中一共有%d个单词",word);
return 0;
}
14.排列组合问题,0,1,2,3,4,组成无重复的3位数字并输出
int main()
{
int i,j,k,count=0,num;
for(i=1;i<=4;i++)
for(j=0;j<=4;j++)
for(k=0;k<=4;k++){
if(i!=j&&i!=k&&k!=j)
{
num = i*100+j*10+k;
count++;
printf("%d ",num);
if(count%5==0)
printf("\n");
}
}
printf("\n共计有%d个数",count);
return 0;
}
15.求所100-1000有水仙花数,输出并统计其总个数(水仙花数是指一个3位数:各位数字立方之和等于该数本身)
int main(){
int i,j,k,num,count=0;
for(num=100;num<1000;num++){
i=num/100;//百位
j=num/10%10;//十位
k=num%10;//个位
if(i*i*i+j*j*j+k*k*k==num){
printf("%d ",num);
count++;
if(count%5==0)
printf("\n");
}
}
printf("水仙花数的个数为:%d",count);
return 0;
}
16.找1-10000以内的完数并输出其完数和其个数(这个数等于除它本身以外的所有因子之和)
//代码主要思路:求出所有因子之和,然后与原数进行比较,看看其是否相等,相等则为完数
int main(){
int num,sum,i,count=0;
printf("找到的完数如下:\n");
for(num=1;num<10000;num++){
sum=0;//!!!每次因子之和之前,都要将因子之和进行初始化
for(i=1;i<num;i++){
if(num%i==0)
sum+=i;
}
if(sum==num)
{
printf("%d ",num);
count++;
}
}
printf("\n完数的个数为:%d",count);
return 0;
}
17.将一个不小于2的整数进行分解质因数(40=222*5)
//主要思路:先%看是否能被整除,后/去掉该因子,(如果涉及到对原数的后期的使用,则需要先将原数copy一份出来 )
int main(){
int num,k=2;
printf("请输入一个大于2的整数:\n");
scanf("%d",&num);
printf("质因子的分解结果为:%d=",num);
while(1){
if(num%k==0)//如果该数为整数num的某个因子则进入到下一步
{
num/=k;//去除整数num的某个因子
if(num>1)//如果除掉因子的数依然大于1的话则将其输出并留好尾巴*
printf("%d*",k);
else
//意味着这是最后一个因子,则直接输出,并跳出循环体
{
printf("%d",k);
break;
}
}
else
k++;//如果不等于0说明该数不是因子,则继续自增进行循环
}
return 0;
}
18.判断重复数字(输入一个9位数的无符号整数,判断是否有重复数字)
//思路1、答案的主要思路为用long数据类型来接收数据,用count数组来进行计数,最后遍历循环count数组各个数字次数判断符合条件的即可
//用数组对应的下标来统计对应的数字,相应下标对应的数据即为数字的重复次数
//思路2、用数组来存取数字,并采用数组遍历的方式来进行
/*
int main() {
int i,n;
long num;//数字用长整型数据类型进行存储,并且
int count[10]={0};//用于统计重复数字个数的数组
printf("请输入一个正整数:");
scanf("%ld",&num);
n=num;
//对输入的数字进行拆分和统计
while(n!=0){
count[n%10]++;//利用数字对应的数组下标来统计各个数字的次数(记个)
n/=10;//去掉统计完的个位上的数 (去个)
}
for(i=0;i<10;i++)
{
if(count[i]>1)
break;
}
if(i<10)
printf("整数%d中存在重复数字。\n",num);
else
printf("整数%d中不存在重复的数字。\n",num);
for(i=0;i<10;i++)
printf("%d出现的次数为:%d次\n",i,count[i]);
return 0;
}
19.编写一个程序:将一个数插入升序数组当中,是插入后的数组仍然是升序
//注意:关于此题的代码逻辑要注意顺清楚,复习建议:加强巩固复习
#define N 11
int main(){
//注意在定义数组的时候,要预留好待插入的位置
//*p=num+N-2 让指针指向最后一个数字,N-2表示下标为0-9
int num[N]={1,3,5,7,11,14,18,20,21,89},*p=num+N-2,n,i;
printf("请输入需要插入的数字:\n");
scanf("%d",&n);
//保证指针不越界
while(p>=num)
{
if(*p>n)
{
*(p+1)=*p;//指针指向的数字后移
p--;//指针变量继续向左进行扫描比较
}
//若带插入数据比原有的数据要大,则直接跳出循环
else
break;
}
*(p+1)=n;//将待插入数据赋值给最右边的指针
for(i=0;i<N;i++){
printf("%d ",num[i]);
}
return 0;
}
20.从字符串中提取整数 (假设输入的字符串中有数字和非数字字符,编写程序找出找出字符串中 所有连续的数字字符组成的整数,并统计 ) 循环不确定,故使用while语句
#include <string.h>
int main(){
char str[100]={0};//用户输入的字符数组
int i=0,num=0,count=0;//i循环遍历,num拼凑整数,count计数
printf("请输入一个包含多字段的字符串:\n");
gets(str);
printf("从该字符串找到的整数有:\n");
while(str[i]){
if(str[i]>='0'&&str[i]<='9')
{
for(num=0;str[i]<='9'&&str[i]>='0';i++)
num=num*10+(str[i]-'0');//str[i]-'0'表示连续处理多个字符,并将其转换为字符形式
count++;//统计整数的个数
printf("No %d:%d ",count,num);
}
else
{
while(str[i]!='\0'&&(str[i]>'9'||str[i]<'0'))
i++;//跳过所有非数字字符
}
}
printf("\n共找到%d个整数",count);
return 0;
}
//改版——将找数字修改为找字符!
//关键在于有些值需要进行初始化,临时存放寻找的字符,清空临时字符数组+数组下标归0操作,方便下次继续使用
请输入一段字符串(含字母和数字)
zhang1li2wang3zhao4
输入的字符串当中含有的字母如下:
字符提取到的第1个字符为:zhang
字符提取到的第2个字符为:li
字符提取到的第3个字符为:wang
字符提取到的第4个字符为:zhao
总共找到了4个字母字符:
#include <stdio.h>
#include <string.h>
int main(){
char str[100],str1[100];
int count=0,i=0,k=0;
printf("请输入一段字符串(含字母和数字)\n");
gets(str);
printf("输入的字符串当中含有的字母如下:\n");
while(str[i]!='\0'){
if(str[i]<='z'&&str[i]>='a'||str[i]<='Z'&&str[i]>='A')
{
for(memset(str1,0,sizeof(str1)),k=0;(str[i]<='z'&&str[i]>='a')||(str[i]<='Z'&&str[i]>='A');i++,k++)
{
str1[k]=str[i];
}
count++;
printf("字符提取到的第%d个字符为:",count);
puts(str1);
}
else
i++;
}
printf("总共找到了%d个字母字符:",count);
return 0;
}
21.将两个升序数组合并为一个新的升序数组
//主要思路:两数组比较,小的放入新数组,依次下去,最终还要对剩余情况进行考虑,将剩余的部分全部放入最终的大数组当中
#define M 10
#define N 8
void merge_sort(int *x,int lenx,int *y,int leny,int *z){
int i=0,j=0,k=0;
while(i<lenx&&j<leny)
{
if(x[i]<y[j])
z[k++]=x[i++];
else
z[k++]=y[j++];
}
//将剩余字符放入新数组
while(i<lenx)
z[k++]=x[i++];
while(j<leny)
z[k++]=y[j++];
}
int main(){
int a[M]={1,2,4,5,6,7,9,88,99,111};
int b[N]={11,12,22,33,44,55,66,77};
int i,c[M+N];
merge_sort(a,M,b,N,c);
printf("归并得到的新的升序序列c为:\n");
for(i=0;i<M+N;i++){
printf("%d,",c[i]);
}
return 0;//return语句目的是告诉程序执行结束了,如果随意放置会导致程序提前结束
}
22.判断主串是否和子串匹配
请输入主串:
zhangjia nishi1
请输入子串:
jia
在主串中第5个位置找到了子串!
#include <string.h>
int index(char s[],char t[])
{
int i=0,j=0,m=strlen(s),n=strlen(t);
while(i<m&&j<n){
//匹配到后就继续向后匹配
if(s[i]==t[j]){
i++;
j++;
}
//未匹配到,则主串+1从第二个字符开始匹配
else{
//关键代码!!!!
i=i-j+1;//相当于匹配到半路就失败了,接下来将其进行回归操作,并将其+1到下一个字符进行新一轮匹配
j=0;
}
}
if(j==n) //若匹配成功,则返回子串在主串当中的位置
return (i-n);//关键代码!!!返回子串首字符所在的位置
else
return -1;//
}
int main(){
char s1[100],s2[20];
printf("请输入主串:\n");
gets(s1);
printf("请输入子串:\n");
gets(s2);
if(index(s1,s2)!=-1)
printf("在主串中第%d个位置找到了子串!\n",index(s1,s2));
else
printf("未在主串中找到子串!");
return 0;
}
23.在一个字符串当中找出某一个字符
//主体框架,采用了函数模块化设计的思想,使得程序更加直观。
#include <string.h>
void index(char str[],char s)
{
int i;
for(i=0;i<strlen(str)&&str[i]!=s;i++)
{
if(str[i]==s)
break;
}
if(i<strlen(str))
printf("在字符串的第%d个位置找到了该字符!",i+1);
else
printf("未在字符串找到该字符!");
}
int main(){
char a[100],b;
printf("请输入字符串:\n");
gets(a);
printf("请输入待查找的字符:\n");
b=getchar();
index(a,b);
}
24.折半查找法(二分法查找):注意仅仅适用于元素已经有序的情况下才可使用
/arr为待查找的数组、k为带查找数、sz为数组的大小
int mid_search(int arr[], int k, int sz) //定义二分查找函数
{
int left = 0; //定义数组元素最左侧下标为0
int right = sz - 1; //定义数组元素最右侧下标为总数-1
while (left <= right)
{
int mid = left + (right - left) / 2; //此表达式是防止int型溢出哦,也是求平均哈
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
return mid; //找到了,返回下标
}
}
return -1; //过程全部走完了,没找到,返回-1;
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0; //定义想要查找的值
int ret; //用来接收函数的返回值
int sz = sizeof(arr) / sizeof(arr[0]); // (sizeof是c语言的内置运算符,
//以字节为单位给出指定类型的大小 ;求数组元素的总数==整个数列字节大小/一个元素的字节大小)
printf("请输入要查找的值\n");
scanf("%d", &k);
ret = mid_search(arr, k, sz); //用ret接收mid_search返回的值
if (ret == -1)
printf("没找到,请重新输入");
else
printf("找到了,下标为%d", ret);
return 0;
}
25.打印杨辉三角
define N 10
int main(){
//1、变换位置
int i,j,a[N][N];
for(i=0;i<N;i++)
a[i][0]=a[i][i]=1;//每行的开头和结尾都是一样的数字
for(i=2;i<N;i++)//从第三行开始,有如下规律,故下标为2
{
for(j=1;j<i;j++){
//按照规律打印数字
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
//2、打印输出
for(i=0;i<N;i++){
for(j=0;j<i+1;j++)
printf("%6d",a[i][j]);
printf("\n");
}
}
*/
26.删除用户输入的字符串
请输入字符串:
zhangjiajun
请输入需要删除的字符:
j
删除完毕后的字符串打印输出如下:
zhangiaun
//程序的思路:主要就是字符的过滤,遍历数组当中的所有元素,将待删除的元素进行跳过并将其余字符输入到新的字符当中
//并将其输出
#include <string.h>
int main(){
char str1[60],str2[60],str;//str1[60]存取输入的字符串,str2[60]存储删除后的字符串
int i=0,k=0;
printf("请输入字符串:\n");
gets(str1);
printf("请输入需要删除的字符:\n");
str=getchar();//单个字符
while(str1[i]!='\0')//连续读取字符串当中字符常用的手法
{
if(str1[i]!=str)
str2[i-k]=str1[i];//关键代码!!!相当于把第6个数放在第5个位置上去了
else
k++;//k用来表示删除字符出现的,方便后期缩减字符长度以及打印输出;
i++;//继续比对下一个字符
}
str2[i-k]='\0';//给字符数组最后一位添加\0使其构成字符串
printf("删除完毕后的字符串打印输出如下:\n");
puts(str2);
return 0;
}
27.判断是否为回文串(类似的还有回文数、婚约数、质数等)
//主要思路:利用下标遍历循环对比数组的开头和结尾
/*
#include <string.h>
int main(){
char str1[60];
int i,j;
printf("请输入一组字符串:\n");
gets(str1);
i=0;
j=strlen(str1)-1;//倘若不去-1,则下标会超出给定字符下标,从而导致判定错误!
while(i<j)//字符两端两两进行比较,故不用加等于号
{
if(str1[i]==str1[j])//继续比较下一对字符
{
i++;
j--;
}
//一旦检索到两者不相等则返回不是回文串
else
{
printf("该数不是字符串!");
break;
}
}
if(i==j)
printf("该字符串是回文串!");
return 0;
}
28求1k次方+2k次方一直加到N的k次方
//复习注意:注意因子置零操作!!!极其容易忽视!!!
请分别输入底数K和指数N
1 3
s=6
int main(){
long s=0;
int k,N,i,j,t=1;
printf("请分别输入底数K和指数N\n");
scanf("%d%d",&k,&N);
for(i=1;i<=N;i++){
//因子置“0 ” 凡是涉及到每次都需要产生新因子的时候,则需要执行此操作!!!!
s=0;//因为每一项之间都需要重新进行计算,则需要将其进行初始化
for(j=1;j<=k;j++){
t*=i;
}
s+=t;
}
printf("s=%ld",s);
return 0;
}
29.分别求出输入的三个学生(i)的平均成绩(average)、最差(min)、最好成绩(max)
//未利用数组,直接使用循环实现
float max,min,aver;//定义全局变量,通过调用函数直接修改数据内容,有效的解决了一次返回多个值
//主函数区
int main() {
int i;
void process(int);
//三次调用函数,用计算并输出三位同学的成绩
for(i=1;i<=3;i++){
process(i);//用户找出最大值最小值和计算平均分
printf("Number %d\n",i);
printf("/n average=%f,min=%f,max=%f",aver,min,max);
}
return 0;
}
void process(int num)
{
float score,sum;
int count=0;
printf("Please input scores of number:%d\n",num);
scanf("%f",&score);
max=min=score;
while(score>=0)
{
sum+=score;//计算分数总和
//比较得出最差和最好的分数 (打擂算法)
if(score<min)
min=score;
if(score>max)
max=score;
count++;//统计分数个数,为计算平均值做准备
scanf("%f",&score);//接收下一次输入的数据
}
aver=sum/count;//计算平均值
}
30.编写一个函数计算第n项的值
//版本1
int fun(int n){
if(n==0)
return 0;
if(n%3==0)
return 2*fun(n-1)+1;//涉及到返回数,这样写更为简便
else
return 2*fun(n-1)-1;
}
int main() {
int num,result=0;
printf("请输入项数n:\n");
scanf("%d",&num);
result=fun(num);
printf("项数:%d 的计算结果为:%d",num,result);
return 0;
}
//改进版本
//主要引进了an变量用来返回实际计算的值
int fun(int n){
int an;
if(n==0)
an=0;
else
{
if(n%3==0)
an=2*fun(n-1)+1;
else
an=2*fun(n-1)-1;
}
return an;
}
int main() {
int num,result=0;
printf("请输入项数n:\n");
scanf("%d",&num);
result=fun(num);
printf("项数:%d 的计算结果为:%d",num,result);
return 0;
}
#include <stdlib.h>
#define N 20
//该函数主要实现输出功能
void fun(int s[]){
int i;
for(i=0;i<N;i++){
printf("%d",s[i]);
printf("\n");
}
}
int main(){
int s[N],i,j,temp;
FILE *fp;
fp=fopen("number.txt","r");
//将排序前的数组输出给数组
for(i=0;i<N;i++)
fscanf(fp,"%d\n",&s[i]);//注意这里使用了\n,因为数字是按照行来进行存储的
printf("数字排序前的顺序为:\n");
fun(s);
//冒泡排序
for(i=0;i<N;i++){
for(j=0;j<=N-i;j++){
if(s[j]>s[j+1])
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
}
//将排序好的数组写入到文件当中
fp=fopen("number.txt","w");
for(i=0;i<=N-1;i++){
fprintf(fp,"%d\n",s[i]);
}
printf("他们排序后的顺序为:\n");
fun(s);
fclose(fp);//这一点很容易遗忘,需要特别注意!!!
return 0;
}