目錄 一.glad 簡介 二.glad 下載 四.glad 使用 1.OpenGL glfw + glad 效果演示 2.OpenGL glfw + glad 《源碼下載》 二.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基 ...
在電腦等級考試二級C語言程式設計試題中,有關一個正整數各位數字的處理是一個重要的考點,這類試題在歷年考試試卷的程式填空題和程式設計題中經常出現。
一.實例解析
例1 編寫函數fun,它的功能是:找出100~x(x<=999)之間所有整數中各位上數字之和為15的整數,然後輸出;符合條件的整數個數作為函數值返回。
例如,若x=500時,100~500之間各位上數字之和為15的整數有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492。共有26個。
#include <stdio.h>
int fun(int x)
{
}
int main()
{
int x=-1;
while(x>999||x<0)
{
printf("Please input(0<x<=999): ");
scanf("%d",&x);
}
printf("\nThe result is: %d\n",fun(x));
return 0;
}
解析:由於程式中給定的整數t是一個3位數,因此可以用s3、s2和s1三個變數分別保存給定整數t的百位數字、十位數字和個位數字,顯然
s3=t/100; s2=t/10%10; s1=t%10;
用一重迴圈對100~x之間的所有整數t進行窮舉,若各位數字之和s1+s2+s3等於15,則輸出t並計數。
編寫的fun函數如下:
int fun(int x)
{
int n, s1, s2, s3, t;
n=0;
t=100;
while (t<= x)
{
s1=t%10; s2=(t/10)%10; s3=t/100;
if(s1+s2+s3==15)
{
printf("%d ",t);
n++;
}
t++;
}
return n;
}
例2 編寫函數fun,它的功能是:計算無符號整數num的各位上的數字之和。
例如,若輸入250,則輸出應為7;若輸入123456,則輸出應為21。
#include <stdio.h>
unsigned fun(unsigned num)
{
}
int main()
{
unsigned n;
printf("Please enter a number:");
scanf("%ud",&n);
printf("\n%u\n",fun(n));
return 0;
}
解析:由於題目未給定整數num的位數,因此像例1那樣採用多個變數分別保存num的各位數字,並通過對num進行算術運算得到各位上的數字的方法不適用。
實際上,對於任意一個非負整數num,num%10可以得到num的個位數,num=num/10會將num的個位數丟掉,這樣,通過迴圈不斷求得num的個位數並丟掉個位數,可以將num各位上的數字依次分離出來,其操作步驟為:
1)分離出num的個位數,即num%10。
2)將num除以10,作為新的num,即新的num丟掉了個位數。
3)如果num等於0,分離完畢,結束。否則,轉第1)步,繼續分離各位數字。
例如,num=1234,num%10=4,num=1234/10=123,得到數字4;
num%10=3,num=123/10=12,得到數字3;
num%10=2,num=12/10=1,得到數字2;
num%10=1,num=1/10=0,得到數字1;結束。
將每次分離出的個位數累加起來,就得到num的各位數字之和。
編寫的fun函數如下:
unsigned fun(unsigned num)
{
unsigned s=0;
do
{
s+=num%10;
num/=10;
} while(num);
return s;
}
例3 編寫函數fun,它的功能是:求整數number的逆序數。
例如,若輸入12345,則輸出應為54321;若輸入-1240,則輸出應為-421。
#include <stdio.h>
int fun(int number)
{
}
int main()
{
int n;
printf("Please enter a number:");
scanf("%d",&n);
printf("\n%d\n",fun(n));
return 0;
}
解析:由於number可能為負數,置符號t初值為1(表示正數),若number為負數,則置符號t=-1,且number=-number。這樣將number都作為無符號整數處理。
按例2的方法分離出number的各位數字,例如,若number=1234,則依次分離出數字4、3、2和1,如何將數字4、3、2、1合併成整數4321呢?
由於 4321=4*1000+3*100+2*10+1
= (((0*10 + 4)*10 + 3)*10 + 2)*10 + 1
因此可設s的初始值為0,每分離一個數字d後,加到s的後面,即s=s*10+d,可得number的逆序數s。
編寫的fun函數如下:
int fun(int number)
{
int t=1,s;
s=0;
if (number<0)
{
t=-1;
number=-number;
}
while (number!=0)
{
s=s*10+number%10;
number/=10;
}
return t*s;
}
例4 編寫函數fun,它的功能是:將無符號整數n中各位上為奇數的數去除,剩下的數按原來從高位到低位的順序組成一個新的數,並通過函數值返回。
例如,輸入一個數:27835496,新的數為:2846。
#include <stdio.h>
unsigned int fun(unsigned int n)
{
}
int main()
{
unsigned n=-1;
while(n>99999999||n<0)
{
printf("Please input(0<n<100000000): ");
scanf("%ud",&n);
}
printf("\nThe result is: %u\n",fun(n));
return 0;
}
解析:同樣按例2的方法分離出無符號整數n的各位數字,例如,若n=27835496,則依次分離出數字6,9,4,5,3,8,7,2,去掉奇數後,剩下的數字為6,4,8,2,如何將數字6、4、8、2合併成整數2846呢?
由於 2846=2 * 1000 + 8 * 100 + 4 * 10 + 6 * 1,
=2 * 10*10*10*1 + 8 * 10*10*1 + 4 * 10*1 + 6 * 1
因此可設s的初始值為0,i初始值為1,每分離一個數字d後,執行s=d*i+s和 i=i*10,可求得對應結果s。
編寫的fun函數如下:
unsigned int fun(unsigned int n)
{
unsigned int x=0, i;
int t;
i=1;
while(n)
{
t=n % 10;
if (t%2==0)
{
x=x+t*i;
i=i*10;
}
n =n /10;
}
return x;
}
二.程式設計題
1.編寫函數fun,它的功能是:找出100~999之間(含100和999)所有整數中各位上數字之和為x(x為一正整數)的整數,然後輸出;符合條件的整數個數作為函數值返回。
例如,若x=5時,100~999之間各位上數字之和為5的整數有:104、113、122、131、140、203、212、230、302、311、320、401、410、500。共有15個。
#include <stdio.h>
int fun(int x)
{
}
int main()
{
int x=-1;
while(x<0)
{
printf("Please input(x>0): ");
scanf("%d",&x);
}
printf("\nThe result is: %d\n",fun(x));
return 0;
}
int fun(int x) { int n, s1, s2, s3, t; n=0; t=100; while (t<=999) { s1=t%10; s2=(t/10)%10; s3=t/100; if(s1+s2+s3==x) { printf("%d ",t); n++; } t++; } return n; }參考程式
2.編寫函數fun,它的功能是:計算num的各位上的數字之積。
例如,若輸入252,則輸出應為20;若輸入202,則輸出應為0。
#include <stdio.h>
long fun(long num)
{
}
int main()
{
long n;
printf("Please enter a number:");
scanf("%ld",&n);
printf("\n%ld\n",fun(n));
return 0;
}
long fun(long num) { long k=1; do { k*=num%10; num/=10; } while(num); return (k); }參考程式
3.編寫函數fun,它的功能是:將形參n中各位上為偶數的數取出,並按原來從高位到低位相反的順序組成一個新的數,並作為函數值返回。
例如,若n=27638496,得到的新數為:64862。
#include <stdio.h>
unsigned long fun(unsigned long n)
{
}
int main()
{
unsigned long n=-1;
while(n>99999999||n<0)
{
printf("Please input(0<n<100000000): ");
scanf("%ld",&n);
}
printf("\nThe result is: %ld\n",fun(n));
return 0;
}
unsigned long fun(unsigned long n) { unsigned long x=0; int t; while(n) { t=n%10; if(t%2==0) x= x*10+t; n= n/10; } return x; }參考程式
4.編寫函數fun,其功能是:將長整數s中每一位上為偶數的數依次取出,構成一個新數放在t中,高位仍在高位,低位仍在低位。
例如,s=87653142時,t=8642。
#include <stdio.h>
void fun(long s, long *t)
{
}
int main()
{
long s, t;
printf("\nPlease enter s:");
scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
return 0;
}
void fun(long s, long *t) { int d; long sl=1; *t = 0; while ( s > 0) { d = s%10; if (d%2==0) { *t=d* sl+ *t; sl *= 10; } s /= 10; } }參考程式
5.編寫函數fun,它的功能是:將形參n所指變數中,各位上為偶數的數去除,剩下的數按原來從高位到低位的順序組成一個新的數,並通過形參指針n傳回所指變數。
例如,輸入一個數:27638496,新的數為:739。
#include <stdio.h>
void fun(unsigned long *n)
{
}
int main()
{
unsigned long n=-1;
while(n>99999999||n<0)
{
printf("Please input(0<n<100000000): ");
scanf("%ld",&n);
}
fun(&n);
printf("\nThe result is: %ld\n",n);
return 0;
}
void fun(unsigned long *n) { unsigned long x=0, i; int t; i=1; while(*n) { t=*n % 10; if(t%2!=0) { x=x+t*i; i=i*10; } *n =*n /10; } *n=x; }參考程式
6.編寫函數fun,其功能是:判斷無符號整數n是否為迴文數。若是,函數返回1,否則返回0。迴文數是指順讀和倒讀都一樣的數。
例如,12321是迴文數,而12312就不是迴文數。
#include <stdio.h>
int fun(unsigned int n)
{
}
int main()
{
unsigned int n=-1;
while(n>99999999||n<0)
{
printf("Please input(0<n<100000000): ");
scanf("%ud",&n);
}
if(fun(n)) printf(" YES\n") ;
else printf(" NO\n") ;
return 0;
}
int fun(unsigned int n) { unsigned int t,s=0; t=n; while (t) { s=s*10+t%10; t/=10; } if (s==n) return 1; else return 0; }參考程式
7.編寫函數fun,它的功能是:統計一個無符號整數中各位數字值為零的個數,通過形參傳回主函數,並把該整數中各位上最大的數字值作為函數值返回。
例如,若輸入無符號整數30800,則數字值為零的個數為3,各位上數字值最大的是8。
#include <stdio.h>
int fun(unsigned n, int *zero)
{
}
int main()
{
unsigned n;
int zero,max;
printf("\nInput n(unsigned): ");
scanf("%d",&n);
max = fun( n,&zero );
printf("\nThe result: max=%d zero=%d\n",max,zero);
return 0;
}
int fun(unsigned n, int *zero) { int count=0,max=0,t; do { t=n%10; if(t==0) count++; if(max<t) max=t; n=n/10; }while(n); *zero=count; return max; }參考程式
8.編寫函數fun,它的功能是:求出n位整數w(w>10)的後n-1位的數作為函數值返回。
例如,若w值為5923,則函數返回923;w為923,函數返回23。
#include <stdio.h>
unsigned fun(unsigned w)
{
}
int main()
{
unsigned x;
printf("Enter a unsigned integer number :" );
scanf("%u", &x );
printf("The original data is : %u\n", x);
if (x < 10) printf ("Data error !");
else printf("The result : %u\n", fun(x));
return 0;
}
unsigned fun(unsigned w) { unsigned x=0,d,p=1; while (w>=10) { d=w%10; x=p*d+x; p=p*10; w=w/10; } return x; }參考程式
9.編寫函數fun,它的功能是:統計整型變數m中各數字出現的次數,並存放到數組a中,其中,a[0]存放0出現的次數,a[1]存放1出現的次數,……,a[9]存放9出現的次數。
例如,若m為14579233,則輸出結果為:0,1,1,2,1,1,0,1,0,1。
#include <stdio.h>
void fun( int m, int a[10])
{
}
int main()
{
int m, a[10],i;
printf("請輸入一個整數 : "); scanf("%d", &m);
fun(m, a);
for (i=0; i<10; i++) printf("%d,",a[i]);
printf("\n");
return 0;
}
void fun( int m, int a[10]) { int i; for (i=0; i<10; i++) a[i] = 0; while (m > 0) { i = m%10; a[i]++; m = m/10; } }參考程式