C语言程序入门设计编程练习代码分享

2024-01-10 16:02:12

截图有些模糊,在代码中标明了题目输入输出要求

因直接在网站中输入代码,所以个别代码未缩进。

内容顺序为:题目+代码成功截图+可复制代码

注:后面两个是copy的其他博主的,非全原创。

?第一周? 输出Hello World

//题目要求:输出Hello World
#include <stdio.h>
int main()
{
 printf("Hello World");
 return 0;
}
/*----输出结果-----------

Hello World

-------------------------*/

第二周? 逆序的三位数

//题目要求:输入123 输出321
#include <stdio.h>

int main()
{
    int san=123;

    scanf("%d", &san);  

    int a,b,c;

    a = san%10;

    b= san / 10 ;

    b= b%10;

    c=san/100;

    san=a*100+b*10+c;

    printf("%d\n", san);

    return 0;
}

/*----输出结果-----------

123
321

-------------------------*/

第三周??

时间换算

//题目要求  输入803 输出3
#include <stdio.h>

int main()
{
        int BJT, UTC;

       scanf("%d",&BJT);
      
        if (BJT < 800) 
	{

              	 UTC = BJT+2400 - 800;
				
            
                } 
	else
	 {
                    UTC = BJT- 800 ;
                }
                printf("%d\n",UTC);
         	return 0;
}
/*----输出结果-----------

803
3

-------------------------*/

分队列?

//题目要求:输入11 输出1 3 5 7 9 11
#include<stdio.h>
 
int main()
{
	int n=11;
	scanf("%d",&n);
	for(int i = 1;i<=n;i++)
	{
	    if(i%2!=0)
	    {
	    	printf("%d",i);
		    if(i!=n&&i!=n-1)//同时处理奇数偶数两种情况
		      printf(" ");	
	      
	    }
	}
	return 0;
}
/*----输出结果-----------

11
1 3 5 7 9 11

-------------------------*/

第四周

奇偶个数

//题目要求:输入9 3 4 2 5 7 - 1  输出4 2
#include<stdio.h>
int main()
{
int x;
int a=0,b=0; //a为奇数,b为偶数
scanf("%d",&x);
while(x!=-1)
{
if(x%2==0)
{
b++;
}
else
{
a++;
}
scanf("%d",&x);
}
printf("%d %d",a,b);
return 0;
}

/*----输出结果-----------

9 3 4 2 5 7 -1    
4 2

-------------------------*/

数字特征值

//题目要求:输入342315 输出13
#include<stdio.h>
int main()
{

int num,a,c,d,e;
int b = 0;
int sum=0;
scanf("%d",&num);
if(num>=0&&num<=1000000)
{
while(num!=0)
{
a=num%10;
b=b+1;
if(a%2==b%2)
{
c=1;
}
else
{
c=0;
}
if(b==1)
{
sum=sum+c;
}
else
{
d=b-1;
e=1;
while(d!=0){
e=e*2;
d=d-1;
}
sum=sum+c*e;
}
num=num/10;
}
printf("%d",sum);
}
return 0;
}

/*----输出结果-----------

342315
13

-------------------------*/

第五周

素数和

//输入2 4  输出15
#include<stdio.h>
int main()
{
  int n,m;
  int i;
  int sum=0,count=0;
  scanf("%d %d",&n,&m);
  for(i=2;count<=m;i++)
  {
        int j;
        int x=1;
        for(j=2;j<i;j++)
            {
            	if(i%j==0)
	                {
	                 x=0;
	                 break;
	                }
            }
        if(x==1)
        {
	        count++;
        	if(count>=n && count<=m)
            {
	             sum+=i;
	        }
        }
  }
  printf("%d",sum);
  return 0;
}      

/*----输出结果-----------

2 4
15

-------------------------*/

念整数

//输入-30    输出fu san ling
#include<stdio.h>

