一些pta的基础题

这是一系列关于C语言的基础编程题目,包括输入输出、条件判断、循环语句、字符处理、数值计算等方面,旨在帮助初学者巩固基础知识。

5-1
语句填空:下列 for循环语句将输出: 0 1 2 0 1 2 0 1 2
for( i=1; i<=9; i++ )
printf(“%2d”, (i-1)%3);

5-2
执行以下程序段,输入12-78.5,输出78.5-12。
int n;
double x;
scanf(“%d-%lf”,&n,&x);;
printf(“%.1f-%d\n”, x, n);

5-3
表达式求值:
当a=1,b=2,c=3时,打印语句printf(“%d#%d#”,(a, b), a>b?(c=4):(c=5))的输出是__2#5#____。

5-4
执行以下程序段,输入3,输出(3)。
char ch;
scanf(“%c”,&ch);
putchar(‘(’);
printf(“%c”,ch);
putchar(‘)’);

5-5
输入一个正整数n,再输入n个字符,将这些字符输出,输出时在字符之间加一个空格,最后一个字符的后面没有空格。
输入格式:
在第1行输入一个正整数n
在第2行输入n个字符
输出格式:
在一行内输出n个字符,请注意:字符之间有一个空格,最后一个字符的后面没有空格。
输入样例:
5
Happy
输出样例:
H a p p y

#include <stdio.h>
int main()
{    
    char ch;
    int first = 1, k, n; 
    scanf("%d\n", &n);
    for(k = 1; k <= n; k++){
ch=getchar();
       if ( first == 1){ 
             putchar(ch); 
first+=1;
        }else{ 
printf(" ");
             putchar(ch);
        }
    }
    return 0;
}

5-9
本题完成如下求解:
设现在时针指向8点,那么t(t>0)小时后时针指向的点数。
#include <stdio.h>
int main()
{
int t,b;
scanf(“%d”,&t);
b=(8+t-1)%12+1;
printf(“%d”,b);
return 0;
}
//不用(8+t)%12,避免出现指针指向0。t=4时 ,是12点,但是输出0

5-10
输入一个2位数a,计算出它的2位数字之和赋值给b
#include <stdio.h>
int main()
{
int a,b;
scanf(“%d”,&a);
b=(a%10)+(a/10);
printf(“%d”,b);
return 0;
}

5-11
输入某年某月某日,判断这一天是这一年的第几天?

#include <stdio.h>
int main(){
    int year,month,day;
    int sum;
    int leap;
    int T;
    scanf("%d",&T);
    while(T--)    {
        scanf("%d %d %d",&year,&month,&day);
        switch(month)   {
        case 1:
            sum=0;
            break;
        case 2:
            sum=31;
            break;
        case 3:
            sum=59;
            break;
        case 4:
            sum=89;
            break;
        case 5:
            sum=120;
            break;
        case 6:
            sum=151;
            break;
        case 7:
            sum=181;
            break;
        case 8:
            sum=212;
            break;
        case 9:
            sum=243;
            break;
        case 10:
            sum=273;
            break;
        case 11:
            sum=304;
            break;
        case 12:
            sum=334;
            break;
default:
                printf("data error");
            break;
        }
        sum+= day;
        if(year%400==0|| (year%4==0&&year%100!=0))
            leap=1;
        else
            leap=0;
        if((leap == 1)&&(month>2&&month<=12))  sum++;
        printf("It is the %dth day.",sum);
    }
    return 0;
}

5-12
计算分段函数,测试数据分别是-2、3、7。

#include <stdio.h>
#include<math.h>
int main( )
{ float x,f;
  int i;
  for (i=0; i<3; i++) {
    scanf("%f",&x);
    if(x<0)
f=fabs(x+1);
    else if(x>=0&&x<=5) f=2*x+1;
    else  f=sin(x)+5;
    printf("x=%.2f,y=%.2f\n",x,f);
  }
  return 0;
 }

5-13
以下程序统计输入的一行字符中字母、数字、空格、其它字符的个数(行末以换行符结束,最后的换行符不统计在内)。例如,输入的一行字符为aB 3*则字母有2个,数字有1个,空格有1个,其它字符有1个。
提示:1、填写的代码要确保程序可以正确编译、运行得出结果;2、空格之后的括号里注明了分数,该括号不属于代码部分。

#include <stdio.h>
int main(){
    int letters, digits, spaces, others;
letters=0,digits=0,spaces=0,others=0;
    char ch;
    while( 
ch=getchar(),ch!='\n'){
        if( (ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z') )
            letters++;
        else if( ch>='0'&&ch<='9')
            digits++;
        else if( ch==' ')
            spaces++;
        else
            others++;
    }
    printf("字母、数字、空格、其它字符分别有:%d %d %d%d 个\n",letters,digits,spaces,others);}

5-14
理解switch语句。
下列程序段将输出__2#3#___。
unsigned char x=255,y=‘\1’;
switch(!!x) {
case 0: printf(“0#”);break;
case 1:
switch(y) {
case 0: printf(“1#”);break;
case 1: printf(“2#”);break;
}
default: printf(“3#”);
}

5-15
输入年月日,输出该日是今年第几天?
#include<stdio.h>
int main()
{
int i, year, month, day, days;
scanf(“%d%d%d”, &year, &month, &day);
days=fun(year,month,day);
printf(“%d”, days);
return 0;
}
int fun(int year,int month,int day)
{
int days;
days=day;
switch(month-1)
{
case 11: days+=30;
case 10: days+=31;
case 9: days+=30;
case 8: days+=31;
case 7: days+=31;
case 6: days+=30;
case 5: days+=31;
case 4: days+=30;
case 3: days+=31;
case 2:
if(year%40&&year%100!=0||year%4000)
days+=29;
else
days+=28;
case 1:
days+=31;
}
return days;
}

5-16
写出与以下switch语句等价的else-if语句。
switch(op){
case ‘+’: printf(“%d\n”, value1 + value2); break;
case ‘-’: printf(“%d\n”, value1 - value2); break;
default: printf(“Error\n”); break;
}
if(op==‘+’){
printf(“%d\n”, value1 + value2);
}
else if(op==‘-’)
{
printf(“%d\n”, value1 - value2);
}else {
printf(“Error\n”);
}

5-17
写出与以下switch语句等价的else-if语句。
switch(op){
case ‘+’: printf(“%d\n”, value1 + value2);
case ‘-’: printf(“%d\n”, value1 - value2);
default: printf(“Error\n”);
}

if(op == ‘+’){
printf(“%d\n”,value1 + value2);
printf(“%d\n”, value1 - value2);
printf(“Error\n”);
}
else(op == ‘-’)
{
printf(“%d\n”, value1 - value2);
printf(“Error\n”);
}else {
printf(“Error\n”);
}

5-18
写出与以下switch语句等价的else-if语句。
switch (ch){
case ‘0’ : case ‘1’ : case ‘2’ : case ‘3’ : case ‘4’ :
case ‘-’:
minus++; break;
case ‘5’ : case ‘6’ : case ‘7’ : case ‘8’ : case ‘9’ :
digit ++;break;
default:
other ++; break;
}

if(ch==‘-’||(ch>=‘0’&&ch<=‘4’))
{
minus++;
}else if(ch>=‘5’&&ch<=‘9’)
{
digit ++;
}else {
other ++;
}

5-19
写出与以下switch语句等价的else-if语句。
switch (ch){
case ‘-’:
minus++; break;
case ‘0’ : case ‘1’ : case ‘2’ : case ‘3’ : case ‘4’ :
case ‘5’ : case ‘6’ : case ‘7’ : case ‘8’ : case ‘9’ :
digit ++;break;
default:
other ++; break;
}

if(ch==‘-’)
{
minus++;
}
else if(ch>=‘0’&&ch<=‘9’)
{
digit ++;
}
else
{
other ++;
}

5-20
输入3个整数,输出其中最大的数。

#include <stdio.h>
int main()
{
    int a, b, c, max;
    scanf("%d %d %d", &a, &b, &c);
    max = 0;
    if ( a > b ) {
        if ( a > c ) {
max=a;
        } else {
max=c;
        }
    } else {
        if 
(b>c)
 {
            max = b;
        } else {
max=c;
        }
    }
    printf("%d\n", max);
    return 0;
}

5-21
在玩牌程序中,每一组牌用数字1〜13代表。输入数字,显示相应的牌。其中2〜10直接显示数字,而数字1、11、12、13则分别用Ace、Jack、Queen、King来表示。

#include <stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    if(n >= 1 && n <= 13){
        switch (n){
            case 1: 
printf("Ace\n"); break;
            case 11: printf("Jack\n"); break; 
            case 12: 
printf("Queen\n"); break;
            case 13: printf("King\n"); break; 
            default: 
printf("%d\n",n); break;
        }
    }else{
        printf("Error\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值