int main()
{
    int x;//储存输入数值
    scanf("%d",&x);
    int mask=1;//与最高位相同用于从左向右分离数字
    int d;//储存分离的数字
    int t;//储存x
    //判断x是否为复数
    if(x<0)
    {
        printf("fu ");
        x=-x;
    }
    t=x;
 //获得x位数信息(通过mask体现)
    while(t>9)
    {
        mask*=10;
        t/=10;
    }
 //分离与输出
    while(mask>0)
    {
        d=x/mask;
        switch(d)
        { //获得拼音输出
            case 1:
                printf("yi");
                break;
            case 2:
                printf("er");
                break;
            case 3:
                printf("san");
                break;
            case 4:
                printf("si");
                break;
            case 5:
                printf("wu");
                break;
            case 6:
                printf("liu");
                break;
            case 7:
                printf("qi");
                break;
            case 8:
                printf("ba");
                break;
            case 9:
                printf("jiu");
                break;
            case 0:
                printf("ling");
                break;
        }
        if(mask>1)
        {
            printf(" ");
        }
        //移位(循环条件变换)
        x%=mask;
        mask/=10;
  }
  return 0;
}     
/*----输出结果-----------

-30
fu san ling

-------------------------*/

第六周

高精度小数? 代码图选一个

?

/*输入16/19    输出0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684*/

#include<stdio.h>
int main()
{
        const int number=200;//最多输出小数点后200位
        int a,b;
        scanf("%d/%d",&a,&b);
        int d[number];//储存小数点后每位对应的数值
        int i;
        int cnt=0;//记录小数位数
        //初始化位数
        for(i=0;i<number;i++)
        {
                d[i]=0;
        }
        //模仿人工列竖式做除法的方式,先将被除数乘以10,得到一位商之后,将余数乘以10作为下一轮计算的被除数
        while(a!=0&&cnt<number)
        {    //余数为0则除尽,同时最多计算200位小数
                a*=10;
                d[cnt]=a/b;
                a%=b;
                cnt++;
        }
        //遍历数组输出
        printf("0.");
        for(i=0 ; i<cnt; i++)
        {
                printf("%d",d[i]);
        }
        printf("\n");

        return 0;
}     
  
/*----输出结果-----------

16/19
0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684

-------------------------*/

第七周

多项式加法


/*
输入  
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20  
输出
4x6+6x5+12x3+12x2+12x+40
*/
#include<stdio.h>
void printNum(int a,int b)  //a为系数(不为0),b为指数(幂)
{
        if(b!=0)
        {
            if(a!=1)
            {
                printf("%d",a);         //a是1的话,不用输出这个1
            }
            printf("x");
            if(b!=1)
            {
                printf("%d",b);        //b是1的话,也不用输出这个1
            }
        }
        else
            printf("%d",a);
}
int main()
{
	int arr[101]={};
	int isFirst=1;
	int x,m;        //x是系数, m是幂次
	int cnt=0;      //记录输出的次数,用于判断极端情况
	
	for(int i=0;i<2;i++)        //读入数据
	{
		do{
			scanf("%d %d",&m,&x);
			arr[m]+=x;
		}while(m!=0);
	}
	
	for(int i=100;i>=0;i--){
		if(arr[i]!=0){
			if(isFirst){   //如果是第一个输出的
			isFirst=0;
			printNum(arr[i],i);
		}
		else{
			if(arr[i]>0)   
				printf("+");
				printNum(arr[i],i);
		}
		cnt++;
	}
}
if(cnt==0)
	printf("0");   //输入是0的特殊化处理
return 0;
}
/*----输出结果-----------
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20  
4x6+6x5+12x3+12x2+12x+40

-------------------------*/

鞍点

/*
输入:  
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9 
输出:
2 1
*/
#include<stdio.h>

int main()
{
	int n;
	scanf("%d",&n);
	if(n>=1 && n<=100)	
	{
		
		int a[n][n];
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				scanf("%d",&a[i][j]);
			}
		}
		
		int s=1,max,min;
		for(int i=0;i<n;i++){
			max=0;
			for(int j=0;j<n;j++){
				if(a[i][max]<a[i][j]){
					max=j;
				}
			}
		
			min=0;
			for(int m=0;m<n;m++){
		   		if(a[min][max]>a[m][max]){
					min=m;
				}
			}
			if(i == min){
				s=0;
				printf("%d %d",i,max);
				break;
			}
		}
		if(s == 1){
			printf("NO");
		}
	}
	return 0;	
} 
/*----输出结果-----------

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9 
2 1

-------------------------*/

?

第八周

单词长度


/*
输入:  
It's great to see you here.
输出:
4 5 2 3 3 4

*/
#include<stdio.h>

int main(int argc,char*argv[]){
	char c;
	int i=0,j=0;
	scanf("%c",&c);
	while(c != '.'){
		if(c == ' '){
			if(i>0){
				printf("%d",i);
				i=0;
				j++;
			}
		}
		else{
			i++;
			if(j>0 && i == 1){
				printf(" ");
			}
		}
		scanf("%c",&c);
	}
	if(i>0){
		printf("%d",i);
	}
    return 0;
    
}

/*----输出结果-----------

It's great to see you here.
4 5 2 3 3 4

-------------------------*/

?

GPS数据处理

/*
输入:  
$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

END
输出:
10:48:13

*/

#include<stdio.h>
#include<string.h>
 
int main()
{
	char ch;  // 每行中'*'前以字符输入
	char X[5] = "" ;  // 最后两位校验以字符串输入,且由于回车换行,可以确保读取两位校验,不需要人为设置进入外部循环(即下一条GPS信息) 
	char output[10] = "";  // 记录最后输出的时间字符串 
	char str0[20] = "" ;  // 记录字段0 
	char str1[20] = "" ;  // 记录字段1
	char str2 = '0' ;   // 记录字段2
	char str00[20] = "$GPRMC" ;  // 满足标准的字段0 
	char str20 = 'A' ;   // 满足标准的字段2
	
	while( 1 ){
		int xorsum = 0; // 记录异或,储存'*'前的自己计算的校验和 
		int cnt = 0; // 记录在一条GPS中位于的字段数位置
		int p0 = 0, p1 = 0 ;
		int check = 0;  // 检验标签(GPS语句满足要求时check==3)
		int stop = 0; // 退出标识符(stop==3时代表检查出了END) 
    	// 每条GPS内语句的读取(一行) 
		do{    // 完成每条GPS语句'*'及之前的字符输入,相关字符储存,异或计算 
			scanf("%c", &ch);
			{ // END退出模块 
				if( cnt==0 ){ 
					if( ch=='E') stop ++;
					if( ch=='N') stop ++; 
					if( ch=='D') stop ++;
				}
				if( stop==3 ) goto out; 
			}
			if( ch!='\n' ){  // 每一行结尾以\n结束,但校验符用%s字符串读取不会读到'\n' ,故理论上第二行之后的GPS信息都会先读到上一行的'\n',故需要确定不是'\n'后再进行计算 
				if( ch!=',' && ch!='$' && ch!='*' ) xorsum ^= ch;
				
				if( ch==',' )  cnt++; // 记录处于哪个字段
				else{
					if( cnt==0 ){
						str0[p0] = ch;
						// printf("%c",str0[p0]);
						p0 ++;
					} else if( cnt==1 ){
						str1[p1] = ch;
						p1 ++;
					} else if( cnt==2 ){
						str2 = ch ; 
					}
				}
			}
		} while( ch!='*' ) ;
		if( strcmp(str0,str00)==0 ) check += 1; //$GPRMC语句
		if( str2==str20 )  check += 1;  // 字段2表示已定位 
		xorsum %= 65536;  // 当输入'*'时出do-while循环,计算根据前面字符获得的校验和 
		// printf("xorsum=%d\n",xorsum) ;
		scanf("%s", X);  // 读入两位校验和 
		int xorinput = 0;  // 储存读入两位校验和的十进制值 
		int q ;
		int index = 16;
		for( q=0 ; q<2 ; q++ ){  // 校验和化为十进制 
			int V = 0; // 记录校验和的每位数字 
			if( X[q]>='0' && X[q]<='9' ) V =  X[q] - '0';
			else V =  X[q] - 'A' + 10;
			//printf("xorinput=%d\n",xorinput) ;
			xorinput += index * V;
			//printf("xorinput=%d\n",xorinput) ;
			index /= 16;
		}
		//printf("xorinput=%d\n",xorinput) ;
		if( xorinput==xorsum ) check += 1; //校验和正确 
		//if( xorinput==xorsum ) printf("hr\n");
		// 格式正确的GPS处理
		if( check==3 ){
			//printf("hr\n");
			int hour = 0;
			output[2] = ':' ; output[5] = ':';
			output[3] = str1[2];  output[4] = str1[3];
			output[6] = str1[4];  output[7] = str1[5];
			hour = (str1[0]-'0')*10 + (str1[1]-'0');
			if( hour<16 ) hour += 8;
			else hour = hour + 8 -24;
			output[0] = '0' + hour/10;
			output[1] = '0' + hour%10;
		}	
	}
out:
	printf("%s", output);
	return 0;
 } 
 /*----输出结果-----------

 
$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

END
10:48:13

-------------------------*/

文章来源:https://blog.csdn.net/sinat_37181108/article/details/135402265
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。